18应用管理Deployment
kubectl scale是命令式操作,扩容和缩容只是临时的措施,如果应用需要长时间保持一个确定的Pod数量,最好还是编辑Deployment的YAML文件,改动“replicas”,再以声明式的kubectl apply修改对象的状态。既然Pod管理不了自己,就再创建一个新的对象,由它来管理Pod,采用和Job/CronJob一样的形式“对象套对象”。这个用来管理Pod,实现在线业务应用的新AP
·
一、为什么要有Deployment?
- 处理在线业务
- 预防pod出错导致的容器不可维护性
- 应对在线业务多实例、高可用、版本更新等许多复杂的操作
既然Pod管理不了自己,就再创建一个新的对象,由它来管理Pod,采用和Job/CronJob一样的形式“对象套对象”。
这个用来管理Pod,实现在线业务应用的新API对象,就是Deployment。
二、如何使用YAML描述Deployment?
1、查看eployment的基本信息
[root@master k8s-stdy]# kubectl api-resources | grep deployments
NAME SHORTNAMES APIVERSION NAMESPACED KIND
deployments deploy apps/v1 true Deployment
2、创建Deployment模板
- replicas:副本数量,指定要在Kubernetes集群里运行多少个Pod实例
- selector:“筛选”出要被Deployment管理的Pod对象
下属字段“matchLabels”定义了Pod对象应该携带的label,它必须和“template”里Pod定义的“labels”完全相同,否则Deployment就会找不到要控制的Pod对象,apiserver也会告诉你YAML格式校验错误无法创建。
[root@master k8s-stdy]# kubectl create deploy ngx-dep --image=nginx:alpine --dry-run=client -o yaml
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: ngx-dep
name: ngx-dep
spec:
replicas: 1
selector:
matchLabels:
app: ngx-dep
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: ngx-dep
spec:
containers:
- image: nginx:alpine
name: nginx
resources: {}
status: {}
三、如何使用kubectl操作Deployment?
1、创建2个pod
[root@master 18]# cat deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: ngx-dep
name: ngx-dep
spec:
replicas: 2
selector:
matchLabels:
app: ngx-dep
template:
metadata:
labels:
app: ngx-dep
spec:
containers:
- image: nginx:alpine
name: nginx
[root@master 18]# kubectl apply -f deploy.yaml
deployment.apps/ngx-dep created
[root@master 18]# kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
ngx-dep 2/2 2 2 38s
[root@master 18]# kubectl get pod
NAME READY STATUS RESTARTS AGE
ngx-dep-bfbb5f64b-5p4tl 1/1 Running 0 4m19s
ngx-dep-bfbb5f64b-qchdq 1/1 Running 0 4m19s
# 删除pod,验证其可以自动创建新的pod保证pod数量不变
[root@master 18]# kubectl delete pod ngx-dep-bfbb5f64b-qchdq
pod "ngx-dep-bfbb5f64b-qchdq" deleted
[root@master 18]# kubectl get pod
NAME READY STATUS RESTARTS AGE
ngx-dep-bfbb5f64b-5p4tl 1/1 Running 0 7m25s
ngx-dep-bfbb5f64b-qvgsz 1/1 Running 0 4s
2、将pod扩容到5个
[root@master 18]# kubectl scale --replicas=5 deploy ngx-dep
deployment.apps/ngx-dep scaled
[root@master 18]# kubectl get pod
NAME READY STATUS RESTARTS AGE
ngx-dep-bfbb5f64b-5p4tl 1/1 Running 0 10m
ngx-dep-bfbb5f64b-bw4qq 1/1 Running 0 4s
ngx-dep-bfbb5f64b-dbbsl 1/1 Running 0 4s
ngx-dep-bfbb5f64b-p8zpd 1/1 Running 0 4s
ngx-dep-bfbb5f64b-qvgsz 1/1 Running 0 3m33s
注意:
kubectl scale是命令式操作,扩容和缩容只是临时的措施,如果应用需要长时间保持一个确定的Pod数量,最好还是编辑Deployment的YAML文件,改动“replicas”,再以声明式的kubectl apply修改对象的状态。
3、根据“app”标签获取pod信息
[root@master 18]# kubectl get pod -l app=ngx-dep
NAME READY STATUS RESTARTS AGE
ngx-dep-bfbb5f64b-5p4tl 1/1 Running 0 32m
ngx-dep-bfbb5f64b-bw4qq 1/1 Running 0 21m
ngx-dep-bfbb5f64b-dbbsl 1/1 Running 0 21m
ngx-dep-bfbb5f64b-p8zpd 1/1 Running 0 21m
ngx-dep-bfbb5f64b-qvgsz 1/1 Running 0 25m
[root@master 18]# kubectl get pod -l 'app in (ngx,nginx,ngx-dep)'
NAME READY STATUS RESTARTS AGE
ngx-dep-bfbb5f64b-5p4tl 1/1 Running 0 30m
ngx-dep-bfbb5f64b-bw4qq 1/1 Running 0 19m
ngx-dep-bfbb5f64b-dbbsl 1/1 Running 0 19m
ngx-dep-bfbb5f64b-p8zpd 1/1 Running 0 19m
ngx-dep-bfbb5f64b-qvgsz 1/1 Running 0 23m
更多推荐


所有评论(0)