背景
k8s
官方部署安装集群的是使用kubeadm
方式,但是该方式比较复杂繁琐,所以产生了一些新的部署安装集群方式,比如k3s
和rke2
等新方式
k3s
有着非常庞大的社区支持,部署安装也非常简单,设计为轻量级的k8s
,可以很好的运行在物联网设备或者边缘计算设备上面
据rke2
官方文档描述说该部署是继承了k3s
的可用性、易操作性和部署模式,继承了与上游 Kubernetes
的紧密一致性,在一些地方,K3s
与上游的 Kubernetes
有分歧(k3s
魔改了一些k8s
组件),以便为边缘部署进行优化,rke2
同时也预设了安全配置,符合各项安全测试规范,但是部署方式上比k3s
更复杂一些
整体来看选择k3s
和rke2
都是可以用于生产环境的选择,如果更注重安全性,可以选择rke2
硬件资源
3台Ubuntu
服务器,系统版本22.04
,二核4G
IP
是192.168.100.136
(管理节点),192.168.100.137
(agent
节点),192.168.100.138
(agent
节点)
3台机器可以相互ping
通
执行命令过程当中需要sudo
权限或者切换为root
用户
管理节点配置
节点IP
是192.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.137
,192.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