gpt4 book ai didi

docker - 当另一个 pod 发生更改时重新启动 Kubernetes pod

转载 作者:行者123 更新时间:2023-12-02 05:36:22 25 4
gpt4 key购买 nike

两个 pod apppostgres 已成功创建,并且能够通过节点中彼此的服务进行通信。在当前进程中,两个 Pod 同时创建,但可以更改为按顺序创建/启动它们。

最初,postgres Pod 中的数据库容器是空的,需要播种。种子进程通过 app pod,因此它也需要启动并运行。一旦 postgres 播种,app 仍然不知道这个新数据,需要重新启动。这是 app 本身的一个缺陷,我对其控制能力较低。

现在的流程是:

kubectl create -f pods.yaml       # creates `app` and `postgres` pods
kubectl exec app -- bash -c "<seed command>"
kubectl delete pod app
sleep 45 # takes a while for `app` to terminate
kubectl create -f pods.yaml # Ignore the "postgres pod and service already exist" error

一旦 postgres 达到种子状态,是否有更好的方法自动协调 app 的重新启动?

也许我完全缺少 Kubernetes 的某些方面/功能集,这有助于解决这种情况......

最佳答案

您可以在 postgresql pod 上使用“就绪探针”,它不会在导入数据之前将容器报告为就绪(例如,查询您导入的数据库或表)。您的应用程序容器可以查询 db pod 的就绪状态,以便在报告就绪后自动重新启动。就绪探针可以是执行导入的脚本。这是一个示例(您需要将“SHOW DATABASES”命令替换为适用于您的情况的命令):

spec:
containers:
- name: mysql
image: mysql:latest
ports:
- containerPort: 3306
name: mysql
readinessProbe:
exec:
command:
- /path-in-container/readiness-probe.sh
initialDelaySeconds: 15
timeoutSeconds: 5

readiness-probe.sh:

#!/bin/bash

MYSQL_USER="readinessProbe"
MYSQL_PASS="readinessProbe"
MYSQL_HOST="127.0.0.1"

mysql -u${MYSQL_USER} -p${MYSQL_PASS} -h${MYSQL_HOST} -e"SHOW DATABASES;"

if [ $? -ne 0 ]; then
exit 1
else
exit 0
fi

要了解有关该主题的更多信息,请参阅 k8s 文档:

readiness probes

health checking

关于docker - 当另一个 pod 发生更改时重新启动 Kubernetes pod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43118810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com