什么是Controller
Controllern不像Pod,是虚拟出来的概念,Controller是实际存在的,是k8s在集群上管理和运行容器的对象
Pod和Controller的关系
Pod是通过Controller实现应用的运维,比如伸缩、滚动升级等等
Pod和Controller之间是通过labei标签建立联系
Deployment控制器应用场景
部署无状态应用
管理Pod和副本ReplicaSet数量
部署,滚动升级等功能
应用场景:web服务、微服务部署等
yaml文件字段说明
Deployment控制器部署应用
第一步导出yaml文件
-
kubectl create deployment web1 --image=nginx --dry-run -o yaml > web1.yaml
然后我们会得到一个web1.yaml文件如下所示
第二部使用yaml部署应用
-
kubectl apply -f web1.yaml
然后我们一直等待,等待他运行成功
第三部对外发布(暴露端口)
-
kubectl expose deployment web1 --port=80 --type=NodePort --target-port=80 --name=web1 -o yaml > web1Expose.yaml
然后我们可以看到一个部署文件:web1Expose.yaml
我们将其部署,将Nginx应用进行发布,进行端口暴露
-
kubectl apply -f web1Expose.yaml
-
kubectl get pods,svc
-
这个时候已经发布成功,我们可以通过三个节点,只要是30339端口即可访问Nginx服务
应用升级&回滚
下面我们初始化一下环境,将刚刚部署的pod删掉,先删pod ,再删Deployment
kubectl get pods
kubectl delete pod podName
kubectl get deployments
kubectl delete deployment depName
-
修改刚刚我们导出的web1.yaml文件
-
副本数量修正为2
-
Nginx的镜像指定版本为1.14
-
-
使用yaml部署应用
-
kubectl apply -f web1.yaml
-
然后我们去诸多node节点查看相应的镜像版本信息
-
应用版本升级(过程分析)
-
从刚刚我们的操作中,我们部署了两台版本为1.14的Nginx,现在我们要对其进行升级到1.15
kubectl set image deployment web1 nginx=nginx:1.15
我们可以查看升级状态
kubectl rollout status deployment 应用名称
-
过程分析:升级过程中为什么对外暴露的服务不会停止
应用版本回滚
-
就是刚刚查看是否升级成功的命名把status改成history即可查看所有版本信息
-
kubectl rollout history deployment web1.
-
-
版本回滚到上一个版本
-
kubectl rollout undo deployment web1
-
-
版本回滚到指定版本
-
kubectl rollout undo deployment web1 --to-reversion=2
-
应用的弹性伸缩
就使用我们刚刚部署的Nginx做列子,我们对其副本伸缩
-
kubectl scale deployment web1 --replicas=10
-