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