Appearance
K3S
一个 K3s HA 集群由以下几个部分组成:
- 两个或多个server 节点,将为 Kubernetes API 提供服务并运行其他控制平面服务
- 零个或多个agent 节点,用于运行您的应用和服务
- 外部数据存储 (与单个 k3s server 设置中使用的嵌入式 SQLite 数据存储相反)
- 固定的注册地址,位于 server 节点的前面,以允许 agent 节点向集群注册
Agent 通过固定的注册地址进行注册,但注册后直接与其中一个 server 节点建立连接。这是一个由k3s agent进程发起的 websocket 连接,并由作为 agent 进程一部分运行的客户端负载均衡器维护。
安装步骤
- 环境配置
- 创建外部存储
- 启动 Server 节点
- 配置注册地址
- 加入 Agent 节点
- 其他软件安装
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