︿
Top

文章目錄

前言
建立支援 Nested Virtualization 的 CentOS 7.5 虛擬主機
          基礎設定
安裝 Kubectl
安裝 KVM2
安裝 Minikube
          Kubernetes Dashboard
          建立第 1 個 Pod 和 hello-minikube 容器
          登入 Minikube VM
          刪除測試用途的 Pod 及容器
          刪除 Minikube VM
參考資源





前言

簡單來說,在學習/測試/研發環境中,我們可以透過「單台」主機結合 Minikube 機制,即可輕鬆快速的建立 Kubernetes Cluster 運作環境。

本文,將實作在 CentOS 7.5 運作環境中安裝 Minikube,當然這台 CentOS 7.5 主機可以在「地端」也可以在「雲端」環境中。值得注意的是,這台 CentOS 7.5 主機必須要支援「巢狀式虛擬化技術」(Nested Virtualization),屆時才能順利建立 Minikube 運作環境。

有關地端主機啟用 Nested Virtualization 機制的詳細資訊,請參考站內文章 網管人雜誌 133 期 - 實作 Hyper-V 巢狀虛擬化測試研發效率大提升

圖、Hyper-V 虛擬化平台巢狀式虛擬化運作架構示意圖

有關 Microsoft Azure 雲端主機啟用 Nested Virtualization 機制的詳細資訊,請參考站內文章 ASDK Journey (2) - 實戰 Azure Stack Development Kit on Azure。當然,倘若考慮整體執行效能及穩定性和完整性,你可以直接使用 Microsoft Azure 的 AKS (Azure Kubernetes Service) 服務,以便快速建立 Kubernetes Cluster 運作環境 (但是燒錢也更快速 😝)。

圖、Nested Virtualization in Azure





建立支援 Nested Virtualization 的 CentOS  7.5 虛擬主機

Microsoft Azure 雲端環境中,需要支援 CentOS 7.5 主機啟用 Nested Virtualization 機制時,請記得選擇的 VM 虛擬主機必須是「Dv3 或 Ev3」系列才行。舉例來說,本文採用 D8s v3 系列的 VM 虛擬主機。

圖、採用的虛擬主機範本為 CentOS-based 7.5

圖、建立 D8s v3 系列的 VM 虛擬主機





基礎設定

有關 CentOS 的基礎設定就不再贅述,有興趣的朋友可以參考站內文章 CentOS 7.4 攻略 - 基礎設定系列文章。順利建立 CentOS 虛擬主機並透過 SSH 登入後,執行下列指令進行安裝桌面環境 (屆時,才方便透過瀏覽器連結 Kubernetes Dashboard):
# yum -y update
# yum -y install epel-release
# yum -y groupinstall "Xfce"


完成後,記得在使用者家目錄新增「.Xclients」檔案,以便屆時 xrdp 能夠在連接時知道採用 Xfce 桌面環境
# cat ~/.Xclients
#!/bin/bash
XFCE="$(which xfce4-session 2>/dev/null)"
exec "$XFCE"
# chmod +x ~/.Xclients


接著,安裝相關套件、組態設定 SELinux、啟用相關服務,以便稍後可以透過 Remote Deskop 連接至 CentOS 7.5 虛擬主機:
# yum -y install xrdp tigervnc-server firefox
# chcon --type=bin_t /usr/sbin/xrdp
# chcon --type=bin_t /usr/sbin/xrdp-sesman
# systemctl enable xrdp && systemctl start xrdp
# systemctl enable xrdp-sesman && systemctl start xrdp-sesman
# netstat -tunpl | grep xrdp


圖、安裝相關套件、組態設定 SELinux、啟用相關服務

在連接至 CentOS 7.5 虛擬主機之前,除了 CentOS 主機本身的防火牆之外,因為本文實作環境採用 Microsoft Azure 公有雲環境,所以記得幫這台 CentOS 7.5 虛擬主機開啟允許「TCP Port 3389」流量能夠通過 NSG 防火牆。

圖、允許 TCP Port 3389 流量能夠通過 NSG 防火牆

圖、透過 Remote Desktop 連結至 CentOS 7.5 虛擬主機

順利透過 Remote Desktop 連結至 CentOS 7.5 虛擬主機後,鍵入使用者帳號及密碼後準備登入剛才安裝的 Xfce 桌面環境。

圖、鍵入使用者帳號及密碼

倘若,無法順利登入 Xfce 桌面環境的話,請檢查「/var/log/xrdp.log」內容看哪裡出錯以利排除障礙。


圖、透過 Remote Desktop 連結 CentOS 主機 xrdp.log 日誌內容

順利通過使用者身分驗證後,即可登入剛才所安裝的 Xfce 桌面環境,並且在剛才安裝相關套件時有安裝 Firefox 套件,所以可以嘗試開啟看看是否能夠順利運作。


圖、登入 Xfce 桌面環境並開啟 Firefox 瀏覽器





安裝 Kubectl

在開始安裝 Kubectl 之前,我們先透過「cat /proc/cpuinfo | grep vmx」指令,再次確認 CentOS 7.5 虛擬主機支援啟用 KVM 機制,以便稍後能夠順利建立及啟動 Minikube 主機。


圖、再次確認 CentOS 主機支援啟用 KVM 機制

請依序執行下列相關指令,以便為 CentOS 主機安裝 kubectl。詳細資訊請參考官網文章 Install and Set Up kubectl - Kubernetes
# cat < /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
# yum install -y kubectl


順利安裝完畢後便可以執行「kubectl version、kubectl cluster-info」指令,確認採用的 kubectl 指令版本資訊。從指令結果可以看到,目前僅會顯示 Client 版本 (因為 Server 部分尚未建立,所以無法順利顯示)。

圖、確認採用的 kubectl 指令版本資訊

因為,後續我們常常需要鍵入 kubectl 等相關指令,所以啟用 CentOS Bash Shell 指令自動完成功能,除了減少打錯字之外也提高鍵入指令的速度。詳細資訊請參考官網文章 Install and Set Up kubectl - Enabling shell autocompletion - Kubernetes
# yum -y install bash-completion
# source <(kubectl completion bash)
# echo "source <(kubectl completion bash)" >> ~/.bashrc






安裝 KVM2

請依序執行下列指令,為 CentOS 主機安裝 KVM2 Driver。詳細資訊請參考官網文章 kubernetes/minikube - kvm2 driver
# yum -y install libvirt libvirt-daemon-kvm qemu-kvm
# wget https://storage.googleapis.com/minikube/releases/latest/docker-machine-driver-kvm2
# install docker-machine-driver-kvm2 /usr/bin/docker-machine-driver-kvm2
# usermod -a -G libvirt $(whoami)
# newgrp libvirt
# systemctl enable libvirtd && systemctl start libvirtd






安裝 Minikube

最新版本的 Minikube 資訊請參考 Releases · kubernetes/minikube,安裝完畢後便可以執行「minikube version」指令,確認採用的 minikube 版本資訊。詳細資訊請參考官網文章 Install Minikube - Kubernetes

當 Minikube 運作環境準備完畢後,便可以執行下列指令建立 Minikube VM 也就是建構「單機 Kubernetes Cluster」運作環境的動作。值得注意的是,依據實作的 CentOS 7.5 主機的硬體資源情況,調整 Minikube VM 的硬體資源配置為「4 vCPU、16 GB vRAM」,倘若未調整的話預設硬體資源配置為「2 vCPU、2 GB vRAM、20 GB vHDD」
# wget https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
# install minikube-linux-amd64 /usr/bin/minikube
# minikube version
# minikube start --cpus=4 --memory=16384 --vm-driver=kvm2
# kubectl version
# kubectl cluster-info
# kubectl get all


圖、安裝 Minikube on CentOS 7.5 with KVM



Kubernetes Dashboard

在開啟 Kubernetes Dashboard 之前,我們透過 xdg-mime 指令組態設定 Xfce 桌面環境的預設瀏覽器為剛才安裝的 Firefox。
# mkdir -p ~/.local/share/applications
# xdg-mime default firefox.desktop x-scheme-handler/http
# xdg-mime default firefox.desktop x-scheme-handler/https
# xdg-mime query default x-scheme-handler/http
# xdg-mime query default x-scheme-handler/https
# xdg-open http://centos.org


圖、組態設定 Xfce 桌面環境的預設瀏覽器為 Firefox

現在,我們可以執行「minikube status」、「minikube service list」確認 Kubernetes Cluster 運作環境資訊,確認 Kubernetes Dashboard 服務運作後,便可以執行「minikube dashboard」指令,系統便會自動開啟預設的瀏覽器連接至 Kubernetes Dashboard 頁面。
# minikube status
# minikube service list
# minikube dashboard


圖、連接至 Kubernetes Dashboard 頁面



建立第 1 個 Pod 和 hello-minikube 容器

確認 Kubernetes Cluster 運作環境正確無誤後,便可以著手測試「部署」(Deployment) 第 1 個測試用途的 Pod 及容器,然後透過 Expose 機制把 Pod 及容器對應至外部網路,之後可以開啟瀏覽器或使用 curl 指令確認是否正確運作。
# kubectl run hello-minikube --image=gcr.io/google_containers/echoserver:1.4 --port=8080
# kubectl expose deployment hello-minikube --type=NodePort
# kubectl get pods
# minikube service list
# curl $(minikube service hello-minikube --url)


圖、建立第 1 個 Pod 和容器



登入 Minikube VM

管理人員可以使用「minikube ip」指令,確認 Minikube VM 所使用的 IP 位址,以及使用「minikube docker-env」指令,了解 Minikube VM 使用的容器環境資訊。甚至想要登入 Minikube VM 的話,只要執行「minikube ssh」即可 (離開請使用 exit 指令),登入 Minikube VM 後,可以看到剛才部署的 hello-minikube 容器資訊。
# minikube ip
# minikube docker-env
# minikube ssh
$ docker ps


圖、登入 Minikube VM



刪除測試用途的 Pod 及容器

測試完畢後,便可以分別執行「kubectl get deployment」、「kubectl delete deployment hello-minikube」、「kubectl get pods」指令,將剛才測試用途的 Pod 及容器刪除。
# kubectl get deploymenbt
# kubectl delete deployment hello-minikube
# kubectl get pods


圖、刪除測試用途的 Pod 及容器



刪除 Minikube VM

倘若,需要刪除 Minikube VM (單機 Kubernetes Cluster) 運作環境的話,那麼可以先執行「minikube stop」指令,即可將 Minikube VM 進行關機的動作,然後執行「minikube delete」指令即可刪除 Minikube VM。
# minikube status
# minikube stop
# minikube delete
# minikube status
# kubectl version --short


圖、刪除 Minikube VM





參考資源

文章標籤: , ,