在MacOS上直接使用kubeadm部署Kubernetes集群不可行,因kubeadm依赖Linux内核组件。建议采用以下方案:1. 使用Multipass创建Ubuntu虚拟机(multipass launch --name k8s-node);2. 在虚拟机内执行标准kubeadm流程:a) 安装containerd/kubelet/kubeadm;b) 禁用swap并配置cgroup驱动;c) kubeadm init后安装Calico网络插件;3. 通过kubectl config远程管理。替代方案推荐使用Docker Desktop内置Kubernetes或Minikube(minikube start --driver=hyperkit)更适用于Mac本地开发环境。
在MacOS上使用kubeadm部署Kubernetes(k8s)集群的具体步骤是什么?
-
安装虚拟机(如Multipass)创建Ubuntu实例:
brew install multipass
multipass launch --name master --cpus 2 --mem 2G --disk 10G
multipass launch --name worker1 --cpus 1 --mem 1G --disk 5G
-
在所有节点执行准备命令:
sudo apt update && sudo apt install -y docker.io curl sudo systemctl enable docker curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main' | sudo tee /etc/apt/sources.list.d/kubernetes.list sudo apt update && sudo apt install -y kubeadm kubelet kubectl sudo swapoff -a
-
仅在master节点初始化集群:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
按提示保存join命令 -
配置kubectl访问权限:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
-
安装网络插件:
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
-
worker节点加入集群: 使用步骤3保存的join命令,前加sudo执行
-
在Mac安装kubectl管理集群:
brew install kubectl
从master节点复制/admin.conf到本地~/.kube/config
是否考虑过使用Minikube或Docker Desktop内置的Kubernetes功能,它们在MacOS上的部署更为便捷且兼容性更好?
-
准备虚拟化环境:
- 在MacOS上安装VirtualBox/VMware Fusion及Vagrant。
- 通过Vagrant创建2台Ubuntu虚拟机(1主1从),示例Vagrantfile配置网络、内存(≥2GB/节点)、CPU(≥2核/节点)。
-
节点基础配置:
- 所有节点执行:
sudo swapoff -a sudo sed -i '/ swap / s/^/#/' /etc/fstab echo "<主节点IP> master" | sudo tee -a /etc/hosts
- 设置时间同步:
sudo apt install ntpdate && sudo ntpdate time.windows.com
- 所有节点执行:
-
安装容器运行时及K8s组件:
-
所有节点执行:
# 安装Docker curl -fsSL https://get.docker.com | bash sudo usermod -aG docker $USER # 安装kubeadm/kubelet/kubectl sudo apt-get update && sudo apt-get install -y apt-transport-https curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list sudo apt-get update sudo apt-get install -y kubelet=1.28.0-00 kubeadm=1.28.0-00 kubectl=1.28.0-00 sudo apt-mark hold kubelet kubeadm kubectl
-
-
主节点初始化:
sudo kubeadm init \ --apiserver-advertise-address=<主节点IP> \ --pod-network-cidr=192.168.0.0/16 \ --image-repository registry.aliyuncs.com/google_containers mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
- 记录输出的
kubeadm join
命令备用。
- 记录输出的
-
部署网络插件(Calico):
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml
-
工作节点加入集群:
- 在工作节点执行主节点提供的
kubeadm join
命令(需带--v=5
参数调试时添加)。
- 在工作节点执行主节点提供的
-
MacOS本地管理配置:
- 将主节点的
/etc/kubernetes/admin.conf
复制到MacOS的~/.kube/config
,使用scp
命令。 - 安装kubectl:
brew install kubectl
- 验证:
kubectl get nodes -o wide
- 将主节点的
故障排查要点:
- 节点NotReady:检查calico Pod是否Running、kubelet日志(
journalctl -u kubelet -f
) - 镜像拉取失败:在kubeadm init时指定阿里云镜像仓库
- 证书问题:删除
/etc/kubernetes/pki
后重新init
- 前置条件:在MacOS上安装虚拟机工具(如Multipass或VirtualBox),创建至少2个Ubuntu虚拟机(1个master,1+个worker)。
- 所有节点执行:
- sudo apt update && sudo apt install -y docker.io
- 配置docker镜像加速并设置开机自启:sudo systemctl enable docker
- 安装kubeadm组件: curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - echo 'deb https://apt.kubernetes.io/ kubernetes-xenial main' | sudo tee /etc/apt/sources.list.d/kubernetes.list sudo apt update && sudo apt install -y kubeadm kubelet kubectl
- Master节点初始化: sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=<虚拟机IP> 按提示保存join命令
- 配置kubectl: mkdir -p $HOME/.kube sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
- 安装网络插件: kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
- Worker节点执行master提供的kubeadm join命令加入集群
- 验证:kubectl get nodes 应显示所有节点为Ready状态 注:需确保虚拟机间网络互通,关闭swap(sudo swapoff -a),且需配置国内镜像源加速组件下载。