Controller
Pod通过Controller实现应用的运维,比如伸缩,滚动升级等等
Pod与Controller之间通过label
标签建立关系
适用于:web服务,微服务
使用命令生成web-deployment.yaml
kubectl create deployment web --image=nginx --dry-run -o yaml > web-deployment.yaml
# 生成的yaml apiVersion: apps/v1 kind: Deployment metadata: creationTimestamp: null labels: app: web name: web spec: replicas: 1 selector: matchLabels: app: web strategy: {} template: metadata: creationTimestamp: null labels: app: web spec: containers: - image: nginx name: nginx resources: {} status: {}
运行web-deployment.yaml
kubectl apply -f web-deployment.yaml
通过Service的NodePort对外暴露端口
# 生成yaml kubectl expose deployment web --port=80 --type=NodePort --target-port=80 --name=web-service --dry-run -o yaml > web-service.yaml # 执行 kubectl apply -f web-service.yaml
# 生成的yaml apiVersion: v1 kind: Service metadata: creationTimestamp: null labels: app: web name: web-service spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: app: web type: NodePort status: loadBalancer: {}
删除对外暴露端口的service
kubectl get service kubectl delete service [servicename]
kubectl升级
kubectl set image deployment web nginx=nginx:1.15
或者直接修改web-deployment.yaml中image的版本号
kubectl apply -f web-deployment.yaml
需要注意的是升级是基于镜像版本的升级,如果镜像版本没有变就不会做任何操作
# 查看是否升级成功 kubectl rollout status deployment web
查看历史版本
# 查看升级历史 kubectl rollout history deployment web
回退到上一个版本
kubectl rollout undo deployment web
先查看下命令
kubectl rollout undo deployment web --help
然后指定版本1进行回滚
# 执行操作 kubectl rollout undo deployment web --to-revision=1
kubectl scale deployment web --replicas=10
还有更高一级的弹性伸缩,根据CPU使用量判断是否需要扩容,感觉非常适合电商公司有大促活动时,短时间流量急剧增加的情况使用
使用 Horizontal Pod Autoscaling (平滑扩展)