什么是controller

在集群上管理和运行容器的对象

Pod和Controller的关系

Pod是通过Controller实现应用的运维,比如伸缩、滚动升级等等
Pod和Controller之间通过label标签建立关系

Deployment控制器应用场景

部署无状态应用 -> 如:web服务、微服务
管理Pod和ReplicaSet
部署,滚动升级等功能

yaml文件字段说明

先创建一个deployment的yaml文件示例

  1. kubectl create deployment web --image=nginx --dry-run -o yaml > web.yaml

查看文件内容

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. creationTimestamp: null
  5. labels:
  6. app: web
  7. name: web
  8. spec:
  9. replicas: 1
  10. # 选择pod
  11. selector:
  12. matchLabels:
  13. app: web
  14. strategy: {}
  15. # pod配置
  16. template:
  17. metadata:
  18. creationTimestamp: null
  19. labels:
  20. app: web
  21. spec:
  22. containers:
  23. - image: nginx
  24. name: nginx
  25. resources: {}
  26. status: {}

使用yaml部署应用

第一步:导出yaml文件

  1. kubectl create deployment web --image=nginx --dry-run -o yaml > web.yaml

第二步:根据需要修改文件
第三步:部署应用

  1. kubectl apply -f web.yaml

第四步:对外发布(暴露端口)
首先我们可以通过导出yaml文件时配置好端口号,然后重复上面的第二步与第三步

  1. kubectl expose deployment web --port=80 --type=NodePort --target-port=80 --name=web1 -o yaml > web1.yaml
  2. # --port:自身端口 --target-port:对外端口

查看pod与service

  1. kubectl get pods,svc

升级回滚

如果我们在部署应用时指定了镜像的版本

  1. spec:
  2. containers:
  3. - image: nginx: 1.14

升级nginx

  1. kubectl set image deployment web nginx=nginx:1.15

升级的过程中,旧的nginx服务不会停止,在升级完成后自动进行替换
查看升级的状态

  1. kubectl rollout status deployment web

查看升级版本

  1. kubectl rollout history deployment web

回滚到上一版本

弹性伸缩