Kubernetes 部署顺序处理

Kubernetes deployment order handling

我是 Kubernetes 的新手,我有一个用例,我想从另一个部署中读取数据。

在下面的文件中,RabbitmqCluster 创建了一个默认用户。我想将该用户的凭据提取到一个秘密中,以用于需要发布或订阅该代理的其他服务:

apiVersion: rabbitmq.com/v1beta1
kind: RabbitmqCluster
metadata:
    name: broker
---
apiVersion: v1
kind: Secret
metadata:
    name: broker-credentials-secret
type: Opaque
stringData:
    username: $BROKER_USER # Available at $(kubectl get secret broker-default-user -o jsonpath='{.data.username}' | base64 --decode)
    password: $BROKER_PASSWORD # Available at $(kubectl get secret broker-default-user -o jsonpath='{.data.password}' | base64 --decode)

我的第一个想法是分成两个不同的文件,我可以等待集群准备就绪,然后 sed BROKER_PASSWORDBROKER_USER 变量进入第二个配置然后部署秘密。

我的问题是:有没有合适的方法来处理这种情况?我是否应该将这两个分成两个不同的文件并编写有关它们的预期部署顺序的文档?或者有更好的方法吗?

你的想法和方法是正确的,这种方式(拆分成两个文件)似乎是这种情况下的最佳选择 - 无法从另一个 运行ning 动态设置 Kubernetes YAML 中的值Kubernetes 资源。请记住,对于秘密定义,您不必在 kubectl 中使用 stringDatabase64 --decode 命令。当值将被再次编码时解码值没有任何意义 - 最好只读取 base64 字符串中的值并使用 data 而不是 stringData - check this。最后一切都应该是这样的:

文件-1.yaml:

apiVersion: rabbitmq.com/v1beta1
kind: RabbitmqCluster
metadata:
    name: broker

文件-2.yaml:

apiVersion: v1
kind: Secret
metadata:
    name: broker-credentials-secret
type: Opaque
data:
    username: BROKER_USER
    password: BROKER_PASSWORD

然后你可以 运行 这个单行(使用 sed 命令 + 。我还删除了第二个 yaml 中的 $ 标志所以 sed命令正常工作):

kubectl apply -f file-1.yaml && sed -e "s/BROKER_USER/$(kubectl get secret broker-default-user -o jsonpath='{.data.username}')/g" -e "s/BROKER_PASSWORD/$(kubectl get secret broker-default-user -o jsonpath='{.data.password}')/g" file-2.yaml | kubectl apply -f -