首页 > 其他分享 >RKE2 部署K8S1.28.x 高可用集群

RKE2 部署K8S1.28.x 高可用集群

时间:2023-11-03 17:00:59浏览次数:38  
标签:RKE2 rke2 node yaml K8S1.28 server etc 集群 rancher

标签(空格分隔): 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 -

image.png

rke2 --version

systemctl enable rke2-server.service  # 设置开机自启并重启

image.png

3.启动服务
systemctl start rke2-server
 
4.查看日志
journalctl -fu rke2-server.service

等待10分种左右没有在报错应该rke2 就启动起来了

image.png image.png

设置环境变量

vim /etc/profile
export PATH=/var/lib/rancher/rke2/bin:$PATH
export KUBECONFIG=/etc/rancher/rke2/rke2.yaml

#使环境变量生效
source /etc/profile

### 查看集群
kubectl get node 

image.png

cat /var/lib/rancher/rke2/server/node-token # 查看令牌,后期分配给其它server节点和agent节点
----
K106e6b94e9cbce635bc0374ea02f1741fb9577cfd0c79ad0b91f6af1202ac486a6::server:b51bf86f8500a75c67734435a56c9c59
----

image.png

# 默认情况下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:表示使用国内镜像

image.png

image.png image.png


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/


image.png

修改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"

---

image.png

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"

---

image.png

启动flyfish12/flyfish13节点rke2-server 
systemctl enable rke2-server
systemctl start rke2-server

journalctl -fu rke2-server.service

image.png image.png

kubectl get node 

image.png

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 -

image.png

image.png

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"
---

image.png


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"
---

image.png

启动flyfish14/flyfish15 主机的RKE2的agent 

systemctl enable rke2-agent.service # 设置开机自启

systemctl start rke2-agent ## 启动rke2-agent 

### 启动 时间过长大约2分钟左右

journalctl -fu rke2-agent.service  ### 查看rke2-agent 启动状态

image.png image.png image.png image.png

kubectl get node 

image.png

四:初始化集群的一些操作

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 

image.pngimage.png

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

image.png image.png

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

image.png


# 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

image.png

修改PATH环境变量
# 注意这里的echo 要使用单引号,单引号会原样输出,双引号会解析变量
echo 'export PATH=/usr/local/buildkit/bin:$PATH' >> /etc/profile
cat /etc/profile

# 使刚才配置生效
source /etc/profile

image.png

创建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

image.png

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

image.png

查看服务:
    kubectl get deploy,svc,pod 

image.png image.png

访问:
  http://172.16.10.11:30080

image.png

标签:RKE2,rke2,node,yaml,K8S1.28,server,etc,集群,rancher
From: https://blog.51cto.com/flyfish225/8172977

相关文章

  • 记一次GFS集群节点系统重做数据恢复
    背景:比较倒霉,周日晚上服务器硬盘损坏更换后发现数据块损坏,系统无法正常使用只能重做系统,恢复了好多虚拟机,过程无比痛苦,目前只说一说恢复gfs。思路:登录gfs master节点查看peer状态,glusterpeerstatus  发现另一个节点处于State:PeerRejected(Disconnected)先把peer点......
  • Ubuntu 修改主机名和hosts文件并克隆虚拟机初步搭建集群
    进入终端输入 sudovim/etc/hosts像红框里一样,添加自己虚拟机的主机名称映射然后终端输入reboot重启虚拟机然后操作参考Ubuntu20虚拟机克隆以及克隆后静态IP和主机名的修改_ubuntu克隆后修改ip-CSDN博客 ......
  • 分布式存储——ceph集群部署
    一、部署结构以x.x.x.150、x.x.x.151、x.x.x.152三台服务器搭建最基本的三节点ceph集群,服务器系统使用的是centos7版本,IP网段为x.x.x.0/24,三台服务器的名称分别为:ceph001:x.x.x.150,管理节点ceph002:x.x.x.151,子节点ceph003:x.x.x.152,子节点二、部署前准备1.修改hosts文......
  • nebula-br local-store 模式,快速搭建主备集群实践
    因为线上图数据库目前为单集群,数据量比较大,有以下缺点:单点风险,一旦集群崩溃或者因为某些查询拖垮整个集群,就会导致所有图操作受影响很多优化类但会影响读写的操作不好执行,比如:compact、balanceleader等;双集群在升级的时候也非常有优势,完全可以做到不影响业务运行,比如先升级......
  • 关于pacemaker集群stonith:fence_azure_arm资源-SP-服务主机-密码过期的处理方法
    在pacemaker中,一般都会创建一个stonith资源(ShootTheOtherNodeInTheHead),笔者因为是在Azure平台、于是使用的为 stonith:fence_azure_arm最近发现有一个与之关联的服务主体的密码过期了,导致状态异常,通过pcsstatus可以看到FailresourceActions信息FailedResourceAc......
  • 904-907 Prometheus自动发现机制 kube-state-metrics和metrics-server Prometheus监
    一、Prometheus自动发现机制服务发现机制:为了实现自动将被监控目标添加到PermethusPrometheus数据源的配置分为静态配置和动态发现,常见为以下几类:static_configs:静态服务发现,即将配置直接写到配置文件或Configmapfile_sd_config:文件服务器发现,创建一个专门配置target的配置文......
  • 分布式锁在Redis集群中的实践与探讨
    分布式锁的基本概念分布式锁是在分布式计算环境下,用来确保多个进程或线程在访问某些共享资源时能够避免冲突的一种同步机制。其主要目的是为了保持数据的一致性和完整性。为了达到这个目的,分布式锁需要满足互斥性、无死锁和容错性三个基本条件。互斥性:这是分布式锁最基本的要求,它确......
  • elasticsearch运维调优-集群和冷热集群
    集群:node1-node3专用主节点node3仅投票节点 启动服务:./bin/elasticsearch后台启动守护进程./bin/elasticsearch推荐方式./bin/elasticsearch-d-ppid关闭进程ps-ef|grepelastic杀进程kill-9'catpid'pkill-Fpid常见问题:本地无法访问:关闭防火墙,生产环境建......
  • Redis集群模式incr保证原子性的原理
    1.主要是redis的key会解析到固定的主机上,比如集群上有host1,host2,host3;然后key1可能会解析后发现是要发到host2上,则在host2正常的情况下(有点像kafkarebalance;consumer处理哪些分区),key1会一直在host2上进行操作;因此在redis集群正常情况下不会出现对key1第一次incr是在host2,第二次......
  • DHorse改用fabric8的SDK与k8s集群交互
    现状在dhorse1.4.0版本之前,一直使用k8s官方提供的sdk与k8s集群交互,官方sdk的Maven坐标如下:<dependency> <groupId>io.kubernetes</groupId> <artifactId>client-java</artifactId> <version>18.0.0</version></dependency>但是自从1.4.0版本以后,dhor......