标签(空格分隔): kubernetes系列
一:RKE2 的介绍
k8s官方部署安装集群的是使用kubeadm方式,但是该方式比较复杂繁琐,
所以产生了一些新的部署安装集群方式,比如k3s和rke2等新方式k3s有着非常庞大的社区支持,
部署安装也非常简单,设计为轻量级的k8s,可以很好的运行在物联网设备或者边缘计算设备上面
据rke2官方文档描述说该部署是继承了k3s的可用性、易操作性和部署模式,
继承了与上游Kubernetes的紧密一致性,在一些地方,K3s与 上游的Kubernetes有
分歧(k3s魔改了一些k8s组件),以便为边缘部署进行优化,rke2同时也预设了安全配置,
符合各项安全测试规范,但是部署方式上比k3s更复杂一些
整体来看选择k3s和rke2都是可以用于生产环境的选择,如果更注重安全性,可以选择rke2
RKE2 官方文档:
https://docs.rke2.io/zh/
安装参考文档:
https://blog.csdn.net/qq_30818545/article/details/130668212
二:RKE2 安装与配置
2.1 主机准备
系统:CentOS7.9x64
cat /etc/hosts
---------
172.16.10.11 flyfish11
172.16.10.12 flyfish12
172.16.10.13 flyfish13
172.16.10.14 flyfish14
172.16.10.15 flyfish15
172.16.10.28 flyfish28
---------
系统关闭selinux /firewalld 清空 iptables 规则
做好 系统的 ssh 无密钥认证
2.2 配置内核路由转发及网桥过滤
所有主机均需要操作。
添加网桥过滤及内核转发配置文件
# cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF
sysctl --system
加载br_netfilter模块
# modprobe br_netfilter
查看是否加载
# lsmod | grep br_netfilter
br_netfilter 22256 0
bridge 151336 1 br_netfilter
2.3 安装ipset及ipvsadm
所有主机均需要操作。
安装ipset及ipvsadm
# yum -y install ipset ipvsadm
配置ipvsadm模块加载方式
添加需要加载的模块
# cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF
授权、运行、检查是否加载
# chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack
2.4 关闭SWAP分区
修改完成后需要重启操作系统,如不重启,可临时关闭,命令为swapoff -a
永远关闭swap分区,需要重启操作系统
## 关闭swap
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
三: RKE2 的配置
3.1 安装 RKE2 Server的节点
curl -sfL https://rancher-mirror.rancher.cn/rke2/install.sh | INSTALL_RKE2_MIRROR=cn \
INSTALL_RKE2_VERSION=v1.28.2+rke2r1 \
INSTALL_RKE2_TYPE="server" \
sh -
rke2 --version
systemctl enable rke2-server.service # 设置开机自启并重启
3.启动服务
systemctl start rke2-server
4.查看日志
journalctl -fu rke2-server.service
等待10分种左右没有在报错应该rke2 就启动起来了
设置环境变量
vim /etc/profile
export PATH=/var/lib/rancher/rke2/bin:$PATH
export KUBECONFIG=/etc/rancher/rke2/rke2.yaml
#使环境变量生效
source /etc/profile
### 查看集群
kubectl get node
cat /var/lib/rancher/rke2/server/node-token # 查看令牌,后期分配给其它server节点和agent节点
----
K106e6b94e9cbce635bc0374ea02f1741fb9577cfd0c79ad0b91f6af1202ac486a6::server:b51bf86f8500a75c67734435a56c9c59
----
# 默认情况下RKE2读取 /etc/rancher/rke2/config.yaml配置文件启动
mkdir -p /etc/rancher/rke2 && vim /etc/rancher/rke2/config.yaml
---
token: K106e6b94e9cbce635bc0374ea02f1741fb9577cfd0c79ad0b91f6af1202ac486a6::server:b51bf86f8500a75c67734435a56c9c59
tls-san:
- flyfish11
- flyfish12
- flyfish13
# node配置
node-name: flyfish11
node-taint: # 默认Server节点是可调度的,如果希望拥有一个不会运行用户工作负载的专用 control plane,则可以使用污点(taint)
- "CriticalAddonsOnly=true:NoExecute"
# 打标签
node-label:
- "node=Master"
# 设置阿里云镜像地址
system-default-registry: "registry.cn-hangzhou.aliyuncs.com"
---
然后从新启动rke2 server
systemctl restart rke2-server
kubectl get node
解释说明,
token:参数表示自定义一个token标识
node-name:表示配置节点名,该名称是全局唯一的,用于dns路由
tls-san:表示TLS证书上添加额外的主机名或IPv4/IPv6地址作为备用名称,此处填写本机IP,该参数是为了避免固定注册地址的证书错误
system-default-registry:表示使用国内镜像
3.2 安装 另外两个master
flyfish12/flyfish13
scp /etc/rancher/rke2/config.yaml root@flyfish12:/etc/rancher/rke2/
scp /etc/rancher/rke2/config.yaml root@flyfish13:/etc/rancher/rke2/
修改config.yaml 的节点主机名称
flyfish12:
vim /etc/rancher/rke2/config.yaml
---
server: https://flyfish11:9345
token: K106e6b94e9cbce635bc0374ea02f1741fb9577cfd0c79ad0b91f6af1202ac486a6::server:b51bf86f8500a75c67734435a56c9c59
tls-san:
- flyfish11
- flyfish12
- flyfish13
# node配置
node-name: flyfish12
#node-taint: # 默认Server节点是可调度的,如果希望拥有一个不会运行用户工作负载的专用 control plane,则可以使用污点(taint)
# - "CriticalAddonsOnly=true:NoExecute"
# # 打标签
#node-label:
# - "node=Master"
#
# # 设置阿里云镜像地址
system-default-registry: "registry.cn-hangzhou.aliyuncs.com"
---
flyfish13 节点:
vim /etc/rancher/rke2/config.yaml
---
server: https://flyfish11:9345
token: K106e6b94e9cbce635bc0374ea02f1741fb9577cfd0c79ad0b91f6af1202ac486a6::server:b51bf86f8500a75c67734435a56c9c59
tls-san:
- flyfish11
- flyfish12
- flyfish13
# node配置
node-name: flyfish13
#node-taint: # 默认Server节点是可调度的,如果希望拥有一个不会运行用户工作负载的专用 control plane,则可以使用污点(taint)
# - "CriticalAddonsOnly=true:NoExecute"
# # 打标签
#node-label:
# - "node=Master"
#
# # 设置阿里云镜像地址
system-default-registry: "registry.cn-hangzhou.aliyuncs.com"
---
启动flyfish12/flyfish13节点rke2-server
systemctl enable rke2-server
systemctl start rke2-server
journalctl -fu rke2-server.service
kubectl get node
3.3 安装 rke2 Agent 节点
curl -sfL https://rancher-mirror.rancher.cn/rke2/install.sh | INSTALL_RKE2_MIRROR=cn \
INSTALL_RKE2_VERSION=v1.28.2+rke2r1 \
INSTALL_RKE2_TYPE="agent" \
sh -
flyfish14:
添加配置文件
# 默认情况下,RKE2 将使用 /etc/rancher/rke2/config.yaml YAML 文件中的值来启动
cd /etc/rancher/rke2 && vim /etc/rancher/rke2/config.yaml
---
server: https://flyfish11:9345
token: K106e6b94e9cbce635bc0374ea02f1741fb9577cfd0c79ad0b91f6af1202ac486a6::server:b51bf86f8500a75c67734435a56c9c59
# node 配置
node-name: flyfish14
# # 打标签
# node-label:
# - "node=agent"
#
# #设置阿里云镜像地址,加速下载
system-default-registry: "registry.cn-hangzhou.aliyuncs.com"
---
flyfish15:
添加配置文件
# 默认情况下,RKE2 将使用 /etc/rancher/rke2/config.yaml YAML 文件中的值来启动
cd /etc/rancher/rke2 && vim /etc/rancher/rke2/config.yaml
---
server: https://flyfish11:9345
token: K106e6b94e9cbce635bc0374ea02f1741fb9577cfd0c79ad0b91f6af1202ac486a6::server:b51bf86f8500a75c67734435a56c9c59
# node 配置
node-name: flyfish15
# # 打标签
# node-label:
# - "node=agent"
#
# #设置阿里云镜像地址,加速下载
system-default-registry: "registry.cn-hangzhou.aliyuncs.com"
---
启动flyfish14/flyfish15 主机的RKE2的agent
systemctl enable rke2-agent.service # 设置开机自启
systemctl start rke2-agent ## 启动rke2-agent
### 启动 时间过长大约2分钟左右
journalctl -fu rke2-agent.service ### 查看rke2-agent 启动状态
kubectl get node
四:初始化集群的一些操作
4.1 集群的kubeconfig 文件:
导出集群的kubeconfig 文件
mkdir -p ~/.kube && cp -ap /etc/rancher/rke2/rke2.yaml ~/.kube/config && chmod 600 ~/.kube/config
vim /etc/profile
---
export PATH=/var/lib/rancher/rke2/bin:$PATH
export KUBECONFIG=/etc/rancher/rke2/rke2.yaml
---
source /etc/profile
kubectl get node
4.2 crictl 和 ctr 查看镜像
所有节点都需要 不然查看不了镜像:
cp -ap /var/lib/rancher/rke2/agent/etc/crictl.yaml /etc/
ln -s /run/k3s/containerd/containerd.sock /run/containerd/containerd.sock
4.3 nerdctl 与 buildkit 的 安装
4.3.1 nerdctl 安装:
nerdctl 安装:
# nerdctl插件下载地址:https://github.com/containerd/nerdctl/releases/tag/v1.4.0
# wget https://github.com/containerd/nerdctl/releases/download/v1.4.0/nerdctl-1.4.0-linux-amd64.tar.gz
# 上传nerdctl安装包
https://github.com/containerd/nerdctl/releases/download/v1.4.0/nerdctl-1.4.0-linux-amd64.tar.gz
# 解压文件到 /usr/local/bin/
tar zxvf nerdctl-1.4.0-linux-amd64.tar.gz -C /usr/local/bin/
# 查看版本
nerdctl -v
nerdctl pull hello-world
# nerdctl命令补全
vim /etc/profile
source <(nerdctl completion bash)
source /etc/profile
4.3.2 安装buildkit
# 下载文件 https://github.com/moby/buildkit
wget https://github.com/moby/buildkit/releases/download/v0.11.6/buildkit-v0.11.6.linux-amd64.tar.gz
# 创建解压的目录
mkdir -p /usr/local/buildkit
# 解压到指定的目录
tar -xf buildkit-v0.11.6.linux-amd64.tar.gz -C /usr/local/buildkit
# 查看解压的目录
yum -y install tree
tree /usr/local/buildkit
修改PATH环境变量
# 注意这里的echo 要使用单引号,单引号会原样输出,双引号会解析变量
echo 'export PATH=/usr/local/buildkit/bin:$PATH' >> /etc/profile
cat /etc/profile
# 使刚才配置生效
source /etc/profile
创建buildkitd自启动服务
cat <<EOF > /usr/lib/systemd/system/buildkitd.service
[Unit]
Description=buildkitd
After=network.target
[Service]
ExecStart=/usr/local/buildkit/bin/buildkitd
[Install]
WantedBy=multi-user.target
EOF
# 重新加载Unit file
systemctl daemon-reload
# 启动服务
systemctl start buildkitd
# 开机自启动
systemctl enable buildkitd
4.4 rke2 的证书更新问题
systemctl stop rke2-server # 停止服务
rke2 certificate rotate # 更新证书
systemctl restart rke2-server # 启动服务
4.5 部署一个nginx测试服务:
部署一个nginx:
vim web.yaml
---
kind: Deployment
#apiVersion: extensions/v1beta1
apiVersion: apps/v1
metadata:
labels:
app: web-deployment-label
name: web-deployment
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: web-selector
template:
metadata:
labels:
app: web-selector
spec:
containers:
- name: web-container
image: nginx:latest
imagePullPolicy: Always
ports:
- containerPort: 80
protocol: TCP
name: http
- containerPort: 443
protocol: TCP
name: https
---
kind: Service
apiVersion: v1
metadata:
labels:
app: web-service-label
name: web-service
namespace: default
spec:
type: NodePort
ports:
- name: http
port: 80
protocol: TCP
targetPort: 80
nodePort: 30080
- name: https
port: 443
protocol: TCP
targetPort: 443
nodePort: 30443
selector:
app: web-selector
----
kubectl apply -f web.yaml
查看服务:
kubectl get deploy,svc,pod
访问:
http://172.16.10.11:30080
标签:RKE2,rke2,node,yaml,K8S1.28,server,etc,集群,rancher
From: https://blog.51cto.com/flyfish225/8172977