×

【K8S学习】kubernetes基础学习第四天
  

技服74623 957

{{ttag.title}}
Deployment 管理与使用

一、Kubernetes管理对象
1.  Pod
  • Kubernetes基本管理单元,每个Pod是一个或多个容器的一组集合
  • 一个Pod作为一个整体运行在一个节点(node)上
  • Pod内的容器共享存储和网络





2. ReplicationController(简称RC)
  • Kubernetes需要管理大量的Pod,而显而易见的是通常情况下一个应用不会以单独的一个Pod完成。比较常见的情况是使用大量的Pod组成一个简单应用。管理这些大量的Pod的一个方式就是RC
  • RC可以指定Pod的副本数量,并且在其中有Pod故障时可以自动拉起新的Pod,大大简化了管理难度




3. ReplicaSet(简称RS)
  • ReplicaSet是新一代的RC,主要功能和RC一样,维持Pod的数量稳定,指定Pod的运行位置等,使用方法也相似,主要区别是更新了api,支持更多功能
  • ReplicaSet不建议直接使用,而是用更上层的概念Deployment调用ReplicaSet




4. Deployment
  • 目前最常用的控制器就是Deployment,创建Deployment时也会自动创建ReplicaSet
  • Deployment可以管理一个或多个RS,并且通过RS来管理Pod




从小到大的管理逻辑: 容器 < Pod < ReplicaSet < Deployment
通常情况下:
  • Pod中包含一个容器,或关系特别紧密的几个容器
  • 一个ReplicaSet中包含多个相同的Pod
  • Deployment中包含一个或几个不同的RS




二、创建Deployment
1. 创建一个简单的deployment
  1. $ kubectl create deployment mydep --image=nginx
复制代码
完成后我们使用如下语句查看deployment的创建情况
  1. $ kubectl get deployment
复制代码
回显:


2.命令行接口 - kubectl
在Kubernetes中的操作很多都是用kubectl来完成,通过其命令可以管理Deployment,Replicaset,ReplicationController,Pod等,进行操作,扩容,删除等等全生命周期操作。同时可以对管理对象进行查看或者监控资源使用情况
Kubectl的语法
  1. kubectl [command] [TYPE] [NAME] [flags]
复制代码
command:指定你希望进行的操作,如create,get,describe,delete等
TYPE:指定操作对象的类型,如deployment,RS,Pod等
NAME:指定对象的名字
flags:可选的标志位

3.使用yaml文件创建Deployment
  • 创建yaml文件, vim deployment.yaml




  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4.   name: nginx-deployment
  5. spec:
  6.   selector:
  7.     matchLabels:
  8.       app: nginx
  9.   replicas: 2
  10.   template:
  11.     metadata:
  12.       labels:
  13.         app: nginx
  14.     spec:
  15.       containers:
  16.       - name: nginx
  17.         image: nginx:1.14.2
  18.         ports:
  19.         - containerPort: 80
复制代码

4. yuml文件格式:
  • apiVersion:版本号,固定为apps/v1,如果使用1.9.0以前版本的kubernetes,填写apps/v1beta2
  • kind:类型,选择创建资源类型,可以填写pod,replicaset等
  • metadata:元数据,其中name项指定了名称,label项指定标签
  • spec:deployment规格,其中replicas指定pod副本数量,选择器选择标签匹配为 app: nginx
  • template:对pod模板的定义,其中至少要定义一个label




  • Spec:描述pod的规格
  • Containers:定义容器的属性,在范例中,容器名字是 nginx,镜像为 nginx:1.14.2,容器输入输出的端口是 80 端口




注意格式,缩进一般使用两个空格,千万不要使用 Tab!

三、Deployment升级和弹性伸缩
容器对比虚拟机,最大的优势在于可以灵活的弹性伸缩,而这一部分工作由kubernetes进行调度
1.Deployment弹性伸缩
  • Deployment弹性伸缩本质是Pod数量增加或减少
  • 弹性伸缩可以支持自动化部署,并在很短时间内实现数量变更
  • 修改 yaml 文件中的 replica 参数实现
  • 使用 scale 命令应用变更完成扩容或减容




扩容示例:
将文件中replica的值从2 修改为4
修改前截图pod截图

修改后pod截图

2. deployment升级;
当使用的deployment需要升级时(如软件版本更新),可以使用rolling update功能滚动升级deployment中所有pod

查看记录升级前的name和 nginx版本信息为1.14.2 ;

修改ymal文件中nginx版本 为1.21.6

执行升级命令
  1. [root@k8s-master ~]# kubectl apply  -f  deployment.yaml
复制代码
2. deployment回滚;
使用另外两个yaml文件,修改nginx版本号,进行两次滚动更新操作,更新到1.8.1和1.9.1,使用apply命令时附加参数--record记录下这两次更新。
这里通过  生成两次更新
kubectl  apply -f  deploymentV1.yaml --record
kubectl  apply -f  deploymentV2.yaml --record
  1. kubectl rollout history deployment nginx-deployment
复制代码

通过命令查看历史版本中的详细信息 ,这里 --revision= 行号

使用rollout undo命令回滚到指定版本 这里回滚到第四行的版本
回滚后查看:版本回滚到1.7.9

打赏鼓励作者,期待更多好文!

打赏
暂无人打赏

ie5000 发表于 2023-12-16 10:29
  
非常详细,感谢楼主分享经验与知识
发表新帖
热门标签
全部标签>
西北区每日一问
干货满满
每日一问
技术盲盒
技术笔记
产品连连看
GIF动图学习
技术咨询
标准化排查
新版本体验
安装部署配置
功能体验
2023技术争霸赛专题
信服课堂视频
自助服务平台操作指引
每周精选
解决方案
设备维护
秒懂零信任
社区新周刊
答题自测
升级
VPN 对接
高手请过招
升级&主动服务
技术圆桌
玩转零信任
信服圈儿
通用技术
技术晨报
畅聊IT
专家问答
在线直播
MVP
网络基础知识
安全攻防
上网策略
测试报告
日志审计
问题分析处理
流量管理
每日一记
运维工具
云计算知识
用户认证
原创分享
sangfor周刊
项目案例
SANGFOR资讯
专家分享
技术顾问
信服故事
SDP百科
功能咨询
终端接入
授权
资源访问
地址转换
虚拟机
存储
迁移
加速技术
排障笔记本
产品预警公告
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
深信服技术支持平台
社区帮助指南
答题榜单公布
纪元平台
卧龙计划
华北区拉练
天逸直播
以战代练
山东区技术晨报
文档捉虫活动
齐鲁TV
华北区交付直播
2024年技术争霸赛
北京区每日一练
场景专题
故障笔记
排障那些事
高频问题集锦
【每周新见闻】

本版版主

10
17
2

发帖

粉丝

关注

124
74
30

发帖

粉丝

关注

26
8
0

发帖

粉丝

关注

70
37
1

发帖

粉丝

关注

6
14
0

发帖

粉丝

关注

18
10
5

发帖

粉丝

关注

本版达人