Kubernetes 学习笔记 - rancher

2022-01-18
2分钟阅读时长

rancher 简介

Rancher是一个开源的企业级容器管理平台。Logo是一头公牛,其中各组件更是以 cattle (公牛)等单词开头,将容器集群比喻一头头的公牛,Rancher 正是对这“公牛”的管理者、放牧者。

Rancher 是由 RancherLabs 维护的,他们主要通过提供Rancher企业订阅服务和容器解决方案为主要业务。旗下产品还有 k3s、RKE/RKE2、Longhorn 等。

2020年底, RancherLabs 加入 SUSE ,能想到的在技术和资金方面必将迎来新的机会。更多 RancherLabs 的历史可看起官网

目前这个时间点,构建一套生产可用的容器平台已经变得非常容易,大致有如下几种方案:

  • 团队技术敦实,自己维护一套k8s集群。
  • 团队技术稍弱,使用云厂商提供的容器托管服务,其中又有好几中姿势,局部托管、全部托管等。国内的像是阿里云的ACK、腾讯的TKE等,国外的Google GKE、Aws EKS 等都能满足我们的需求。

针对多机房、夸区域的容器调度,目前主流方案还是部署多套集群,简单粗暴。这样便迎来的新的问题痛点「多集群的管理」,容器中的各种复杂资源都需要集中管理。Rancher 就是解决这个问题的。

Rancher 有哪些优势?官方自己的说辞,Why Rancher?。大致集中在关键字:多集群管理、混合多云、集中式应用管理(基于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-architecture

Rancher 文档还算比较友好,比较全面。中文文档稍微滞后,只更新到 2.5,最新版 2.6 可参考英文文档。

Rancher 中文文档:https://docs.rancher.cn/

Rancher 英文文档:https://rancher.com/docs/

搭建

下面我们根据官方最佳实践来演示下搭建一套 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

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 -

通过下面命令看下集群情况。

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

卸载

卸载很简单,安装后会自动部署卸载脚本:

  • 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 

绑定 hosts ,或者在 dns 服务器配置解析:

192.168.1.142 rancher.pylixm.top

浏览器访问输入 rancher.pylixm.top 可看到如下界面:

image

输入密码, 可继续配置。

image

可自定义密码和配置 UI 访问域名。

确定后即可进入使用界面:

image

dashboard 界面为集群管理界面,点击集群可进入集群面板,集群中的各种资源都可以通过 UI 来操作完成。

安装完 Rancher 之后,内部会有一个 local 的集群,默认是安装 Rancher 的集群。我们可以将生产机器导入进 UI 进行管理,也可以通过 UI 创建。

总结

Rancher 解决了现阶段多集群管理的问题,大部分操作都可以通过 UI 来实现,即使不满足我们的需求,我们可以通过下载对应的 Helm 包修改配置来自定义实现。

本文主要阐述了我们选用 Rancher 的一些考虑点,和构建 Rancher 的一些记录,希望对大家有帮助。这段时间的 Rancher 使用,也遇到了一些问题,之后会总结下,再分享给大家,感兴趣的朋友可以关注下。