3.1 在Kubernetes部署应用程序流程

3、应用程序生命周期管理-deployment - 图1

3.2 使用Deployment部署Java应用

  1. # 1、使用Deployment控制器部署镜像
  2. kubectl create deployment web --image=lizhenliang/java-demo
  3. kubectl get deployment,pods
  4. # 2、使用Service发布Pod
  5. kubectl expose deployment web --port=80 --type=NodePort --target-port=8080 --name=web
  6. kubectl get service

3.3 服务编排:YAML文件格式说明

K8s是一个容器编排引擎,使用YAML文件编排要部署应用,因此在学习之前,应先了解YAML语法格式:

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

3.4 服务编排:YAML文件创建资源对象

3、应用程序生命周期管理-deployment - 图2

  • template:创建的标签会同事应用到pod和rs上(两个资源的标签会一模一样)
  • svc:中既可以使用deploy的标签也可以使用rs或者pod的标签

3.5 服务编排:YAML文件创建资源对象

3、应用程序生命周期管理-deployment - 图3

3.6 服务编排:YAML文件创建资源对象

将你需要创建的资源描述到YAML文件中。

  • 部署:kubectl apply -f xxx.yaml
  • 卸载:kubectl delete -f xxx.yaml

3.7 服务编排:资源字段太多,记不住怎么办

  1. # 用create命令生成
  2. kubectl create deployment nginx --image=nginx:1.16 -o yaml --dry-run=client > my-deploy.yaml
  3. # 用get命令导出
  4. kubectl get deployment nginx -o yaml > my-deploy.yaml
  5. # Pod容器的字段拼写忘记了
  6. kubectl explain pods.spec.containers
  7. kubectl explain deployment

3.8 Deployment:介绍

Deployment是最常见的k8s工作负载控制器(workload controllers),是k8s的一个抽象概念,用于更高级别层次对象,部署和管理pod。其他控制器还有:DaemonSet、statefulset等。

Deployment的主要功能:

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

应用场景:网站、API、微服务

3、应用程序生命周期管理-deployment - 图4

3.9 Deployment:应用生命周期管理流程

3、应用程序生命周期管理-deployment - 图5

3.10 Deployment:部署应用

第一步:部署镜像

  • kubectl apply -f xxx.yaml
  • kubectl create deployment web —image=nginx:1.16 —replicas=3
  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: web
  5. namespace: default
  6. spec:
  7. replicas: 3 # Pod副本预期数量
  8. selector:
  9. matchLabels:
  10. app: web
  11. template:
  12. metadata:
  13. labels:
  14. app: web # Pod副本的标签
  15. spec:
  16. containers:
  17. - name: web
  18. image: nginx:1.16

3.11 Deployment:滚动升级

第二步:应用升级(更新镜像三种方式,自动触发滚动升级)

  • kubectl apply -f xxx.yaml
  • kubectl set image deployment/web nginx=nginx:1.17
  • kubectl edit deployment/web #使用系统编辑器打开

3、应用程序生命周期管理-deployment - 图6

3.12 Deployment:滚动升级

滚动升级在K8s中的实现:

  • 1个Deployment
  • 2个ReplicaSet

3、应用程序生命周期管理-deployment - 图7

3.13 Deployment:水平扩缩容

第三步:水平扩缩容(启动多实例,提高并发)

  • 修改yaml里replicas值,再apply
  • kubectl scale deployment web —replicas=10

注:replicas参数控制Pod副本数量

3、应用程序生命周期管理-deployment - 图8

3.14 Deployment:回滚

第四步:回滚(项目升级失败恢复到正常版本)

  • kubectl rollout history deployment/web # 查看历史发布版本
  • kubectl rollout undo deployment/web # 回滚上一个版本
  • kubectl rollout undo deployment/web —to-revision=2 # 回滚历史指定版本

注:回滚是重新部署某一次部署时的状态,即当时版本所有配置

3.15 Deployment:删除

最后,项目下线:

  • kubectl delete deploy/web
  • kubectl delete svc/web

3.16 Deployment:滚动升级与回滚实现机制

ReplicaSet控制器用途:

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

3、应用程序生命周期管理-deployment - 图9

  • kubectl get rs #查看RS记录
  • kubectl rollout history deployment web #版本对应RS记录