K8S Scale、Rolling Update、Cron Job

Scale

假设现在 apply 了一个 deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-server
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web-server
      component: web-server
  template:
    metadata:
      labels:
        app: web-server
        component: web-server
    spec:
      containers:
      - name: web-server
        image: web-server:1.0

可以通过 scale 命令扩展成 3 个 Pod,K8S 会多启动两个 Pod,原来的 Pod 依然正常运行

kubectl scale --replicas=3 deployment web-server

也可以改变 yaml 文件

...
spec:
  replicas: 3
...

然后 apply,K8S 会发现 deployment 已经部署,但新的 replicas 变成 3 了,所以会多启动两个 Pod

kubectl apply -f web-server.yml

replicas 的值也可以缩小,K8S 会自动停止多余的 Pod



Rolling Update

启动配置的时候记录版本的操作

kubectl apply -f web-server.yml --record=true

查看历史版本

kubectl rollout history deployment/web-server

可以看到

REVISION  CHANGE-CAUSE
1         kubectl create --filename=web-server.yml --record=true

可以通过 set image 命令升级版本

kubectl set image deployment web-server web-server=web-server:2.0

再查看历史版本,可以看到

REVISION  CHANGE-CAUSE
1         kubectl create --filename=web-server.yml --record=true
2         kubectl set image deployment web-server web-server=web-server:2.0

也可以在 web-server.yml 里面把 image 改了,然后重新 apply,也会触发 Rolling Update

kubectl apply -f web-server.yml

Rolling Update 会边启动新的 Pod 边停止旧的 Pod,比如 replicas 是 3,然后有一个 Service 连着这三个 Pod,那么在做 Rolling Update 的时候,会先启动一个新版本的 Pod,并且这个 Pod 也会连上 Service,然后停掉其中一个旧的 Pod,再启动新版本的 Pod,再停止旧的 Pod,如此循环,直到 3 个 Pod 都是新版的为止



Cron Job

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: cron-job-test
  namespace: default
spec:
  concurrencyPolicy: Replace   # 并发策略,如果时间到时,已经有一个 Pod 在运行,怎么处理
                               # Allow(默认):新的 Job 会和旧的 Job 一起运行
                               # Replace:停止旧的 Job,启动新的 Job
                               # JobForbid:如果有旧的 Job 在运行,那么不会创建新的 Job

  failedJobsHistoryLimit: 10       # 保留多少个失败的任务,默认没限制
  successfulJobsHistoryLimit: 10   # 保留多少个成功的任务,默认没限制

  startingDeadlineSeconds: 15        # Pod 必须在 15 秒内开始执行,否则将不运行,且标记失败    
  terminationGracePeriodSeconds: 30  # Job 存活时间,默认为永久

  schedule: '*/1 * * * *'          # 每分钟执行一次

  jobTemplate:
    spec:
      template:
        metadata: {}
        spec:
          containers:
          - name: cron-job-test
            image: cron-job-test:1.0
原文地址:https://www.cnblogs.com/moonlight-lin/p/14270161.html