K8S入门系列之三:安装部署高可用K8S集群


环境准备

Vmware Workstation准备4台虚机,提前安装好ubuntu22.04系统,使用1master + 3node架构安装K8S集群,如下表所示:

主机名 IP 角色 操作系统
k8s-master 192.168.126.188 control-plane ubuntu22.04
k8s-node1 192.168.126.189 ubuntu22.04
k8s-node2 192.168.126.190 ubuntu22.04
k8s-node3 192.168.126.191 ubuntu22.04

安装K8S集群

先决条件

  • 下载 Sealos 命令行工具
  • 确保master节点到所有node节点的免密访问(配置公私钥)
  • 每个集群节点应该有不同的主机名。主机名不要带下划线
  • 所有节点的时间需要同步

查看集群镜像

使用Registry Explorer可以查看K8s集群镜像的所有版本

在第二个框直接输入 registry.cn-shanghai.aliyuncs.com/labring/kubernetes
然后点击"Submit Query":

根据列出来的sealos支持的K8S版本,选择其中一个。本文选择当时的最新版v1.29.1。

一键安装K8S集群

目前版本的K8S看起来网络插件已经换成了cilium,基于时下火爆的eBPF的一个网络观测和安全解决方案。在Registry Explorer中选择一个helm和cilium版本,然后执行:

sealos run registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.29.1 registry.cn-shanghai.aliyuncs.com/labring/helm:v3.9.4 registry.cn-shanghai.aliyuncs.com/labring/cilium:v1.14.5 --masters 192.168.126.188 --nodes 192.168.126.189,192.168.126.190 -i /root/.ssh/id_rsa

本人初始化只安装了2个node,另一个node留作验证添加节点。

在网络通畅的情况下(非离线)等待一会(大约2min)就能完成安装,还是非常方便的。

安装nerdctl

新版本的K8S底层已经不再使用docker作为容器引擎,改为使用containerd,但containerd的ctr命令非常难用,推荐使用nerdctr。nerdctl是一个与docker cli风格兼容的containerd的cli工具,github地址:https://github.com/containerd/nerdctl。

nerdctr包含完整版和简易版,完整版还包含了containerd,我们用sealos安装K8S已经自带了containerd,所以下载nerdctr简易版即可。解压后将二进制包放到$PATH下。

因为nerdctr完全兼容docker,所以可以直接用alias将nerdctr别名为docker:

echo "alias docker=/usr/local/bin/nerdctr" >> /etc/profile

安装Metrics-server

安装了metrics-server后才能使用kubectl top命令查看集群资源监控。可以单独安装metrics-server,也可以在安装了Kuboard(下文要安装的图形化界面)之后,由kuboard提供metrics-scraper,也能使用kubectl top命令

安装MetalLB

LoadBalancer是K8S提供的四层网络访问方式,一般云厂商都会提供。但如果是我们自己安装的K8S则没有LoadBalancer。MetalLB是一个开源的LoadBalancer产品,非常适合在自己搭的K8S集群上提供四层网络服务。

准备工作

  1. 修改kube-proxy的配置文件将ipvs的strictARP参数改为true
kubectl edit configmap -n kube-system kube-proxy
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: "ipvs"
ipvs:
  strictARP: true

安装MetalLB

准备yaml文件:metallb.yaml

执行命令安装

kubectl apply -f metallb.yaml

以上操作将MetalLB安装到metalb-system命名空间,包括以下组件:

  • metallb-system/controller deployment:这是一个集群范围内的controller,用于分配IP地址
  • metallb-system/speaker daemonset:This is the component that speaks the protocol(s) of your choice to make the services reachable.
  • service accounts for the controller and speaker, along with the RBAC permissions that the components need to function.

以上yaml并不包括需要设置LoadBalancer的配置文件,MetalLB将会一直处于空闲状态直到我们开始部署一个资源。

以上命令会安装如下CRD资源:IPAddressPool, L2Advertisement等。

配置IP地址池

ipaddresspool.yaml
apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: name: metallb-pool namespace: metallb-system spec: addresses: - 192.168.126.200-192.168.126.210

公告服务IP

l2advertisement.yaml
apiVersion: metallb.io/v1beta1 kind: L2Advertisement metadata: name: metallb-advertisement namespace: metallb-system spec: ipAddressPools: - metallb-pool

使用

编辑任意一个svc,将其type改为LoadBalancer,可以看到EXTERNAL-IP自动从我们配置的IP地址池中按顺序分配了一个可用IP。

安装Kuboard

命令行操作K8S毕竟不太方便,因此还需要为K8S配一个图形化界面。

kuboard是一个K8S多集群管理界面,提供了K8S的集群管理、集群监控、资源操作等功能,官网:https://kuboard.cn/

kuboard有多种安装方式,为便于测试,最终选择了static pod方式安装:
https://kuboard.cn/install/v3/install-static-pod.html

使用此方式安装kuboard时,kuboard将使用该节点的80端口暴露服务,并且将数据存储在/usr/share/kuboard目录下。

在 Kubernetes master 节点上,执行如下两行指令,即可根据提示完成 kuboard 安装。

curl -fsSL https://addons.kuboard.cn/kuboard/kuboard-static-pod.sh -o kuboard.sh
sh kuboard.sh
current ip address is 192.168.126.188
create file /root/kuboard-sa.yaml

kubectl apply -f /root/kuboard-sa.yaml
namespace/kuboard created
serviceaccount/kuboard-admin created
clusterrolebinding.rbac.authorization.k8s.io/kuboard-admin-crb created
serviceaccount/kuboard-viewer created
clusterrolebinding.rbac.authorization.k8s.io/kuboard-viewer-crb created

create file /etc/kubernetes/manifests/kuboard.yaml

restart kubelet

检查状态 待 kuboard-v3-k8s-master 的容器组变为 Running 状态后,则安装成功,可以通过 http://192.168.126.188 访问 kuboard 界面

No resources found in kuboard namespace.

访问kuboard V3用户名密码:admin/Kuboard123

按照网页提示导入集群即可


文章作者: 洪宇轩
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 洪宇轩 !
评论
  目录