Kubernetes(k8s) 入门教程:安装,部署,控制面板,应用容器

前置准备:

立即禁用所有活跃的 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 的节点。(参考社区讨论)


参考:

https://soulteary.com/2022/10/15/lightweight-and-highly-available-k8s-cluster-construction-solution-microk8s.html

https://xenby.com/b/254-%E6%95%99%E5%AD%B8-%E8%BC%95%E9%87%8F-kubernetes-microk8s-%E5%AE%89%E8%A3%9D%E8%88%87%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97

https://www.cnblogs.com/shanyou/p/16212194.html

https://zhuanlan.zhihu.com/p/594710388

分享你的喜爱

留下评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注