首页 文章

在Kubernetes yaml中存储docker注册表路径

提问于
浏览
0

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

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

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

我不喜欢它有两个原因

  • 这将很难切换到另一个注册表提供程序,因为您必须检查整个代码库并更改所有Kubernetes yaml文件 .

  • 如果开发人员想通过minikube测试他的应用程序,他必须确保图像在注册表中存储并保持最新状态 . 在我们公司,推送到注册表是作为CI管道的一部分完成的事情 .

有没有办法避免将注册表URL存储在存储库中?事先登录到docker注册表并没有解决它,你仍然需要提供带有url的完整图像名称 .

1 回答

  • 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 -
    

相关问题