Dan*_*elM 5 kubernetes kubectl minikube
我想在 kubernetes 模板文件中描述我的服务。是否可以参数化诸如 number 或 之类的值replicas,以便我可以在部署时进行设置。
这里的目标是能够在 minikube(我只需要一个副本)中本地运行我的服务,并使它们尽可能接近那些在 staging/live 中运行的服务。
我希望能够更改副本的数量,使用本地安装的卷并进行其他小的更改,而不必编写不可避免地彼此不同的单独模板文件。
Helm 正在成为模板化 kubernetes 部署的标准。helm chart 是一个包含 yaml 文件的目录,其中包含 golang 变量占位符
---
kind: Deployment
metadata:
name: foo
spec:
replicas: {{ .Values.replicaCount }}
Run Code Online (Sandbox Code Playgroud)
您在“values.yaml”文件中定义“value”的默认值
replicaCount: 1
Run Code Online (Sandbox Code Playgroud)
您可以选择使用--set命令行覆盖该值
helm install foo --set replicaCount=42
Run Code Online (Sandbox Code Playgroud)
Helm 还可以指向外部应答文件
helm install foo -f ./dev.yaml
helm install foo -f ./prod.yaml
Run Code Online (Sandbox Code Playgroud)
开发文件
---
replicaCount: 1
Run Code Online (Sandbox Code Playgroud)
产品.yaml
---
replicaCount: 42
Run Code Online (Sandbox Code Playgroud)
Helm与更简单的解决方案相比的另一个优点envbsubst是Helm支持插件。一个强大的插件是helm-secrets允许您使用 pgp 密钥加密敏感数据的插件。https://github.com/futuresimple/helm-secrets
如果使用helm+helm-secrets您的设置可能如下所示,其中您的代码在一个 repo 中,而您的数据在另一个 repo 中。
带有舵图的 git repo
stable
|__mysql
|__Values.yaml
|__Charts
|__apache
|__Values.yaml
|__Charts
incubator
|__mysql
|__Values.yaml
|__Charts
|__apache
|__Values.yaml
|__Charts
Run Code Online (Sandbox Code Playgroud)
然后在另一个包含环境特定数据的 git repo 中
values
|__ mysql
|__dev
|__values.yaml
|__secrets.yaml
|__prod
|__values.yaml
|__secrets.yaml
Run Code Online (Sandbox Code Playgroud)
然后,您有一个引用值和机密文件的包装器脚本
helm secrets upgrade foo --install -f ./values/foo/$environment/values.yaml -f ./values/foo/$environment/secrets.yaml
Run Code Online (Sandbox Code Playgroud)
正如其他答案中提到的,envsubst是一种非常强大而简单的方法来制作自己的模板。kiminehart的例子
apiVersion: extensions/v1beta1
kind: Deployment
# ...
architecture: ${GOOS}
Run Code Online (Sandbox Code Playgroud)
GOOS=amd64 envsubst < mytemplate.tmpl > mydeployment.yaml
Run Code Online (Sandbox Code Playgroud)
apiVersion: extensions/v1beta1
kind: Deployment
# ...
architecture: amd64
Run Code Online (Sandbox Code Playgroud)
有一个功能请求允许kubectl执行与 helm 相同的一些功能并允许变量替换。有一个背景文件,强烈暗示,该功能将永远不会被添加,而是达到像外部工具Helm和envsubst管理模板。
(编辑)
Kustomize是 google 开发的一个新项目,与 helm 非常相似。基本上你有 2 个文件夹base和overlays. 然后运行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
Run Code Online (Sandbox Code Playgroud)
它比 helm 更简单,开销更少,但没有用于管理机密的插件。您可以结合kustomize使用小恩小惠或 envsubst管理秘密。
| 归档时间: |
|
| 查看次数: |
2903 次 |
| 最近记录: |