扩展应用

通过修改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

results matching ""

    No results matching ""