rke2 安装
at 2年前 ca K8S pv 2651 by touch
https://docs.rancher.cn/docs/rke2/install/quickstart/_index
先决条件
两个节点不能有相同的主机名。
如果你的所有节点都有相同的主机名,请在 RKE2 配置文件中设置
node-name
参数,让你添加到集群中的每个节点都有不同的节点名。CentOS 关闭selinux firewalld
一、单节点离线安装
1、创建并进入目录
mkdir /root/rke2-artifacts && cd /root/rke2-artifacts/
2、获取安装必须文件
需要下载4个文件
install.sh #安装使用的脚本文件
rke2-images.linux-amd64.tar.zst #需要的image文件包
rke2.linux-amd64.tar.gz # rke2 二进制文件
sha256sum-amd64.txt # 文件校验
安装脚本获取方式
curl -sfL https://get.rke2.io --output install.sh
其他3个文件下载地址
https://github.com/rancher/rke2/releases/
3、安装rke2
INSTALL_RKE2_ARTIFACT_PATH=/root/rke2-artifacts sh install.sh --disable rke2-metrics-server
4、配置集群node名字为node1
修改文件 rke2-server.service文件
vim /usr/local/lib/systemd/system/rke2-server.service 在 ExecStart=/usr/local/bin/rke2 server --node-name=node1 --disable rke2-metrics-server --disable rke2-ingress-nginx
5、重新加载rke2-server.service
systemctl daemon-reload
6、启用rke2-server服务
systemctl enable rke2-server.service
7、启动服务
systemctl start rke2-server.service
这一步需要时间较长,耐心等待(约需要3min) 。需要初始化
查看日志
journalctl -u rke2-server -f
若启动报错,使用restart重启 (这一步同样需要时间较长,耐心等待)
systemctl restart rke2-server.service
rke2-server
服务将被安装。rke2-server
服务将被配置为在节点重启后或进程崩溃或被杀时自动重启。其他的实用程序将被安装在
/var/lib/rancher/rke2/bin/
。它们包括kubectl
,crictl
, 和ctr
.注意,这些东西默认不在你的路径上。
还有两个清理脚本会安装到
/usr/local/bin/rke2
的路径上。它们是rke2-killall.sh
和rke2-uninstall.sh
。一个 文件将被写入
/etc/rancher/rke2/rke2.yaml
。一个可用于注册其他 server 或 agent 节点的令牌将在
/var/lib/rancher/rke2/server/node-token
文件中创建。
8、添加命令到系统路径
ln -s /var/lib/rancher/rke2/bin/* /usr/local/bin/
9、添加KUBECONFIG变量到系统中
cat >> /etc/profile << EOF export KUBECONFIG=/etc/rancher/rke2/rke2.yaml EOF
然后执行
source /etc/profile
10、查看节点
kubectl get node
如果状态是NotReady 请稍等片刻,相关的服务还没完全启动
11、查看pod
kubectl get pod -A
12、证书轮换
默认情况下,RKE2 中的证书在 12 个月后到期。
如果证书已经过期或剩余时间少于 90 天,当 RKE2 重新启动时,证书将被轮换。
从 v1.21.8 + RKE2 r1 开始,你可以手动轮换证书。要做到这一点,最好的方法是停止 rke2-server 进程,轮换证书,然后再次启动该进程:
systemctl stop rke2-server rke2 certificate rotate systemctl start rke2-server
13、rke2 对image的操作
在.bashrc中添加 alias crictl='crictl --config /var/lib/rancher/rke2/agent/etc/crictl.yaml' source .bashrc #查看运行中的pod crictl ps #列出镜像 crictl images or crictl images ls
14、使用ctr导入导出镜像
参考:https://gist.github.com/kingsd041/5b4e454fe6f63552be19cfb81f3753ea
在.bashrc添加 alias ctr='ctr --address /run/k3s/containerd/containerd.sock --namespace k8s.io' source .bashrc 查看镜像 ctr image ls 查看运行的任务 ctr task ls 导出镜像 ctr image export <包名> <镜像名称> 例如:ctr image export media.tar registry.cn-shanghai.aliyuncs.com/anystreaming/media:v0.2.1-6a9f5db3 导入镜像 ctr image import <包名> 例如:ctr image import media.tar
kubectl命令自动补全
centos系列
yum install -y bash-completion source /usr/share/bash-completion/bash_completion source <(kubectl completion bash) echo "source <(kubectl completion bash)" >> ~/.bashrc
Ubuntu
apt install -y bash-completion source /usr/share/bash-completion/bash_completion source <(kubectl completion bash) echo "source <(kubectl completion bash)" >> ~/.bashrc
二、集群部署
前提部署一台机器
CentOS 关闭selinux 和firewalld
获取token
cat /var/lib/rancher/rke2/server/node-token K10cc8748a3379c2828abdabd819a919f6adcac08a4bc11ab09718456355f893353::server:8b16b770abd8674c5fb0230ba64eebda
在node1节点上修改confing.yaml
cd /etc/rancher/rke2/ vim config.yaml
token: K10cc8748a3379c2828abdabd819a919f6adcac08a4bc11ab09718456355f893353::server:8b16b770abd8674c5fb0230ba64eebda tls-san: - my-kubernetes-domain.com - another-kubernetes-domain.com - 192.168.123.130 #这个是VIP node-name: "node1" #node-taint: # - "CriticalAddinsonly=true:NoExecute" 默认是可以调度的,如果添加此段表示不可以调度 node-label: - "node=Master" - "node1=Master"
这里的token修改为你机器上/var/lib/rancher/rke2/server/node-token的值。
node2上配置
在node2上配置:
需要在安装RKE2前先配置config.yaml文件,不然安装的node2,node3会变成另一个独立的K8S集群。
所以这里需要给node2,node3指明我们需要他们加入哪一个集群,下面的配置文件里server: 地址就是node1的地址,你需要修改为你的node1的地址,端口不要变。
mkdir -p /etc/rancher/rke2/ vi /etc/rancher/rke2/config.yaml
server: https://192.168.123.131:9345 #node1的地址 token: K10cc8748a3379c2828abdabd819a919f6adcac08a4bc11ab09718456355f893353::server:8b16b770abd8674c5fb0230ba64eebda tls-san: - my-kubernetes-domain.com - another-kubernetes-domain.com - 192.168.123.130 node-name: "node2" #node-taint: # - "CriticalAddinsonly=true:NoExecute" node-label: - "node=Master" - "node2=Master"
配置完成后安装rke2 参照单机部署步骤 1 到 12
如果有node3,重复node2上的配置注意node名称
参考:https://zhuanlan.zhihu.com/p/494603305
加入Agent(Worker)节点
mkdir -p /etc/rancher/rke2/ vim /etc/rancher/rke2/config.yaml
需要指定 agent 应该注册的 URL 和它应该使用的 token
server: https://192.168.123.131:9345 #node1的地址 token: K10cc8748a3379c2828abdabd819a919f6adcac08a4bc11ab09718456355f893353::server:8b16b770abd8674c5fb0230ba64eebda node-name: "node2"
启动的服务名称是 rke2-agent.service。不再是rke2-server.service
systemctl start rke2-agent.service
journalctl -u rke2-agent -f
问题汇总
1、问题描述
describe 查看pod 报错如下
Warning FailedScheduling 3m20s default-scheduler 0/1 nodes are available: 1 node(s) had untolerated taint {node.cloudprovider.kubernetes.io/uninitiaue}. preemption: 0/1 nodes are available: 1 Preemption is not helpful for scheduling
问题分析
节点不可调度(可用下面命令查看)
# kubectl describe nodes node1|grep Taints Taints: node.cloudprovider.kubernetes.io/uninitialized=true:NoSchedule
解决办法
kubectl taint node --all node.cloudprovider.kubernetes.io/uninitialized-
再次查看节点是否可用调度
# kubectl describe nodes node1|grep Taints Taints: <none> (说明可以调度了s)
版权声明
本文仅代表作者观点,不代表码农殇立场。
本文系作者授权码农殇发表,未经许可,不得转载。