我想在kubernetes模板文件中描述我的服务。是否可以参数化数字或replicas
等值,以便我可以在部署时设置它。
这里的目标是能够在minikube中本地运行我的服务(我只需要一个副本)并让它们尽可能接近那些在临时/现场运行的服务。
我希望能够更改副本的数量,使用本地安装的卷并进行其他微小的更改,而无需编写一个不可避免地彼此不同的单独模板文件。
答案 0 :(得分:1)
Helm正在成为模板化kubernetes部署的标准。舵图是由包含golang变量占位符的yaml文件组成的目录
---
kind: Deployment
metadata:
name: foo
spec:
replicas: {{ .Values.replicaCount }}
您在“ values.yaml”文件中定义“值”的默认值
replicaCount: 1
您可以选择使用--set
命令行覆盖值
helm install foo --set replicaCount=42
头盔也可以指向外部答案文件
helm install foo -f ./dev.yaml
helm install foo -f ./prod.yaml
dev.yaml
---
replicaCount: 1
prod.yaml
---
replicaCount: 42
与Helm
这样的简单解决方案相比,envbsubst
的另一个优势是Helm
支持插件。一个强大的插件是helm-secrets
插件,可让您使用pgp密钥加密敏感数据。 https://github.com/futuresimple/helm-secrets
如果使用helm
+ helm-secrets
,则您的设置可能如下所示,其中代码位于一个存储库中,而数据位于另一个存储库中。
带有头盔图的git repo
stable
|__mysql
|__Values.yaml
|__Charts
|__apache
|__Values.yaml
|__Charts
incubator
|__mysql
|__Values.yaml
|__Charts
|__apache
|__Values.yaml
|__Charts
然后在另一个包含环境特定数据的git repo中
values
|__ mysql
|__dev
|__values.yaml
|__secrets.yaml
|__prod
|__values.yaml
|__secrets.yaml
然后您将拥有一个引用值和机密文件的包装器脚本
helm secrets upgrade foo --install -f ./values/foo/$environment/values.yaml -f ./values/foo/$environment/secrets.yaml
如其他答案所述,envsubst
是一种非常强大而简单的方式来制作自己的模板。 kiminehart
apiVersion: extensions/v1beta1
kind: Deployment
# ...
architecture: ${GOOS}
GOOS=amd64 envsubst < mytemplate.tmpl > mydeployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
# ...
architecture: amd64
有一个feature request允许kubectl
行使舵的某些相同功能并允许变量替换。有background document强烈建议永远不要添加该功能,而应由Helm
和envsubst
之类的外部工具来管理模板。
(编辑)
Kustomize是由Google开发的与头盔非常相似的新项目。基本上,您有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
它比头盔更简单并且开销更少,但是没有用于管理机密的插件。您可以将kustomize
与sops或envsubst
结合使用来管理机密。
答案 1 :(得分:0)
我希望有人会给我一个更好的答案,但在此期间,您可以通过envsubst
提供配置(请参阅gettext
和this for mac)。
示例config,text.yaml:
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: test
spec:
replicas: ${NUM_REPLICAS}
...
然后运行:
$ NUM_REPLICAS=2 envsubst < test.yaml | kubectl apply -f -
deployment "test" configured
最后的破折号是必需的。当然,这并不能解决数量问题,但它有点帮助。您可以编写脚本/生成文件来自动化环境。