在我的公司,我们使用GitLab作为源代码控制,并使用GitLab的Docker注册表。 每个存储库包含用于构建映像的Dockerfile和用于定义该项目的Pod / Service / Deployment /等的Kubernetes yaml。
问题是,在yaml中,图像通过其URL引用GitLab注册表
我不喜欢它有两个原因
有没有办法避免将注册表URL存储在存储库中? 事先登录到docker注册表并没有解决它,你仍然需要提供带有url的完整图像名称。
答案 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 -