gpt4 book ai didi

kubernetes - helm - 使用预定义的流程顺序运行 Pod 和依赖项

转载 作者:行者123 更新时间:2023-12-02 18:18:01 30 4
gpt4 key购买 nike

我正在使用带有 helm 的 K8S。

我需要使用预定义的流程顺序运行 Pod 和依赖项。

如何创建仅运行 pod 一次(即首次填充数据库)并在第一次成功后退出的 helm 依赖项?

此外,如果我有多个 Pod,并且我只想在某些条件发生时以及创建 Pod 之后运行该 Pod。

需要构建2个pod,描述如下:

我有一个数据库。

第一步是创建数据库。

第二步是填充数据库。

一旦我填充了数据库,这项工作就需要完成。

第三步是另一个使用该数据库的 Pod(不是 db Pod),并且始终处于监听模式(永不停止)。

我可以定义依赖项的运行顺序(并且并不总是并行)。

我在 helm create 命令中看到的是,有deployment.yaml 和 service.yaml 的模板,也许 pod.yaml 是更好的选择?

最适合这种情况的图表类型是什么?

此外,需要知道什么是图表层次结构。

即:当有一个类型为监听器的图表、一个用于创建数据库的 Pod 和一个用于数据库填充的 Pod(完成后删除)时,我可能有一个解释流程的图​​表树层次结构。

enter image description here

主图表使用填充的数据(在所有子图表和模板都正确运行之后 - 顺便说一句,我可以为同一个图表拥有多个模板吗?)。

什么是正确的树流

谢谢。

最佳答案

helm 创建资源有一个固定的顺序,除了 hooks 之外您无法影响该顺序。 .

根据我的经验,Helm hook 引起的问题比它们解决的问题还要多。这是因为大多数情况下它们实际上依赖于只有在 Hook 完成后才可用的资源。例如,配置映射、 secret 和服务帐户/角色绑定(bind)。导致你将越来越多的东西移入钩子(Hook)生命周期,这在我看来并不符合习惯。卸载版本时,它们也会悬空。

我倾向于使用作业并初始化容器,这些容器会阻塞直到作业完成。

---
apiVersion: v1
kind: Pod
metadata:
name: mysql
labels:
name: mysql
spec:
containers:
- name: mysql
image: mysql
---
apiVersion: batch/v1
kind: Job
metadata:
name: migration
spec:
ttlSecondsAfterFinished: 100
template:
spec:
initContainers:
- name: wait-for-db
image: bitnami/kubectl
args:
- wait
- pod/mysql
- --for=condition=ready
- --timeout=120s
containers:
- name: migration
image: myapp
args: [--migrate]
restartPolicy: Never
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
selector:
matchLabels:
app: myapp
replicas: 3
template:
metadata:
labels:
app: myapp
spec:
initContainers:
- name: wait-for-migration
image: bitnami/kubectl
args:
- wait
- job/migration
- --for=condition=complete
- --timeout=120s
containers:
- name: myapp
image: myapp
args: [--server]

如果您想水平扩展应用程序,将迁移移至其自己的工作中会很有帮助。您的迁移只需运行 1 次。因此,为每个部署的副本运行它是没有意义的。

此外,如果 Pod 崩溃并重新启动,迁移不需要再次运行。因此,将其放在单独的一次性工作中是有意义的。

主要图表结构如下所示。

.
├── Chart.lock
├── charts
│ └── mysql-8.8.26.tgz
├── Chart.yaml
├── templates
│ ├── deployment.yaml # waits for db migration job
│ └── migration-job.yaml # waits for mysql statefulset master pod
└── values.yaml

关于kubernetes - helm - 使用预定义的流程顺序运行 Pod 和依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71284091/

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