首页 5G技术

K8s 离线环境福音:Helm 部署 Consul v1.21.2 超详细指南

分类:5G技术
字数: (9447)
阅读: (7987)
内容摘要:K8s 离线环境福音:Helm 部署 Consul v1.21.2 超详细指南,

在生产环境中,尤其是在金融、政务等对安全性要求极高的行业,Kubernetes (k8s) 集群往往部署在完全隔离的内网环境中。这给软件部署带来了极大的挑战。Consul 作为一款流行的服务网格解决方案,其稳定性和可扩展性至关重要。利用 Helm 进行部署是最佳实践,但k8s 利用 helm 离线部署 consul v1.21.2 在离线环境下并非易事。我们需要解决 Helm Chart 的下载、镜像的导入等一系列问题。本文将深入探讨如何在离线环境中高效部署 Consul v1.21.2。

底层原理:Helm 与 Consul Chart 的运作机制

要理解离线部署的难点,首先要了解 Helm 和 Consul Chart 的运作机制。Helm 类似于 K8s 的包管理器,通过 Chart 管理 K8s 资源的定义。Consul Chart 包含了部署 Consul 集群所需的所有 K8s 资源清单,如 Deployment、Service、ConfigMap 等。在正常情况下,Helm 会从 Chart 仓库(例如 Artifact Hub)下载 Chart,并根据 values.yaml 文件中的配置生成最终的 K8s 资源清单,然后提交到 K8s 集群。

离线部署的核心在于如何解决 Chart 的获取和镜像的导入问题。我们需要手动下载 Chart,并将 Chart 中引用的镜像下载并导入到离线环境的镜像仓库中。

解决方案:离线部署 Consul v1.21.2 的详细步骤

1. 下载 Consul Chart 和所需镜像

首先,在可以连接外网的环境中,下载 Consul 的 Helm Chart。你可以从 HashiCorp 的 Helm Chart 仓库下载指定版本(v1.21.2)的 Chart 包。

K8s 离线环境福音:Helm 部署 Consul v1.21.2 超详细指南
helm pull hashicorp/consul --version 1.21.2 --untar

接下来,检查 Chart.yaml 文件,确定 Chart 依赖的镜像。使用以下命令查看Chart依赖的镜像:

cat consul/Chart.yaml | grep image:

或者可以通过values.yaml文件中找到镜像相关配置,一般位于image, imageK8S, connectInject.image等字段。 例如,你可能会发现需要下载 consul:1.16.1, hashicorp/consul-k8s-control-plane:1.7.1, hashicorp/consul-k8s-sync-mesh:0.12.1等镜像。使用 docker pull 命令下载这些镜像:

docker pull consul:1.16.1
docker pull hashicorp/consul-k8s-control-plane:1.7.1
docker pull hashicorp/consul-k8s-sync-mesh:0.12.1

然后,将镜像保存为 tar 文件:

K8s 离线环境福音:Helm 部署 Consul v1.21.2 超详细指南
docker save consul:1.16.1 -o consul_1.16.1.tar
docker save hashicorp/consul-k8s-control-plane:1.7.1 -o consul-k8s-control-plane_1.7.1.tar
docker save hashicorp/consul-k8s-sync-mesh:0.12.1 -o consul-k8s-sync-mesh_0.12.1.tar

2. 将 Chart 和镜像传输到离线环境

将下载的 Consul Chart 包(consul-1.21.2.tgz)和所有镜像的 tar 文件通过 U 盘、光盘等方式传输到离线环境。

3. 在离线环境中导入镜像

在离线环境的 Docker 宿主机上,使用 docker load 命令导入镜像:

docker load -i consul_1.16.1.tar
docker load -i consul-k8s-control-plane_1.7.1.tar
docker load -i consul-k8s-sync-mesh_0.12.1.tar

确认镜像已经成功导入:

K8s 离线环境福音:Helm 部署 Consul v1.21.2 超详细指南
docker images

4. 修改 Chart 的 values.yaml 文件

解压 Consul Chart 包:

tar -zxvf consul-1.21.2.tgz
cd consul

修改 values.yaml 文件,确保镜像名称和标签与你导入的镜像一致。例如,如果你的镜像仓库有私有域名,你需要修改 image 字段,将 consul 修改为 <your_private_registry>/consul。对于 hashicorp/consul-k8s-control-planehashicorp/consul-k8s-sync-mesh 同理,也需要修改为带有私有域名的完整镜像地址。

注意: 如果你的私有镜像仓库需要认证,还需要配置 imagePullSecrets

K8s 离线环境福音:Helm 部署 Consul v1.21.2 超详细指南
  imagePullSecrets:
    - name: regcred #  k8s secret 的名称,用于访问私有镜像仓库

你需要先创建这个 Secret:

kubectl create secret docker-registry regcred \
  --docker-server=<your_private_registry> \
  --docker-username=<your_username> \
  --docker-password=<your_password> \
  --docker-email=<your_email>

5. 部署 Consul

使用 Helm 命令安装 Consul。由于是离线环境,我们需要指定 Chart 的本地路径:

helm install consul ./ --namespace consul-system --create-namespace

其中,consul 是 Release 的名称,./ 指定了 Chart 的本地路径,--namespace consul-system 指定了部署的 Namespace,--create-namespace 表示如果 Namespace 不存在则创建。

6. 验证 Consul 是否成功部署

使用 kubectl 命令查看 Consul 的 Pod 状态:

kubectl get pods -n consul-system

如果所有 Pod 都处于 Running 状态,则说明 Consul 已经成功部署。你还可以通过 kubectl exec 命令进入 Consul Server 的 Pod 中,使用 consul members 命令查看 Consul 集群的成员信息。

实战避坑经验总结

  • 镜像版本一致性: 务必确保 values.yaml 文件中配置的镜像版本与你导入的镜像版本完全一致,否则会导致 K8s 无法拉取镜像。
  • 私有镜像仓库配置: 如果使用私有镜像仓库,务必正确配置 imagePullSecrets,否则 K8s 无法访问私有镜像。
  • 网络策略: 在离线环境中,可能存在网络策略限制,需要确保 Consul 的各个组件之间可以互相访问。例如,Consul Server 之间需要通过 8300、8301、8302 端口进行通信。
  • 资源限制: 根据实际情况,合理配置 Consul 的资源限制(CPU、内存),避免资源不足导致 Consul 运行不稳定。
  • 存储: consul 需要持久化存储数据,确保配置了正确的 storageClass。
  • Helm 版本: 不同的 helm 版本对于 Chart 的解析可能存在差异,建议使用与官方 Chart 兼容的 Helm 版本。可以使用 helm version 命令查看 Helm 的版本。

通过以上步骤,你可以在离线环境中成功部署 Consul v1.21.2。希望本文能够帮助你在复杂的环境中顺利部署 Consul,构建稳定可靠的服务网格。

K8s 离线环境福音:Helm 部署 Consul v1.21.2 超详细指南

转载请注明出处: 架构师之路

本文的链接地址: http://m.acea1.store/blog/574453.SHTML

本文最后 发布于2026-04-22 15:16:12,已经过了5天没有更新,若内容或图片 失效,请留言反馈

()
您可能对以下文章感兴趣
评论
  • 绿豆汤 1 天前
    写的太详细了!解决了离线环境部署 Consul 的大难题,感谢!
  • 摸鱼达人 2 天前
    请问一下,如果 Chart 中依赖的镜像非常多,有没有更高效的方法下载和导入镜像?比如自动化的脚本?
  • 冬天里的一把火 1 天前
    请问一下,如果 Chart 中依赖的镜像非常多,有没有更高效的方法下载和导入镜像?比如自动化的脚本?