您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 
 订阅
如何安装一个高可用K3s集群?
 
作者:Janakiram MSV
  2129  次浏览      16 次
 2022-5-12
 
编辑推荐:
本文主要介绍了将利用相同的基础架构来设置和配置一个基于K3s的高可用Kubernetes集群。 希望对你的学习有帮助。
本文来自于微信公众号边缘计算k3s社区,由Linda编辑、推荐。

高可用Kubernetes集群

Kubernetes集群的控制平面大多是是无状态的。唯一有状态的控制平面组件是etcd数据库,它为整个集群充当了唯一事实来源。API Server作为etcd数据库的网关,内部和外部的用户都可以通过它访问和操作状态。

etcd数据库必须配置在HA模式下,以确保没有单点故障。配置高可用(HA)Kubernetes集群的拓扑有两种选择,这取决于如何设置etcd。

第一种拓扑是基于堆栈集群设计的,每个节点与控制平面一起运行一个etcd实例。每个控制平面节点运行一个kube-apiserver、kube-scheduler和kube-controller-manager的实例。kube-apiserver使用负载均衡器暴露给worker节点。

每个控制平面节点创建一个本地etcd成员,并且该etcd成员仅与这一节点的kube-apiserver进行通信。这同样适用于本地的kube-controller-manager和kube-scheduler实例。

这种拓扑结构要求HA Kubernetes集群至少有三种堆栈控制平面模式。Kubeadm,这个流行的集群安装工具,使用这种拓扑来配置Kubernetes集群。

第二种拓扑使用在一组完全不同的主机上安装和管理的外部etcd集群。

在此拓扑中,每个控制平面节点都运行kube-apiserver,kube-scheduler和kube-controller-manager的实例,其中每个etcd主机与每个控制平面节点的kube-apiserver通信。

这种拓扑需要的主机数量是堆栈式HA拓扑的两倍。使用该拓扑的 HA 集群至少需要三个控制平面节点的主机和三个 etcd 节点的主机。

关于启动集群的更多信息,请参考Kubernetes官方文档:

https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/ha-topology/

高可用模式的K3s

由于K3s大多部署在边缘,硬件资源有限,可能无法在专用主机上运行etcd数据库。部署架构与堆栈式拓扑极为类似,只是事先配置了etcd数据库。

在这次教程中,我使用的是运行在Intel NUC硬件上的裸机基础设施,其映射如下:

参考本系列教程的前一部分,在IP地址为10.0.0.60、10.0.0.61和10.0.0.62的前三个节点上安装和配置etcd。

安装K3s server

让我们先在所有安装etcd的节点中安装服务器。SSH进入第一个节点,并设置以下环境变量。这假定你按照前面教程中的步骤配置了etcd集群。

export K3S_DATASTORE_ENDPOINT='https://10.0.0.60:2379,
https://10.0.0.61:2379,
https://10.0.0.62:2379'
export K3S_DATASTORE_CAFILE='/etc/etcd/etcd-ca.crt'
export K3S_DATASTORE_CERTFILE='/etc/etcd/server.crt'
export K3S_DATASTORE_KEYFILE='/etc/etcd/server.key'

 

这些环境变量指示K3s安装程序利用现有的etcd数据库进行状态管理。

接下来,我们将在K3S_TOKEN中填充一个agent加入集群时使用的token。


export K3S_TOKEN="secret_edgecluster_token"

 

我们准备好在第一个节点中安装server。运行以下命令来启动进程:

curl -sfL https://get.k3s.io | sh -

 

在节点2和节点3中重复这些步骤以启动额外的server。

此时,你有一个3节点的K3s集群,它在高可用模式下运行控制平面和etcd组件。

sudo kubectl get nodes

 

你可以使用以下命令检查服务状态:

sudo systemctl status k3s.service

 

安装K3s Agent

随着控制平面的建立和运行,我们可以轻松地将worker节点获agent添加到集群中。我们只需要确保使用与server关联的相同token。

SSH进入其中一个worker节点并运行命令。

export K3S_TOKEN="secret_edgecluster_token"

export K3S_URL=https://10.0.0.60:6443

 

环境变量K3S_URL是提示安装程序将节点配置为连接到现有服务器的agent。

最后,运行与我们上一步相同的脚本。

curl -sfL https://get.k3s.io | sh -

 

检查是否新节点已经添加到集群。

Congratulations!你已经成功安装了一个高可用K3s集群,并备份了一个外部的etcd数据库。

验证etcd数据库

让我们确保k3s集群正在使用etcd数据库进行状态管理。

我们将在K3s集群内启动一个简单的NGINX Pod。

sudo kubectl run nginx --image nginx --port 80

sudo kubectl get pods

 

Pod规范和状态应该存储在etcd数据库中。让我们尝试通过etcdctl CLI来检索。安装jq工具来解析JSON输出。

由于输出是以base64编码的,我们将通过base64工具对其进行解码。

etcdctl --endpoints https://10.0.0.61:2379 \

--cert /etc/etcd/server.crt \

--cacert /etc/etcd/etcd-ca.crt \

--key /etc/etcd/server.key get /registry/pods/default/nginx \

--prefix=true -w json | jq -r .kvs[].value | base64 -d

 

输出显示 pod 在 etcd 数据库中有一个相关的键和值。特殊字符没有正确显示,但它确实向我们展示了足够的关于pod的数据。

在本文中,我们了解了如何在高可用模式下设置和配置K3s集群,希望可以帮助你在边缘端更顺利地进行实践。

 

   
2129 次浏览       16
相关文章

聊聊云原生和微服务架构
Serverless:微服务架构的终极模式
如何实现微服务架构下的分布式事务?
微服务下的数据架构设计
相关文档

微服务和云原生应用
微服务架构原理和设计方法
0到3000万用户微服务之旅
微服务在微信后台的架构实践
相关课程

微服务架构设计与实践
领域驱动+微服务架构设计
云计算、微服务与分布式架构
云平台与微服务架构设计

最新活动计划
MBSE(基于模型的系统工程)4-18[北京]
自然语言处理(NLP) 4-25[北京]
基于 UML 和EA进行分析设计 4-29[北京]
以用户为中心的软件界面设计 5-16[北京]
DoDAF规范、模型与实例 5-23[北京]
信息架构建模(基于UML+EA)5-29[北京]
 
 
最新文章
云原生架构概述
K8S高可用集群架构实现
容器云管理之K8S集群概述
k8s-整体概述和架构
十分钟学会用docker部署微服务
最新课程
云计算、微服务与分布式架构
企业私有云原理与构建
基于Kubernetes的DevOps实践
云平台架构与应用(阿里云)
Docker部署被测系统与自动化框架实践
更多...   
成功案例
北京 云平台与微服务架构设计
通用公司GE Docker原理与实践培训
某军工研究单位 MDA(模型驱动架构)
知名消费金融公司 领域驱动设计
深圳某汽车企业 模型驱动的分析设计
更多...