在筆電上使用Hyper-V建立能重覆開機使用的MicroK8s Cluster環境
標題很繞舌,這篇想要處理二個在Hyper-V架設Ubuntu Server與MicroK8s碰到的問題:
- 在筆電上的Hyper-V架設Unbutu Server碰到無法連上網路問題。
- 正常而言,你需要有一張實體網卡,接上有DHCP的網路,那麼Hyper-V裡的VM在正常設定 [外部](external)網路之後,應該都能連上網際網路。
- 不正常的是,現在很多筆電都只有Wi-Fi網卡,預設情況下,Hyper-V不能使用Wi-Fi網卡做「[外部](external)網路」的設定使用。也就是說,你把[外部](external)網路設定到Wi-Fi網卡上時,你會發現VM是無法正常上網的。
- 在Hyper-V把Ubuntu Server與外部網路處理好了能正常上網之後,我們會把MicroK8s架起來(參考:前篇),當然,最重要的是要架成MicroK8s Cluster來使用。剛架好都沒有問題,但當你把MicroK8s Cluster VM關機(或筆電關機)下次再開起來時,你會發現MicroK8s Cluster整組會壞光光,可能連MicroK8s又回到可怕的「microk8s is not running.」狀態。一個重開機就會壞光光的測試環境,光想到要整個重建,就讓人不想碰它了,怎麼還可能拿來學習用。
讓Hyper-V VM使用Wi-Fi上網
我fb討論串有解法;不想看討論串的,直接看參考資料:
能重覆開機使用的MicroK8s Cluster
前面利用一個Loopback技巧來騙過Hyper-V,它不是一張Wi-Fi網卡,但由於DHCP的特性在重開機後取得的IP是動態分配,因此IP Address不固定,這會造成MicroK8s Cluster崩潰。這裡需要Hyper-V再建立一個[內部](Internal)網卡,之後再為VM設定固定IP,最後再透過固定IP來設定MicroK8s Cluster。
建立固定IP網卡,請參考:
- 設定 Microk8s 為固定IP,解決重開機 Hyper-V IP 浮動問題
- 利用 Multipass 在區域網路架設一套 MicroK8s 叢集環境
- 看過Will展示過Multipass的方便性,雖然很心動,但我們的正式區無法整合使用Multipass套件,因此我沒玩Multipass,走的路會大圈一點。
現在Hyper-V裡有[內部](Internal)網卡
- Internal Loopback - DHCP
- Internal - 固定IP
如果安裝Ubuntu沒有一開始配兩張網卡,只有一張Internal Loopback,要另外要加一張[內部](Internal)網卡。這裡要小心,如果一開始安裝Ubuntu時就把兩張網卡設上去,[內部](Internal)這張網卡不能一開始就設定IP Address,不然裝到一半就Crash到嫑嫑的,根本裝不起來。
現在我們Ubuntu上面有兩張網卡,我們要處理一下[內部](Internal)這一張。假設我們現在有三台VM:
- kk8s1
- kk8s2
- kk8s3
sudo nano /etc/netplan/00-installer-config.yaml
在3台VM依照你的IP規劃設定以下組態,以kk8s1為例:
network:
version: 2
ethernets:
eth0:
addresses:
- 192.168.1.10/24
nameservers:
addresses:
- 192.168.1.1
search: []
eth1:
dhcp4: true
我的IP分配如下:
- kk8s1 192.168.1.10
- kk8s2 192.168.1.20
- kk8s3 192.168.1.30
最好先reboot
VM一下,重新ssh
登入就能看到兩張網卡的IPv4資訊:
Memory usage: 34% IPv4 address for eth0: 192.168.1.30
Swap usage: 0% IPv4 address for eth1: 192.168.137.91
另外,在透過microk8s add-node
加入Cluster時候也會出類似找不到主機的錯誤訊息。這是因為MicroK8s會透過DNS反查,目前非網域環境,都是單機的VM,因此我們還需要設定/etc/hosts
:
sudo nano /etc/hosts
加入以下組態到/etc/hosts
:
192.168.1.10 kk8s1
192.168.1.20 kk8s2
192.168.1.30 kk8s3
有了固定IP與/etc/hosts
設定後就能正常架設MicroK8s Cluster:
$ microk8s add-node
From the node you wish to join to this cluster, run the following:
microk8s join 192.168.137.64:25000/f6cbeed2f6612a4aac18b3097b595fd9/36651075c3ab
Use the '--worker' flag to join a node as a worker not running the control plane, eg:
microk8s join 192.168.137.64:25000/f6cbeed2f6612a4aac18b3097b595fd9/36651075c3ab --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.1.10:25000/f6cbeed2f6612a4aac18b3097b595fd9/36651075c3ab
microk8s join 192.168.137.64:25000/f6cbeed2f6612a4aac18b3097b595fd9/36651075c3ab
注意,不要使用DHCP的IP那組來加入Cluster。
$ microk8s kubectl get node
NAME STATUS ROLES AGE VERSION
kk8s1 Ready <none> 5d v1.25.3
kk8s2 Ready <none> 111m v1.25.3
kk8s3 Ready <none> 110m v1.25.3
現在你擁有一個MicroK8s Cluster環境了。
MicroK8s Cluster正確的VM開關機步驟
這裡的步驟和我之前玩Docker Swarm的經驗差不多。
例如,我先停掉kk8s3:
$ microk8s kubectl drain kk8s3 --ignore-daemonsets
$ microk8s kubectl get node
NAME STATUS ROLES AGE VERSION
kk8s1 Ready <none> 5d v1.25.3
kk8s2 Ready <none> 122m v1.25.3
kk8s3 Ready,SchedulingDisabled <none> 121m v1.25.3
在關機或維護之前,要先讓Cluster VM進入drain
狀態。之後,不論你是進行microk8s本身的升級,或Ubuntu主機核心套件的升級而需要重開機,都可以不用客氣的進行作業。注意:關機要把所有Cluster VM全部設為drain
狀態。
microk8s kubectl drain kk8s1 --ignore-daemonsets
microk8s kubectl drain kk8s2 --ignore-daemonsets
microk8s kubectl drain kk8s3 --ignore-daemonsets
確認一下,沒問題後就能一一把VM關機:
$ microk8s kubectl get node
NAME STATUS ROLES AGE VERSION
kk8s3 Ready,SchedulingDisabled <none> 130m v1.25.3
kk8s2 Ready,SchedulingDisabled <none> 131m v1.25.3
kk8s1 Ready,SchedulingDisabled <none> 5d v1.25.3
開機後,一台一台進行uncordon
將STATUS
還原回單純的Ready
狀態,這樣MicroK8s Cluster就會一台一台的把腳接上又活過來了:
microk8s kubectl uncordon kk8s1
microk8s kubectl uncordon kk8s2
microk8s kubectl uncordon kk8s3
這裡可能會有短暫的「microk8s is not running.」狀態而無法使用,給它一點時間去同步狀態一下。
雖然這樣的開關機流程在Hyper-V VM上來看有點麻煩,但如果你把它當成「正式機」來看,這樣的流程才是最正確的處理流程。
小結:
- Ubuntu Server
- Internal Loopback (DHCP - 上網)
- Internal (IP Address - Cluster)
- MicroK8s
- Cluster
kubectl drain
關機設定kubectl uncordon
開機還原
- Cluster
- Hyper-V 檢查點
最後加上合適Hyper-V檢查點(快照),這樣就擁有一個能盡情放手的MicroK8s Cluster實驗環境了。
沒有留言:
張貼留言
感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。