Kubernetes 201

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

    滚动升级(Rolling Update)通过逐个容器替代升级的方式来实现无中断的服务升级:

    update1

    update4

    在滚动升级的过程中,如果发现了失败或者配置错误,还可以随时回滚:

    1. kubectl rolling-update frontend-v1 frontend-v2 --rollback

    需要注意的是,kubectl rolling-update只针对ReplicationController。对于更新策略是RollingUpdate的Deployment(Deployment可以在spec中设置更新策略为RollingUpdate,默认就是RollingUpdate),更新应用后会自动滚动升级:

    1. kubectl set image deployment/nginx-app nginx-app=nginx:1.9.1

    滚动升级的过程可以用rollout命令查看:

    1. $ kubectl rollout status deployment/nginx-app
    2. Waiting for rollout to finish: 2 out of 3 new replicas have been updated...
    3. Waiting for rollout to finish: 2 of 3 updated replicas are available...
    4. Waiting for rollout to finish: 2 of 3 updated replicas are available...
    5. Waiting for rollout to finish: 2 of 3 updated replicas are available...
    6. deployment "nginx-app" successfully rolled out

    Deployment也支持回滚:

    Kubernetes通过cgroups提供容器资源管理的功能,可以限制每个容器的CPU和内存使用,比如对于刚才创建的deployment,可以通过下面的命令限制nginx容器最多只用50%的CPU和128MB的内存:

    1. $ kubectl set resources deployment nginx-app -c=nginx --limits=cpu=500m,memory=128Mi
    2. deployment "nginx" resource requirements updated

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

    1. apiVersion: v1
    2. kind: Pod
    3. metadata:
    4. labels:
    5. name: nginx
    6. spec:
    7. containers:
    8. - image: nginx
    9. name: nginx
    10. resources:
    11. limits:
    12. cpu: "500m"
    13. memory: "128Mi"
    • LivenessProbe:探测应用是否处于健康状态,如果不健康则删除并重新创建容器

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