Kubernetes 学习笔记 - rancher
# rancher 简介
Rancher是一个开源的企业级容器管理平台。Logo是一头公牛,其中各组件更是以 cattle (公牛)等单词开头,将容器集群比喻一头头的公牛,Rancher 正是对这“公牛”的管理者、放牧者。
Rancher 是由 RancherLabs 维护的,他们主要通过提供Rancher企业订阅服务和容器解决方案为主要业务。旗下产品还有 k3s、RKE/RKE2、Longhorn 等。
2020年底, RancherLabs 加入 SUSE ,能想到的在技术和资金方面必将迎来新的机会。更多 RancherLabs 的历史可看起官网 (opens new window)。
目前这个时间点,构建一套生产可用的容器平台已经变得非常容易,大致有如下几种方案:
- 团队技术敦实,自己维护一套k8s集群。
- 团队技术稍弱,使用云厂商提供的容器托管服务,其中又有好几中姿势,局部托管、全部托管等。国内的像是阿里云的ACK、腾讯的TKE等,国外的Google GKE、Aws EKS 等都能满足我们的需求。
针对多机房、夸区域的容器调度,目前主流方案还是部署多套集群,简单粗暴。这样便迎来的新的问题痛点「多集群的管理」,容器中的各种复杂资源都需要集中管理。Rancher 就是解决这个问题的。
Rancher 有哪些优势?官方自己的说辞,Why Rancher? (opens new window)。大致集中在关键字:多集群管理、混合多云、集中式应用管理(基于helm+operator)、基于Fleet的多集群Devops、一致的安全策略。
说下我们目前选用它的一些考虑因素吧:
- 多集群管理,我们设备分布在多云,物理IDC也有部分机器,要容器化的话,首选多集群方案。使用它可以方便的实现多集群集中管理。
- 基于Helm + operater + Fleet 的应用管理,可通过它自带的UI,简单方便的安装像 Prometheus等扩展必备应用组件。
- Rancher UI ,极大的方便了对容器的操作,从此不再当 YAML 工程师。
- 对多种下游集群容器方案的支持,自建K3S、K8S和主流云厂商容器平台均支持。
说了这么多,选用它的最重要的原因还是满足了当前我们团队的需求。
主要组件为 Rancher Server 和 Rancher Agent。Server 自带一个UI 页面,agent 可通过UI页面导入已存在的k8s集群的方式安装,也可以通过UI从无到有的创建的一个 k8s 集群。
架构大致如下:
Rancher 文档还算比较友好,比较全面。中文文档稍微滞后,只更新到 2.5,最新版 2.6 可参考英文文档。
Rancher 中文文档:https://docs.rancher.cn/
Rancher 英文文档:https://rancher.com/docs/
# 搭建
下面我们根据官方最佳实践 (opens new window)来演示下搭建一套 Rancher 的整个过程和注意事项,希望对你有帮助。
关于部署,官方推荐使用单独的容器机器来运行 Rancher,不要和业务集群混用。仔细想来,这样虽然浪费了部分资源,但是 Rancher本身的可用性和业务的便解耦了,不会相互影响,进一步提高了可用性。
我们准备如下,一个2节点的 k3s 用来运行 Rancher, 一个3节点的 k8s 用来部署业务服务测试,下面开整。
# K3S 集群安装
Master 节点安装
curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn \
INSTALL_K3S_VERSION=v1.20.12+k3s1 \
sh -s - server \
--datastore-endpoint='mysql://root:111111@tcp(192.168.1.10:3306)/k3s'
journalctl -xe -f -u k3s.service
2
3
4
5
6
Agent 节点安装
# 在master上执行获取token
cat /var/lib/rancher/k3s/server/node-token
K100b57ce8c11d04cdd80b198d4c9eb62631f8ea0466fcaac6ab486692318f47ecd::server:d0e7510c24553755c4b9a31cd1937d54
# agent节点执行安装
curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn \
K3S_TOKEN='K100b57ce8c11d04cdd80b198d4c9eb62631f8ea0466fcaac6ab486692318f47ecd::server:d0e7510c24553755c4b9a31cd1937d54' \
INSTALL_K3S_VERSION=v1.20.12+k3s1 \
K3S_URL=https://192.168.1.142:6443 sh -
2
3
4
5
6
7
8
9
通过下面命令看下集群情况。
root@k3s-ubuntu20-m1:~# kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
k3s-ubuntu20-m1 Ready,SchedulingDisabled control-plane,master 25d v1.20.8+k3s1 192.168.1.142 <none> Ubuntu 20.04.3 LTS 5.4.0-89-generic containerd://1.4.4-k3s1
k3s-ubuntu20-node1 Ready <none> 25d v1.20.8+k3s1 192.168.1.143 <none> Ubuntu 20.04.3 LTS 5.4.0-91-generic containerd://1.4.4-k3s1
2
3
4
卸载
卸载很简单,安装后会自动部署卸载脚本:
- Master 使用如下脚本卸载:
/usr/local/bin/k3s-uninstall.sh
- Agent 使用如下脚本卸载:
/usr/local/bin/k3s-agent-uninstall.sh
# 安装 Rancher
我们这里使用 helm 安装,其他安装方式可参考官方文档。
# 使用自签证书 *.pylixm.top 主要用来 ingress 域名使用
kubectl create ns cattle-system
kubectl \
-n cattle-system create secret tls tls-rancher-ingress \
--cert=./tls.crt \
--key=./tls.key
# 添加rancher helm repository
helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
helm repo update
# 对配置修改的话,需要将仓库Char文件下载到本地
helm pull rancher-stable/rancher --version=v2.6.2
# helm uninstall rancher -n cattle-system
helm install rancher rancher-stable/rancher \
--namespace cattle-system \
--set hostname=rancher.pylixm.top \
--set replicas=2 \
--version 2.6.2 \
--set ingress.tls.source=tls-rancher-ingress
# 升级
helm upgrade rancher rancher-stable/rancher \
--namespace cattle-system \
--set hostname=rancher.pylixm.top \
--set replicas=3 \
--version 2.6.2 \
--set ingress.tls.source=tls-rancher-ingress
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
绑定 hosts ,或者在 dns 服务器配置解析:
192.168.1.142 rancher.pylixm.top
浏览器访问输入 rancher.pylixm.top 可看到如下界面:
输入密码, 可继续配置。
可自定义密码和配置 UI 访问域名。
确定后即可进入使用界面:
dashboard 界面为集群管理界面,点击集群可进入集群面板,集群中的各种资源都可以通过 UI 来操作完成。
安装完 Rancher 之后,内部会有一个 local 的集群,默认是安装 Rancher 的集群。我们可以将生产机器导入进 UI 进行管理,也可以通过 UI 创建。
# 总结
Rancher 解决了现阶段多集群管理的问题,大部分操作都可以通过 UI 来实现,即使不满足我们的需求,我们可以通过下载对应的 Helm 包修改配置来自定义实现。
本文主要阐述了我们选用 Rancher 的一些考虑点,和构建 Rancher 的一些记录,希望对大家有帮助。这段时间的 Rancher 使用,也遇到了一些问题,之后会总结下,再分享给大家,感兴趣的朋友可以关注下。