Kubernetes那点事儿——控制器Deployment

K8s应用程序生命周期管理——控制器Deployment

  • 一、部署应用程序流程
  • 二、Deployment控制器
    • 1、应用升级、弹性伸缩、回滚、删除
    • 2、滚动升级、回滚机制
    • 3、定义Deployment


前言说到K8s程序的生命周期管理我们不得不提到k8s的控制器。其中Deployment是最为常用的controllers,其他控制器还有DaemonSet、StatefulSet、Cronjob等。本篇我们以deployment为例来展开研究,其他控制器我们会逐一研究。


一、部署应用程序流程

Kubernetes那点事儿——控制器Deployment_第1张图片

  1. 制作镜像

    可以参考以前的文章 Dockerfile编写

  2. 使用Deployment控制器部署镜像

kubectl create deployment nginx --image=nginx
kubectl get deploy,pods
  1. 使用Service暴露服务 Nodeport
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get svc,ep

Kubernetes那点事儿——控制器Deployment_第2张图片

二、Deployment控制器

Deployment是最为常用的controllers(也称为workload)

controllers作用:

  • 管理Pod对象
  • 使用标签与Pod关联
  • 负责Pod维护,如滚动更新、伸缩、副本管理、维护Pod状态等

Deployment功能:

  • 管理Pod及ReplicaSet
  • 具有上线部署、副本设定、滚动升级、回滚等功能
  • 提供声明式更新,例如只更新一个新的Image

ReplicaSet(副本集)功能:

  • 协助Deployment做事
  • Pod副本数量管理,不断对比当前Pod数量与期望Pod数量
  • Deployment每次发布都会创建一个RS作为记录,用于实现回滚

1、应用升级、弹性伸缩、回滚、删除

应用升级

record将升级命令记录到历史命令方便回滚

kubectl set image deployment/web nginx=nginx:1.16 --record

查看升级状态

kubectl rollout status deployment/web 

查看RS记录

kubectl get rs

弹性伸缩(手动扩容)

kubectl scale deployment web --replicas=10

回滚

kubectl rollout history deployment/web
kubectl rollout undo deployment/web # 回滚上一个版本
kubectl rollout undo deployment/web --to-revision=2 # 回滚指定版本

删除

kubectl delete deploy/web
kubectl delete svc/web

这里我们以修改image tag为例,演示一下rollout
Kubernetes那点事儿——控制器Deployment_第3张图片

2、滚动升级、回滚机制

滚动更新

每次只升级一个或多个服务,升级完成加入生产环境,不断执行这个过程,直到集群中的全部旧版升级新版本。

优点:用户无感知

缺点:部署周期长

1个Deployment更新会涉及2个Replicaset,Replicaset会控制Pod副本数量,还会创建RS记录

Kubernetes那点事儿——控制器Deployment_第4张图片

3、定义Deployment

Kubernetes那点事儿——控制器Deployment_第5张图片
这是一个典型Deployment的yaml文件,分为两部分:控制器和被控制资源。控制器说白了就是定义的Deployment的属性信息,如name、replicas、seletor等,被控制资源就是本身容器的一些属性,跟我们单独run一个docker类似,指定port、volume等。两者通过labels与matchLabels字段联系在一起,实现Deployment对Pod的管理、控制。

YAML 是一种简洁的非标记语言,语法格式:

  • 缩进表示层级关系
  • 不支持制表符“tab”缩进,使用空格缩进
  • 通常开头缩进 2 个空格
  • 字符后缩进 1 个空格,如冒号、逗号等
  • “—” 表示YAML格式,一个文件的开始
  • “#”注释

对于K8s的维护人员来说,对于各种yaml我们可以看得懂就可以,不一定非要会徒手写yaml。当我们记不住yaml字段的时候

1、从K8s官网查询,每个资源官网都有实例可以参考

Kubernetes那点事儿——控制器Deployment_第6张图片

2、不方便访问互联网的时候可以使用create、get命令来获取yaml

kubectl create deployment nginx --image=nginx:1.20 -o yaml --dry-run=client > my-deploy.yaml # 使用create创建deployment并获取yaml文件

kubectl get deployment nginx -o yaml > my-deploy.yaml # 从现有deployment生成yaml

Kubernetes那点事儿——控制器Deployment_第7张图片

你可能感兴趣的:(Kubernetes,kubernetes,docker,容器)