RKE2 HA 安装

Rancher宣称 RKE2 结合了 RKE1 和 K3s 的双重优点

它继承了K3s的可用性、易操作性和部署模型,同时兼顾了RKE1对传传统kubernetes的一致性,兼顾边缘系统

但是对于我来说,想了解RKE2 只有一个原因,Kubernetes已经宣称要开始移除 Dockershim,所以像RKE1那种使用Docker来作为运行时的工具,可能在(也许很久)将来要被淹没在历史的长河中了。

RKE2 与 K3s 一样,默认使用的是 Containerd ,完全脱离了原生的 Docker

不过可能是因为习惯了RKE1,这里我觉得RKE2 和 K3s 的模式有点难于应用

RKE1 的模式是,使用一个配置文件,然后创建和更新整个集群,更像是 生命式接口

RKE2 和 K3s 的模式是,在每个节点上使用独立的 service 来启动需要的kubernetes组件来加入集群,更像是 命令式接口

下面是一个RKE2 的例子 (这里demo我参考了官方安装文档,但是实际上,官方文档并不能让我的节点顺利的加入集群,所以我做了很多官方文档没有的步骤,理论上官方文档认为只要连接到9345,就可以动态的获取其他需要的配置,但是这里我需要手动进行一些KUBECONFIG的配置才能顺利加入集群)

  1. Master 节点

先启动第一个Master节点

1.1 配置 DNS,RKE2 的API Server 在高可用模型下需要一个用户自己配置的,额外的负载均衡器,下面这几种都可以,当然最简单的还是 robin DNS,不过需要注意的是 Nginx 好像是不行,因为明显官方给出的这几种LB都是至少要工作在第四层上的 TCP IP 负载均衡器,也就是 AWS的 NLB

  • A layer 4 (TCP) load balancer
  • Round-robin DNS
  • Virtual or elastic IP addresses

1.1 这里我没有配置LB,我只使用一个 本地DNS

/etc/hosts
  192.168.204.145	ubuntu1

1.2 给节点一个唯一的hostname

/etc/hostname
  ubuntu1

1.3 创建 config.yaml

如果不自己填写token,RKE2 会自己在/var/lib/rancher/rke2/server/node-token创建一个,不过由于它不能自己配置config.yaml ,所以你得在安装之后自己把值拷贝过来

root@ubuntu1:/var/lib/rancher/rke2/bin# cat /etc/rancher/rke2/config.yaml
token: my-shared-secret
tls-san:
  - ubuntu1

1.4 在Master节点1上安装RKE2

curl -sfL https://get.rke2.io | sh -

1.5 创建开机启动service,并且现在就启动它

systemctl enable rke2-server.service
systemctl start rke2-server.service

1.6 查看log,等待启动成功

journalctl -u rke2-server -f

类似下面的截图,但是我这里已经有3个master节点了

1.7 此时RKE2 会生成 kubeconfig 配置文件,把它加入到profile中,以便所有用户都可以使用它

/etc/profile
  export KUBECONFIG=/etc/rancher/rke2/rke2.yaml

export KUBECONFIG=/etc/rancher/rke2/rke2.yaml PATH=$PATH:/var/lib/rancher/rke2/bin

1.8 检查节点状态

RKE2 会在 /var/lib/rancher/rke2/bin 路径下生成一些常用的可执行文件

这里你应该只能看见一个节点

2. Master 节点2 和节点3

后续Master节点的配置是一样的,主要区别在于,它们不是第一个节点,所以需要明确第一个主节点的Endpoint

2.1 同样需要在 Master节点2 和 Master 节点3 上配置 本地DNS

/etc/hosts
  192.168.204.145	ubuntu1

2.2 给节点一个唯一的hostname

/etc/hostname
  ubuntu2
/etc/hostname
  ubuntu3

2.3 创建 config.yaml

这里和第一个Master节点开始有些区别了

需要加入 server 9345 的地址 和 Master1 的 token

root@ubuntu2:~# cat /etc/rancher/rke2/config.yaml
server: https://ubuntu1:9345
token: my-shared-secret
tls-san:
  - ubuntu1
root@ubuntu2:~# 

2.4 在Master节点2、3上安装RKE2

curl -sfL https://get.rke2.io | sh -

2.5 创建开机启动service,并且现在就启动它

systemctl enable rke2-server.service
systemctl start rke2-server.service

2.6 查看log,这里我的理解是,只要能连接到 9345 , Master2和Master3应该自动获取对应的配置信息,加入集群,但是我失败了,两个master节点迟迟无法join

journalctl -u rke2-server -f

2.7 拷贝Master节点1的 KUBECOFIG文件内容到 Master2和Master3,并且修改它们的 /etc/profile

/etc/profile
  export KUBECONFIG=/etc/rancher/rke2/rke2.yaml

2.8 重新启动rke service,并检查节点状态

journalctl -u rke2-server -f

多等待一会,就可以看到节点成功加入集群了

3. 添加 slave节点

3.1 配置 本地DNS

/etc/hosts
  192.168.204.145	ubuntu1

3.2 给节点一个唯一的hostname

/etc/hostname
  ubuntu4

3.3 安装 RKE2

curl -sfL https://get.rke2.io | INSTALL_RKE2_TYPE="agent" sh -

3.4 修改config

mkdir -p /etc/rancher/rke2/
vim /etc/rancher/rke2/config.yaml

server: https://ubuntu1:9345
token: my-shared-secret 

3.5 开机启动、启动service

systemctl enable rke2-agent.service
systemctl start rke2-agent.service

3.6 查看log

journalctl -u rke2-server -f

3.7 工作节点已加入集群

以上内容写的有点乱,稍微总结一下最省事的步骤

以3个master节点为例

master1 节点上

  1. 修改 /etc/hosts , 把所有机器的域名加好
  2. 修改 /etc/hostname,确保每台主机的名字不要重复,然后重新启动主机,确保主机名生效
  3. 直接 curl -sfL https://get.rke2.io | sh – 然后等待完成
  4. systemctl enable rke2-server.service
    systemctl start rke2-server.service
    journalctl -u rke2-server -f
  5. 在 /etc/profile 中添加 环境变量
    export KUBECONFIG=/etc/rancher/rke2/rke2.yaml PATH=$PATH:/var/lib/rancher/rke2/bin
  6. 等待直到启动完成,第一个节点 ready ,使用 kubectl get nodes
  7. 查看第一个节点自动生成的 token /var/lib/rancher/rke2/server/node-token

master2 节点上

  1. 修改 /etc/hosts , 把所有机器的域名加好
  2. 修改 /etc/hostname,确保每台主机的名字不要重复,然后重新启动主机,确保主机名生效
  3. 创建新文件 /etc/rancher/rke2/config.yaml ,写入
server: https://k1.com:9345
token: K104f88542b04751fc9385eae792b5a042930c89887d64bd0b609cafe54d7d250cb::server:d8aa9cbbfcfdffa9c88bd918b4e06a0
tls-san:
  - k1.com

4. curl -sfL https://get.rke2.io | sh – 然后等待完成
5. systemctl enable rke2-server.service
systemctl start rke2-server.service
journalctl -u rke2-server -f
6. 在 /etc/profile 中添加 环境变量
export KUBECONFIG=/etc/rancher/rke2/rke2.yaml PATH=$PATH:/var/lib/rancher/rke2/bin
7. 等待直到启动完成,第一个节点 ready ,使用 kubectl get nodes

master3 节点上

完全重复 master2 的步骤

Send a Message