K8S之Pod控制器Deployment(Deploy)

基本介绍

为了更好的解决服务编排的问题,kubernetes在V1.2版本开始,引入了Deployment控制器。

Deployment对象,顾名思义,是用于部署应用的对象。它使Kubernetes中最常用的一个对象,它为ReplicaSet和Pod的创建提供了一种声明式的定义方法,从而无需手动创建ReplicaSet和Pod对象(使用Deployment而不直接创建ReplicaSet是因为Deployment对象拥有许多ReplicaSet没有的特性,例如滚动升级和回滚)。

deployment也是保证pod高可用的一种方式,明明已经有RC(Replication Controller),为什么还要引入deployment呢?

是因为deployment解决了RC(Replication Controller)的一个痛点。是因为RC在进行版本升级的时候,会造成一个问题,就是它的svc(Service)短时间内访问不了了,deployment就是解决这个问题的。

值得一提的是,Deployment控制器并不直接管理pod,而是通过管理ReplicaSet来间接管理Pod,即:Deployment管理ReplicaSet,ReplicaSet管理Pod。所以Deployment比ReplicaSet功能更加强大。

在这里插入图片描述

Deployment可以帮我们做什么:

  • 定义一组Pod期望数量,Controller会维持Pod数量与期望数量一致
  • 配置Pod的发布方式,controller会按照给定的策略更新Pod,保证更新过程中不可用Pod维持在限定数量范围内
  • 如果发布有问题支持回滚

典型的应用场景包括:

  • 定义 Deployment 来创建 Pod 和 ReplicaSet
  • 滚动升级和回滚应用
  • 扩容和缩容
  • 暂停和继续 Deployment

Deployment的资源清单文件

apiVersion: apps/v1 	# 版本号
kind: Deployment 		# 类型       
metadata: 				# 元数据
  name: 				# rs名称 
  namespace:		 	# 所属命名空间 
  labels: 				#标签
    controller: deploy  
spec: 					# 详情描述
  replicas: 3 			# 副本数量
  revisionHistoryLimit: 3 		# 保留历史版本,主要作用是实现版本回退
  paused: false 				# 暂停部署,默认是false。当deploy创建成功是否立即创建pod,false表示立即创建。true表示不立即创建
  progressDeadlineSeconds: 600 	# 部署超时时间(s),默认是600
  strategy: 		# 镜像更新策略
    type: RollingUpdate 		# 滚动更新策略
    rollingUpdate: 				# 滚动更新
      maxSurge: 30% 			# 最大额外可以存在的副本数,可以为百分比,也可以为整数
      maxUnavailable: 30% 		# 最大不可用状态的 Pod 的最大值,可以为百分比,也可以为整数
  selector: 			# 选择器,通过它指定该控制器管理哪些pod
    matchLabels:     	# Labels匹配规则
      app: nginx-pod
#   matchExpressions: 	# Expressions匹配规则
#     - {key: app, operator: In, values: [nginx-pod]}
  template: 		# 模板,当副本数量不足时,会根据下面的模板创建pod副本。该行及以下是Deployment控制器控制的pod的信息
    metadata:
      labels:
        app: nginx-pod
    spec:
      containers:
      - name: nginx
        image: nginx:1.17.1
        ports:
        - containerPort: 80
使用yaml资源清单文件创建 Deployment 流程:

1. 用户通过 kubectl 创建 Deployment。
2. Deployment 创建 ReplicaSet。
3. ReplicaSet 创建 Pod。
对象的命名方式是:子对象的名字 = 父对象名字 + 随机字符串或数字

在这里插入图片描述

创建deployment

# 编写资源清单文件
[root@k8s-master ~]# vim pc-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: pc-deployment
  namespace: test
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-pod
  template:
    metadata:
      labels:
        app: nginx-pod
    spec:
      containers:
      - name: nginx
        image: nginx:1.17.1
        ports:
        - containerPort: 80
# 创建deploy
[root@k8s-master ~]# kubectl create -f pc-deployment.yaml
deployment.apps/pc-deployment created

# 查看deploy
[root@k8s-master ~]# kubectl get deploy pc-deployment -n test -o wide
NAME            READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES         SELECTOR
pc-deployment   3/3     3            3           92s   nginx        nginx:1.17.1   app=nginx-pod
# UP-TO-DATE 最新版本的pod数量 ; AVAILABLE 当前可用的pod数量

# 查看deploy创建的rs, rs的名称是在deployment的名字后加上一个10位数的随机串
[root@k8s-master ~]# kubectl get rs -n test -o wide
NAME                       DESIRED   CURRENT   READY   AGE     CONTAINERS   IMAGES         SELECTOR
pc-deployment-6696798b78   3         3         3       3m57s   nginx        nginx:1.17.1   app=nginx-pod,pod-template-hash=6696798b78

# 查看rs创建的pod, pod的名称是在rs的名字后面再加上一个5位数的随机串
[root@k8s-master ~]# kubectl get pod -n test -o wide
NAME                             READY   STATUS    RESTARTS   AGE    IP            NODE         NOMINATED NODE   READINESS GATES
pc-deployment-6696798b78-4z8pt   1/1     Running   0          3m6s   10.244.2.53   k8s-node02   <none>           <none>
pc-deployment-6696798b78-8679f   1/1     Running   0          3m6s   10.244.1.72   k8s-node01   <none>           <none>
pc-deployment-6696798b78-f6qrp   1/1     Running   0          3m6s   10.244.1.71   k8s-node01   <none>           <none>

扩缩容

两种方式:

  1. 直接编辑资源清单文件
kubectl edit deploy 控制器名 -n namespace
# 然后修改文件中的 spec:replicas:副本数量 即可

# 如果是以配置清单文件创建的控制器,也可以直接` vim 配置清单文件 ` 修改replicas指定的副本数量,
# 然后使用` kubectl apply -f 配置清单文件 `进行扩缩用
  1. 命令实现
kubectl scale deploy 控制器名 --replicas=副本数量 -n namespace	

【例 】

# 使用上面创建好的deploy
[root@k8s-master ~]# kubectl get deploy -n test -o wide
NAME            READY   UP-TO-DATE   AVAILABLE   AGE     CONTAINERS   IMAGES         SELECTOR
pc-deployment   3/3     3            3           9m29s   nginx        nginx:1.17.1   app=nginx-pod

# 使用第二种方式调整副本数量为5个
[root@k8s-master ~]# kubectl scale deploy pc-deployment --replicas=5 -n test
deployment.apps/pc-deployment scaled

# 查看deploy
[root@k8s-master ~]# kubectl get deploy -n test -o wide
NAME            READY   UP-TO-DATE   AVAILABLE  
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值