Docker部署MicroK8s:零基础全流程实操教程
Docker部署MicroK8s:零基础全流程实操教程
很多新手在接触Kubernetes时都会被复杂的安装过程劝退,而MicroK8s正是为解决这个问题而生——它是一个轻量级的K8s发行版,非常适合在本地或单机环境学习。
但如果你的宿主机是Windows或Mac,或者希望把K8s完全隔离在容器里,Docker部署MicroK8s就是一个干净又灵活的选择。
下面我从零开始,带你一步步完成整个部署。
什么场景下适合用Docker运行MicroK8s
- 你需要一个独立的Kubernetes环境,但不想污染宿主机系统。
- 你的服务器上已经安装了Docker,不想再装snap或其他包管理。
- 想快速启动/销毁集群用于测试或CI/CD。
这种方式的优势是环境隔离和快速重建,缺点是需要Docker本身支持容器嵌套(即privileged模式),所以对内核有一定要求。
环境准备与前提条件
在开始Docker部署MicroK8s之前,请确认以下条件:
- 一台Linux服务器(Ubuntu 20.04/22.04或CentOS 7+均可),已安装Docker。
- Docker版本建议20.10以上,安装命令:
sudo apt install docker.io -y。 - 服务器内存至少2GB(推荐4GB),CPU支持虚拟化(可通过
grep -E '(vmx|svm)' /proc/cpuinfo检查)。 - 宿主机需要启用
overlay和br_netfilter内核模块,并设置net.bridge.bridge-nf-call-iptables=1。
如果不确定,可以参考以下快速配置:
cat <
一步步在Docker中部署MicroK8s
这里我们使用MicroK8s官方提供的Docker镜像ubuntu/microk8s,直接通过docker run启动一个容器即可。
1. 拉取镜像并启动容器
docker run -d --name microk8s \
--privileged \
-p 16443:16443 \
-v /var/snap/microk8s/common/var/log:/var/log \
-v /var/snap/microk8s/common/etc:/var/snap/microk8s/common/etc \
ubuntu/microk8s:latest
说明:
--privileged是必需的,因为容器内需要运行systemd和内核功能。-p 16443:16443映射了Kubernetes API端口,方便从宿主机通过kubectl访问。- 挂载卷用于持久化日志和配置,可以根据需要去掉。
2. 进入容器并启动MicroK8s
docker exec -it microk8s bash
microk8s status --wait-ready
第一次启动时会自动下载组件并初始化,整个过程大约2-5分钟,等待状态变为microk8s is running即可。
3. 启用常用插件(可选)
microk8s enable dashboard dns registry
启用Dashboard后会输出访问令牌和地址,后面验证时会用到。
4. 从宿主机连接到集群
在宿主机安装kubectl(如果还没有),然后复制容器内的kubeconfig:
docker cp microk8s:/var/snap/microk8s/current/credentials/client.config ~/.kube/config
kubectl get nodes
如果能正常返回一个Ready状态的节点,说明Docker部署MicroK8s已经成功。
常见问题与避坑说明
问题1:容器启动后卡在microk8s status --wait-ready
- 检查宿主机是否开启虚拟化,以及内核模块是否加载。
- 尝试加大容器内存:启动时加上
--memory=4g。 - 如果日志出现
Failed to start snap.daemon,可能是--privileged没加。
问题2:从宿主机kubectl连不上
- 确保容器端口映射正确(
-p 16443:16443)。 - 检查kubeconfig中的server地址:默认是
127.0.0.1:16443,如果虚拟机或远程访问需要改成宿主机IP。
问题3:重启容器后MicroK8s状态丢失
- 因为容器内MicroK8s状态保存在
/var/snap中,如果启动时没有挂载持久化卷,重启后数据会丢失。建议用docker stop/start操作,不要频繁docker rm。
验证MicroK8s是否运行正常
完成部署后,可以执行以下命令验证集群功能:
# 在容器内或通过远程kubectl执行
kubectl get all -A
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80
kubectl get svc
如果能看到Nginx服务正常运行,说明整个Docker部署MicroK8s流程是正确的。
也可以访问Dashboard(通过microk8s kubectl -n kube-system describe secret $(microk8s kubectl -n kube-system get secret | grep admin | cut -d ' ' -f1)获取token)来可视化查看集群状态。
以上就是从零开始用Docker运行MicroK8s的完整步骤。
如果你在操作中遇到其他问题,建议优先检查Docker版本和特权模式是否开启,这也是90%以上报错的根源。
希望这篇教程能帮你快速上手MicroK8s。