在将清单.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
用例是启动在kubernetes级别设置的特定映像版本,并且该变量由kubernetes本身在服务器端解析。
谢谢和问候, 拉维
答案 0 :(得分:6)
k8s清单文件是静态yaml / json。
如果您想模拟清单(并以类似方式管理多个资源),我强烈建议您查看Helm
我最近创建了a Workshop which focuses precisely on the "Templating" features of Helm。
Helm做的不仅仅是模板化,它是作为Kubernetes应用程序的完整包管理器构建的(想想Apt / Yum / Homebrew)。
如果您想处理客户端的所有内容,请查看https://github.com/errordeveloper/kubegen
虽然在某些时候,你需要Helm的其他功能,并且在那个时候需要迁移 - 我建议咬紧牙关并直接向Helm求助。
答案 1 :(得分:6)
最近调查后我们决定选择sed
。将kubectl apply
包装到一个小的bash脚本中,并在运行apply之前替换占位符。
我们确实研究过更复杂的工具,但我们只找到了Helm。然而,Helm是一项复杂的技术,不仅仅是模板化。它会改变您的工作流程,因为您不再使用kubectl进行部署,并且需要使用Helm包repo来推送您的包。我们的评估是Helm对于部署我们的应用程序没有用,并且仅仅使用它来模板化是过度的。
答案 2 :(得分:2)
这是一个使用sed进行操作的示例(摘自我典型的circleci配置):
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 -