博主头像

人間になりたい!!!!!


皖ICP备2025096275号

K3s 专题向研究 ep4: 部署 Rancher 集群管理平台

前言

随着业务量的上涨与集群节点的增加, 我们使用 kubectl 命令行工具进行运维会逐渐变得困难, 并且也无法实时监测到每个节点的实时状态. 这时, 一套好用的图形化监控与运维工具就成为了我们的刚需. 这篇文章将会详细描述 Kubernets 图形化运维工具 Rancher 的搭建与配置过程

本文章同样适用于 K8s

配置需求

  • 可运行的 K3s/K8s Master 节点与至少一个 Worker 节点

开整

安装 Helm

Helm 是一个为 Kubernets 开发的包管理器, 它简化了应用的部署与管理. 它使用 Helm charts, 这是一个定义了 Kubernets 资源分配的 YAML 文件, 为自动化的安装, 升级, 管理 Kubernets 集群应用程序而生.

个人翻译, 有错见谅, 原文如下:
Helm is a package manager for Kubernetes that simplifies the deployment and management of applications. It uses Helm charts, which are collections of YAML files that define Kubernetes resources, to automate the process of installing, upgrading, and managing applications in a Kubernetes cluster.
  • 安装 Helm 软件源与 GPG Key

    sudo apt-get install curl gpg apt-transport-https --yes
    curl -fsSL https://packages.buildkite.com/helm-linux/helm-debian/gpgkey | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null
    echo "deb [signed-by=/usr/share/keyrings/helm.gpg] https://packages.buildkite.com/helm-linux/helm-debian/any/ any main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
  • 更新软件源并安装 Helm

    可能需要科学上网
    sudo apt update
    sudo apt install helm

安装 cert-manager

可以在 这里 看到 Rancher 的支持平台与配置需求
  • 添加 Rancher 软件源

    helm repo add rancher-latest https://releases.rancher.com/server-charts/latest
  • 在 Kubernets 中创建 Rancher 的 namespace

    kubectl create namespace cattle-system
  • 添加 cert-manager 清单文件

    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/<VERSION>/cert-manager.crds.yaml
    VERSION Github 上的版本 Tag, 需要您自己填写
  • 添加 jetstack 软件源

    helm repo add jetstack https://charts.jetstack.io
  • 更新软件源

    helm repo update
  • 安装 cert-manager

    helm install cert-manager jetstack/cert-manager \
    --namespace cert-manager \
    --create-namespace

注: 如果您在安装过程中碰到报错 Error: INSTALLATION FAILED: Kubernetes cluster unreachable: Get "http://localhost:8080/version": dial tcp [::1]:8080: connect: connection refused, 则您需要按照如下步骤进行配置
Q. 为什么会报错?
A. helm v3 版本不再需要 Tiller, 而是直接访问 ApiServer 来与 k8s 交互,通过环境变量 KUBECONFIG 来读取存有 ApiServre 的地址与 token 的配置文件地址, 默认地址为 ~/.kube/config *转自 CSDN

  • 修改 /etc/profile

    vim /etc/profile

    在开头处写入内容 export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
    保存并执行

    souce /etc/profile
  • 执行完成后, 再次尝试运行安装命令, 这次应当没有报错.

如果先前有安装失败的记录, 那么重新安装可能会遇到报错 Error: INSTALLATION FAILED: cannot re-use a name that is still in use, 此时删除对应的 Secret 即可

helm -n {namespace} delete cert-manager
kubectl delete secrets -n cert-manager -l owner=helm,name=cert-manager

如果在安装时遇到了错误

Error: INSTALLATION FAILED: failed post-install: 1 error occurred:
      * timed out waiting for the condition

则是因为 cert-manager 在安装时会创建一个 Job (startupapicheck) 来校验 webhook 是否正常工作. 该校验会向 API Server 发送一个测试请求, 触发 webhook 调用, 但此时的 Webhook 配置中 caBundle 还没有被 cert-manager 的 controller 及时填上 (或者使用的是旧的/无效的 CA), 导致 API Server 连接 webhook 时证书不信任, TLS 握手失败, Job 一直重试直至 Helm 超时.
修复方法如下:

  • 获取 CA 证书

    kubectl get secret cert-manager-webhook-ca -n cert-manager -o jsonpath='{.data.ca\.crt}' | base64 -d
  • 给两个 Webhook 注入证书

    CA_BUNDLE=$(kubectl get secret cert-manager-webhook-ca -n cert-manager -o jsonpath='{.data.ca\.crt}')
    
    kubectl patch mutatingwebhookconfiguration cert-manager-webhook --type='json' \
    -p="[{'op': 'replace', 'path': '/webhooks/0/clientConfig/caBundle', 'value':'${CA_BUNDLE}'}]"
    
    kubectl patch validatingwebhookconfiguration cert-manager-webhook --type='json' \
    -p="[{'op': 'replace', 'path': '/webhooks/0/clientConfig/caBundle', 'value':'${CA_BUNDLE}'}]"

    如果有多个 Webhook, 还可以使用循环来依次注入

    for wh in mutatingwebhookconfiguration cert-manager-webhook validatingwebhookconfiguration cert-manager-webhook; do
      kubectl get $wh -o json | jq '.webhooks[].clientConfig.caBundle = "'${CA_BUNDLE}'"' | kubectl apply -f -
    done

    此时再次进行安装, 就不会再次出现该问题了

安装 Rancher

  • 使用以下命令安装 Rancher

    helm install rancher rancher-latest/rancher \
    --namespace cattle-system \
    --set hostname=<hostname> \
    --set replicas=1 \
    --set bootstrapPassword=<PASSWORD_FOR_RANCHER_ADMIN>
    • hostname 是 Ingress 监听的目标地址. 这条配置对应的是 Ingress 配置中的 host 如果这是部署在生产环境中的, 请务必将其设置为服务器域名或反向代理的目标域名.
    • PASSWORD_FOR_RANCHER_ADMIN 是 Rancher 管理员的密码, 需要您自行设置, 长度至少为 12 个字符

如果您的 Pod 状态处于 ImagePullBackOff, 则很可能是镜像拉取失败了. 您可以按照以下操作为 Rancher 配置镜像

  • Master:

    cat <<EOF > /etc/rancher/k3s/registries.yaml
    mirrors:
    docker.io:
     endpoint:
        - "https://docker.m.daocloud.io"
    quay.io:
      endpoint:
        - "https://quay.m.daocloud.io"
    EOF
    systemctl restart k3s
  • Worker:

    mkdir /etc/rancher/k3s
    cat <<EOF > /etc/rancher/k3s/registries.yaml
    mirrors:
    docker.io:
     endpoint:
        - "https://docker.m.daocloud.io"
    quay.io:
      endpoint:
        - "https://quay.m.daocloud.io"
    EOF
    systemctl restart k3s-agent

    执行完成后, 镜像拉取应该会正常

如果没有报错, 并且使用绑定的域名可以访问到 Rancher 控制台, 那么配置到此结束.

如果您不想让 Ingress 去管理反向代理, 而想使用外部的反向代理工具 (Nginx, openresty 等) 去负责反代和负载均衡, 或者您想直接使用 IP 地址: 端口的形式去进行访问, 则可以接着看下去.

暴露相关端口

Rancher 安装后默认的策略是 ClusterIP, 这种策略是无法被外部所访问的, 只能在集群内访问. 如果想使用外部的反向代理工具, 则需要将策略改为 NodePort, 并配置持久化

  • 导出配置清单

    helm get values rancher -n cattle-system -o yaml > rancher-values.yaml
  • 进入清单文件, 在文件末尾添加这些参数

    service:
    type: NodePort
    ports:
      https:
        nodePort: <httpsPort>
      http:
        nodePort: <httpPort>
    • httpsPort https 服务器对外暴露的端口
    • httpPort http 服务器对外暴露的端口
  • 保存后, 升级 Rancher, 应用新配置

    helm upgrade rancher rancher-latest/rancher \
    -n cattle-system \
    -f rancher-values.yaml
  • 配置完成后, 使用您设置的地址在浏览器中访问, 如果能顺利进入到 Rancher 的初始化页面, 并输入您设置的默认密码进入主页, 则配置完成
    Rancher
    Rancher

结语

  • 本人非专业 Kubernets 运维人员, 如有疏漏或错误, 还请指出!
  • 如果觉得文章有帮助, 还请分享给有需要的人, 感谢!
K3s 专题向研究 ep4: 部署 Rancher 集群管理平台
https://blog.nanami.tech/archives/283/
本文作者 Madobi Nanami
发布时间 2026-04-20
许可协议 CC BY-NC-SA 4.0
发表新评论