MicroK8s单机容器编排部署
今天聊一个很适合个人学习容器编排的工具——MicroK8s。
它是 Canonical 公司推出的轻量级 Kubernetes 发行版,所有组件打包在一个 snap 包内,安装简单、资源占用低,非常适合在一台服务器上体验容器编排的核心流程。
下面我会从零开始,逐步指导你完成单机 MicroK8s 的部署和验证。
准备一台干净的 Ubuntu 服务器
MicroK8s 官方推荐使用 Ubuntu 18.04 及以上版本,其他 Linux 发行版也能装但问题较多。
如果你手头没有 Ubuntu,可以考虑用虚拟机或云服务器(比如腾讯云轻量应用服务器)创建一个 Ubuntu 20.04 实例。
最低配置要求:
- 2 核 CPU
- 2 GB 内存(为了跑示例应用,建议 4 GB)
- 20 GB 硬盘
- 能正常访问 snap 仓库(国内服务器可能需要配置 proxy)
确认系统版本:
lsb_release -a
如果输出中有 "Ubuntu" 且版本号 >= 18.04,就满足条件。
安装 MicroK8s 并启动核心组件
MicroK8s 通过 snap 包管理工具安装,Ubuntu 默认自带 snap。
打开终端执行:
sudo snap install microk8s --classic --channel=stable
安装过程会下载约 200 MB 的压缩包,根据网速等待 1-5 分钟。
安装完成后,将当前用户加入 microk8s 用户组,这样就不用每次输 sudo:
sudo usermod -a -G microk8s $USER
newgrp microk8s
注意:newgrp 命令会开启一个新 shell,之后的操作都在这个 shell 里进行。
你也可以直接注销重新登录。
下面启用几个常用插件:DNS(服务发现)、Dashboard(Web 控制台)和 Registry(本地镜像仓库):
microk8s enable dns dashboard registry
启用插件会拉取相应镜像,初次启用耗时稍长。
看到类似 "Enabling DNS ... done" 的提示就表示成功。
验证集群状态并部署第一个应用
先检查节点是否正常:
microk8s kubectl get nodes
正常会输出类似:
NAME STATUS ROLES AGE VERSION
ubuntu Ready 1m v1.28.2
如果 STATUS 显示 Ready,说明集群已就绪。
现在部署一个最简单的 Nginx 应用,用 kubectl create deployment 命令:
microk8s kubectl create deployment nginx-demo --image=nginx:alpine
这条命令会在集群中创建一个名为 nginx-demo 的 Deployment,管理一个运行 nginx:alpine 镜像的 Pod。
查看 Pod 状态:
microk8s kubectl get pods
等待约 30 秒,当 READY 列显示 1/1,STATUS 为 Running 时,说明应用已成功运行。
暴露服务并访问测试
Pod 默认只能在集群内部访问,想从外部(比如你的浏览器)访问 Nginx,需要创建一个 Service 并指定类型为 NodePort:
microk8s kubectl expose deployment nginx-demo --type=NodePort --port=80 --name=nginx-svc
查看 Service 分配的外部端口:
microk8s kubectl get svc nginx-svc
输出中会有一列 "PORT(S)",例如 80:3xxxx/TCP,其中 3xxxx 就是 NodePort 端口(范围 30000-32767)。
记下这个端口。
在宿主机上访问(如果是在云服务器,注意安全组放行该端口):
curl http://localhost:3xxxx
或者直接用浏览器打开 http://服务器公网IP:3xxxx,应该能看到 Nginx 的欢迎页。
避坑指南与常见问题解答
坑1:snap 下载太慢或超时
国内网络访问 snap 商店不稳定。解决方法:配置 snap 代理或更换源。临时方案:用手机热点重试。长期方案:修改 /etc/environment 添加 SNAP_STORE=http://your-proxy(需自建 proxy)。
坑2:内存不足导致 Pod 调度失败
MicroK8s 默认不限制 Pod 资源,但如果宿主机内存小于 2 GB,系统会报 "Insufficient memory"。可以在安装前用 free -h 查看总内存,低于 2 GB 建议升级配置或关闭其他服务。
坑3:Dashboard 无法访问
开启 Dashboard 后,默认只能通过 token 登录。获取 token 命令:
microk8s kubectl -n kube-system describe secret $(microk8s kubectl -n kube-system get secret | grep admin | awk '{print $1}') | grep token: | awk '{print $2}'
然后将 token 粘贴到 Dashboard 登录页。
如果忘记端口,用 microk8s kubectl -n kube-system get svc kubernetes-dashboard 查看 NodePort。
坑4:关机重启后 MicroK8s 未自动启动
MicroK8s 默认作为 systemd 服务运行,但有时重启后 kubectl 命令报连接拒绝。执行:
sudo microk8s start
等待数秒即可恢复。
验证整体功能并清理环境
完成上述步骤后,建议运行 MicroK8s 内置的 inspect 命令检查组件健康:
microk8s inspect
如果一切正常,会输出 "Inspecting system ... Success"。
想清理刚创建的部署和服务?
执行:
microk8s kubectl delete deployment nginx-demo
microk8s kubectl delete svc nginx-svc
如果想完全卸载 MicroK8s(包括所有数据):
sudo snap remove microk8s
本文通过最简步骤演示了 MicroK8s 单机容器编排部署的全过程,从安装到访问应用不过十几分钟。
如果你在实践过程中遇到环境差异导致的问题,建议优先查看 journalctl -u snap.microk8s.daemon-kubelite 日志,或者去社区论坛搜索相似报错。
掌握这个基础流程后,下一步可以尝试部署多副本应用、配置存储卷,逐步深入容器编排的世界。