如何在传递yaml进行容器创建时参数化图像版本

use*_*211 13 kubernetes

有什么方法可以在将清单.yaml传递给kubectl命令时从varibale/config传递映像版本

示例:

apiVersion: v1
kind: ReplicationController
metadata:
  name: nginx
spec:
  replicas: 1
  selector:
    app: nginx
  template:
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:${IMAGE_VERSION}
        imagePullPolicy: Always
        resources:
         limits:
           cpu: "1.2"
           memory: 100Mi
        ports:
        - containerPort: 80
Run Code Online (Sandbox Code Playgroud)

用例是启动在kubernetes级别设置的特定映像版本,并且该变量由服务器端的kubernetes本身解析.

谢谢和问候,拉维

小智 9

经过最近的调查,我们决定只好与sed。包装kubectl apply成一个小的bash脚本,并在运行apply之前替换占位符。

我们确实研究了更复杂的工具,但只找到了Helm。但是,Helm是一项复杂的技术,其作用不仅限于模板。由于您不再使用kubectl进行部署,并且必须有一个Helm软件包存储库才能将软件包推送到其中,因此它会极大地改变您的工作流程。我们的评估是,Helm对于部署我们的应用程序并仅将其用于模板是没有用的。

  • 不需要头盔包装回购。我们从带有sed和Kubectl补丁部署的Makefiles迁移到Flask REST API,该API呈现Jinja2模板并使用集群内服务帐户来更新Deployments。麻烦自己,然后尝试一下。 (3认同)

Vin*_*met 7

k8s清单文件是静态yaml/json.

如果您想模拟清单(并以类似捆绑的方式管理多个资源),我强烈建议您查看Helm

我最近创建了一个专注于Helm"模板"功能的工作室.

Helm做的不仅仅是模板化,它是作为Kubernetes应用程序的完整包管理器构建的(想想Apt/Yum/Homebrew).

如果您想处理客户端的所有内容,请查看https://github.com/errordeveloper/kubegen

虽然,在某些时候,你将需要Helm的其他功能,并且当时间到来时将需要迁移 - 我建议咬紧牙关并直接向Helm求助.