Kubernetes之Deployment控制器

2020年3月8日16:06:00 发表评论 678 views

简介:

deployment 是用来管理无状态应用的,面向的集群的管理.

Deployment 为Pod 和 ReplicaSet 之上,提供了一个声明式定义(declarative)方法,用来替代以前的ReplicationController 来方便的管理应用。

你只需要在 Deployment 中描述您想要的目标状态是什么,Deployment controller 就会帮您将 Pod 和ReplicaSet 的实际状态改变到您的目标状态。您可以定义一个全新的 Deployment 来

Kubernetes之Deployment控制器

1、典型的应用场景包括:

  1. 定义Deployment来创建Pod和ReplicaSet,使用Deployment来创建ReplicaSet。ReplicaSet在后台创建pod。检查启动状态,看它是成功还是失败。
  2. 通过更新Deployment的PodTemplateSpec字段来声明Pod的新状态。这会创建一个新的ReplicaSet,Deployment会按照控制的速率将pod从旧的ReplicaSet移动到新d的ReplicaSet中。
  3. 如果当前状态不稳定,回滚到之前的Deployment revision。每次回滚都会更新Deployment的revision。
  4. 扩容Deployment以满足更高的负载。
  5. 暂停Deployment来应用PodTemplateSpec的多个修复,然后恢复上线。
  6. 根据Deployment 的状态判断上线是否hang住了。
  7. 清除旧的不必要的 ReplicaSet。

2、deployment的升级:

kubectl explain deploy.spec.strategy   策略订是配置怎么滚动升级的,支持两种策略:
  1. Recreate   重建式更新,就是删一个建一个。
  2. rollingUpdate  是deployment默认的更新方式,滚动更新,简单定义 更新期间pod最多有几个等;
rollingUpdate 有两种策略:
  1. maxSurge  指定超出副本数有几个,两种方式:1、指定数量 2、百分比
  2. maxUnavailable 最多有几个不可用

3、使用deployment部署一个nginx服务:

[root@k8s-master deployment]# cat nginx_deployment.yml 
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2 # tells deployment to run 2 pods matching the template
  template: # create pods using pod definition in this template
    metadata:
      # unlike pod-nginx.yaml, the name is not included in the meta data as a unique name is
      # generated from the deployment name
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.8
        ports:
        - containerPort: 80

创建pod:

[root@k8s-master deployment]# kubectl create -f nginx_deployment.yml

查看deployment:

[root@k8s-master deployment]# kubectl get deployment nginx-deployment -o wide 
 NAME               READY   UP-TO-DATE   AVAILABLE   AGE     CONTAINERS   IMAGES      SELECTOR
nginx-deployment   4/4     4            4           5h35m   nginx        nginx:1.8   app=nginx 

查看pod:

[root@k8s-master deployment]# kubectl get pod -l app=nginx -o wide
[root@k8s-master deployment]# kubectl get pod -l app=nginx -o wide 
NAME                             READY   STATUS    RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
nginx-deployment-9f46bb5-6cxq4   1/1     Running   0          59m   10.244.1.8    k8s-01   <none>           <none>
nginx-deployment-9f46bb5-8twq2   1/1     Running   0          57m   10.244.2.13   k8s-02   <none>           <none>

4、镜像升级3种方法:

方法(一):
[root@k8s-master deployment]# vim  nginx_deployment.yml    //修改yaml文件,指定镜像版本,然后
[root@k8s-master deployment]# kubectl apply -f nginx_deployment.yml    //然后就会###### 重新创建新的pod
[root@k8s-master deployment]# kubectl get pod -l app=nginx -o wide 
方法(二):
[root@k8s-master deployment]# kubectl edit deployment nginx-deployment -o yaml   
然后可以看到输出很多信息,其实这是在vim 打开的,然后直接编辑镜像版本,然后:wq保存即可,立马查看pod的状态,发现正在更新。
方法(三):
[root@k8s-master deployment]# kubectl set image deployment/nginx-deployment nginx=nginx:1.9   //执行命令也会滚动更新。
关于滚动更新:
[root@k8s-master deployment]#  kubectl rollout status deployment/nginx-deployment    //查看升级状态
[root@k8s-master deployment]#  kubectl rollout pause deployment/nginx-deployment    //暂停升级
[root@k8s-master deployment]#  kubectl rollout resume deployment/nginx-deployment   //继续升级
版本回滚:
[root@k8s-master ~]# kubectl rollout history deployment/nginx-deployment    //查看最近的历史更新的版本
deployment.apps/nginx-deployment 
REVISION  CHANGE-CAUSE
10        <none>
11        <none>
12        <none>

[root@k8s-master deployment]#  kubectl rollout undo deployment/nginx-deployment  //回滚到当前版本的上一个版本
[root@k8s-master deployment]#  kubectl rollout undo deployment/nginx-deployment --to-revision=2  //h回滚到指定的版本

滚动升级策略说明:

minReadySeconds:
- Kubernetes在等待设置的时间后才进行升级
- 如果没有设置该值,Kubernetes会假设该容器启动起来后就提供服务了
- 如果没有设置该值,在某些极端情况下可能会造成服务不正常运行

maxSurge:
- 升级过程中最多可以比原先设置多出的POD数量
- 例如:maxSurage=1,replicas=5,则表示Kubernetes会先启动1一个新的Pod后才删掉一个旧的POD,整个升级过程中最多会有5+1个POD。
maxUnavaible:
- 升级过程中最多有多少个POD处于无法提供服务的状态
- 当maxSurge不为0时,该值也不能为0
- 例如:maxUnavaible=1,则表示Kubernetes整个升级过程中最多会有1个POD处于无法服务的状态。

查看滚动更新历史事件:

[root@k8s-master ~]# kubectl describe deployment nginx-deployment 

5、动态调度指定pod的副本数量:

(方法一:)
 [root@k8s-master deployment]# vim  nginx_deployment.yml    //修改yaml文件,指定镜像版本,然后 kubectl apply -f  xx.yaml
(方法二:)
[root@k8s-master deployment]# kubectl edit deployment nginx-deployment -o yaml     //vim 直接编辑,然后保存
(方法三:)
[root@k8s-master deployment]# kubectl scale --current-replicas=4 --replicas=3 deployment/nginx-deployment   //直接调度。
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 微信打赏一下咯
  • 一分钱也是爱
  • weinxin
广告也精彩
暖先生
SONOS PLAY:1搜诺思智能音响美国原创进口WiFi无线音
VR眼镜3D虚拟现实头戴式游戏头盔rv眼睛4d手机专用ar苹果一体机
DJI大疆 御 Mavic Air 便携可折叠4K无人机 高清航拍
Canon/佳能 EOS 750D 套机EF-S 18-55mm IS STM

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: