在传递YAML以创建容器时,如何参数化图像版本



是否有任何方法可以从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

用例是启动特定图像版本,该图像版本设置为Kubernetes级别,并且该变量由Kubernetes本身在服务器端解决。

谢谢,问候,拉维

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

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

我最近创建了一个工作室,该研讨会精确地关注舵的"模板"功能。

Helm不仅仅是模板,还构建了Kubernetes应用程序的完整包装经理(想想APT/YUM/Homebrew)。p>如果您想处理所有客户端,请查看https://github.com/errordeveloper/kubegen

,尽管在某个时候,您需要掌舵的其他功能,并且在那个时间到来时需要迁移 - 我建议咬子弹并直接去掌舵。

最近回顾了这一点,我们决定只使用sed。将kubectl apply包装到一个小bash脚本中,然后在运行之前更换占位符。

我们确实研究了更复杂的工具,但我们只找到了舵。但是,Helm是一项复杂的技术,它不仅仅是模板。由于您不再使用Kubectl部署,因此它会大大改变您的工作流程,并且必须拥有一个舵机包回库才能将您的包装推向。我们的评估是,Helm对于部署我们的应用程序并不有用,并且仅将其用于模板过高。

这是一个示例如何使用sed做到这一点(这是我典型的circleci config的摘录):

replaces="s/{.Namespace}/$CIRCLE_BRANCH/;";
replaces="$replaces s/{.CiBuild}/$CIRCLE_BUILD_NUM/; ";
replaces="$replaces s/{.CiCommit}/$CIRCLE_SHA1/; ";
replaces="$replaces s/{.CiUser}/$CIRCLE_USERNAME/; ";
cat ./k8s/app.yaml | sed -e "$replaces" | ./kubectl --kubeconfig=`pwd`/.kube/config apply --namespace=$NAMESPACE -f -

最新更新