【问题标题】:Kubernetes deployment order handlingKubernetes 部署订单处理
【发布时间】:2021-10-27 07:26:12
【问题描述】:

我是 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 变量放入第二个配置中,然后部署密钥。

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

【问题讨论】:

    标签: kubernetes rabbitmq


    【解决方案1】:

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

    file-1.yaml

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

    file-2.yaml

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

    然后你可以运行这个单行代码(使用 sed 命令 + using pipes 。我还删除了第二个 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 -
    

    【讨论】:

    • 感谢您的详细解答。很高兴从标准输入提供文件以避免文件中有密码!
    猜你喜欢
    • 2019-08-15
    • 2021-05-28
    • 2016-04-18
    • 2021-10-01
    • 2017-04-16
    • 2019-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多