Please enable Javascript to view the contents

Kubernetes 中 Deployment 的基本操作

 ·  ☕ 2 分钟

Deployment 通过创建 ReplicaSet 控制 Pod 的数量、状态。本篇主要介绍一些 Deployment 常用的操作。

1. Deployment yaml 格式

带上 --dry-run 参数表示并不执行命令,仅生成 yaml 输出:

1
kubectl create deployment nginx --image=nginx --dry-run -o yaml
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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. 创建

  • 使用 run 参数
1
kubectl run nginx --image=nginx
  • 使用 create 参数
kubectl create deployment nginx --image=nginx
  • 直接使用 yaml 文件

为了提高编辑效率,通常会基于已有的 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
  • 限制内存和 CPU 的使用
1
kubectl set resource deployment/nginx -c=nginx --limits=cpu=200m,memory=512Mi
  • 直接修改 yaml 文件

使用 edit 命令,能够直接对已经创建的 Kubernetes 对象进行编辑,保存退出后,立即生效。

1
kubectl edit deployment nginx

4. 滚动策略

在 spec 字段中,可以配置滚动升级策略:

1
2
3
4
5
6
spec:
  strategy:
    rollingUpdate:
      maxSurge: 25% # 最大额外副本比例
      maxUnavailable: 25% # 最少不可以副本比例
    type: RollingUpdate
  • 暂停 Deployment 更新
1
kubectl rollout pause deployment/nginx
  • 恢复 Deployment 更新
1
kubectl rollout resume deployment/nginx
  • 回滚 Deployment 到指定版本
1
kubectl rollout undo deployment/nginx --to-revision=2
  • 查看 Deployment 滚动状态
1
kubectl rollout status deployment/nginx
  • 查看 Deployment 历史版本
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

微信公众号
作者
微信公众号