Deployment 通过创建 ReplicaSet 控制 Pod 的数量、状态。本篇主要介绍一些 Deployment 常用的操作。
1. Deployment yaml 格式
带上 --dry-run
参数表示并不执行命令,仅生成 yaml 输出:
1
| kubectl create deployment nginx --image=nginx --dry-run -o yaml
|
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: nginx
name: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: nginx
spec:
containers:
- image: nginx
name: nginx
resources: {}
status: {}
2. 创建
1
| kubectl run nginx --image=nginx
|
kubectl create deployment nginx --image=nginx
为了提高编辑效率,通常会基于已有的 Deployment yaml 进行编辑。比如,先执行 kubectl create deployment nginx --image=nginx --dry-run -o yaml > deployment.yaml
,再编辑镜像、副本数等信息。
1
| kubectl apply -f deployment.yaml
|
3. 升级更新
1
| kubectl set image deployment/nginx nginx=nginx:1.9.1
|
1
| kubectl set resource deployment/nginx -c=nginx --limits=cpu=200m,memory=512Mi
|
使用 edit 命令,能够直接对已经创建的 Kubernetes 对象进行编辑,保存退出后,立即生效。
1
| kubectl edit deployment nginx
|
4. 滚动策略
在 spec 字段中,可以配置滚动升级策略:
1
2
3
4
5
6
| spec:
strategy:
rollingUpdate:
maxSurge: 25% # 最大额外副本比例
maxUnavailable: 25% # 最少不可以副本比例
type: RollingUpdate
|
1
| kubectl rollout pause deployment/nginx
|
1
| kubectl rollout resume deployment/nginx
|
1
| kubectl rollout undo deployment/nginx --to-revision=2
|
1
| kubectl rollout status deployment/nginx
|
1
| kubectl rollout history deployment/nginx
|
5. 弹性伸缩
1
| kubectl scale deployment/nginx --replicas=3
|
集群的 Horizontal Pod Autoscaler 功能,依赖于聚合器提供的监控数据。Metrics Server 是集群的核心监控数据的聚合器,从 Kubelet 中采集指标数据。
新建 metrics-server.yaml 文件,内容如下:
1
2
3
4
| args:
- --logtostderr
- --kubelet-insecure-tls
- --kubelet-preferred-address-types=InternalIP
|
安装 Metric Server 服务
1
2
3
4
| helm install stable/metrics-server \
-n metrics-server \
--namespace kube-system \
-f metrics-server.yaml
|
查看资源使用情况
1
2
3
| kubectl top node
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
i-d7uwk2b1 443m 5% 5213Mi 67%
|
根据现有 Pod 的 CPU 利用率,动态伸缩数量
1
| kubectl autoscale deployment/nginx --min=1 --max=5 --cpu-percent=80
|