如何使用Ansible部署存储为镜像的Helm Chart到Kubernetes环境?
从GitLab容器注册表拉取自定义Helm Chart通过Ansible部署到K8s的操作方案
前置依赖
- Ansible控制节点已安装
kubernetes.core集合,可执行ansible-galaxy collection install kubernetes.core完成安装 - 控制节点已安装与K8s集群版本兼容的
helm命令行工具 - 已获取GitLab容器注册表的访问凭证(建议使用具有注册表读写权限的个人访问令牌,避免直接使用账号密码)
- Ansible控制节点的kubeconfig配置正常,可正常访问目标K8s集群
操作步骤
1. 编写Ansible Playbook
以下为可直接使用的Playbook示例,替换变量为你的实际环境参数即可:
--- - name: 部署GitLab存储的自定义Helm Chart hosts: localhost vars: # 替换为你的GitLab容器注册表地址 gitlab_registry: "registry.gitlab.com/你的组织/你的项目" gitlab_username: "你的GitLab账号" # 敏感凭证建议通过Ansible Vault加密存储,不要明文写在配置中 gitlab_access_token: "你的GitLab访问令牌" es_chart_version: "7.17.0-custom.1" longhorn_chart_version: "1.5.1-custom.0" tasks: - name: 登录GitLab容器注册表(适配OCI格式Chart) ansible.builtin.command: helm registry login {{ gitlab_registry }} -u {{ gitlab_username }} -p {{ gitlab_access_token }} no_log: true # 禁止输出日志避免凭证泄露 - name: 部署自定义Elasticsearch Chart kubernetes.core.helm: name: es-production chart_ref: "oci://{{ gitlab_registry }}/elasticsearch" chart_version: "{{ es_chart_version }}" release_namespace: middleware create_namespace: true state: present # 此处可传入自定义配置覆盖Chart默认values.yaml values: master: replicas: 3 data: replicas: 2 storage: size: 200Gi - name: 部署自定义Longhorn Chart kubernetes.core.helm: name: longhorn chart_ref: "oci://{{ gitlab_registry }}/longhorn" chart_version: "{{ longhorn_chart_version }}" release_namespace: longhorn-system create_namespace: true state: present
2. 执行Playbook
- 先执行dry run验证配置合法性,不会实际修改集群资源:
ansible-playbook deploy_chart.yaml --check - 验证无问题后执行正式部署:
ansible-playbook deploy_chart.yaml
注意事项
- 所有敏感凭证禁止明文存储在Playbook中,推荐使用
ansible-vault encrypt命令加密存储敏感变量,执行时添加--ask-vault-pass参数解密即可 - 若出现Chart拉取失败,可先在Ansible控制节点手动执行
helm pull oci://<你的Chart完整地址> --version <版本号>排查权限、网络、地址拼写问题 - 如果Chart内引用的工作负载镜像同样存储在GitLab容器注册表中,需要提前在对应命名空间创建镜像拉取Secret,并在Chart的values配置中指定该Secret,避免K8s拉取工作负载镜像时报权限错误
- 如需批量传入自定义配置,可将配置写入独立的values.yaml文件,在helm模块中通过
values_files: /path/to/your/values.yaml参数引入
内容的提问来源于stack exchange,提问作者veeresh
相关产品推荐
相关产品推荐

