目录

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

    1. Deployment yaml 格式

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

    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. 创建

    • 使用 run 参数
    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,再编辑镜像、副本数等信息。

    kubectl apply -f deployment.yaml
    

    3. 升级更新

    • 更新镜像版本
    kubectl set image  deployment/nginx nginx=nginx:1.9.1
    
    • 限制内存和 CPU 的使用
    kubectl set resource deployment/nginx -c=nginx --limits=cpu=200m,memory=512Mi
    
    • 直接修改 yaml 文件

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

    kubectl edit deployment nginx
    

    4. 滚动策略

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

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

    5. 弹性伸缩

    • 手动修改副本数量
    kubectl scale deployment/nginx --replicas=3
    
    • 自动扩缩容副本数量

    集群的 Horizontal Pod Autoscaler 功能,依赖于聚合器提供的监控数据。Metrics Server 是集群的核心监控数据的聚合器,从 Kubelet 中采集指标数据。

    新建 metrics-server.yaml 文件,内容如下:

    args:
    - --logtostderr
    - --kubelet-insecure-tls
    - --kubelet-preferred-address-types=InternalIP
    

    安装 Metric Server 服务

    helm install stable/metrics-server \
    -n metrics-server \
    --namespace kube-system \
    -f metrics-server.yaml
    

    查看资源使用情况

    kubectl top node
    NAME         CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
    i-d7uwk2b1   443m         5%     5213Mi          67%
    

    根据现有 Pod 的 CPU 利用率,动态伸缩数量

    kubectl autoscale  deployment/nginx --min=1 --max=5 --cpu-percent=80