banner
NEWS LETTER

Rke2部署Kubernetes集群

Scroll down

本文作者:丁辉

Rke2文档

Rancher中文文档

Rke2部署Kubernetes集群

节点名称 IP Kubernetes角色
k8s-master-1 192.168.1.10 Controlplane,etcd,worker,keepalived-master
k8s-master-2 192.168.1.20 Controlplane,etcd,worker,keepalived-backup
k8s-master-3 192.168.1.30 controlplane,etcd,worker,keepalived-backup
k8s-worker-1 192.168.1.40 worker

Master节点VIP: 192.168.1.100

环境准备

!!!每次部署都写挺麻烦的索性都放在一个文件内了请查看 Kubernetes基础环境准备 ,请按照此文档初始化环境

所有节点执行

  1. 更改主机名

    • 192.168.1.10

      1
      hostnamectl set-hostname k8s-master-1 && bash
    • 192.168.1.20

      1
      hostnamectl set-hostname k8s-master-2 && bash
    • 192.168.1.30

      1
      hostnamectl set-hostname k8s-master-3 && bash
    • 192.168.1.40

      1
      hostnamectl set-hostname k8s-node-1 && bash
  2. 编辑 /etc/hosts 文件

    1
    vi /etc/hosts

    添加如下内容

    1
    2
    3
    4
    192.168.1.10 k8s-master-1
    192.168.1.20 k8s-master-2
    192.168.1.30 k8s-master-3
    192.168.1.40 k8s-node-1
  3. 在三台节点上配置 NetworkManager

    • 配置 cali 和 flannel 的网卡不被 NetworkManager 管理

      1
      mkdir -p /etc/NetworkManager/conf.d

      内容如下

      1
      2
      3
      4
      cat <<EOF > /etc/NetworkManager/conf.d/rke2-canal.conf
      [keyfile]
      unmanaged-devices=interface-name:cali*;interface-name:flannel*
      EOF
    • 重启 NetworkManager

      1
      2
      systemctl daemon-reload
      systemctl restart NetworkManager

安装主节点

Rke2-Github-releases

  1. 安装 RKE2

    1
    curl -sfL https://get.rke2.io | sh -
    • 使用国内源

      1
      curl -sfL http://rancher-mirror.rancher.cn/rke2/install.sh | INSTALL_RKE2_MIRROR=cn INSTALL_RKE2_TYPE="server" sh -
    • 指定版本

      1
      curl -sfL https://rancher-mirror.rancher.cn/rke2/install.sh | INSTALL_RKE2_MIRROR=cn INSTALL_RKE2_TYPE="server" INSTALL_RKE2_VERSION="v1.29.3+rke2r1" sh -
  2. 创建 RKE2 配置文件

    Server 配置参考

    高级选项和配置

    1
    2
    mkdir -p /etc/rancher/rke2/
    vi /etc/rancher/rke2/config.yaml

    内容如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    #server: "https://192.168.1.100:9345" # 全部 Master 启动后解除注释, 重启服务"
    # 创建 token
    token: rke2-create-token
    # 负载均衡统一入口 IP 或 域名
    tls-san:
    - "192.168.1.100"

    # 阿里镜像源加速, 通常由社区志愿者维护, 镜像同步通常存在滞后性
    #system-default-registry: "registry.cn-hangzhou.aliyuncs.com"

    # 节点 NAME
    node-name: k8s-master-1 # 与当前主机名保持一致

    # 节点污点, 禁止 master 节点运行容器
    node-taint:
    - "CriticalAddonsOnly=true:NoExecute"

    disable: # 取消安装 Rke2 默认安装 Charts
    - "rke2-ingress-nginx"
    - "rke2-metrics-server"

    #### 网络配置
    # 指定网络模式, [ ipvs , iptables ] 默认是:iptables
    kube-proxy-arg:
    - "proxy-mode=iptables"
    # Kubernetes 集群域名
    cluster-domain: "cluster.local"
    # 指定要部署的 CNI(Container Network Interface)插件[ none , calico , flannel , canal , cilium ] 默认: canal
    cni: "canal"
    # 指定 Pod IP 的 IPv4/IPv6 网络 CIDR
    cluster-cidr: "10.42.0.0/16"
    # 指定 Service IP 的 IPv4/IPv6 网络 CIDR
    service-cidr: "10.43.0.0/16"
    # 指定用于具有 NodePort 访问权限的 Service 的端口范围
    service-node-port-range: "30000-32767"

    #### ETCD存储配置
    # 快照备份时间
    etcd-snapshot-schedule-cron: "0 */12 * * *"
    # 快照文件保留个数
    etcd-snapshot-retention: "10"
    # 快照存储目录, 默认位置 /var/lib/rancher/rke2/server/db/snapshots
    etcd-snapshot-dir: "${data-dir}/db/snapshots"

    #### 存储目录配置
    # kube-config 文件位置
    write-kubeconfig: "/root/.kube/config"
    # kube-config 文件权限
    write-kubeconfig-mode: "0644"
    # Rke2文件存储目录
    data-dir: "/var/lib/rancher/rke2"

    其他参数配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    # 自定义垃圾回收机制
    kubelet-arg:
    # 设置硬性回收阈值,当节点的文件系统可用空间低于 10% 或内存可用空间低于 2048Mi 时,kubelet 将触发硬性回收,即强制驱逐 Pod 以释放资源
    - "eviction-hard=nodefs.available<10%,memory.available<2048Mi"
    # 置软性回收的宽限期,当节点的文件系统可用空间或镜像文件系统可用空间低于一定阈值时,kubelet 将在触发硬性回收之前等待 30 秒
    - "eviction-soft-grace-period=nodefs.available=30s,imagefs.available=30s"
    # 设置软性回收的阈值,当节点的文件系统可用空间低于 10% 或镜像文件系统可用空间低于 10% 时,kubelet 将触发软性回收,尝试释放资源
    - "eviction-soft=nodefs.available<10%,imagefs.available<10%"

    kube-controller-manager-extra-env:
    # 设置 Kubernetes 集群签名证书的路径
    - "cluster-signing-cert-file=/etc/kubernetes/ssl/kube-ca.pem"
    # 设置 Kubernetes 集群签名密钥的路径
    - "cluster-signing-key-file=/etc/kubernetes/ssl/kube-ca-key.pem"

    kube-apiserver-extra-env:
    # apiserver启用metadata.selfLink 字段
    - "feature-gates='RemoveSelfLink=false'"
  3. 开始部署主节点

    1
    2
    systemctl enable rke2-server.service
    systemctl start rke2-server.service

    启动失败查看日志

    1
    rke2 server --config /etc/rancher/rke2/config.yaml --debug
  4. 配置 RKE2 可执行文件加入到系统的 PATH 中

    1
    echo "export PATH=$PATH:/var/lib/rancher/rke2/bin" >> /etc/profile && source /etc/profile
  5. 验证

    1
    kubectl get node
  6. 配置 crictl 软链接

    1
    ln -s /var/lib/rancher/rke2/agent/etc/crictl.yaml /etc/crictl.yaml
  7. 验证

    1
    crictl ps
  8. 查看集群 Token

    1
    cat /var/lib/rancher/rke2/server/node-token

添加管理节点[2,3节点同理]

  1. 安装 RKE2

    1
    curl -sfL https://get.rke2.io | sh -
    • 使用国内源

      1
      curl -sfL http://rancher-mirror.rancher.cn/rke2/install.sh | INSTALL_RKE2_MIRROR=cn INSTALL_RKE2_TYPE="server" sh -
    • 指定版本

      1
      curl -sfL https://rancher-mirror.rancher.cn/rke2/install.sh | INSTALL_RKE2_MIRROR=cn INSTALL_RKE2_TYPE="server" INSTALL_RKE2_CHANNEL=v1.20 sh -
  2. 创建 RKE2 配置文件

    1
    2
    mkdir -p /etc/rancher/rke2/
    vi /etc/rancher/rke2/config.yaml

    内容如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    # 指定要连接的集群服务器地址
    server: https://192.168.1.100:9345
    # Master 节点 token
    token: <token> #主节点获取的token值
    # 负载均衡统一入口 IP 或 域名
    tls-san:
    - "192.168.1.100"

    # 阿里镜像源加速, 通常由社区志愿者维护, 镜像同步通常存在滞后性
    #system-default-registry: "registry.cn-hangzhou.aliyuncs.com"

    # 节点 NAME
    node-name: k8s-master-2 # 与当前主机名保持一致

    # 节点污点, 禁止 master 节点运行容器
    node-taint:
    - "CriticalAddonsOnly=true:NoExecute"

    disable: # 取消安装 Rke2 默认安装 Charts
    - "rke2-ingress-nginx"
    - "rke2-metrics-server"

    #### 网络配置
    # 指定网络模式, [ ipvs , iptables ] 默认是:iptables
    kube-proxy-arg:
    - "proxy-mode=iptables"
    # Kubernetes 集群域名
    cluster-domain: "cluster.local"
    # 指定要部署的 CNI(Container Network Interface)插件[ none , calico , flannel , canal , cilium ] 默认: canal
    cni: "canal"
    # 指定 Pod IP 的 IPv4/IPv6 网络 CIDR
    cluster-cidr: "10.42.0.0/16"
    # 指定 Service IP 的 IPv4/IPv6 网络 CIDR
    service-cidr: "10.43.0.0/16"
    # 指定用于具有 NodePort 访问权限的 Service 的端口范围
    service-node-port-range: "30000-32767"

    #### ETCD存储配置
    # 快照备份时间
    etcd-snapshot-schedule-cron: "0 */12 * * *"
    # 快照文件保留个数
    etcd-snapshot-retention: "10"
    # 快照存储目录, 默认位置 /var/lib/rancher/rke2/server/db/snapshots
    etcd-snapshot-dir: "${data-dir}/db/snapshots"

    #### 存储目录配置
    # kube-config 文件位置
    write-kubeconfig: "/root/.kube/config"
    # kube-config 文件权限
    write-kubeconfig-mode: "0644"
    # Rke2文件存储目录
    data-dir: "/var/lib/rancher/rke2"
  3. 启动

    1
    2
    systemctl enable rke2-server.service
    systemctl start rke2-server.service

添加计算节点

Agent 配置参考

  1. 安装 RKE2

    1
    curl -sfL https://get.rke2.io | INSTALL_RKE2_TYPE="agent" sh -
    • 使用国内源

      1
      curl -sfL http://rancher-mirror.rancher.cn/rke2/install.sh | INSTALL_RKE2_MIRROR=cn INSTALL_RKE2_TYPE="agent" sh -
    • 指定版本

      1
      curl -sfL https://rancher-mirror.rancher.cn/rke2/install.sh | INSTALL_RKE2_MIRROR=cn INSTALL_RKE2_TYPE="agent" INSTALL_RKE2_CHANNEL=v1.20 sh -
  2. 创建 RKE2 配置文件

    1
    2
    mkdir -p /etc/rancher/rke2/
    vi /etc/rancher/rke2/config.yaml

    内容如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    # 指定要连接的集群服务器地址
    server: https://192.168.1.100:9345
    # Master 节点 token
    token: <token> #主节点获取的token值

    # 节点 NAME
    node-name: k8s-node-1 # 与当前主机名保持一致

    # 阿里镜像源加速, 通常由社区志愿者维护, 镜像同步通常存在滞后性
    #system-default-registry: "registry.cn-hangzhou.aliyuncs.com"

    #### 网络配置
    # 指定网络模式, [ ipvs , iptables ] 默认是:iptables
    kube-proxy-arg:
    - "proxy-mode=iptables"
  3. 部署计算节点

    1
    2
    systemctl enable rke2-agent.service
    systemctl start rke2-agent.service
  4. 计算节点添加角色标签

    1
    kubectl label node ${node} node-role.kubernetes.io/worker=true --overwrite

卸载节点

  1. 删除 node 节点

    1
    kubectl delete node ${node}
  2. 停止 Rke2

    1
    rke2-killall.sh
  3. 卸载 Rke2

    1
    rke2-uninstall.sh

RKE2高可用部署Kubernetes

  1. 编辑 Nginx 配置文件

    1
    vi nginx.conf

    内容如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    events {
    worker_connections 1024;
    }
    stream {
    upstream kube-apiserver {
    server host1:6443 max_fails=3 fail_timeout=30s;
    server host2:6443 max_fails=3 fail_timeout=30s;
    server host3:6443 max_fails=3 fail_timeout=30s;
    }
    upstream rke2 {
    server host1:9345 max_fails=3 fail_timeout=30s;
    server host2:9345 max_fails=3 fail_timeout=30s;
    server host3:9345 max_fails=3 fail_timeout=30s;
    }
    server {
    listen 6443;
    proxy_connect_timeout 2s;
    proxy_timeout 900s;
    proxy_pass kube-apiserver;
    }
    server {
    listen 9345;
    proxy_connect_timeout 2s;
    proxy_timeout 900s;
    proxy_pass rke2;
    }
    }
  2. 启动 Nginx

    1
    docker run -itd -p 9345:9345  -p 6443:6443 -v ~/nginx.conf:/etc/nginx/nginx.conf nginx
  3. 更改之前的 config.yaml

    1
    vi /etc/rancher/rke2/config.yaml

    内容如下

    1
    2
    tls-san:
    - xxx.xxx.xxx.xxx

I'm so cute. Please give me money.

其他文章
cover
Rke2单机快速部署Kubernetes
  • 70/01/01
  • 00:00
  • Kubernetes-部署文档
cover
Docker+IPSEC+FRP实现内网穿透
  • 70/01/01
  • 00:00
  • Kubernetes-网络
目录导航 置顶
  1. 1. Rke2部署Kubernetes集群
    1. 1.1. 环境准备
      1. 1.1.1. 所有节点执行
      2. 1.1.2. 安装主节点
    2. 1.2. 添加管理节点[2,3节点同理]
    3. 1.3. 添加计算节点
    4. 1.4. 卸载节点
    5. 1.5. RKE2高可用部署Kubernetes
请输入关键词进行搜索