扩展应用
通过修改Deployment中副本的数量,可以动态扩展或收缩应用。
这些自动扩展的容器会自动加入service,而收缩回收的容器也会自动从service中删除。
kubectl scale --replicas=3 deployment/nginx-app
kubectl get deploy
滚动升级
滚动升级(Rolling Update)通过逐个容器替代升级的方式实现无中断的服务升级。
kubectl rolling-update frontend-v1 frontend-v2 --image=image:v2
在滚动升级过程中,如果发现失败或配置错误,可以随时回滚
kubectl rolling-update frontend-v1 frontend-v2 --rollback
注意,rolling-update只针对ReplicationController,不能用在策略不是RollingUpdate的Deployment
spec:
replicas: 3
selector:
matchLabels:
run: nginx-app
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
type: RollingUpdate
如果要更新应用,也可以直接使用kubectl set
kubectl set image deployment/nginx-app nginx-app=nginx:1.9.1
滚动升级的过程可以使用rollout命令查看
kubectl rollout status deployment/nginx-app
Deployment也支持回滚
kubectl rollout history deployment/nginx-app
kubectl rollout undo deployment/nginx-app
资源限制
kubernetes通过cgroups提供容器资源管理功能,可以限制每个容器的CPU和内存使用。
比如,可以限制nginx容器最多使用50%的CPU和128MB的内存
kubectl set resource deployment nginx-app -c=nginx --limits=cpu=500m,memory=128Mi
这等同于在每个Pod中设置resources limits
apiVersion: v1
kind: Pod
metadata:
labels:
app: nginx
name :nginx
spec:
containers:
- image: nginx
name: nginx
resources:
limits:
cpu: "500m"
memory: "128Mi"
健康检查
Kubernetes提供两种探针探测容器状态。
LivenessProbe探测应用是否处于健康状态,如果不健康则删除重建容器。
ReadinessProbe探测应用是否启动完成并且处于正常服务状态,如果不正常则更新容器状态。
对于已经部署的deployment,可以通过kubectl edit deployment/nginx-app
更新manifest,增加健康检查部分
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
app: nginx
name: nginx-default
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
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: /ping
port: 80
initialDelaySeconds: 5
timeoutSeconds: 1