Please enable Javascript to view the contents

扩展应用与滚动升级

 ·  ☕ 2 分钟 · 👀... 阅读

扩展应用

对Deployment中副本的数量(replicas),可以动态扩展或收缩应用

scale

这些自动扩展的容器会自动加入到 service 中,而收缩回收的容器也会自动从 service 中删除。

$ kubectl scale –replicas=3 deployment/nginx-app
$ kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-app 3/3 3 3 18h

滚动升级

kubectl set image –help

示例更新nginx镜像版本: kubectl set image deployment/nginx-app nginx-app=nginx:1.12.0-alpine

已弃用命令:kubectl rolling-update,参见:

其他命令

kubectl rollout history deployment/deploy名 # 检查部署的历史,包括修订的情况
kubectl rollout undo deployment/deploy名 # 回滚到之前版本
kubectl rollout undo deployment/deployt名 –to-revision=2 # 回滚到指定版本
kubectl rollout status -w deployment/deploy名 # 查看滚动升级状态
kubectl rollout restart deployment/deploy名 # 重新滚动升级

资源限制

> kubectl set resources deployment nginx-app -c=nginx-app –limits=cpu=500m,memory=128Mi
deployment.apps/nginx-app resource requirements updated

这等同于在每个 Pod 中设置 resources limits:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
apiVersion: v1
kind: Pod
metadata:
  labels:
    app: nginx
  name: nginx
spec:
  containers:
    - image: nginx
      name: nginx-app
      resources:
        limits:
          cpu: "500m"
          memory: "128Mi"

健康检查

Kubernetes 作为一个面向应用的集群管理工具,需要确保容器在部署后确实处在正常的运行状态。Kubernetes 提供了两种探针(Probe,支持 exec、tcpSocket 和 http 方式)来探测容器的状态:

  • LivenessProbe:探测应用是否处于健康状态,如果不健康则删除并重新创建容器
  • ReadinessProbe:探测应用是否启动完成并且处于正常服务状态,如果不正常则不会接收来自 Kubernetes Service 的流量

对于已经部署的 deployment,可以通过 kubectl edit deployment/nginx-app 来更新 manifest,增加健康检查部分:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
spec:
      containers:
      - image: nginx
        imagePullPolicy: Always
        name: http
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        resources:
          limits:
            cpu: "500m"
            memory: "128Mi"
        livenessProbe:
          httpGet:
            path: /
            port: 80
          initialDelaySeconds: 15
          timeoutSeconds: 1
        readinessProbe:
          httpGet:
            path: /
            port: 80
          initialDelaySeconds: 5
          timeoutSeconds: 1

参见

分享
您的鼓励是我最大的动力

Jason Tan
作者
Jason Tan
Developer