使用rancher rke2配置高可用k8s集群
使用rancher rke2配置高可用k8s集群
- 1. 前言
- 1.1 官方介紹
- 1.2 說明
- 2. 主機環境準備
- 2.1 主機初始化
- 2.3 系統參數設置
- 2.4 NetworkManager設置
- 2.5 防火墻規則
- 2.6 設置時間同步
- 2.7 ipvs配置
- 3. RKE2安裝配置
- 3.1 下載安裝
- 3.2 第一個節點啟動,初始化
- 3.3 另外兩個節點
- 3.4 crictl常用命令
- 4. rke2其它管理常用
- 4.1 升級
- 4.2 linux卸載
- 5. 總結
- 5.1 一些問題
- 5.2 rke2部署完成之后nginx-ingress沒有映射主機80、443端口的問題
- 6. 參考
1. 前言
1.1 官方介紹
RKE2 結合了 RKE1.x 版本(以下簡稱 RKE1)和 K3s 的優點和特性。
從 K3s 中,它繼承了可用性、易操作性和部署模式。
從 RKE1 來看,它繼承了與上游 Kubernetes 的緊密一致性。在一些地方,K3s 與上游的 Kubernetes 有分歧,以便為邊緣部署進行優化,但 RKE1 和 RKE2 可以與上游保持密切一致。
重要的是,RKE2 不像 RKE1 那樣依賴 Docker。RKE1 利用 Docker 來部署和管理控制平面組件以及 Kubernetes 的容器運行時間。RKE2 將控制平面組件作為靜態 pod 啟動,由 kubelet 管理。嵌入的容器運行時是 containerd。
rke2高可用集群架構
1.2 說明
感覺RKE2對比RKE1,主要是不需要再安裝docker,在部署的時候會自動下載containerd,管理方式完全不一樣了。
2. 主機環境準備
本次部署使用3臺centos7主機進行,具體配置如下
| k8s-rke2-worker01 | 172.16.0.101 | CentOS 7.9 x64 | 3.10.0-1160.36.2.el7.x86_64 | 4核8G |
| k8s-rke2-worker02 | 172.16.0.102 | CentOS 7.9 x64 | 3.10.0-1160.36.2.el7.x86_64 | 4核8G |
| k8s-rke2-worker03 | 172.16.0.103 | CentOS 7.9 x64 | 3.10.0-1160.36.2.el7.x86_64 | 4核8G |
主機配置主要進行下面的設置:
2.1 主機初始化
磁盤格式化,LVM分區,這些就不再寫了。有大量的參考文檔。
主機名修改,配置hosts
hostnamectl set-hostname k8s-rke2-worker01cat >> /etc/hosts << EOF 172.16.0.101 k8s-rke2-worker01 172.16.0.102 k8s-rke2-worker02 172.16.0.103 k8s-rke2-worker03 EOF1. 常用軟件包安裝
yum -y install epel-release # 下面軟件包根據需要進行安裝配置即可 yum -y install lrzsz vim gcc glibc openssl openssl-devel net-tools http-tools wget curl yum-utils telnet # 更新一下軟件包版本和內核版本 yum -y update2. 關閉swap分區
swapoff -a修改/etc/fstab配置文件,把swap分區掛載的那一行注釋掉
2.3 系統參數設置
參考:https://docs.rancher.cn/docs/rancher2/best-practices/optimize/os/_index
echo " net.bridge.bridge-nf-call-ip6tables=1 net.bridge.bridge-nf-call-iptables=1 net.ipv4.ip_forward=1 net.ipv4.conf.all.forwarding=1 net.ipv4.neigh.default.gc_thresh1=4096 net.ipv4.neigh.default.gc_thresh2=6144 net.ipv4.neigh.default.gc_thresh3=8192 net.ipv4.neigh.default.gc_interval=60 net.ipv4.neigh.default.gc_stale_time=120# 參考 https://github.com/prometheus/node_exporter#disabled-by-default kernel.perf_event_paranoid=-1#sysctls for k8s node config net.ipv4.tcp_slow_start_after_idle=0 net.core.rmem_max=16777216 fs.inotify.max_user_watches=524288 kernel.softlockup_all_cpu_backtrace=1kernel.softlockup_panic=0kernel.watchdog_thresh=30 fs.file-max=2097152 fs.inotify.max_user_instances=8192 fs.inotify.max_queued_events=16384 vm.max_map_count=262144 fs.may_detach_mounts=1 net.core.netdev_max_backlog=16384 net.ipv4.tcp_wmem=4096 12582912 16777216 net.core.wmem_max=16777216 net.core.somaxconn=32768 net.ipv4.ip_forward=1 net.ipv4.tcp_max_syn_backlog=8096 net.ipv4.tcp_rmem=4096 12582912 16777216net.ipv6.conf.all.disable_ipv6=1 net.ipv6.conf.default.disable_ipv6=1 net.ipv6.conf.lo.disable_ipv6=1kernel.yama.ptrace_scope=0 vm.swappiness=0# 可以控制core文件的文件名中是否添加pid作為擴展。 kernel.core_uses_pid=1# Do not accept source routing net.ipv4.conf.default.accept_source_route=0 net.ipv4.conf.all.accept_source_route=0# Promote secondary addresses when the primary address is removed net.ipv4.conf.default.promote_secondaries=1 net.ipv4.conf.all.promote_secondaries=1# Enable hard and soft link protection fs.protected_hardlinks=1 fs.protected_symlinks=1# 源路由驗證 # see details in https://help.aliyun.com/knowledge_detail/39428.html net.ipv4.conf.all.rp_filter=0 net.ipv4.conf.default.rp_filter=0 net.ipv4.conf.default.arp_announce = 2 net.ipv4.conf.lo.arp_announce=2 net.ipv4.conf.all.arp_announce=2# see details in https://help.aliyun.com/knowledge_detail/41334.html net.ipv4.tcp_max_tw_buckets=5000 net.ipv4.tcp_syncookies=1 net.ipv4.tcp_fin_timeout=30 net.ipv4.tcp_synack_retries=2 kernel.sysrq=1" >> /etc/sysctl.confcat >> /etc/security/limits.conf <<EOF * soft nofile 65535 * hard nofile 65536 EOF使內核參數生效執行
modprobe br_netfilter # 要先執行這個命令,要不然會報錯 sysctl -p2.4 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* EOFsystemctl daemon-reload systemctl restart NetworkManager2.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/
2.6 設置時間同步
安裝ntp相關服務
yum -y install ntp systemctl start ntpd # 啟動時鐘同步服務 systemctl enable ntpd # 設置開機啟動 ntpq -p # 查看時鐘同步狀態如果在局域網環境中有ntp時鐘服務器,盡量用本地的
2.7 ipvs配置
由于ipvs已經加入到了內核的主干,所以為kube-proxy開啟ipvs的前提需要加載以下的內核模塊:
在所有的Kubernetes節點執行以下腳本:
上面腳本創建了/etc/sysconfig/modules/ipvs.modules文件,保證在節點重啟后能自動加載所需模塊。 使用
lsmod | grep -e ip_vs -e nf_conntrack_ipv4命令查看是否已經正確加載所需的內核模塊。
接下來還需要確保各個節點上已經安裝了ipset軟件包。 為了便于查看ipvs的代理規則,最好安裝一下管理工具ipvsadm。
以上設置完成后,重啟主機,確認所有配置都已經生效。
3. RKE2安裝配置
設置一個 HA 集群需要以下步驟:
參考:https://docs.rancher.cn/docs/rke2/install/ha/_index/
由于主機有限,我們就把第一個啟動的節點設置為注冊地址,下面只進行2、3步驟。
3.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
上面主要是下載一些必要的安裝包。
3.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://172.16.0.101:9345 token: K10dc60faa953f87c5f2fb297a70e71b74fb9ea12394b783b468701c96bd9f895ca::server:052642972b201ee388ecb8bbf2ad8f27 tls-san:- 172.16.0.101- k8s-rke2-worker01# 網絡設置# 節點設置 node-name: k8s-rke2-worker01 node-label: - "role=master" system-default-registry: "registry.cn-hangzhou.aliyuncs.com" #設置阿里云鏡像地址,加速下載# 設置etcd快照策略 etcd-snapshot-retention: 2 etcd-snapshot-schedule-cron: '*/5 * * * *'# 自定義垃圾回收機制,添加到所所節點 kubelet-arg:- "eviction-hard=nodefs.available<1%,memory.available<10Mi"- "eviction-soft-grace-period=nodefs.available=30s,imagefs.available=30s"- "eviction-soft=nodefs.available<5%,imagefs.available<1%"kube-controller-manager-extra-env:- "cluster-signing-cert-file=/etc/kubernetes/ssl/kube-ca.pem"- "cluster-signing-key-file=/etc/kubernetes/ssl/kube-ca-key.pem"kube-apiserver-extra-env:# apiserver啟用metadata.selfLink 字段,配置nfs存儲要用到- "feature-gates='RemoveSelfLink=false'"3.3 另外兩個節點
另外兩個節點參考節點1的配置文件,只需要修改node-name這個參數即可。其他配置項完全相同。
節點2
server: https://172.16.0.101:9345 token: K10dc60faa953f87c5f2fb297a70e71b74fb9ea12394b783b468701c96bd9f895ca::server:052642972b201ee388ecb8bbf2ad8f27 tls-san:- 172.16.0.101- k8s-rke2-worker01# 網絡設置# 節點設置 node-name: k8s-rke2-worker02 node-label:- "role=master" system-default-registry: "registry.cn-hangzhou.aliyuncs.com" #設置阿里云鏡像地址,加速下載# 設置etcd快照策略 etcd-snapshot-retention: 2 etcd-snapshot-schedule-cron: '*/5 * * * *'# 自定義垃圾回收機制,添加到所所節點 kubelet-arg:- "eviction-hard=nodefs.available<1%,memory.available<10Mi"- "eviction-soft-grace-period=nodefs.available=30s,imagefs.available=30s"- "eviction-soft=nodefs.available<5%,imagefs.available<1%"kube-controller-manager-extra-env:- "cluster-signing-cert-file=/etc/kubernetes/ssl/kube-ca.pem"- "cluster-signing-key-file=/etc/kubernetes/ssl/kube-ca-key.pem"kube-apiserver-extra-env:# apiserver啟用metadata.selfLink 字段- "feature-gates='RemoveSelfLink=false'"節點3
server: https://172.16.0.101:9345 token: K10dc60faa953f87c5f2fb297a70e71b74fb9ea12394b783b468701c96bd9f895ca::server:052642972b201ee388ecb8bbf2ad8f27 tls-san:- 172.16.0.101- k8s-rke2-worker01# 網絡設置# 節點設置 node-name: k8s-rke2-worker03 node-label:- "role=master" system-default-registry: "registry.cn-hangzhou.aliyuncs.com" #設置阿里云鏡像地址,加速下載# 設置etcd快照策略 etcd-snapshot-retention: 2 etcd-snapshot-schedule-cron: '*/5 * * * *'# 自定義垃圾回收機制,添加到所所節點 kubelet-arg:- "eviction-hard=nodefs.available<1%,memory.available<10Mi"- "eviction-soft-grace-period=nodefs.available=30s,imagefs.available=30s"- "eviction-soft=nodefs.available<5%,imagefs.available<1%"kube-controller-manager-extra-env:- "cluster-signing-cert-file=/etc/kubernetes/ssl/kube-ca.pem"- "cluster-signing-key-file=/etc/kubernetes/ssl/kube-ca-key.pem"kube-apiserver-extra-env:# apiserver啟用metadata.selfLink 字段- "feature-gates='RemoveSelfLink=false'"添加好配置文件,在兩個節點上啟動rke2-server服務
systemctl daemon-reload systemctl start rke2-server systemctl enable rke2-serversystemctl 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:/var/lib/rancher/rke2/bin source /etc/profilekubectl常用命令
# 查看集群節點信息 kubectl get nodes -o wide # 查看集群組件健康狀態 kubectl get cs # 查看pods kubectl get pods -A -o wide # 查看服務 kubectl get svc -A -o widecontainerd設置
ln -s /var/lib/rancher/rke2/agent/etc/crictl.yaml /etc/crictl.yaml設置后就不需要使用–runtime-endpoint參數來查看容器情況了
/var/lib/rancher/rke2/bin/crictl --runtime-endpoint=unix:///run/k3s/containerd/containerd.sock ps3.4 crictl常用命令
crictl --help crictl info crictl ps crictl images ls參考:
https://blog.csdn.net/qq_39360187/article/details/123423928
https://blog.csdn.net/qq_32907195/article/details/120529037
4. rke2其它管理常用
4.1 升級
參考:https://docs.rancher.cn/docs/rke2/upgrade/basic_upgrade/_index
升級
# server 升級 curl -sfL https://rancher-mirror.oss-cn-beijing.aliyuncs.com/rke2/install.sh | INSTALL_RKE2_MIRROR=cn INSTALL_RKE2_TYPE=server sh - # agent 升級 curl -sfL https://rancher-mirror.oss-cn-beijing.aliyuncs.com/rke2/install.sh | INSTALL_RKE2_MIRROR=cn INSTALL_RKE2_TYPE=agent sh -# 指定版本升級 #server curl -sfL https://get.rke2.io | INSTALL_RKE2_VERSION=vx.y.z sh - # worker 指定版升級 https://get.rke2.io | INSTALL_RKE2_TYPE="agent" INSTALL_RKE2_VERSION=vx.y.z sh -重啟服務,生效
# Server 節點: systemctl restart rke2-server# Agent 節點: systemctl restart rke2-agent4.2 linux卸載
參考:https://docs.rancher.cn/docs/rke2/install/linux_uninstall/_index
/usr/bin/rke2-uninstall.sh5. 總結
5.1 一些問題
rke2切換到containerd之后,crictl命令跟docker還是有些不同,需要一些熟悉過程,尤其是一些常用的管理命令,排錯、查日志等等
在部署中嘗試了兩次修改集群pod、service的cidr網絡配置,發現并沒有修改成功,在官方文件里面也沒有例子,只有server配置里有這個參數。如果10.42.0./16和10.43.0./16網段與原有的網段有沖突,這也是一個隱患。實在不行,只能用其它集群部署工具進行集群部署了。
參考:https://docs.rancher.cn/docs/rke2/install/install_options/server_config/_index
5.2 rke2部署完成之后nginx-ingress沒有映射主機80、443端口的問題
參考:https://blog.csdn.net/xujiamin0022016/article/details/124648479
rke1部署完成之后,nginx-ingress用的是DaemonSet的方式進行部署,看了一下rke2也是相同的部署方式。本想在新部署的集群上部署rancher2.5,沒想到找不到80、443端口。可能是一個bug,也可能是有其他考慮,但是確實不太方便。
解決辦法:需要修改DaemonSet的配置,添加一個參數:hostNetwork: true
kubectl edit daemonset -n kube-system rke2-ingress-nginx-controller# 如下 spec:hostNetwork: true等pod重新部署后就可以看到80、443端口已經可以用了。主機的端口映射到了pod上。
這個問題,應該還可以在集群配置文件里面修改,但我沒找到。或者是用helm來修改,但是會比較麻煩,還是直接改DaemonSet配置文件吧。
6. 參考
大熊哥哥的運維分享(20210608) - RKE2部署K8S集群方法以及常用功能整理
https://www.bilibili.com/video/av973516759/
使用rancher的rke2部署高可用的k8s集群
https://blog.csdn.net/weixin_47019045/article/details/126247486
總結
以上是生活随笔為你收集整理的使用rancher rke2配置高可用k8s集群的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用python破解7z压缩包密码
- 下一篇: 在电脑上录制课程音频用什么录音软件好用?