我有6个正在运行的Pod副本,我想每5分钟重新启动一次\ / recreate。
这需要进行滚动更新-以便不立即终止所有更新并且不会造成停机。我该如何实现?
我尝试使用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
pod并非以消息“回退重启失败的容器和错误”开头,如下所示:
State: Terminated
Reason: Error
Exit Code: 127
答案 0 :(得分:3)
从Kubernetes 1.15开始,使用以下命令执行滚动重启。
kubectl rollout restart deployment <deployment name>
答案 1 :(得分:1)
Kubernetes目前没有滚动重启功能,但是您可以使用以下命令作为解决方法来重启特定部署中的所有Pod:
(用真实的名称替换部署名称和pod名称)
kubectl patch deployment mydeployment -p '{"spec":{"template":{"spec":{"containers":[{"name":"my-pod-name","env":[{"name":"START_TIME","value":"'$(date +%s)'"}]}]}}}}'
要计划它,您可以在主节点上创建一个cron任务以定期运行此命令。
用户拥有的任务应具有正确的kubectl
配置(~/.kube/config
),并具有更改提到的部署对象的权限。
可以从/etc/kubernetes/admin.conf
复制默认集群管理员配置:
(通常由kubeadm init
创建):
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
可以指定两种类型的 deployment update strategy :重新创建(.spec.strategy.type==Recreate.
)和滚动更新({{ 1}})。
只有使用滚动更新策略,您才能避免服务停机。您可以在部署YAML中指定maxUnavailable
和maxSurge
参数,以控制滚动更新过程。