本文共 2127 字,大约阅读时间需要 7 分钟。
在生产环境中,高可用性是 Kubernetes(K3s)无论如何都无法回避的问题。随着技术的不断进步,K3s 的高可用(HA)方案也得到了多次优化,现已形成了一套较为稳定的解决方案。本文将详细介绍如何利用阿里云提供的RDS和SLB实现K3s的高可用架构。
目前,K3s官方提供了两种高可用方案:
在国内公有云环境中,阿里云是最受欢迎的选择之一。通过在阿里云上利用虚拟机搭建K3s HA,并对接阿里云的RDS,可以避免自行维护数据库的麻烦。本文选择MySQL作为实践目标,类似于PostgreSQL,本文将不做赘述。
为了实现K3s HA,至少需要两台实例。进入阿里云控制台,按照以下步骤创建实例:
在阿里云RDS中创建MySQL实例,按照以下步骤操作:
rm-2ze64ke7q33bkq3yt.mysql.rds.aliyuncs.com。ksd),并授予相应的权限。k3s的数据库,并为账号ksd授予访问权限。innodb_large_prefix设置为“ON”,以避免K3s启动时的错误提示。在两台K3s master节点(如k3s-master-1和k3s-master-2)上执行以下命令,完成K3s HA的配置:
curl -sfL https://docs.rancher.cn/k3s/k3s-install.sh | \INSTALL_K3S_MIRROR=cn \K3S_DATASTORE_ENDPOINT='mysql://ksd:your_password@tcp(rm-2ze64ke7q33bkq3yt.mysql.rds.aliyuncs.com:3306)/k3s' \sh -s - server
执行完成后,K3s HA环境将已启动。
为了为多个K3s master节点提供统一的访问入口,可以使用阿里云的SLB(负载均衡器)实现L4层负载均衡。以下是实现步骤:
/etc/rancher/k3s/k3s.yaml中,将server地址修改为SLB的公网IP地址(如39.106.185.201)。完成上述配置后,验证K3s master节点是否能通过SLB访问。执行以下命令:
kubectl get nodes
如果出现以下错误:
x509: certificate is valid for 10.43.0.1, 127.0.0.1, 172.17.207.15, 172.17.207.16, not 39.106.185.201
这表明K3s master节点的证书不信任SLB的公网IP。为解决此问题,可以在安装命令中添加--tls-san参数,指定允许的SAN域名:
curl -sfL https://docs.rancher.cn/k3s/k3s-install.sh | \INSTALL_K3S_MIRROR=cn \K3S_DATASTORE_ENDPOINT='mysql://ksd:your_password@tcp(rm-2ze64ke7q33bkq3yt.mysql.rds.aliyuncs.com:3306)/k3s' \sh -s - server \--tls-san 39.106.185.201
重新启动K3s后,通过kubectl get nodes验证是否能成功连接到SLB。
本文仅介绍了基于阿里云SLB和RDS实现K3s HA的具体操作流程。虽然未对其他公有云环境进行详细测试,但理论上K3s HA方案在其他云平台上也是可行的。对于非公有云环境,建议根据实际需求选择适合的数据存储和高可用方案。
转载地址:http://shbyz.baihongyu.com/