gpt4 book ai didi

kubernetes - 根据环境调整 Kubernetes 配置

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

我想在 kubernetes 模板文件中描述我的服务。是否可以对数字或副本等值进行参数化,以便我可以在部署时进行设置。

这里的目标是能够在 minikube 中本地运行我的服务(我只需要一个副本),并让它们尽可能接近在 staging/live 中运行的服务。

我希望能够更改副本数量、使用本地安装的卷并进行其他细微更改,而无需编写不可避免地会彼此不同的单独模板文件。

最佳答案

Helm

Helm 正在成为 Kubernetes 部署模板化的标准。 Helm Chart 是一个由带有 golang 变量占位符的 yaml 文件组成的目录

---
kind: Deployment
metadata:
name: foo
spec:
replicas: {{ .Values.replicaCount }}

您在“values.yaml”文件中定义“value”的默认值

replicaCount: 1

您可以选择使用 --set 命令行覆盖该值

helm install foo --set replicaCount=42

Helm 还可以指向外部应答文件

helm install foo -f ./dev.yaml
helm install foo -f ./prod.yaml

dev.yaml

---
replicaCount: 1

产品.yaml

---
replicaCount: 42

envbsubst 等更简单的解决方案相比,Helm 的另一个优势是 Helm 支持插件。 helm-secrets 插件是一个功能强大的插件,可让您使用 pgp key 加密敏感数据。 https://github.com/futuresimple/helm-secrets

如果使用 helm + helm-secrets,您的设置可能如下所示,其中您的代码位于一个存储库中,而您的数据位于另一个存储库中。

带有 Helm 图表的 git 存储库

stable
|__mysql
|__Values.yaml
|__Charts
|__apache
|__Values.yaml
|__Charts
incubator
|__mysql
|__Values.yaml
|__Charts
|__apache
|__Values.yaml
|__Charts

然后在另一个包含环境特定数据的 git 存储库中

values
|__ mysql
|__dev
|__values.yaml
|__secrets.yaml
|__prod
|__values.yaml
|__secrets.yaml

然后您就有了一个引用值和 secret 文件的包装器脚本

helm secrets upgrade foo --install -f ./values/foo/$environment/values.yaml -f ./values/foo/$environment/secrets.yaml
<小时/>

envsubst

正如其他答案中提到的,envsubst 是制作自己的模板的一种非常强大但简单的方法。来自 kiminehart 的示例

apiVersion: extensions/v1beta1
kind: Deployment
# ...
architecture: ${GOOS}
GOOS=amd64 envsubst < mytemplate.tmpl > mydeployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
# ...
architecture: amd64
<小时/>

Kubectl

有一个feature request允许 kubectl 执行 helm 的一些相同功能并允许变量替换。有一个background document这强烈表明该功能永远不会被添加,而是由 Helmenvsubst 等外部工具来管理模板。

<小时/>

(编辑)

自定义

Kustomize是google开发的一个新项目,与helm非常相似。基本上你有 2 个文件夹 baseoverlays。然后,您运行 kustomize build someapp/overlays/Production ,它将生成该环境的 yaml。

   someapp/
├── base/
│ ├── kustomization.yaml
│ ├── deployment.yaml
│ ├── configMap.yaml
│ └── service.yaml
└── overlays/
├── production/
│ └── kustomization.yaml
│ ├── replica_count.yaml
└── staging/
├── kustomization.yaml
└── cpu_count.yaml

它比 helm 更简单且开销更少,但没有用于管理 secret 的插件。您可以将 kustomizesops 结合起来或 envsubst 来管理 secret 。

https://kubernetes.io/blog/2018/05/29/introducing-kustomize-template-free-configuration-customization-for-kubernetes/

关于kubernetes - 根据环境调整 Kubernetes 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47655363/

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