博客
关于我
这应该是最适合国内用户的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/

    你可能感兴趣的文章
    nodejs中express的使用
    查看>>
    Nodejs中搭建一个静态Web服务器,通过读取文件获取响应类型
    查看>>
    Nodejs中的fs模块的使用
    查看>>
    NodeJS使用淘宝npm镜像站的各种姿势
    查看>>
    NodeJs入门知识
    查看>>
    nodejs包管理工具对比:npm、Yarn、cnpm、npx
    查看>>
    NodeJs单元测试之 API性能测试
    查看>>
    nodejs图片转换字节保存
    查看>>
    nodejs在Liunx上的部署生产方式-PM2
    查看>>
    nodejs基于art-template模板引擎生成
    查看>>
    nodejs字符与字节之间的转换
    查看>>
    NodeJs学习笔记001--npm换源
    查看>>
    NodeJs学习笔记002--npm常用命令详解
    查看>>
    nodejs学习笔记一——nodejs安装
    查看>>
    vue3+Element-plus icon图标无法显示的问题(已解决)
    查看>>
    NodeJS实现跨域的方法( 4种 )
    查看>>
    nodejs封装http请求
    查看>>
    nodejs常用组件
    查看>>
    nodejs开发公众号报错 40164,白名单配置找不到,竟然是这个原因
    查看>>
    Nodejs异步回调的处理方法总结
    查看>>