介绍
您是否在以高可用模式部署 Kubernetes 并配置远程备份数据库时遇到了困难?本文将为您介绍如何在具有外部数据库 Postgres 的 HA 配置中部署 K3s。
K3s(https://k3s.io/)是用于物联网和边缘计算的认证 Kubernetes 发行版。我将它部署在 IBM Z 大型机中的虚拟机上。我没有选择 etcd,而是使用了 Postgres 作为 K3s 集群的存储方案。我以非 HA 模式部署了 Postgres。想了解如何在 HA 模式下部署 Postgres 的信息,请参阅官方文档:https://www.postgresql.org/docs/13/high-availability.html
Postgres 和 K3s 集群之间的通信是 SSL 安全的。我在 K3s server 前面的第 4 层使用了 Nginx 进行负载均衡。我们以后可能需要添加新的服务器节点或关闭服务器。因此,如果不使用 K3s Server IP 而是使用负载均衡器,我们就能避免这类麻烦,还可以实现 HA。请注意,Nginx 负载均衡器也可能成为单一故障点。有关在 HA 模式下部署 Nginx,请参阅文档:https://www.nginx.com/products/nginx/high-availability/
HA 配置
下图描述了我在 HA 模式下部署具有两个节点的 K3s 集群的方式。即使一台 Server 出现故障,另一台 Server 仍然可以访问,而且负载均衡器能将所有请求路由到可访问的 Server。由于 K3s 的所有组件都是无状态的,即使 Server 出现故障,我们也不会丢失任何信息。所有信息都存储在 Postgres 中,并且必须是 HA。
环境
在开始之前,你需要以下环境:
操作系统 - SLE15SP2 虚拟机 - 5 VCPU - 2 RAM - 8 GB 磁盘 - 30 GB Arch - s390x
以下是我使用的各个虚拟机的 IP 地址,你可以随时在本文查阅这些 IP 地址代表的含义:
K3s Server 1 - 10.161.129.54
K3s Server 2 - 10.161.129.154
K3s Agent - 10.161.129.196
Postgres - 10.161.129.212
Nginx - 10.161.129.118
我在大型机 (s390x) 虚拟机中部署,你也可以在其他任何架构上使用相同的命令。现在,我们来看看安装 Postgres 和 K3s 集群的命令。
安装 Postgres
我在其中一台虚拟机上安装了 postgres10。我们将该虚拟机命名为 Postgres。你可以复制粘贴以下命令来安装 Postgres。为了安全起见,请确保 Postgres 数据库和 K3s 集群之间存在相互 TLS 通信。我使用了自签名证书来识别使用 OpenSSL 创建的 Postgres。
Postgres 虚拟机
- 使用 zypper 安装 Postgres 包:
zypper -n in postgresql10 postgresql10-server
systemctl start postgresql
- 创建 K3s 数据库、用户角色并授予用户角色的所有访问权限:
sudo -u postgres psql
create database K3s;
create user K3s with encrypted password 'K3s';
grant all privileges on database K3s to K3s;
exit;
我们将使用 K3s
数据库来存储集群信息。我们使用 K3s
用户来为 K3s 集群进行 Postgres 数据库身份验证。
- 创建标识 Postgres 服务器的自签名证书并将它们存储在
/var/lib/pgsql/dat