在筆電上使用Hyper-V建立能重覆開機使用的MicroK8s Cluster環境

在筆電上使用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網卡,請參考:

現在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

開機後,一台一台進行uncordonSTATUS還原回單純的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 開機還原
  • Hyper-V 檢查點

最後加上合適Hyper-V檢查點(快照),這樣就擁有一個能盡情放手的MicroK8s Cluster實驗環境了。

沒有留言:

張貼留言

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。