环境准备:安装Docker、安装Minikube、安装kubectl、配置Kubernetes集群
说实话,很多初学者在Kubeflow上栽跟头,不是因为Kubeflow本身有多难,而是环境没搭好。我见过太多人花了两天时间装环境,最后发现是Docker版本不对,或者Minikube内存给少了。这一章,咱们就把这些坑提前填上。
核心目标:在你的本地机器上,搭建一个能跑Kubeflow的Kubernetes环境。说白了,就是先造一辆能开的车,后面再装引擎和内饰。
1. 安装Docker——一切的基础
Kubernetes跑容器,容器靠Docker。这是最底层的东西。我个人习惯用Docker Desktop,因为它图形化界面做得不错,对新手友好。
安装步骤(以Ubuntu为例):
# 更新包索引
sudo apt-get update
# 安装依赖包
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
# 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 设置稳定版仓库
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装Docker Engine
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
# 验证安装
sudo docker run hello-world
小技巧:安装完后,记得把当前用户加到docker组里,这样就不用每次敲sudo了。
sudo usermod -aG docker $USER
newgrp docker
我在项目中遇到过一个问题:Docker安装好了,但拉取镜像特别慢。嗯,这里要注意,国内用户一定要配置镜像加速器。你想想看,从Docker Hub拉一个几百MB的镜像,不加速的话,等得花儿都谢了。
# 配置Docker镜像加速器(以阿里云为例)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://你的加速器地址.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
2. 安装Minikube——本地K8s集群
为什么用Minikube?说白了,它是最轻量的本地Kubernetes方案。你不需要三台服务器,一台笔记本就够了。我曾经试过用Kind,但Minikube的生态更成熟,踩坑的人多,解决方案也多。
安装Minikube:
# 下载Minikube二进制文件
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
# 安装
sudo install minikube-linux-amd64 /usr/local/bin/minikube
# 验证
minikube version
启动集群:
# 启动Minikube,分配2个CPU和4GB内存
minikube start --cpus=2 --memory=4096
# 检查状态
minikube status
避坑指南:我曾经因为Minikube内存给少了,导致Kubeflow组件启动失败。Kubeflow对资源要求不低,建议至少给4GB内存。如果你机器配置好,给8GB更稳妥。
启动成功后,你会看到类似这样的输出:
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
3. 安装kubectl——K8s的遥控器
kubectl就是Kubernetes的命令行工具。没有它,你就像开车没有方向盘。我个人习惯用最新稳定版,因为Kubeflow对K8s版本有要求,用新版兼容性更好。
# 下载最新稳定版kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
# 安装
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
# 验证
kubectl version --client
小技巧:配置kubectl自动补全,能省不少时间。
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
4. 配置Kubernetes集群——让一切跑起来
现在三个工具都装好了,但还需要把它们串起来。Minikube启动时会自动生成kubeconfig文件,kubectl默认会读取这个文件。你只需要验证一下连通性。
# 查看集群信息
kubectl cluster-info
# 查看节点状态
kubectl get nodes
# 查看所有命名空间的Pod
kubectl get pods --all-namespaces
如果一切正常,你会看到类似这样的输出:
NAME STATUS ROLES AGE VERSION
minikube Ready control-plane,master 5m v1.24.3
验证集群健康:
# 部署一个测试应用
kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4
# 暴露服务
kubectl expose deployment hello-minikube --type=NodePort --port=8080
# 访问服务
minikube service hello-minikube
为什么会这样?因为Minikube帮你把K8s的控制平面和节点都跑在一个虚拟机里。你想想看,这相当于在一台电脑上模拟了整个数据中心。对于学习和开发来说,完全够用了。
知识体系总览
下面这张图,帮你理清这三个工具的关系:
常见问题排查
| 问题 | 原因 | 解决方案 |
|---|---|---|
| Minikube启动失败 | 虚拟化未开启 | BIOS中开启VT-x/AMD-V |
| kubectl无法连接 | kubeconfig未配置 | 运行 minikube update-context |
| Docker拉取镜像慢 | 未配置镜像加速器 | 配置国内镜像源 |
| Pod一直Pending | 资源不足 | 增加Minikube内存/CPU |
重要提醒:如果你用的是Windows或macOS,建议直接用Docker Desktop自带的Kubernetes功能。但为了和Kubeflow兼容性更好,我还是推荐用Minikube。我在Windows上踩过Docker Desktop K8s和Kubeflow版本不匹配的坑,后来换成Minikube就稳了。
好了,环境准备到这里就结束了。你现在应该有一个能正常运行的Kubernetes集群。下一章,我们会在这个集群上部署Kubeflow。嗯,到时候你会发现,前面的准备工作做得越扎实,后面就越顺利。
公众号:蓝海资料掘金营,微信deep3321