作者介绍

Janakiram MSV是Janakiram & Associates的首席分析师,也是国际信息技术学院的兼职教师。他也是Google

Qualified

Developer、亚马逊认证解决方案架构师、亚马逊认证开发者、亚马逊认证SysOps管理员和微软认证Azure专业人员。

Janakiram是云原生计算基金会的大使,也是首批Kubernetes认证管理员和Kubernetes认证应用开发者之一。他曾在微软、AWS、Gigaom

Research等知名公司工作。

之前的文章中,我们已经了解到如何设置一个多节点的etcd集群。在本文中,我们将利用相同的基础架构来设置和配置一个基于K3s的高可用Kubernetes集群。

高可用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-apiserverkube-schedulerkube-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集群,希望可以帮助你在边缘端更顺利地进行实践。

如何安装一个高可用K3s集群?的更多相关文章

  1. 安装ORACLE高可用RAC集群11g执行root脚本的输出信息

    安装ORACLE高可用RAC集群11g执行root脚本的输出信息 作者:Eric 微信:loveoracle11g [root@node1 ~]# /u01/app/oraInventory/orai ...

  2. 安装ORACLE高可用RAC集群11g校验集群安装的可行性输出信息

    安装ORACLE高可用RAC集群11g校验集群安装的可行性输出信息 作者:Eric 微信:loveoracle11g [grid@node1 grid]$ ./runcluvfy.sh stage - ...

  3. 仅需60秒,使用k3sup快速部署高可用K3s集群

    作者简介 Dmitriy Akulov,连续创业者,16岁时搭建了开源CDN公共服务jsDelivr的v1版本.目前是边缘托管平台appfleet创始人. 原文链接: https://ma.ttias ...

  4. 基于Containerd安装部署高可用Kubernetes集群

    转载自:https://blog.weiyigeek.top/2021/7-30-623.html 简述 Kubernetes(后续简称k8s)是 Google(2014年6月) 开源的一个容器编排引 ...

  5. 如何设置一个生产级别的高可用etcd集群

    在之前的文章中,我们详细介绍了K3s的架构以及部署场景,给尚未了解K3s的朋友提供了一个很好的入门方向.那么,在本文中我们将探索如何配置一个3节点的etcd集群,它将会被用于高可用.多节点的K3s集群 ...

  6. 构建高可用ZooKeeper集群

    ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效.高可用的分布式协调服务,提供了诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知和分布式锁等分布式基础服务.由于 Zo ...

  7. 构建高可用ZooKeeper集群(转载)

    ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效.高可用的分布式协调服务,提供了诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知和分布式锁等分布式基础服务.由于 Zo ...

  8. 企业运维实践-还不会部署高可用的kubernetes集群?使用kubeadm方式安装高可用k8s集群v1.23.7

    关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 文章目录: 0x00 前言简述 ...

  9. 搭建高可用mongodb集群(四)—— 分片(经典)

    转自:http://www.lanceyan.com/tech/arch/mongodb_shard1.html 按照上一节中<搭建高可用mongodb集群(三)-- 深入副本集>搭建后还 ...

随机推荐

  1. TypeScript实现设计模式——生成器模式

    生成器模式是一种在TypeScript/JavaScript中非常常见的创建型设计模式,它使你能够分步骤创建复杂对象.当你需要创建一个可能有许多配置选项的对象时, 该模式会特别有用. 问题 假设我们需 ...

  2. React 服务端渲染方案完美的解决方案

    最近在开发一个服务端渲染工具,通过一篇小文大致介绍下服务端渲染,和服务端渲染的方式方法.在此文后面有两中服务端渲染方式的构思,根据你对服务端渲染的利弊权衡,你会选择哪一种服务端渲染方式呢? 什么是服务 ...

  3. MySQL 5.7安装与配置

    Windows 一.到MySQL官网下载压缩版本,下载后文件为mysql-5.7.20-winx64.zip,解压到D:\develop\mysql-5.7.20-winx64.   二.在系统变量P ...

  4. springboot项目打包瘦身

    默认情况下,Spring Boot 项目发布时会将项目代码和项目的所有依赖文件一起打成一个可执行的 jar 包.但如果项目的依赖包很多,那么这个文件就会非常大.这样每次即使只改动一点东西,就需要将整个 ...

  5. 第三周:java面向对象部分总结(2)

    <!--此处接上周--> 3.相关接口 对对象的排序,可以通过以下两种方法: 1.实现Comparable接口,重写compareTo方法: 2.Comparator<>比较器 ...

  6. 日志分析平台ELK之日志收集器logstash常用插件配置

    前文我们了解了logstash的工作流程以及基本的收集日志相关配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13761906.html:今天我们来了解下l ...

  7. Code Test(2)

    1110test T1:Inversion逆序数对1(inversion.cpp/in/out 1s 256M)给定N的值,要求找出一个N的全排列,这个全排列中,逆序数有M对.这样的结果会存在多个解, ...

  8. 实验 4:Open vSwitch 实验——Mininet 中使用 OVS 命令

    一.安装目的 Mininet 安装之后,会连带安装 Open vSwitch,可以直接通过 Python 脚本调用Open vSwitch 命令,从而直接控制 Open vSwitch,通过实验了解调 ...

  9. MySQL 向表中插入、删除数据

    一.向表中插入一条信息 1.查看表中的数据 mysql> SELECT * FROM user; +----+---------+----------+ | id | account | pas ...

  10. 完全小白入门:python的下载和安装

    1. 打开官网www.python.org,选择Downloads