在Kubernetes yaml' s

时间:2018-03-19 17:25:17

标签: docker kubernetes

在我的公司,我们使用GitLab作为源代码控制,并使用Gi​​tLab的Docker注册表。 每个存储库包含用于构建映像的Dockerfile和用于定义该项目的Pod / Service / Deployment /等的Kubernetes yaml。

问题是,在yaml中,图像通过其URL引用GitLab注册表

enter image description here (来自Redis存储库的示例)

我不喜欢它有两个原因

  1. 由于您必须检查整个代码库并更改所有Kubernetes yaml文件,因此很难切换到另一个注册管理机构提供商。
  2. 如果开发人员想要通过minikube测试他的应用程序,他必须确保图像在注册表中存储并保持最新状态。在我们公司,推送到注册表是作为CI管道的一部分完成的。
  3. 有没有办法避免将注册表URL存储在存储库中? 事先登录到docker注册表并没有解决它,你仍然需要提供带有url的完整图像名称。

1 个答案:

答案 0 :(得分:1)

您可以将环境变量与shell脚本一起使用。

以下是工作示例。

1)创建一个环境变量

export IMAGE_URL=node:7-alpine

2)创建1行shell脚本。此脚本用于将.yaml文件中的env值替换为您的实际环境变量。

echo sed 's/\$IMAGE_URL'"/$IMAGE_URL/g" > image_url.sh

3)创建示例yaml,例如mypod.yaml.tmpl

cat > mypod.yaml.tmpl << EOL  

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: mypod
    image: $IMAGE_URL
    # Just spin & wait forever
    command: [ "/bin/ash", "-c", "--" ]
    args: [ "while true; do sleep 30; done;" ]     
EOL

4)运行kubectl apply

cat mypod.yaml.tmpl | sh image_url.sh | kubectl apply -f -