使用虚拟机搭建 K8S 集群
搭建环境:Macbook Pro(M1 Pro),因此该篇文章同时适用于基于 Apple Silicon 的 macOS
虚拟机使用了这个软件:UTM | Virtual machines for Mac (getutm.app)
安装 Ubuntu Server for ARM(22.04.2),我起了三个虚拟机
安装完成后,重启之后,一直黑屏有个光标在闪,去设置里面把 USB Drive 拖到最下面再启动就行了(Ubuntu 20.04 fails to soft-reboot after install · Issue #3344 · utmapp/UTM (github.com))
然后就可以在宿主机中用 SSH 访问安装好的虚拟机了:
然后就开始配置了,如果网络不通的地方,可以使用镜像,或者你可以配置代理,比如:
- GitHub Raw 镜像:Github RAW 加速服务 | GitMirror
- GitHub:https://gitee.com/mirrors、网达极客社区 (gitclone.com)
因为这部分配置会随着时间发生变化,所以最好是在网上查一下
前置操作
所有虚拟机中都做了下面相同的配置
Shell
把虚拟机的 Shell 改成 zsh + OMZ,原本的不好用:
注:如果这里用了 gitee 的 mirror,要先下载 install.sh
,然后更改一下里面的内容:
安装好,还需要改一下 .zshrc
的配置,不然按删除键是空格:
关闭 swap
为什么关闭 swap?搜了一下网上是这样说的:
Swap 是 Linux 系统用来临时存储内存过剩数据的空间。尽管 SWAP 可以增加系统的可用内存,但在运行 Kubernetes 时,建议禁用 swap。这是因为当内存不足时,Linux 会将一部分内存存储到磁盘交换文件中,从而导致性能下降并可能导致应用程序崩溃。
此外,在执行大型容器操作时,内存压力可能很高。如果系统启用了 swap,那么可能会有一些容器被停止或无法正常工作。为避免这种情况,建议在 Kubernetes 节点上禁用 swap。
在 Kubernetes 的官方文档(安装 kubeadm | Kubernetes)中也说到:
禁用交换分区。为了保证 kubelet 正常工作,你必须禁用交换分区。
安装 Docker
以下内容来自官网:
更改 node /etc/containerd/config.toml
配置,不然有问题,我改过的完整配置文件在这里/etc/containerd/config.toml (github.com):
主要的改动是:
- 我默认这个文件里
disabled_plugins = ["cri"]
,导致kubeadm init
的时候报错container runtime is not running
- 把
sandbox_image
改成了国内的镜像,解决网络问题:registry.aliyuncs.com/google_containers/pause:3.6
,不然kubeadm init
的时候会超时 - 把
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
的SystemdCgroup
改成了true
,这是在这里说的:容器运行时 | Kubernetes
改好要重启一下:
安装 kubeadm
我用了阿里云的镜像:
初始化
「初始化」仅在 master 节点操作
成功后按照提示执行一些命令即可:
另外还会输出一段加入集群的命令,这是其他虚拟机加入集群要使用的:
部署网络插件
「部署网络插件」仅在 master 节点操作
现在执行 kubectl get nodes
,节点还是 NotReady
的状态,需要部署网络插件,我部署的是 Calico:
然后节点状态就变成 Ready 了
配置 Worker 节点
同样参照「安装 Docker」和「安装 kubeadm」,然后执行前面说到的 join
命令就可以了
kubectl 补全
.zshrc
中加这个:
测试
最后测试一下集群能不能正常部署 Pod,创建一个 nignx-deployment.yaml
文件:
执行:
然后执行 kubectl get pods
看看,如果状态都变成 Running 就可以了
参考
尽量参考官方文档即可,下面一些文章主要是含有一些镜像配置相关:
- 重新安装k8s套件 - Lewin's Blog (lewinblog.com)
- 【工具使用】Mac M1 UTM虚拟机安装 - 大梦想家 - 博客园 (cnblogs.com)
- 【K8S】UTM虚拟机安装K8S集群 - 大梦想家 - 博客园 (cnblogs.com)
- 如何在Ubuntu 20.04种配置静态IP地址 | linux资讯 (linux265.com)
- MAC UTM 虚拟机使用 - Blog by Jonathan Dai (xenojoshua.com)
- kubernetes安装(国内环境) - 知乎 (zhihu.com)
- 国内环境Ubuntu-20.04安装Kubernetes-1.23.9 - ClownFish的博客 - 做难做的事