环境准备
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
准备工作
- 修改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地址池
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: metallb-pool
namespace: metallb-system
spec:
addresses:
- 192.168.126.200-192.168.126.210
公告服务IP
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有多种安装方式,为便于测试,最终选择了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
按照网页提示导入集群即可