Kevin
274 words
1 minutes
kubernetes-application_lifecyle_manangment

Rolling Updates and Rollbacks#

  • Rolling Updates
    • 逐个替换Pod,确保应用的高可用性
    • 通过Deployment对象实现
# deployment spec
spec:
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate

Commands:

  • Update: kubectl set image deployment/my-deployment my-container=my-image:tag 更新镜像,会更新Deployment的spec.template.spec.containers.image字段, kubectl edit deployment/my-deployment, 应用新deployment kubectl apply -f deployment.yaml
  • Update Status: kubectl rollout status deployment/my-deployment
  • 查看更新历史: kubectl rollout history deployment/my-deployment
  • 回滚: kubectl rollout undo deployment/my-deployment [--to-revision=1 指定回滚版本]

Configure Applications#

Commands Arguments and Environment Variables#

  1. image中不存在ENTRYPOINT时,commandargs字段会覆盖Dockerfile中的CMD字段
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: nginx
    command: ["nginx", "-g", "daemon off;"]
  1. image中存在ENTRYPOINT时,commandargs字段会追加到ENTRYPOINT
FROM nginx
ENTRYPOINT ["nginx", "-g", "daemon off;"]
CMD ["-g", "worker_processes auto;"]
apiVersion: v1
kind: Pod
metadata:
  name: my-nginx
spec:
  containers:
  - name: nginx
    image: my-nginx-image
    # 覆盖 ENTRYPOINT
    command: ["nginx", "-g", "daemon off; worker_processes 8;"] # Dockerfile Entrypoint
    # 覆盖 CMD
    args: ["-g", "worker_processes 16;"]
  1. Environment Variables
# sepc
spec:
  containers:
  - name: my-container
    image: my-image
    env: # 环境变量
    - name: MY_ENV # plain text
      value: my-value
    - name: MY_ENV_FROM_SECRET # 从secret中获取
      valueFrom:
        secretKeyRef:
          name: my-secret
          key: my-key
# 加载全部secret中的环境变量
---
apiVersion: v1 
kind: Pod 
metadata:
  labels:
    name: webapp-pod
  name: webapp-pod
  namespace: default 
spec:
  containers:
  - image: kodekloud/simple-webapp-mysql
    imagePullPolicy: Always
    name: webapp
    envFrom:
    - secretRef:
        name: db-secret