博客
关于我
这应该是最适合国内用户的K3s HA方案
阅读量:440 次
发布时间:2019-03-06

本文共 2127 字,大约阅读时间需要 7 分钟。

K3s HA 实现指南:基于阿里云 RDS 和 SLB 的高可用架构

在生产环境中,高可用性是 Kubernetes(K3s)无论如何都无法回避的问题。随着技术的不断进步,K3s 的高可用(HA)方案也得到了多次优化,现已形成了一套较为稳定的解决方案。本文将详细介绍如何利用阿里云提供的RDS和SLB实现K3s的高可用架构。

HA 方案概述

目前,K3s官方提供了两种高可用方案:

  • 嵌入式数据库的高可用(实验):目前仍处于实验阶段,故本文不做详细介绍,建议关注官方文档。
  • 外部数据库实现高可用:通过搭建一个高可用的外置数据库,K3s支持多种数据库类型(如SQLite、etcd、MySQL、PostgreSQL等),不同数据存储适用于不同的场景。
  • 在国内公有云环境中,阿里云是最受欢迎的选择之一。通过在阿里云上利用虚拟机搭建K3s HA,并对接阿里云的RDS,可以避免自行维护数据库的麻烦。本文选择MySQL作为实践目标,类似于PostgreSQL,本文将不做赘述。


    阿里云实例创建

    为了实现K3s HA,至少需要两台实例。进入阿里云控制台,按照以下步骤创建实例:

  • 在实例管理中,点击“创建实例”,选择合适的实例类型(推荐选择“ ecs.t5.large ”)。
  • 在网络配置中,指定入站和出站的安全组规则,确保K3s节点之间的通信无阻碍。
  • 完成实例创建后,获取实例的内网IP地址,备用于后续数据库配置。

  • 阿里云 RDS 配置

    在阿里云RDS中创建MySQL实例,按照以下步骤操作:

  • 实例类型选择:选择“MySQL 5.7”版本,因为这是K3s官方支持的版本。
  • 白名单设置:在RDS实例的安全组中,添加K3s实例的内网IP,例如rm-2ze64ke7q33bkq3yt.mysql.rds.aliyuncs.com
  • 账号权限设置:创建普通账号(如ksd),并授予相应的权限。
  • 数据库创建:在RDS控制台中,创建名为k3s的数据库,并为账号ksd授予访问权限。
  • 数据库参数优化:在RDS实例的参数模板中,将innodb_large_prefix设置为“ON”,以避免K3s启动时的错误提示。

  • K3s HA 实现

    在两台K3s master节点(如k3s-master-1k3s-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环境将已启动。


    SLB 提供统一访问入口

    为了为多个K3s master节点提供统一的访问入口,可以使用阿里云的SLB(负载均衡器)实现L4层负载均衡。以下是实现步骤:

  • 创建负载均衡实例:在阿里云控制台中,创建负载均衡实例,选择“SLB”的类型。
  • 绑定域名:将域名解绑到负载均衡实例,确保域名解析正确。
  • 负载均衡规则配置:在SLB控制台中,添加HTTP规则,将6443端口转发到后端的两台K3s master节点。
  • K3s master 节点配置:在K3s master节点的/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/

    你可能感兴趣的文章
    MySQL高级-视图
    查看>>
    nacos集群搭建
    查看>>
    Nessus漏洞扫描教程之配置Nessus
    查看>>
    Nest.js 6.0.0 正式版发布,基于 TypeScript 的 Node.js 框架
    查看>>
    Netpas:不一样的SD-WAN+ 保障网络通讯品质
    查看>>
    Netty WebSocket客户端
    查看>>
    Netty工作笔记0011---Channel应用案例2
    查看>>
    Netty工作笔记0014---Buffer类型化和只读
    查看>>
    Netty工作笔记0050---Netty核心模块1
    查看>>
    Netty工作笔记0084---通过自定义协议解决粘包拆包问题2
    查看>>
    Netty常见组件二
    查看>>
    netty底层源码探究:启动流程;EventLoop中的selector、线程、任务队列;监听处理accept、read事件流程;
    查看>>
    Netty核心模块组件
    查看>>
    Netty框架的服务端开发中创建EventLoopGroup对象时线程数量源码解析
    查看>>
    Netty源码—2.Reactor线程模型一
    查看>>
    Netty源码—4.客户端接入流程一
    查看>>
    Netty源码—4.客户端接入流程二
    查看>>
    Netty源码—5.Pipeline和Handler一
    查看>>
    Netty源码—6.ByteBuf原理二
    查看>>
    Netty源码—7.ByteBuf原理三
    查看>>