使用rke2搭建k8s集群

背景

k8s官方部署安装集群的是使用kubeadm方式,但是该方式比较复杂繁琐,所以产生了一些新的部署安装集群方式,比如k3srke2等新方式

k3s有着非常庞大的社区支持,部署安装也非常简单,设计为轻量级的k8s,可以很好的运行在物联网设备或者边缘计算设备上面

rke2官方文档描述说该部署是继承了k3s的可用性、易操作性和部署模式,继承了与上游 Kubernetes 的紧密一致性,在一些地方,K3s 与上游的 Kubernetes 有分歧(k3s魔改了一些k8s组件),以便为边缘部署进行优化,rke2同时也预设了安全配置,符合各项安全测试规范,但是部署方式上比k3s更复杂一些

整体来看选择k3srke2都是可以用于生产环境的选择,如果更注重安全性,可以选择rke2

硬件资源

3台Ubuntu服务器,系统版本22.04,二核4G

IP192.168.100.136(管理节点),192.168.100.137(agent节点),192.168.100.138(agent节点)

3台机器可以相互ping

执行命令过程当中需要sudo权限或者切换为root用户

管理节点配置

节点IP192.168.100.136

获取rke2安装程序

$ curl -sfL https://rancher-mirror.oss-cn-beijing.aliyuncs.com/rke2/install.sh | INSTALL_RKE2_MIRROR=cn sh -

创建自定义配置文件

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

写入内容如下

  • 自定义一个token
  • 配置节点名,该名称是全局唯一的,用于dns路由
  • TLS证书上添加额外的主机名或IPv4/IPv6地址作为备用名称,此处填写本机IP
  • 配置国内镜像
token: demo-server
node-name: demo-server-node
tls-san: 192.168.100.136
system-default-registry: "registry.cn-hangzhou.aliyuncs.com"

启动服务(rke2-server是采用systemd管理,确保节点重启后或进程崩溃或被杀时自动重启)

$ systemctl start rke2-server
$ systemctl enable rke2-server

查看安装的二进制执行文件,rke2默认是安装到/var/lib/rancher/rke2/bin/路径下面,但是该路径是不被$PATH所包含的

$ ll /var/lib/rancher/rke2/bin/
total 300396
drwxr-xr-x 2 root root      4096 Oct  8 08:41 ./
drwxr-xr-x 4 root root      4096 Oct  8 08:41 ../
-rwxr-xr-x 1 root root  57352072 Oct  8 08:41 containerd*
-rwxr-xr-x 1 root root   7381616 Oct  8 08:41 containerd-shim*
-rwxr-xr-x 1 root root  11606088 Oct  8 08:41 containerd-shim-runc-v1*
-rwxr-xr-x 1 root root  11626984 Oct  8 08:41 containerd-shim-runc-v2*
-rwxr-xr-x 1 root root  24838144 Oct  8 08:41 crictl*
-rwxr-xr-x 1 root root  20586248 Oct  8 08:41 ctr*
-rwxr-xr-x 1 root root  48570656 Oct  8 08:41 kubectl*
-rwxr-xr-x 1 root root 114644328 Oct  8 08:41 kubelet*
-rwxr-xr-x 1 root root  10973592 Oct  8 08:41 runc*

修改全局PATH

$ vim /etc/profile.d/rke2.sh

# 写入如下内容
export PATH=$PATH:/var/lib/rancher/rke2/bin

重新加载环境

$ source /etc/profile

现在可以执行kubectl命令了,但是发现报错如下

$ kubectl get nodes
The connection to the server localhost:8080 was refused - did you specify the right host or port?

这个主要是rke2使用的配置文件路径问题

可以通过临时指定环境变量

$ KUBECONFIG=/etc/rancher/rke2/rke2.yaml kubectl get nodes

也可以修改/etc/profile.d/rke2.sh新增加一行

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

最后验证查看有一个单节点k8s

$ kubectl get nodes
NAME               STATUS     ROLES                       AGE     VERSION
demo-server-node   Ready      control-plane,etcd,master   6m27s   v1.24.6+rke2r1

Agent节点配置

Agent节点共有两个192.168.100.137192.168.100.138

获取安装程序

$ curl -sfL https://rancher-mirror.oss-cn-beijing.aliyuncs.com/rke2/install.sh | INSTALL_RKE2_MIRROR=cn INSTALL_RKE2_TYPE="agent"  sh -

创建配置文件

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

写入内容如下

  • server参数表示管理节点的IP,注意,这个地方使用https
  • node-name配置节点名称,两个agent的配置为不一样的名称
  • token参数是管理节点192.168.100.136的位置为/var/lib/rancher/rke2/server/token的数据,整个粘贴过来就行
server: https://192.168.100.136:9345
node-name: demo-agent1
token: K101585a6b044d2f961fcffa9b228daa7504c2e5fd5a91c4c80ef2dc87bc757275a::server:demo-server
system-default-registry: "registry.cn-hangzhou.aliyuncs.com"

启动agent并配置开机启动

$ systemctl start rke2-agent
$ systemctl enable rke2-agent

两台·agent的操作是基本一样的,唯一区别就是/etc/rancher/rke2/config.yaml文件中的node-name参数需要不同

验证集群搭建

在管理节点上执行

$ kubectl get nodes
NAME               STATUS     ROLES                       AGE   VERSION
demo-agent1        Ready                            10m   v1.24.6+rke2r1
demo-agent2        Ready                            67s   v1.24.6+rke2r1
demo-server-node   Ready      control-plane,etcd,master   34m   v1.24.6+rke2r1

配置kubectl补全

安装

$ apt-get install bash-completion

配置~/.bashrc新增如下两行

source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)

当前shell生效

$ source ~/.bashrc

参考阅读

kubeadm部署安装集群

k3s项目

rke2官方文档

kubectl补全

你可能感兴趣的:(kubernetes集群容器)