rke2 安装

at 2年前  ca K8S  pv 1984  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.shrke2-uninstall.sh

  • 一个 kubeconfig 文件将被写入/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: https://192.168.123.131:9345地址就是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)


版权声明

本文仅代表作者观点,不代表码农殇立场。
本文系作者授权码农殇发表,未经许可,不得转载。

 

扫一扫在手机阅读、分享本文

已有0条评论