Mac OS下载Microk8s并且搭建一个多节点集群
Mac OS下载multipass,利用multipass创建虚拟机,虚拟机下载microk8s。利用microk8s选择master节点,添加一个节点
文章目录
1.本文介绍
- 因为公司的需要,我认为有必要学习下K8s。
- 本文主要从一名完全不懂Multipass,MicroK8s的新手角度出发,教你理解Multipass工具的作用,如何利用Multipass创建虚拟机。如何在虚拟机里面下载microk8s,并且利用MicroK8s添加一个节点以及其中遇到的各种问题解决方法。学完此篇,你将会得到:熟悉k8s相关的命令。不过有一点,学习此篇,你必须跟着代码操作,而且一定要看我的注释,一定要看我的注释,这样才能理解每一步的作用。
2. 环境准备
- 我用的环境是Mac OS,并且是M1芯片。
- 如下图:我的物理内存是有16GB的。并且磁盘是512GB的,这个在launch一个VM的时候,会有关系。
3. multipass
3.1 概念理解
- 虚拟机(virtual machine),以下都称为VM
- Multipass:Multipass 是在 Linux、Windows 或 macOS 上创建完整 Ubuntu 虚拟机的最快方法,也是使用 MicroK8s 的绝佳基础。一句话,Multipass是一个只需通过一条命令即可快速帮助你创建一台虚拟机的工具。
- MicroK8S :是 CNCF 认证的 Kubernetes 部署环境,可在工作站或边缘设备上运行。作为一个 snap 包,它可以原生的运行所有 Kubernetes 服务,如果需要还可以打包类库和二进制文件。它的安装仅受限于你的下载速度,而删除 MicroK8S 后不会留下任何痕迹。一句话:MicroK8s就是Kubernetes的缩小版。
- K8s和MicroK8s都需要一个Linux内核来工作,因此2者都需要Ubuntu环境,所以要用Multipass来创建一个Ubuntu环境。
- 总结整个步骤如下:
第一步:现在Mac下载multipass,并且安装一个虚拟机。
第二步:利用shell进入到虚拟机外壳,然后下载MicroK8s。
第三步:利用Microk8s的命令添加节点创建多节点集群,说人话就是把多个电脑连接起来。
3.2 Mac下载multipass
一定要明确,结果是把mutipass下载到了Mac系统上,我们可以看到软件的图标的。再不济,直接在Mac的Terminal上用命令:which multipass查看安装的路径,成功安装的软件肯定会有路径的。
#第一步:在Mac打开终端terminal
[➜ ~ sudo snap install multipass
#安装完成multipass之后,可以使用multipass version或者muiltipass list命令查看
[➜ ~ multipass version
multipass 1.11.1+mac
multipassd 1.11.1+mac
#第二步:创建一个vm(虚拟机),也就是一个kubernetes的一个Node,-n就是你要起的名字,可以任意起名,我这里命名为microk8s-vm
# ~ multipass launch -n xx节点名字 -c cpu个数 -m 内存xxGB -d 磁盘xxGB,下面的是MicroK8s官方推荐的虚拟机配置,文章开始我说了我电脑的配置,这个时候就用上了,如果电脑配置不够是不行的。
[➜ ~ multipass launch -n microk8s-vm -c 2 -m 4GB -d 40GB
#成功会显示
Launched:xx名字
#查看成功与否,命令multipass list/ls,看状态是否是Running。不是的话,说明VM没有启动
#这里我解析下这个IPv4。上面那个192开头的是内网地址(INTERNAL-IP),后面解决一些错误的时候会用到
[➜ ~ multipass ls
Name State IPv4 Image
microk8s-vm Running 192.168.64.4 Ubuntu 22.04 LTS
10.1.254.64
#停止一个VM实例
#肃清是指:Purge all deleted instances permanently, including all their data.
[➜ ~ multipass stop microk8s-vm
#删除/肃清一个VM实例,删除实例会遗留一些数据,所以要purge肃清,也就是删除得干净些,两条命令一起使用
[➜ ~ multipass delete microk8s
[➜ ~ multipass purge
#我安装的软件在哪里
[➜ ~ which multipass
/usr/local/bin/multipass
4.MicroK8s
4.1 在虚拟机中载和卸载MicroK8s步骤
明确:本教程MicroK8s安装在了虚拟机中,在exit退出了VM shell之后,用命令which microk8s是查不到的,除非你是用我总结与参考里的那种更快的方法下载MicroK8s。
#在虚拟机开发,安装东西,需要进入VM Shell里面
# 例如:安装microk8s,我公司使用的是1.24版本,2022年12月已经MicroK8s已经1.26版本了
#如何看最新的版本可以到MicroK8s的官网地址看release,地址我贴在这里了:https://microk8s.io/docs/release-notes
#第一步:进入VM Shell,命令:multipass shell xx你上面写的名字。进入shell就是相当于你已经去到虚拟机的世界了,不是原来的Mac世界了
➜ ~ multipass shell microk8s-vm
#结果:文件位置会出现[ubuntu@xx你launch的名字:~$ 的标志,这个也算是Linux系统的标志了,哈哈
#退出虚拟机外壳
[ubuntu@microk8s-vm:~$ exit
#第二步:利用snap命令安装 microk8s
[ubuntu@microk8s-vm:~$ snap install microk8s --classic --channel=latest/stable
# 安装microk8s指定版本
[ubuntu@microk8s-vm:~$ snap install microk8s --classic --channel=1.11/stable
#如果没有权限,则加sudo试试
[ubuntu@microk8s-vm:~$ sudo snap install microk8s --classic --channel=1.24/stable
#返回结果
microk8s (1.24/stable) v1.24.10 from Canonical✓ installed
#安装microk8s之后,使用命令microk8s kubectl get nodes看看micro-vm的状态是否正常:
[ubuntu@microk8s-vm:~$ microk8s kubectl get nodes
#Microk8s安装在了哪里,在shell里面执行
[ubuntu@microk8s-vm:~$ which microk8s
#返回结果,这里我是在虚拟机上运行的命令
snap/bin/microk8s
#退出虚拟机外壳回到Mac世界
[ubuntu@microk8s-vm:~$ exit
#再次执行which microk8s,结果会找不到。
➜ ~ which microk8s
microk8s not found
# 卸载microk8s
[ubuntu@microk8s-vm:~$ snap remove microk8s
#设置别名,如果不行就加sudo。这个意思是把 microk8s.kubectl换成kubectl,命令microk8s.kubectl跟分开写的microk8s kubectl是一样的
#作用:原本你要输入的命令有两个单词,现在可以变为一个单词,也可以不设置。
[ubuntu@microk8s-vm:~$ snap alias microk8s.kubectl kubectl
4.2 下载MicroK8s可能遇到的问题
#安装microk8s之后,使用命令:microk8s kubectl get nodes
#或者是查看microk8s的状态命令:microk8s status --wait-ready都会出现权限问题。问题呈现如下:
ubuntu@microk8s-vm:~$ microk8s kubectl get nodes
[ubuntu@microk8s-vm:~$ microk8s status --wait-ready
Insufficient permissions to access MicroK8s.
You can either try again with sudo or add the user ubuntu to the 'microk8s' group:
sudo usermod -a -G microk8s ubuntu
sudo chown -f -R ubuntu ~/.kube
After this, reload the user groups either via a reboot or by running 'newgrp microk8s'.
##解决:就是三条语句,复制上面的,然后还要newgrp microk8s
[ubuntu@microk8s-vm:~$ sudo usermod -a -G microk8s ubuntu
[ubuntu@microk8s-vm:~$ sudo chown -f -R ubuntu ~/.kube
[ubuntu@microk8s-vm:~$ newgrp microk8s
#再次执行microk8s.kubectl get nodes,Status已经是Ready就说明启动了。后面的VERSION也可以看安装的microk8s是什么版本
#或者microk8s status --wait-ready都没没问题
[ubuntu@microk8s-vm:~$ microk8s.kubectl get nodes
NAME STATUS ROLES AGE VERSION
microk8s-vm Ready <none> 16m v1.24.10-2+123bfdfc196019
5. 利用MicroK8s搭建一个多节点(muti-node)的集群步骤
5.1概念理解
虽然此教程是新手搭建集群,但我认为你必须了解k8s的架构,节点等等概念。我把k8s官网中文教程的k8s架构图和节点的定义都截图了,如下两张图:
我们添加的节点正是虚拟机。不了解k8s架构的可以去k8s的官网看,地址我贴在这里了:k8s官网英文版,对应中文翻译版
节点的
5.2 添加一个节点整体步骤
- 第一步:利用Multipass创建一个新实例node-1
- 第二步:选择Master节点,由Master托管控制面(control plane)
- 第三步:到worker节点下,执行microk8s join命令即可添加一个节点
- 重复此步骤添加节点,就是一个集群了
5.2.1新开一个VM实例
#重复上面创建VM实例的步骤
[➜ ~ multipass launch -n node-1 -c 2 -m 4GB -d 40GB
#列出当前利用multipass创建的VM实例有多少个,都是Running才能进行下一步
[➜ ~ multipass ls
Name State IPv4 Image
microk8s-vm Running 192.168.64.4 Ubuntu 22.04 LTS
10.1.254.64
node-1 Running 192.168.64.5 Ubuntu 22.04 LTS
10.1.84.128
5.2.2 选择Master节点并把worker节点添加到Master管理的集群上面
#进入microk8s-vm的shell
[➜ ~ multipass shell microk8s-vm
#执行microk8s add-node,利运行此命令的 MicroK8s 实例将是集群的主节点,并将托管 Kubernetes的控制平面(control plane)
[ubuntu@microk8s-vm:~$ microk8s add-node
#结果返回如下:
From the node you wish to join to this cluster, run the following:
microk8s join 192.168.64.4:25000/f5e16681775499b4f21a974a9a753ccb/ff09c81e4146
Use the '--worker' flag to join a node as a worker not running the control plane, eg:
microk8s join 192.168.64.4:25000/f5e16681775499b4f21a974a9a753ccb/ff09c81e4146 --worker
If the node you are adding is not reachable through the default interface you can use one of the following:
microk8s join 192.168.64.4:25000/f5e16681775499b4f21a974a9a753ccb/ff09c81e4146
microk8s join fd97:f360:a83f:8a94:5054:ff:fe16:dd06:25000/f5e16681775499b4f21a974a9a753ccb/ff09c81e4146
#在Mac Terminal新建窗口B,直接进入到node-1的shell,现在我们有两个窗口了,上面那个暂且称作A。不开也行,就要来回切换而已。
[➜ ~ multipass shell node-1
#结果:出现Linux系统标志:~$
#在shell里执行microk8s join 192.168.64.4:25000/f5e16681775499b4f21a974a9a753ccb/ff09c81e4146 --worker
[ubuntu@node-1:~$ microk8s join 192.168.64.4:25000/f5e16681775499b4f21a974a9a753ccb/ff09c81e4146 --worker
#如果成功了,就会出现以下的返回结果:
Contacting cluster at 192.168.64.4
The node has joined the cluster and will appear in the nodes list in a few seconds.
Currently this worker node is configured with the following kubernetes API server endpoints:
- 192.168.64.4 and port 16443, this is the cluster node contacted during the join operation.
If the above endpoints are incorrect, incomplete or if the API servers are behind a loadbalancer please update
/var/snap/microk8s/current/args/traefik/provider.yaml
#最后再回到Master节点的shell,利用命令:microk8s kubectl get nodes -o wide查看节点是否已经添加成功
#如下所示,有2个节点,并且SRATUS都是Ready,说明成功了
ubuntu@microk8s-vm:~$ kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
microk8s-vm Ready <none> 24h v1.24.10-2+123bfdfc196019 192.168.64.4 <none> Ubuntu 22.04.1 LTS 5.15.0-60-generic containerd://1.5.13
node-1 Ready <none> 3h53m v1.24.10-2+123bfdfc196019 192.168.64.5 <none> Ubuntu 22.04.1 LTS 5.15.0-60-generic containerd://1.5.13
5.3 microk8s join命令的问题
5.3.1问题呈现
#问题1:
[ubuntu@node-1:~$ microk8s join 192.168.64.4:25000/e13b0cbfc2af260dff05d79ca0502291/ff09c81e4146 --worker
Contacting cluster at 192.168.64.4
Connection failed. The hostname (node-1) of the joining node does not resolve to the IP "192.168.64.5". Refusing join (400).
#问题2:这里需要理解token是什么,其实就是上面add-node命令返回的结果的中间那一串32位数字字母,即下面的:26d2a8e77966e01f35c94f8195df97fb
#每次执行microk8s add-node都会生成一个新的token
microk8s join 192.168.64.4:25000/26d2a8e77966e01f35c94f8195df97fb/ff09c81e4146 --worker
Contacting cluster at 192.168.64.4
Connection failed. Invalid token (500).
5.2.1解决方法
第一步:在worker节点编辑/etc/hosts文件
进入node-1的shell里面编辑/etc/hosts文件,添加一句:192.168.64.5 xx你的VM名。不要写错名字了。如下:
作用:确认你的master节点可以解析worker节点的IP地址
#第一步:vim进入文件,这里要用sudo,不然没有编辑权限。
#第二步:按字母i,进入Insert模式,写好之后,按esc键退出Insert模式,然后输入::wq!退出vim
[ubuntu@node-1:~$ sudo vim /etc/hosts
# Your system has configured 'manage_etc_hosts' as True.
# As a result, if you wish for changes to this file to persist
# then you will need to either
# a.) make changes to the master file in /etc/cloud/templates/hosts.debian.tmpl
# b.) change or remove the value of 'manage_etc_hosts' in
# /etc/cloud/cloud.cfg or cloud-config from user-data
#
127.0.0.1 node-1 node-1
127.0.0.1 localhost
192.168.64.5 node-1
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
~
~
~
~
~
~
~
~
"/etc/hosts" 15L, 559B
第二步:在Master节点编辑/etc/hosts文件,
192.168.64.5 node-1,这个IP其实就是前面说到的INTERNAL-IP,如果不知道,也可在shell中利用microk8s kubectl get nodes -o wide命令获取。
#获取INTERNAL-IP
[ubuntu@node-1:~$ microk8s kubectl get no -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
node-1 Ready <none> 4h28m v1.24.10-2+123bfdfc196019 192.168.64.5 <none> Ubuntu 22.04.1 LTS 5.15.0-60-generic containerd://1.5.13
进入microk8s-vm的shell里面编辑/etc/hosts文件。添加两条:192.168.64.4 microk8s-vm
192.168.64.5 node-1,保存退出vim.
作用:确认你的master节点可以解析worker节点的IP地址添加两条:192.168.64.4 microk8s-vm
[ubuntu@microk8s-vm:~$ sudo vim /etc/hosts
# Your system has configured 'manage_etc_hosts' as True.
# As a result, if you wish for changes to this file to persist
# then you will need to either
# a.) make changes to the master file in /etc/cloud/templates/hosts.debian.tmpl
# b.) change or remove the value of 'manage_etc_hosts' in
# /etc/cloud/cloud.cfg or cloud-config from user-data
#
127.0.1.1 microk8s-vm microk8s-vm
127.0.0.1 localhost
192.168.64.4 microk8s-vm
192.168.64.5 node-1
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
~
~
~
~
~
~
"/etc/hosts" 16L, 593B 11,19 All
第三步:前两步做完之后,要回到Master节点再执行microk8s add-node命令,生成新的token,然后再到node-1的shell,执行microk8s join,因为可能你的上一次生成的token就是没带上这个hosts信息导致Invalid问题的。这回就会出现上面成功的返回结果了。
#回到Master节点microk8s-vm的shell执行microk8s add-node
[ubuntu@microk8s-vm:~$ microk8s add-node
From the node you wish to join to this cluster, run the following:
microk8s join 192.168.64.4:25000/f5e16681775499b4f21a974a9a753ccb/ff09c81e4146
Use the '--worker' flag to join a node as a worker not running the control plane, eg:
microk8s join 192.168.64.4:25000/f5e16681775499b4f21a974a9a753ccb/ff09c81e4146 --worker
If the node you are adding is not reachable through the default interface you can use one of the following:
microk8s join 192.168.64.4:25000/f5e16681775499b4f21a974a9a753ccb/ff09c81e4146
microk8s join fd97:f360:a83f:8a94:5054:ff:fe16:dd06:25000/f5e16681775499b4f21a974a9a753ccb/ff09c81e4146
#到node-1节点的shell执行microk8s join命令
[ubuntu@node-1:~$ microk8s join 192.168.64.4:25000/f5e16681775499b4f21a974a9a753ccb/ff09c81e4146 --worker
成功返回
Contacting cluster at 192.168.64.4
The node has joined the cluster and will appear in the nodes list in a few seconds.
Currently this worker node is configured with the following kubernetes API server endpoints:
- 192.168.64.4 and port 16443, this is the cluster node contacted during the join operation.
If the above endpoints are incorrect, incomplete or if the API servers are behind a loadbalancer please update
/var/snap/microk8s/current/args/traefik/provider.yaml
6. 总结与参考
- 本文主要讲解了一些K8s的相关的概念,再Mac OS上如何从零开始利用Multipass创建虚拟环境,在虚拟环境下安装MicroK8s,如何利用MicroK8s添加节点。在Mac OS上面还有更快的下载MicroK8s的方式,详细参考官方的教程–>Installing MicroK8s on macOS
- 参考: MicroK8s的官网如何创建一个集群–>Create a MicroK8s cluster
- 有疑惑的欢迎提问,我看到的基本会解答。
更多推荐
所有评论(0)