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