Skip to content

K3S

一个 K3s HA 集群由以下几个部分组成:

  • 两个或多个server 节点,将为 Kubernetes API 提供服务并运行其他控制平面服务
  • 零个或多个agent 节点,用于运行您的应用和服务
  • 外部数据存储 (与单个 k3s server 设置中使用的嵌入式 SQLite 数据存储相反)
  • 固定的注册地址,位于 server 节点的前面,以允许 agent 节点向集群注册

Agent 通过固定的注册地址进行注册,但注册后直接与其中一个 server 节点建立连接。这是一个由k3s agent进程发起的 websocket 连接,并由作为 agent 进程一部分运行的客户端负载均衡器维护。

6e5e03acde53466762a362fdb1a6030a.png

安装步骤

  1. 环境配置
  2. 创建外部存储
  3. 启动 Server 节点
  4. 配置注册地址
  5. 加入 Agent 节点
  6. 其他软件安装

1.环境配置

虚拟机配置 4核心 CPU + 8G RAM 操作系统使用 CentOS 7.8

修改机器名及与主机

# 修改主机名称
$ vim /etc/hostname

# 将本机 IP 与主机名称绑定
$ vim /etc/hosts

10.0.90.91 manager.rancher # K3S HA 数据库 & Nginx
10.0.90.92 master.rancher # Server 节点1
10.0.90.93 worker.rancher # Server 节点2

# 重启服务
$ service network restart

时钟同步

# 安装 ntpdate
$ yum -y install ntpdate

# 设置时钟同步
$ ntpdate -u ntp.api.bz # NTP服务器(上海)

# 设置时区
$ timedatectl set-timezone 'Asia/Shanghai'

关闭防火墙(或设置防火墙策略打开对应端口)

$ systemctl stop firewalld
$ systemctl disable firewalld

关闭 Selinux

$ setenforce 0
$ sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

2.创建外部存储

安装 Mysql 5.7.x 安装 Nginx 1.18.0

http://nginx.org/download/nginx-1.18.0.tar.gz

3.启动 Server 节点

K3S 需要两个或更多的 server 节点来实现这种 HA 配置

运行k3s server命令时,必须设置datastore-endpoint参数,使用 MySQL 数据库示例

K3S 默认使用 containerd 作为容器服务,需要修改为 docker

# 国内用户下载加速安装命令,需分别在 Server 节点的机器运行
$ curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -s - server --docker \
--datastore-endpoint="mysql://root:password@tcp(10.0.90.91:3306)/k3s'"

#  查看集群运行状态
$ k3s kubectl get nodes

NAME             STATUS   ROLES    AGE     VERSION
worker.rancher   Ready    master   2d20h   v1.18.9+k3s1
master.rancher   Ready    master   2d22h   v1.18.9+k3s1

# 重新加载新的服务配置文件
$ systemctl daemon-reload
# 重启 K3S
$ systemctl restart k3s

# 卸载 K3S
$ /usr/local/bin/k3s-uninstall.sh

在每个 Rancher Server 节点上安装 K3s 时,会在节点上/etc/rancher/k3s/k3s.yaml位置创建一个kubeconfig文件。该文件包含用于完全访问集群的凭据。

# 复制 k3s.yaml 到 ~/.kube/config
$ cp /etc/rancher/k3s/k3s.yaml ~/.kube/config

4.配置注册地址

Agent 节点需要一个 URL 来注册。这可以是任何 server 节点的 IP 或主机名,但在许多情况下,这些节点可能会随着时间的推移而改变。例如,如果您在支持缩放组的云中运行集群,您可能会随着时间的推移上下缩放 server 节点组,导致节点被创建和销毁,从而具有与初始 server 节点不同的 IP。因此,你应该在 server 节点前面有一个稳定的端点,不会随时间推移而改变。

可以使用以下方法来设置此端点:

  • 一个 4 层(TCP)
  • 负载均衡器轮询
  • DNS虚拟或弹性 IP 地址

使用 Nginx 进行 TCP 请求转发,需要安装 Nginx stream 模块

stream {
    upstream rancher_servers_http {
        least_conn;
        server 10.0.90.92:80 max_fails=3 fail_timeout=5s;
        server 10.0.90.93:80 max_fails=3 fail_timeout=5s;
    }
    server {
        listen     80;
        proxy_pass rancher_servers_http;
    }

    upstream rancher_servers_https {
        least_conn;
        server 10.0.90.92:443 max_fails=3 fail_timeout=5s;
        server 10.0.90.93:443 max_fails=3 fail_timeout=5s;
    }

    server {
        listen     443;
        proxy_pass rancher_servers_https;
    }
}

5. 加入 Agent 节点

K3s server 节点默认是可调度的,所以 HA K3s server 集群的最小节点数是两个 server 节点和零个 agent 节点。要添加指定运行您的应用和服务的节点,请将 agent 节点加入到您的集群中。

在 HA 集群中与在单个 server 集群中加入 agent 节点是一样的

需要指定 agent 应该注册到的 URL 和它应该使用的 token

# Server主机地址 https://10.0.90.92(93):6443
# 获取 Token
$ cat /var/lib/rancher/k3s/server/node-token

K103610d3670813e2ccef79dab00e6130b599ac7ef0ff793203bbebca6dddb46b78::server:519175bf3f9171d11cf0304f852894d5

# 安装 Agent
$ curl -sfL https://docs.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=${k3s_url} K3S_TOKEN=${k3s_token} sh -

# 卸载 Agent 节点
$ /usr/local/bin/k3s-agent-uninstall.sh

6. 其他软件安装

Kubectl

# 查看 Kubectl 安装是否成功
$ kubectl version

Client Version: version.Info
    {Major:"1",
    Minor:"18", 
    GitVersion:"v1.18.9+k3s1", 
    GitCommit:"630bebf94b9dce6b8cd3d402644ed023b3af8f90", 
    GitTreeState:"clean", 
    BuildDate:"2020-09-17T19:05:07Z", 
    GoVersion:"go1.13.15", 
    Compiler:"gc", 
    Platform:"linux/amd64"}

Helm

# 下载安装包
$ wget https://get.helm.sh/helm-v3.4.0-linux-amd64.tar.gz


# 解压
$ tar zxvf helm-v3.4.0-linux-amd64.tar.gz


# 将二进制文件移动至/usr/local/bin/
$ mv linux-amd64/helm /usr/local/bin/helm

# 查看 Helm 安装是否成功
$ helm version

version.BuildInfo
{Version:"v3.4.0", GitCommit:"7090a89efc8a18f3d8178bf47d2462450349a004", GitTreeState:"clean", GoVersion:"go1.14.10"}

Docker

# 查看 Docker 安装是否成功
$ docker -v

Docker version 19.03.11, build 42e35e61f3

官方文档

版权所有@2019-2022 中国科学院计算机网络信息中心 京ICP备 09112257号-115