Kubernetes 201
这些自动扩展的容器会自动加入到service中,而收缩回收的容器也会自动从service中删除。
滚动升级(Rolling Update)通过逐个容器替代升级的方式来实现无中断的服务升级:
在滚动升级的过程中,如果发现了失败或者配置错误,还可以随时回滚:
kubectl rolling-update frontend-v1 frontend-v2 --rollback
需要注意的是,kubectl rolling-update
只针对ReplicationController。对于更新策略是RollingUpdate的Deployment(Deployment可以在spec中设置更新策略为RollingUpdate,默认就是RollingUpdate),更新应用后会自动滚动升级:
kubectl set image deployment/nginx-app nginx-app=nginx:1.9.1
滚动升级的过程可以用rollout
命令查看:
$ kubectl rollout status deployment/nginx-app
Waiting for rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for rollout to finish: 2 of 3 updated replicas are available...
Waiting for rollout to finish: 2 of 3 updated replicas are available...
Waiting for rollout to finish: 2 of 3 updated replicas are available...
deployment "nginx-app" successfully rolled out
Deployment也支持回滚:
Kubernetes通过cgroups提供容器资源管理的功能,可以限制每个容器的CPU和内存使用,比如对于刚才创建的deployment,可以通过下面的命令限制nginx容器最多只用50%的CPU和128MB的内存:
$ kubectl set resources deployment nginx-app -c=nginx --limits=cpu=500m,memory=128Mi
deployment "nginx" resource requirements updated
这等同于在每个Pod中设置resources limits:
apiVersion: v1
kind: Pod
metadata:
labels:
name: nginx
spec:
containers:
- image: nginx
name: nginx
resources:
limits:
cpu: "500m"
memory: "128Mi"
- LivenessProbe:探测应用是否处于健康状态,如果不健康则删除并重新创建容器
对于已经部署的deployment,可以通过来更新manifest,增加健康检查部分: