1. 主机环境准备

本次部署使用3台centos7主机进行,具体配置如下

主机名IP地址系统内核参数配置信息
k8s-rke2-server01192.168.141.200CentOS 7.9 x645.4.269-1.el7.elrepo.x86_644核8G
k8s-rke2-server02192.168.141.201CentOS 7.9 x645.4.269-1.el7.elrepo.x86_644核8G
k8s-rke2-server03192.168.141.202CentOS 7.9 x645.4.269-1.el7.elrepo.x86_644核8G

主机配置主要进行下面的设置:

  1. 主机名修改,dns设置,磁盘格式化,LVM分区
  2. 安装常用软件包
  3. 系统参数常见优化
  4. 安全设置:关闭selinux,设置iptables规则或者先关闭firewalld服务
  5. 网络优化与防火墙设置

1.1 主机初始化

磁盘格式化,LVM分区,这些就不再写了。有大量的参考文档。

主机名修改,配置hosts

hostnamectl set-hostname k8s-rke2-server01

cat >> /etc/hosts << EOF
192.168.141.200 k8s-rke2-server01
192.168.141.201 k8s-rke2-server02
192.168.141.202 k8s-rke2-server03
EOF

2. 关闭swap分区

swapoff -a

修改/etc/fstab配置文件,把swap分区挂载的那一行注释掉

1.2 NetworkManager设置

注意:如果使用NetworkManager管理网络,需要进行如下配置

参考:https://docs.rancher.cn/docs/rke2/known_issues/_index/#networkmanager

systemctl status NetworkManager
cat >> /etc/NetworkManager/conf.d/rke2-canal.conf << EOF
[keyfile]
unmanaged-devices=interface-name:cali*;interface-name:flannel*
EOF

systemctl daemon-reload
systemctl restart NetworkManager

2.5 防火墙规则

1. 关闭firewalld服务

参考:https://docs.rancher.cn/docs/rke2/known_issues/_index/#networkmanager

systemctl stop firewalld
systemctl disable firewalld
systemctl disable iptables
systemctl stop iptables

关闭firewalld服务之后,如果还想用防火墙规则,可以试试csf或者iptables进行规则管理。

2. 关闭selinux

getenforce
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
getenforce

详细的安装要求,请参考:
https://docs.rancher.cn/docs/rke2/install/requirements/_index/

1.3 设置时间同步

安装ntp相关服务

yum -y install ntp
systemctl start ntpd  # 启动时钟同步服务
systemctl enable  ntpd # 设置开机启动
ntpq -p # 查看时钟同步状态

如果在局域网环境中有ntp时钟服务器,尽量用本地的

1.4 ipvs配置

由于ipvs已经加入到了内核的主干,所以为kube-proxy开启ipvs的前提需要加载以下的内核模块:
在所有的Kubernetes节点执行以下脚本:

cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF

#执行脚本
chmod 755 /etc/sysconfig/modules/ipvs.modules 
bash /etc/sysconfig/modules/ipvs.modules 
lsmod | grep -e ip_vs -e nf_conntrack_ipv4

上面脚本创建了/etc/sysconfig/modules/ipvs.modules文件,保证在节点重启后能自动加载所需模块。 使用

lsmod | grep -e ip_vs -e nf_conntrack_ipv4

命令查看是否已经正确加载所需的内核模块。
接下来还需要确保各个节点上已经安装了ipset软件包。 为了便于查看ipvs的代理规则,最好安装一下管理工具ipvsadm。

yum install ipset ipvsadm -y

以上设置完成后,重启主机,确认所有配置都已经生效。

2. RKE2安装配置

设置一个 HA 集群需要以下步骤:

  1. 配置一个固定的注册地址
  2. 启动第一个 server 节点
  3. 加入其他 server 节点

参考:https://docs.rancher.cn/docs/rke2/install/ha/_index/

由于主机有限,我们就把第一个启动的节点设置为注册地址,下面只进行2、3步骤。

2.1 下载安装

rke2版本信息:https://github.com/rancher/rke2/releases

使用国内镜像地址下载启动脚本

在每个节点都执行下面的脚本
参考:https://docs.rancher.cn/docs/rke2/install/install_options/install_options/_index#%E9%85%8D%E7%BD%AE-linux-%E5%AE%89%E8%A3%85%E8%84%9A%E6%9C%AC

curl -sfL https://rancher-mirror.rancher.cn/rke2/install.sh | INSTALL_RKE2_MIRROR=cn INSTALL_RKE2_VERSION=v1.28.7+rke2r1 INSTALL_RKE2_TYPE=server sh -

上面主要是下载一些必要的安装包。

2.2 第一个节点启动,初始化

在第一个节点启动服务

systemctl start rke2-server
systemctl enable rke2-server
# 第一次启动可能会比较慢,因为要初始化、生成各种文件 
#查看第一次启动后生成的文件
ll /var/lib/rancher/rke2/
ll /var/lib/rancher/rke2/bin/
ll /etc/rancher/rke2/

这里的rke2.yaml 相当于admin.conf 谁拥有该文件就有rke2集群控制权

#查看node节点和pod启动情况
export KUBECONFIG=/etc/rancher/rke2/rke2.yaml
/var/lib/rancher/rke2/bin/kubectl get node
/var/lib/rancher/rke2/bin/kubectl get pod -A

在主节点1执行上述命令,等待集群启动完成后,pod全部正常,接着在该节点执行以下命令进行集群配置。

查看集群的唯一token

# cat /var/lib/rancher/rke2/server/node-token
K10b725b06fb6c540b67cd04599f1da77ec13ab9deda31b43049f4d4c186a9843ed::server:7023bb140ad16a51416cade94ba888a2

修改集群配置文件

vim /etc/rancher/rke2/config.yaml

### 以下为配置文件内容

# server: https://192.168.141.200:9345
# token: K10ebeff7636753f2d8ac49baf35dfaebd5ab8457d42b3cd6b872b9f18aaa1ef8fb::server:484958b563294842f8625b2c5adc06a7 or `cat /var/lib/rancher/rke2/server/token`

write-kubeconfig-mode: "0644"

cluster-cidr: "192.168.60.0/24"
service-cidr: "192.168.61.0/24"

service-node-port-range: 30000-32767

tls-san:
  - "127.0.0.1"
  - "192.168.141.200"
  - "192.168.141.201"
  - "192.168.141.202"
  - "rke2-cluster-master01"
  - "rke2-cluster-master02"
  - "rke2-cluster-master03"

cni: calico

kube-proxy-arg:
  - "proxy-mode=ipvs"

disable:
  - rke2-ingress-nginx

kube-proxy-arg:
  - "proxy-mode=ipvs"

disable-cloud-controller: true
selinux: false
debug: false


data-dir: /home/rancher/rke2

2.3 另外两个节点

另外两个节点参考节点1的配置文件,只需要修改node-name这个参数即可。其他配置项完全相同。

节点2

# server: https://192.168.141.200:9345
# token: K10ebeff7636753f2d8ac49baf35dfaebd5ab8457d42b3cd6b872b9f18aaa1ef8fb::server:484958b563294842f8625b2c5adc06a7 or `cat /var/lib/rancher/rke2/server/token`
server: https://192.168.141.200:9345
token: K10ebeff7636753f2d8ac49baf35dfaebd5ab8457d42b3cd6b872b9f18aaa1ef8fb::server:484958b563294842f8625b2c5adc06a7

write-kubeconfig-mode: "0644"

cluster-cidr: "192.168.60.0/24"
service-cidr: "192.168.61.0/24"

service-node-port-range: 30000-32767

tls-san:
  - "127.0.0.1"
  - "192.168.141.200"
  - "192.168.141.201"
  - "192.168.141.202"
  - "rke2-cluster-master01"
  - "rke2-cluster-master02"
  - "rke2-cluster-master03"

cni: calico

kube-proxy-arg:
  - "proxy-mode=ipvs"

disable:
  - rke2-ingress-nginx

kube-proxy-arg:
  - "proxy-mode=ipvs"

disable-cloud-controller: true
selinux: false
debug: false


data-dir: /home/rancher/rke2

节点3

# server: https://192.168.141.200:9345
# token: K10ebeff7636753f2d8ac49baf35dfaebd5ab8457d42b3cd6b872b9f18aaa1ef8fb::server:484958b563294842f8625b2c5adc06a7 or `cat /var/lib/rancher/rke2/server/token`
server: https://192.168.141.200:9345
token: K10ebeff7636753f2d8ac49baf35dfaebd5ab8457d42b3cd6b872b9f18aaa1ef8fb::server:484958b563294842f8625b2c5adc06a7

write-kubeconfig-mode: "0644"

cluster-cidr: "192.168.60.0/24"
service-cidr: "192.168.61.0/24"

service-node-port-range: 30000-32767

tls-san:
  - "127.0.0.1"
  - "192.168.141.200"
  - "192.168.141.201"
  - "192.168.141.202"
  - "rke2-cluster-master01"
  - "rke2-cluster-master02"
  - "rke2-cluster-master03"

cni: calico

kube-proxy-arg:
  - "proxy-mode=ipvs"

disable:
  - rke2-ingress-nginx

kube-proxy-arg:
  - "proxy-mode=ipvs"

disable-cloud-controller: true
selinux: false
debug: false


data-dir: /home/rancher/rke2

添加好配置文件,在两个节点上启动rke2-server服务

systemctl daemon-reload
systemctl start rke2-server
systemctl enable rke2-server

systemctl status rke2-server -l

确定两个节点启动完毕后,切换到节点1,执行如下命令确认所有节点都加到了集群中。

mkdir ~/.kube/
# /etc/rancher/rke2/rke2.yaml这个配置文件相当于集群的钥匙,管理整个集群
cp /etc/rancher/rke2/rke2.yaml  ~/.kube/config
chmod 600 ~/.kube/config
kubectl get nodes -o wide
kubectl get cs 
kubectl get pods -A -o wide

配置直接使用相关命令,在三个节点中执行

# path设置
vi /etc/profile
export PATH=$PATH:/home/rancher/rke2/bin
source /etc/profile

kubectl常用命令

# 查看集群节点信息
kubectl get nodes -o wide
# 查看集群组件健康状态
kubectl get cs
# 查看pods
kubectl get pods -A -o wide
# 查看服务
kubectl get svc -A -o wide

containerd设置

ln -s /home/rancher/rke2/agent/etc/crictl.yaml /etc/crictl.yaml

设置后就不需要使用–runtime-endpoint参数来查看容器情况了

2.4 crictl常用命令

crictl --help
crictl info
crictl ps
crictl images ls
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐