本文提供Rancher和Kuberentes快速安装的步骤和国内镜像仓库配置,并介绍Rancher单机原理,配置Keycloak提供SSO统一登录,并提供在线环境开放学习体验。
主要包含以下内容:
基于藏云阁镜像仓库快速部署Rancher和K8s集群
Rancher 单机安装的原理
配置Keycloak提供SSO统一登录
免费开放的在线Rancher体验服务
Rancher是一个开源的企业级Kubernetes容器管理平台,它旨在简化容器的运营,满足企业在多云、混合云环境下的Kubernetes集群管理、安全管控、DevOps与应用交付等需求。
特别是对于中小企业,Rancher可以快速、轻松地部署Kubernetes集群,并管理容器应用,实现低成本高质量的云原生化业务基础设施建设。
基于市场报告显示,在云原生领域,即使在国产化背景下,Rancher任然是非常流行的容器云管理平台。
公众号发送【2024云报告】,获取完整的 《2024年中国基础云服务行业发展洞察报告》PDF 文档

国内用户使用 Rancher 最大痛点就是 Docker Hub 镜像仓库无法访问,无法拉取镜像。
官方在每个进行版本发布时会提供一个镜像列表,如 v2.12.3/rancher-images.txt[1] 有 553 个镜像,并且提供提供对应的镜像收集导入导出的脚本工具,但这在实际使用时还是会带来很大的不便。

藏云阁镜像仓库同步了 v2.12.3 版本所有的镜像,其他版本也在同步中。
在进行安装部署时,通过添加 k8s-registries.yaml 配置来配置镜像仓库,并在容器启动时添加几个REGISTRY的环境变量,都指向 harbor.cncfstack.com 即可。
其中 k8s-registries.yaml 是部署 Kubernetes 集群时使用的镜像仓库,内容如下:
# cat config/k8s-registries.yamlmirrors: docker.io: endpoint: - "https://harbor.cncfstack.com"
官方提供的 docker run 的方式启动,我习惯使用 docker compose 来管理单机的容器,这样可以方便的管理相关配置。
启动的 docker-compose.yaml 文件如下:
services: rancher: image: harbor.cncfstack.com/rancher/rancher:v2.12.3 container_name: rancher privileged: true environment: - CATTLE_SYSTEM_DEFAULT_REGISTRY=harbor.cncfstack.com - CATTLE_SYSTEM_CATALOG=bundled # 设置rancher管理平台页面中注册中心配置 - CATTLE_BASE_REGISTRY=harbor.cncfstack.com - CATTLE_CLUSTER_REGISTRY=harbor.cncfstack.com - CATTLE_BOOTSTRAP_PASSWORD=PASSWORD # 第一次安装成功时让确认的的访问地址 - CATTLE_SERVER_URL=https://rancher.cncfstack.com # 禁用虚拟化 - CATTLE_FEATURES=harvester=false - CATTLE_DEV_MODE="yes" ports: - "80:80" - "443:443" restart: always command: '--no-cacerts' volumes: - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro - ./config/k8s-registries.yaml:/etc/rancher/k3s/registries.yaml - /data/rancher/data:/var/lib/rancher - /data/rancher/logs:/var/log/pods - /YOUR/PATH/ssl/cncfstack.com_ecc/fullchain.cer:/etc/rancher/ssl/cert.pem - /YOUR/PATH/ssl/cncfstack.com_ecc/cncfstack.com.key:/etc/rancher/ssl/key.pem
在使用这个 docker-compose.yaml 时除了需要先创建一个 /data/rancher 目录外,还需要修改以下配置项:
CATTLE_BOOTSTRAP_PASSWORD:这个是部署时默认的admin登录密码,不配置时会自动生成一个
YOUR/PATH:是存放证书的目录,需要替换为你的实际证书
关于免费证书申请可以参考文章:永久免费的HTTPS/TLS通配符域名合法证书申请很简单,不要再自签证书啦[最佳实践]
文件启动容器后,访问 https://rancher.cncfstack.com 根据提示进行相关配置。登录成功后会看到如下页面:

在环境中有一个默认的Kubernetes集群(基于K3s)可以满足基本学习使用,如果需要创建新的集群,可以点击【创建】按钮,添加新的集群。
2. Rancher 单机安装的原理在上面步骤中使用 Docker 运行了单机的 Rancher 和 Kubernetes 集群,这在开发测试环境或者个人电脑上使用非常方便,但是生产环境强烈建议使用 HelmChart 的方式部署高可用的 Rancher 集群。
在宿主机上 docker ps 实际只能看到一个容器
# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES4f010bc232a1 harbor.cncfstack.com/rancher/rancher:v2.12.3 "entrypoint.sh --no-…" 6 days ago Up 6 days 0.0.0.0:80->80/tcp, [::]:80->80/tcp, 0.0.0.0:443->443/tcp, [::]:443->443/tcp rancher
只有1个容器是怎么运行一套完整的 Kuberentes 集群的呢?这就需要用到一种技术叫 DIND(docker-in-docker),可以参考这篇文章《容器嵌套,降本增效(Docker-in-Docker 三类解决方案)》
我们可以通过 Linux 命令 ps auxf 命令查看系统进程树结构,如下图

从图中可以看出最外层 moby 进程就是 docker ps 看到的 rancher 容器。
在 rancher 容器内运行了 tini 来作为主进程进行管理,然后运行了 k3s 来启动 Kubernetes 集群,k3s 内启动了etcd、kube-apiserver、kube-controller-manager、kube-scheduler等组件,所以在进程中只能看到一个 k3s server进程。然后启动了 CoreDNS等模块来运行完整的 Kubernetes 集群。
在集群中使用的是 Containerd 运行时,在 rancher 容器无法使用 docker 命令,但可以使用 ctr 命令来管理容器。
比如查看容器列表
root@iv-ydsh9dfsdadsht8f2:~# docker exec -it rancher /bin/bashbash-4.4# ctr container lsCONTAINER IMAGE RUNTIME01972be55ba87e0fd4752c3bf7a36f6badfff1f215ed8b743b8d516d575fc93f harbor.cncfstack.com/rancher/fleet:v0.13.4 io.containerd.runc.v202608d50bd8aa3a2c6c0bccca5f8aa2731a47dc27826e4613de963c472a2e1d6 harbor.cncfstack.com/rancher/fleet:v0.13.4 io.containerd.runc.v207b75ae86f69d2c7c142ed8dd1e843056422d54ac44b835f241149ac2664c321 docker.io/rancher/mirrored-pause:3.6 io.containerd.runc.v218e0efc634bff32f4a433106e32f0bd02b5b4658541f44b09e07c9a75c03def5 harbor.cncfstack.com/rancher/fleet:v0.13.4 io.containerd.runc.v23578de9e0f96e88e6424f27ccde19a0c1959516d3b1ca92aa352a6f183c08133 harbor.cncfstack.com/rancher/rancher-agent:v2.12.3 io.containerd.runc.v23ffd9f6f1d16e5340d6ccdc1b596e82278b550ab6405152dcdc12b991e32ac02 docker.io/rancher/mirrored-pause:3.6 io.containerd.runc.v24d6837a603d5a1f72910183bed354523960a7100d21230d0f93bb9c48838aea7 harbor.cncfstack.com/rancher/fleet:v0.13.4 io.containerd.runc.v25c3825958f248e35f5e50d8b1f1fccaa2fc14730fddf971cd23bcc90fe8c63b8 docker.io/rancher/mirrored-pause:3.6 io.containerd.runc.v260a137e496cff184e0d554138a9db1cc407d5833cc60ce96ea9f8f32a5d2aa6f harbor.cncfstack.com/rancher/rancher-agent:v2.12.3 io.containerd.runc.v27b2bac750c92fd94055b0630a39dbd820bafac8286be1a3b15bc04094a758aad harbor.cncfstack.com/rancher/rancher-agent:v2.12.3 io.containerd.runc.v27e2f4335906641bdb6b902af75106dd502b1784d4624543780c4b048a02c96e8 harbor.cncfstack.com/rancher/fleet-agent:v0.13.4 io.containerd.runc.v293635facef30f4bc6854680076420a6f15661f1bf44e8c42389c92ba22634d77 harbor.cncfstack.com/rancher/fleet:v0.13.4 io.containerd.runc.v2a311aa83de6f0f03f7f99a8a0a9020e56f728358ebcba6a3c1f235ebd7493d7c harbor.cncfstack.com/rancher/mirrored-cluster-api-controller:v1.10.2 io.containerd.runc.v2a53166e00d5936043c771b2282718ab017e3d6b76096de58c1836fc89cee3526 harbor.cncfstack.com/rancher/remotedialer-proxy:v0.5.0 io.containerd.runc.v2ad3e171cc1affbf29d29a3dc2d851b6c2914fde8a98fa257cebfe4b0e7d50f5f docker.io/rancher/mirrored-pause:3.6 io.containerd.runc.v2b2b8d9bccbb06a6f397e11c185e2a46efcb9936f2247b267adf74ae81969225a harbor.cncfstack.com/rancher/system-upgrade-controller:v0.16.3 io.containerd.runc.v2c4d42ce2956edf9b4c9bb299183999ffc150075bbb33c2177c0df630b3c8cabb docker.io/rancher/mirrored-pause:3.6 io.containerd.runc.v2ce008011c92d12b8fdd6853b54cc4d35da0d3fc41257542a932e1b169168fc16 docker.io/rancher/mirrored-pause:3.6 io.containerd.runc.v2d7017e579bdbd3139cbcb00287ee7393290fe1e64709de3d86e6156e025563e3 docker.io/rancher/mirrored-pause:3.6 io.containerd.runc.v2db8d723d8b545d5eee11f71b7cd67ebdf8b51039f09800c1570281ff21d5e8f2 docker.io/rancher/mirrored-pause:3.6 io.containerd.runc.v2ea4d1d59374fb8b6bcf005043bb60a5ac346325850d3221a1f5a8dddfe3f3680 docker.io/rancher/mirrored-pause:3.6 io.containerd.runc.v2ed70a01fd7efc92ba9476dee0385486b93d5353dc16a8aee7bc82d42bfb00414 docker.io/rancher/mirrored-pause:3.6 io.containerd.runc.v2eea4dca040afb1cd67050fcbbeffd02c525a123ad7aae50c41dfa2df61b74331 harbor.cncfstack.com/rancher/rancher-webhook:v0.8.3 io.containerd.runc.v2fbda39d7f6932adf64c827b8518be1feb03cadab4928795cd199621629008c89 docker.io/rancher/mirrored-pause:3.6 io.containerd.runc.v2fec0d4d2a96967804303d3d072d654a2c57498ed3810f8875c8297555789a014 docker.io/rancher/mirrored-coredns-coredns:1.12.1 io.containerd.runc.v2ffa46d8782fc47d0f35986d500803de58beb45f6c230a77c7cdc841c5c58f8aa docker.io/rancher/mirrored-pause:3.6 io.containerd.runc.v2
3. 配置Keycloak提供SSO统一登录SSO登录可以统一管理用户的账号信息,给 Rancher 配置 Keycloak 登录主要分为以下几步
3.1. 在 Keycloak 中创建一个 Rancher 客户端
3.2. 在 Rancher 中配置 Keycloak
3.3. 在 Keycloak 配置 Rancher 回调地址
3.1. 在 Keycloak 中创建一个 Rancher 客户端在 Keycloak 中新建一个客户端,如定义客户端ID为 rancher。 对于有效的重定向 URI 可以直接根据域名来拼接填写,也可以在 Rancher 中配置配置过程中看到这个回调地址,后面步骤回再次说明。

除了基本信息,还需要开启"功能配置"中的客户端认证。

创建客户端后,会生成一个 Secret,请保存好。
3.2. 在 Rancher 中配置 Keycloak在 Rancher 中找到 用户-> 认证-> Keycloak(OIDC)

在详细配置页面主要填写如下配置

客户端ID:与 Keyclaok 中的ID一致 (如rancher)
客户端Secret:在 Keycloak 的客户端的凭证中查看
端点URL:是 Keycloak的默认地址(如https://keycloak.cncfstack.com)
Realm: 是 Keycloak 中管理的多租户,默认为 master,我这里为 cs
然后保存配置。
3.3. 在 Keycloak 配置 Rancher 回调地址在 Rancher 中填写配置时或者在创建成功后回提示回调地址,如 https://rancher.cncfstack.com/verify-auth
将这个地址填写到 Keycloak 的客户端配置中,即 步骤 3.1 中填写的回调地址。
然后就可以基于 SSO 登录进行登录。
在线体验藏云阁官方提供了在线的 Rancher 体验服务,地址为 https://rancher.cncfstack.com 。
该环境使用SSO统一登录,你可以用于学习 Rancher 和 Kuberentes 使用。
注意:由于环境资源有限,环境不定期会重置,将会清空所有数据,请勿保存重要数据。
引用链接[1] v2.12.3/rancher-images.txt: https://github.com/rancher/rancher/releases/download/v2.12.3/rancher-images.txt