现在我们有两个节点。这里有一个比较智能的实现是,当集群运行在它的节点k3d-k3s-default-server-0上时,有另一个“节点”作为负载均衡器。虽然这可能对单节点集群没有太大作用,但在我们的HA集群中,它将为我们节省很多精力。
最后,我们从Docker看到两个节点:docker ps
清理资源我们的单节点集群可以帮助我们理解k3d的机制和命令。现在,我们需要在部署HA集群之前清理资源:k3d cluster delete
请注意:出于demo的目的,我们在上方截图中添加了以下命令:
k3d cluster list:列出活跃的k3d集群
kubectl cluster-info:检查集群的连接
docker ps:检查活跃的容器
现在,我们已经使用k3d创建、检查并删除了一个单节点集群。下一步,我们开始尝试HA。
Step3:欢迎来到HA的世界在我们开启命令行之前,让我们对我们即将要部署的东西有一个基本的了解并且了解一些其他额外的要求。
首先,Kubernetes HA有两个可能的设置:嵌入式或外部数据库。我们将采用嵌入式数据库的设置。
其次,K3s有两种不同的技术用于嵌入式数据库的HA:一种是基于dqlite(K3s v1.18),另一种是基于etcd(K3s v1.19+)。
这意味着etcd是当前K3s稳定版中的默认版本,也是本文将使用的版本。Dqlite已经弃用。
在撰写本文时,k3d默认使用k3s v1.18.9-k3s1的版本。你可以通过k3d version来检查:
那么这是否意味着我们需要重新安装支持K3s v1.19的k3d吗?当然不需要!
我们可以使用当前已经安装的k3d版本并且依旧支持K3s v1.19,因为:
k3d可以让我们指定一个特定的k3s docker镜像来使用
所有的k3s版本都是以容器镜像的形式发布的
基于以上原因,我们可以假设一个K3s v1.19作为一个容器镜像存储在Docker Hub中:
https://hub.docker.com/r/rancher/k3s/tags?page=1&name=v1.19
现在,让我们用k3d创建第一个K3s HA集群。
三个控制平面根据Kubernetes HA的最佳实践,我们应该使用至少3个控制平面来创建一个HA集群。
在k3d中我们使用以下命令即可:
k3d cluster create --servers 3 --image rancher/k3s:v1.19.3-k3s2
了解命令:
基础命令:k3d cluster create
选项:
server 3:请求用角色服务器创建三个节点。
image rancher/k3s:v1.19.3-k3s2:指定要使用的K3S镜像
现在我们可以从不同的角度检查我们已经创建的集群
kubectl get nodes --output wide
如你所见,我们从不同方面进行检查以确保我们的节点正常运行。
如果我们看到组件已经部署完成,那么我们的daemonset现在有3个副本,而不是1个:
kubectl get all --all-namespaces
最后一项检查是看pods在哪个节点上运行:
kubectl get podes --all-namespaces --output wide
现在我们有了HA集群的基础。让我们添加额外的控制平面节点,并故意对其进行破坏,看看集群的表现。
扩展集群由于k3d以及我们的集群运行在顶部容器的事实,我们可以快速模拟在HA集群中增加另一个控制平面节点:
k3d node create extraCPnode --role=server --image=rancher/k3s:v1.19.3-k3s2