前置准备:
立即禁用所有活跃的 swap 空间:
sudo swapoff -a
永久移除 Swap:
sudo nano /etc/fstab
找到引用 swap 分区的行(通常包含单词 “swap”)。注释掉这一行(在行首添加 #
),或者直接删除这一行。
保存退出,reboot重启。重启后,系统将不再使用 swap 空间。
在 Kubernetes 环境中,通常建议禁用 swap,因为 Kubernetes 调度器不会考虑 swap 空间,这可能会影响其性能和资源管理决策。
安装和部署:
通过 snap 进行安装:
Snap 是一种软件包管理和部署系统,它允许软件和它的依赖被打包在一起,这样可以在不同的 Linux 发行版之间更容易地共享和部署。
sudo apt install snapd sudo snap install microk8s --classic
安装成功:
设置别名:
sudo snap alias microk8s.kubectl kubectl
同理继续设置:
sudo snap alias microk8s.ctr ctr sudo snap alias microk8s.helm helm sudo snap alias microk8s.helm3 helm3
(debian系统)如果执行 “microk8s.version” 会显示 “bash: microk8s: command not found”
添加 MicroK8s 命令到 PATH:
nano ~/.bashrc
在文件末尾添加:
export PATH=$PATH:/snap/bin
为了使更改立即生效,重新加载 .bashrc
文件:
source ~/.bashrc
非root环境,MicroK8s 运行权限设置:
根据提示操作即可。
状态:
microk8s status
查看是否有报错:
microk8s.inspect
通过 kubectl
获取所有 pods
的运行状况:
kubectl get pods --all-namespaces
查看具体日志:
kubectl describe pod --all-namespaces
重启 MicroK8s 的命令:
microk8s stop && microk8s start
主节点输入命令 “microk8s add-node
” 声明“他是老大”
需要注意的是,我们在主节点生成的命令是一次性的,所以如果我们需要添加多个工作节点,需要重复在第一个节点中执行 microk8s add-node
,获得带有不同的 token
参数的命令。
在另外两台服务器(子节点)上执行命令,加入k8s集群:
在上面的组网操作结束之后,我们回到第一台服务器(主节点) 中,执行下面的命令,检查所有节点的运行状况:
kubectl get pod -o=custom-columns=NAME:.metadata.name,STATUS:.status.phase,NODE:.spec.nodeName --all-namespaces
可以清楚的看到,三台虚拟机上各运行了一个名为 calico-node-*
的 pod
,作为“老大”的 主节点上还额外运行了一个 pod
作为控制集群使用。
到这里,K8s 的安装和集群的部署就结束了!
启动控制面板:
microk8s dashboard-proxy &
遇到报错可以尝试重启解决问题,使用命令 microk8s stop
停止服务,然后使用 microk8s start
重新启动。
把上面的127.0.0.1换成服务器IP即可,一定要注意是https,不是http!
浏览器访问:https://SERVER-IP:10443
然后输入token即可登录面板
之后登录,忘记token可以这样查询:
token=$(microk8s kubectl -n kube-system get secret | grep default-token | cut -d " " -f1) microk8s kubectl -n kube-system describe secret $token
启动容器应用:
现在,我们拥有一个功能齐全的 Kubernetes 集群。用以下命令将部署nginx Web应用程序:
kubectl create deployment nginx --image=nginx:alpine --replicas=2
部署 nginx 后,可以使用以下命令开放端口。
kubectl expose deployment nginx --port 80 --target-port 80 --type NodePort --selector=app=nginx --name nginx
查看服务:
kubectl get services
任意访问一个worker(子节点),都可以看到nginx提示信息:
控制面板:
故障排除:
如果新接入节点报错:microk8s Connection failed. The joining node (IP) is already known to dqlite (504).
解决办法:可以尝试在主节点执行以下操作 “microk8s remove-node <node-ip> --force
” 以确保 dqlite 已从它知道的节点中删除了此 IP。原因:为了不冒损坏数据存储的风险,我们无法添加具有 dqlite 已知 IP 的节点。(参考社区讨论)
参考: