🐳 RKE 部署 Kubernetes

RKE简介

  • Rancher Kubernetes Engine,简称 RKE,是一个经过 CNCF 认证的 Kubernetes 安装程序。RKE 支持多种操作系统,包括 MacOS、Linux 和 Windows,可以在裸金属服务器和虚拟服务器上运行
  • 市面上的其他 Kubernetes 部署工具存在一个共性问题:在使用工具之前需要满足的先决条件比较多,例如,在使用工具前需要完成安装 kubelet、配置网络等一系列的繁琐操作。而 RKE 简化了部署 Kubernetes 集群的过程,只有一个先决条件:只要您使用的 Docker 是 RKE 支持的版本,就可以通过 RKE 安装 Kubernetes,部署和运行 Kubernetes 集群
  • RKE 既可以单独使用,作为创建 Kubernetes 集群的工具,也可以配合 Rancher2.x 使用,作为 Rancher2.x 的组件,在 Rancher 中部署和运行 Kubernetes 集群

集群部署说明

  • 本次部署教程使用 RKE 单机模式(v1.3.24版本),部署 rancher封装的 v1.23.16-rancher2-3 K8S 版本,系统初始化脚本基于 RockyLinux8.10 官方发布原始镜像版本
  • 采用2台虚拟机部署 K8S 集群,分别是 Master 节点(192.168.2.71/24)、Worker 节点(192.168.2.72/24) RKE 和 Master节点复用,1台机器部署 Rancher 应用 (192.168.2.77/24)

系统要求

  1. RKE 可以在大多数已安装 Docker 的 Linux 操作系统上运行。SSH 用户 使用 SSH 访问节点的用户必须是节点上 docker 用户组的成员
  2. 禁用所有节点上的交换功能(Swap),建议新部署的操作系统直接不划分 Swap 分区
  3. 请查看网络插件文件,了解任何额外的要求(例如,内核模块)
  4. 加载内核模块,下面列举了一些核心参数配置
# 调整内核参数
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1  # 开启网络转发
EOF

cat <<EOF | sudo tee /etc/modules-load.d/modules.conf
br_netfilter  # 启用Netfilter 框架,允许对桥接网络中的流量进行过滤和 NAT
overlay  # 支持 Overlay 虚拟网络
EOF

软件要求

  1. 请参考 RKE 版本说明 ,获取每个版本的 RKE 支持的 Kubernetes 版本
  2. 每一个 Kubernetes 版本支持的 Docker 版本都不同,详情请参考,Kubernetes 的版本说明

系统初始化脚本

#!/bin/bash
#*************************************************************************************************************
#Author:        kubecc
#Date:           2025-01-08
#FileName:   rocky8_init_k8s.sh
#blog:           www.kubecc.com
#Description:   本脚用于 k8s 部署前系统初始化工作,基于rocky Linux 8.10版本
#Copyright (C): 2025 All rights reserved
#*************************************************************************************************************
COLOR="echo -e \\033[01;31m"
END='\033[0m'

set_mirror() {
    echo "设置阿里云软件源..."
    sed -e 's|^mirrorlist=|#mirrorlist=|g' \
        -e 's|^#baseurl=http://dl.rockylinux.org/contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' \
        -i.bak \
        /etc/yum.repos.d/Rocky-*.repo
    rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org && dnf install -y https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm
    sed -i 's/mirrorlist=/#mirrorlist=/g' /etc/yum.repos.d/elrepo.repo && sed -i 's#elrepo.org/linux#mirrors.tuna.tsinghua.edu.cn/elrepo#g' /etc/yum.repos.d/elrepo.repo
    dnf config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    dnf clean all && dnf makecache
    echo "设置完成,更新源缓存!"
}

install_software() {
    echo "正在安装常用工具和服务..."
    dnf install telnet lsof vim git unzip wget curl tcpdump bash-completion net-tools epel-release rsyslog dnsutils chrony ipvsadm ipset sysstat conntrack libseccomp  perl -y
    echo "软件安装完成!"
}

update_kernel() {
    echo "更新内核版本..."
    dnf --disablerepo=\* --enablerepo=elrepo-kernel list kernel* | grep kernel-lt
    sleep 10
    dnf --disablerepo=\* --enablerepo=elrepo-kernel install -y kernel-lt.x86_64 kernel-lt-devel.x86_64    echo "当前默认启动内核:(grubby --default-kernel)"
}

datetime_chrony() {
    echo "正在配置时间同步..."
    sed -i '/^pool 2.rocky.pool.ntp.org iburst/d' /etc/chrony.conf
    echo "server ntp.aliyun.com iburst" >>/etc/chrony.conf
    echo "server ntp.tuna.tsinghua.edu.cn iburst" >>/etc/chrony.conf
    systemctl enable --now chronyd
    chronyc -a makestep
    echo "当前系统时间:(date)"
}

disable_firewall_selinux() {
    echo "正在关闭并禁用防火墙..."
    systemctl disable --now firewalld
    echo -n "防火墙状态:" && echo -n(firewall-cmd --state)
    echo "正在设置SELinux为disabled状态..."
    sed -ri 's#(SELINUX=).*#\1disabled#' /etc/selinux/config && setenforce 0
    echo -n "当前SELinux状态:" && getenforce
}

kernel_system_config() {
    echo "优化文件"
    echo -e "* soft nofile 65536\n* hard nofile 131072\n* soft nproc 65535\n* hard nproc 655350\n* soft memlock unlimited\n* hard memlock unlimited" >>/etc/security/limits.conf  
    echo "验证配置结果......"
    cat /etc/security/limits.conf | grep -v "#"
    cat <<EOF | tee /etc/modules-load.d/modules.conf
overlay
br_netfilter
EOF
    cat <<EOF | tee /etc/modules-load.d/ipvs.conf
ip_vs
ip_vs_lc
ip_vs_wlc
ip_vs_rr
ip_vs_wrr
ip_vs_lblc
ip_vs_lblcr
ip_vs_dh
ip_vs_sh
ip_vs_fo
ip_vs_nq
ip_vs_sed
ip_vs_ftp
ip_vs_sh
nf_conntrack
ip_tables
ip_set
xt_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip
EOF
    systemctl enable --now systemd-modules-load.service
}

add_k8s_conf() {
    cat <<EOF >/etc/sysctl.d/k8s.conf
# 1.文件系统相关参数
fs.may_detach_mounts = 1
fs.inotify.max_user_watches=89100
fs.file-max=52706963
fs.nr_open=52706963
# 2.内存相关参数
vm.panic_on_oom=0
vm.overcommit_memory=1
# 3.网络相关参数
net.ipv4.conf.all.route_localnet = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl =15
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_orphans = 327680
net.ipv4.tcp_orphan_retries = 3
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.ip_conntrack_max = 65536
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_timestamps = 0
net.core.somaxconn = 16384
net.netfilter.nf_conntrack_max=2310720
EOF
    sysctl --system
}

execute_all() {
    set_mirror
    install_software
    update_kernel
    datetime_chrony
    disable_firewall_selinux
    kernel_system_config
    add_k8s_conf
}
restart_os(){
    echo "正在重启服务器,请稍后重新尝试连接服务器..."
    shutdown -r now
}
menu() {
    while true; do
        echo -e "\E[((RANDOM % 7 + 31));1m"
        cat <<-EOF
********************************************************************
*                           k8s初始化脚本菜单   
* 1.设置源   
* 2.安装必要常用软件
* 3.更新内核
* 4.chrony时间同步
* 5.关闭防火墙&禁用SELinux  
* 6.内核优化配置   
* 7.添加k8s配置文件
* 8.全部执行   
* 9.重启服务器
* 10.退出脚本   
********************************************************************
EOF
        echo -e '\E[0m'

        read -p "请选择相应的编号(1-8): " choice
        case{choice} in
        1)
            set_mirror
            ;;
        2)
            install_software
            ;;
        3)
            update_kernel
            ;;
        4)
            datetime_chrony
            ;;
        5)
            disable_firewall_selinux
            ;;
        6)
            kernel_system_config
            ;;
        7)
            add_k8s_conf
            ;;
        8)
            execute_all
            ;;
        9)
            restart_os
            ;;
        10)
            break
            ;;
        *)
            {COLOR}"输入错误,请输入正确的数字(1-8)!"{END}
            ;;
        esac
    done
}
main() {
    menu
}

main

安装 Docker 服务

# 根据需求安装指定的 docker 版本,本次安装 docker v20.10.24 版本

[root@m01 ~]# dnf list docker-ce.x86_64 --showduplicates | sort -r
Last metadata expiration check: 3:33:06 ago on Tue 21 Jan 2025 03:56:14 PM CST.
Installed Packages
docker-ce.x86_64               3:26.1.3-1.el8                  docker-ce-stable 
docker-ce.x86_64               3:26.1.2-1.el8                  docker-ce-stable 
docker-ce.x86_64               3:26.1.1-1.el8                  docker-ce-stable 
docker-ce.x86_64               3:26.1.0-1.el8                  docker-ce-stable 
docker-ce.x86_64               3:26.0.2-1.el8                  docker-ce-stable 
docker-ce.x86_64               3:26.0.1-1.el8                  docker-ce-stable 
docker-ce.x86_64               3:26.0.0-1.el8                  docker-ce-stable 
docker-ce.x86_64               3:25.0.5-1.el8                  docker-ce-stable 
docker-ce.x86_64               3:25.0.4-1.el8                  docker-ce-stable 
docker-ce.x86_64               3:25.0.3-1.el8                  docker-ce-stable 
docker-ce.x86_64               3:25.0.2-1.el8                  docker-ce-stable 
docker-ce.x86_64               3:25.0.1-1.el8                  docker-ce-stable 
docker-ce.x86_64               3:25.0.0-1.el8                  docker-ce-stable 
docker-ce.x86_64               3:24.0.9-1.el8                  docker-ce-stable 
docker-ce.x86_64               3:24.0.8-1.el8                  docker-ce-stable 
.................................省略..........................................
[root@localhost ~]# dnf install docker-ce-20.10.24 docker-ce-cli-20.10.24 containerd.io docker-buildx-plugin docker-compose-plugin
Docker CE Stable - x86_64                                                                                                                          320 kB/s |  66 kB     00:00  
Dependencies resolved.
===================================================================================================================================================================================
 Package                                       Architecture               Version                                                       Repository                            Size
===================================================================================================================================================================================
Installing:
 containerd.io                                 x86_64                     1.6.32-3.1.el8                                                docker-ce-stable                      35 M
 docker-buildx-plugin                          x86_64                     0.14.0-1.el8                                                  docker-ce-stable                      14 M
 docker-ce                                     x86_64                     3:20.10.24-3.el8                                              docker-ce-stable                      21 M
 docker-ce-cli                                 x86_64                     1:20.10.24-3.el8                                              docker-ce-stable                      30 M
 docker-compose-plugin                         x86_64                     2.27.0-1.el8                                                  docker-ce-stable                      13 M
Installing dependencies:
 container-selinux                             noarch                     2:2.229.0-2.module+el8.10.0+1896+b18fa106                     appstream                             70 k
 docker-ce-rootless-extras                     x86_64                     26.1.3-1.el8                                                  docker-ce-stable                     5.0 M
 fuse-overlayfs                                x86_64                     1.13-1.module+el8.10.0+1896+b18fa106                          appstream                             69 k
 fuse3                                         x86_64                     3.3.0-19.el8                                                  baseos                                54 k
 fuse3-libs                                    x86_64                     3.3.0-19.el8                                                  baseos                                95 k
 libcgroup                                     x86_64                     0.41-19.el8                                                   baseos                                69 k
 libslirp                                      x86_64                     4.4.0-2.module+el8.10.0+1896+b18fa106                         appstream                             69 k
 slirp4netns                                   x86_64                     1.2.3-1.module+el8.10.0+1896+b18fa106                         appstream                             55 k
Enabling module streams:
 container-tools                                                          rhel8   

Transaction Summary
===================================================================================================================================================================================
Install  13 Packages

Total download size: 119 M
Installed size: 471 M
Is this ok [y/N]: y

# 启动 docker 服务
systemctl enable --now docker && docker version

# 配置镜像加速服务
[root@m01 ~]# vim /etc/docker/daemon.json 
{
    "registry-mirrors": [
        "https://hub.littlediary.cn",
        "https://docker.1ms.run"
    ],
    "exec-opts": ["native.cgroupdriver=systemd"]

}
# 重载配置,重启 docker 服务
systemctl daemon-reload && systemctl restart docker.servic

配置主机名

# 1.设置主机 hostname 和 hosts 解析 
hostnamectl set-hostname m01 && bash  # master 节点执行
hostnamectl set-hostname n01 && bash  # worker 节点执行

# 2.两台主机分别加入 hosts 解析
[root@m01 ~]$ vim /etc/hosts 
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.2.71 m01
192.168.2.72 n01

创建 RKE 用户

# 1.创建 rke 用户并设置用户密码
useradd rke && echo 123.com|passwd --stdin rke  # 注意替换为自己的密码

# 2.将 rke 用户加入到 docker 用户组,安装 docker 后可能不会有 docker 这用户组,可以使用 groupadd docker 创建 
usermod -aG docker rke

# 3.为了方便后续操作,我们赋予 rke 用户 sudo 权限,此步骤视情况,谨慎操作
echo "rke ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers  # rke 添加到 /etc/sudoers 文件中,赋予 rke 用户无需密码即可执行任何 sudo 命令的权限
gpasswd -a rke root # 将用户 rke 添加到 root 组
newgrp root  # 切换用户 rke 的主组为 root 组

# 4. m01 节点切换到 rke 用户配置 m01 节点免密登录自己或 n01
[root@m01 ~]# su - rke 
Last login: Tue Jan 21 16:02:27 CST 2025 on pts/1
[rke@m01 ~]ssh-keygen -t rsa -b 4096  ## 生成密钥,一路回车即可
[rke@m01 ~] ssh-copy-id rke@m01 # 按照提示输入 rke 用户密码
[rke@m01 ~]$ ssh-copy-id rke@n01 # 按照提示输入 rke 用户密码

部署 RKE

RKE 提供了三种下载安装包的方法:通过 GitHub、Homebrew 或 MacPorts 都可以下载 RKE 安装包,我们通过Github下载二进制安装包 Github

# 在 m01 节点上使用 root 用户执行

# 1.下载 rke 二进制包
wget https://github.com/rancher/rke/releases/download/v1.3.24/rke_linux-amd64 -O /usr/local/bin/rke

# 2.赋予执行权限
chmod +x /usr/local/bin/rke

# 3.核对版本信息
[root@m01 ~]# rke --version
rke version v1.3.24

生成 K8S 集群部署文件

创建集群配置文件 cluster.yml 的方式有2种:

  • 使用 minimal cluster.yml 创建集群配置文件,然后将您使用的节点的相关信息添加到文件中
  • 使用 rke config 命令创建集群配置文件,然后将集群参数逐个输入到该文件中

我们这里使用 rke config --name cluster.yml 创建部署文件,在当前路径下创建 cluster.yml文件。这条命令会引导您输入创建集群所需的所有参数,详情请参考集群配置选项。配置过程如下:

配置文件内容如下,可以根据需求编辑此文件

创建 K8S 集群

安装 Kubectl

部署 Rancher 可视化面板

我们使用 Rancher 来管理 k8s 集群,UI界面比较适合开发的同学,部署 Rancher ,有2种方法:

  • 一是在 K8S 集群内部部署,直接配置管理集群
  • 二是单独部署 Rancher 应用,导入集群;(不限制 K8S 部署方式)

为了简单快速实现部署,我们直接在 192.168.2.77 服务器上,使用 Docker 服务启动一个 Rancher 应用,启动方法如下:

# 1.启动 Rancher 服务, 注意 rancher 应用与 K8S 版本适配关系
docker run -d --restart=unless-stopped   -p 80:80 -p 443:443   --privileged   rancher/rancher:v2.7-head

启动完成后,我们访问 https://192.168.2.77/ ,我们根据界面引导,登入 Rancher 管理界面,在”集群管理“ 功能中根据界面引导、填好相关信息,复制 Agent 部署信息到 m01 节点上执行

# 在界面点击创建后,我们会得到一条部署命令,我们在 m01 节点上执行部署
[rke@m01 ~]curl --insecure -sfL https://192.168.2.77/v3/import/l4b4k94wwzrw8rvgjbpl2hmrpdwrjjdgq8598lvzm9qch92lw5xkv7_c-m-v4vxch7p.yaml | kubectl apply -f -

# 启动完成后如下,我们会发现多了一个 namespace ,我们就可以在面板上看到新加入的集群信息了
[rke@m01 ~] kubectl  get pods -n cattle-system
NAME                                   READY   STATUS    RESTARTS   AGE
cattle-cluster-agent-dc6f5d649-9jgwh   1/1     Running   0          10h
cattle-cluster-agent-dc6f5d649-bp7rx   1/1     Running   0          10h
rancher-webhook-f874c7d7-j8cc4         1/1     Running   0          10h

Rancher Agents

Rancher 通过 cluster-agent 与集群进行通信(通过 cattle-cluster-agent 调用 Kubernetes API 与集群通讯),并通过 cattle-node-agent 与节点进行通信

如果 cattle-cluster-agent 无法连接到已有的 Rancher Server 也就是 Server-url,集群将保留在 Pending 状态,错误显示为 Waiting for full cluster configuration

总结

  • 我们通过 RKE 单机模式部署了 K8S 集群,并实现了 Rancher 可视化界面的方式管理 K8S 集群,通过这篇文章,大家可以对集群部署过程有个简单的了解
  • 后续我会结合这篇文章内容对整个集群的部署方式和部署内容进行扩展,比如,RKE 集群模式、K8S 集群高可用、使用 Helm 部署 Rancher 应用等等
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇