kubernetes - 计划重启Kubernetes Pod而不造成停机

标签 kubernetes kubernetes-helm kubernetes-cronjob

我有6个正在运行的Pod副本,我想每5分钟重新启动\重新创建一次。

这需要进行滚动更新-以便不会立即终止所有更新,也不会造成停机。我该如何实现?

我尝试使用cron作业,但似乎无法正常工作:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: scheduled-pods-recreate
spec:
  schedule: "*/5 * * * *"
  concurrencyPolicy: Forbid
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: ja-engine
            image: app-image
            imagePullPolicy: IfNotPresent
          restartPolicy: OnFailure

尽管作业已成功创建并按照以下说明进行了调度,但它似乎从未运行过:
Name:                       scheduled-pods-recreate
Namespace:                  jk-test
Labels:                     <none>
Annotations:                <none>
Schedule:                   */5 * * * *
Concurrency Policy:         Forbid
Suspend:                    False
Starting Deadline Seconds:  <unset>
Selector:                   <unset>
Parallelism:                <unset>
Completions:                <unset>
Pod Template:
  Labels:  <none>
  Containers:
   ja-engine:
    Image:           image_url
    Port:            <none>
    Host Port:       <none>
    Environment:     <none>
    Mounts:          <none>
  Volumes:           <none>
Last Schedule Time:  Tue, 19 Feb 2019 10:10:00 +0100
Active Jobs:         scheduled-pods-recreate-1550567400
Events:
  Type    Reason            Age   From                Message
  ----    ------            ----  ----                -------
  Normal  SuccessfulCreate  23m   cronjob-controller  Created job scheduled-pods-recreate-1550567400

那么第一件事,如何确保它正在运行,以便重新创建Pod?

另外,如何确保没有停机时间?

cronjob的更新版本:
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            args:
            - /bin/sh
            - -c
            - kubectl patch deployment runners -p '{"spec":{"template":{"spec":{"containers":[{"name":"jp-runner","env":[{"name":"START_TIME","value":"'$(date +%s)'"}]}]}}}}' -n jp-test
          restartPolicy: OnFailure

pods 未以消息“重启后重启失败的容器和错误”开头,如下所示:
State:          Terminated
      Reason:       Error
      Exit Code:    127

最佳答案

从Kubernetes 1.15开始,您可以使用以下命令执行滚动重启。

kubectl rollout restart deployment <deployment name>

关于kubernetes - 计划重启Kubernetes Pod而不造成停机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54763195/

相关文章:

Azure Kubernetes - Istio 多个负载均衡器?

cron - Kubernetes CronJob - 如果上一个作业仍在运行,则跳过作业并等待下一个计划时间

docker - Minikube在带有hyperkit驱动程序和VPN的Mac上不起作用

go - 将 *extensions.Deployment 转换为 *v1beta1.Deployment (Kubernetes client-go)

asp.net-core - 更改在 kubernetes 上运行的 net core 应用程序的配置

laravel - Helm : Executing command on other containers in Job

resources - 如何通过一个命令从Helm列表中删除所有资源?

Kubernetes Helm : "lost connection to pod" and "transport is closing" errors

kubernetes - 使用 Kubernetes CronJobs 动态创建和管理大量计划作业是一个好习惯吗?

kubernetes - 是否可以将 Kubernetes Cronjob status.lastScheduleTime 时间戳传递给计划作业的容器?