1. 程式人生 > >使用Minikube部署本地Kubernetes叢集(二十八)

使用Minikube部署本地Kubernetes叢集(二十八)

前言               

使用Minikube部署本地k8s叢集相對比較簡單,非常推薦將其用於本地k8s開發環境,唯一麻煩點的僅僅是網路問題。

在本篇教程中,我們使用了國內的映象來完成本地k8s叢集的搭建。如果搭建過程中出現錯誤,建議使用minikube delete之後再重新搭建。


 

目錄

使用Minikube部署本地Kubernetes叢集 

1. 什麼是Kubernetes叢集? 

2. 使用Minikube建立本地Kubernetes實驗環境 

1)什麼是Minikube? 

2)Minikube支援的功能 

3)Windows 10下安裝 

4)開啟Minikube視覺化面板 

5)常見錯誤 

6)Linux下安裝 


 

使用Minikube部署本地Kubernetes叢集

什麼是Kubernetes叢集?

Kubernetes 用於協調高度可用的計算機叢集,這些計算機被連線作為單個工作單元。 Kubernetes允許使用者將容器化的應用程式部署到叢集,而不必專門將其繫結到單個計算機。為了利用這種新的部署模型,應用程式需要被容器化。容器化應用程式比過去的部署模型更靈活和可用——而不是將應用程式直接安裝到特定機器上,作為深入整合到主機中的軟體包。Kubernetes 在一個叢集上以更有效的方式自動分發和排程容器應用程式。

Kubernetes 叢集由兩種型別的資源組成:

  • Master:即叢集的排程節點,負責管理叢集,例如排程應用程式、維護應用程式的所需狀態、擴充套件應用程式和滾動更新。
  • Nodes:即應用程式實際執行的工作節點,可以是物理機或者虛擬機器。每個工作節點都有一個 Kubelet(節點代理),它是管理節點並與Kubernetes Master節點進行通訊的代理。節點上還應支援容器操作,例如 Docker或rkt。一個 Kubernetes 工作叢集至少有三個節點。

當我們在Kubernetes上部署應用程式時, Master會啟動應用程式容器,並排程容器在叢集的Nodes上執行,而Nodes使用Master公開的Kubernetes API與Master進行通訊。終端使用者還可以直接使用 Kubernetes 的API與叢集互動。

 

使用Minikube建立本地Kubernetes實驗環境

在大部分情況下,我們需要在本地玩轉Kubernetes,以便於Kubernetes應用程式的開發和調測。搭建完整的Kubernetes叢集畢竟太重,那麼使用Minikube則是不二選擇。

什麼是Minikube?

Minikube 是一個輕量級的Kubernetes實現,會在本機建立一臺虛擬機器,並部署一個只包含一個節點的簡單叢集。 Minikube適用於Linux, Mac OS和Windows系統。Minikube CLI提供了叢集的基本引導操作,包括啟動、停止、狀態和刪除。

Minikube的目標是成為本地Kubernetes應用程式開發的最佳工具,並支援所有適合的Kubernetes功能!

官方GitHub地址:https://github.com/kubernetes/minikube


Minikube支援的功能

Minikube支援以下Kubernetes功能:

  • DNS
  • NodePorts(可使用“minikube service”命令來管理)
  • ConfigMaps和Secrets
  • 儀表板(Dashboards,minikube dashboard)
  • 容器執行時:Docker,rktCRI-Ocontainerd
  • Enabling CNI(容器網路介面)
  • Ingress
  • LoadBalancer(負載均衡,可以使用“minikube tunnel”命令來啟用)
  • Multi-cluster(多叢集,可以使用“minikube start -p <name>”命令來啟用)
  • Persistent Volumes
  • RBAC
  • 通過命令配置apiserver和kubelet

 

Windows 10下安裝

1.安裝要求

Windows必須支援虛擬化,可以執行“systeminfo”命令來確認。如果支援虛擬化,則【Hyper-V要求】一欄如下圖所示:

 

C:\Users\Lys_Desktop\Documents\Tencent Files\512982554\Image\C2C\M%YWM2VE`R)$F2KF`{~M{LU.jpg

如果已經裝了Hyper-V,則提示如下:

 

 

2.啟用Hyper-V(推薦)

可以通過【程式和功能】=》【開啟或關閉 Windows 功能】=》勾選【Hyper-V】來啟用Hyper-V,也可以通過管理員執行以下Powershell指令碼:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All

如果不支援啟用Hyper-V,大家可以安裝“VirtualBox”,而且目前“VirtualBox”是官方預設的虛擬機器管理程式。

 

3.安裝Minikube和kubectl

  • 使用Chocolatey安裝Minikube(推薦)

Chocolatey我們前面已經進行了講解,這裡面我們可以使用Chocolatey以管理員身份一鍵安裝Minikube:

choco install minikube kubernetes-cli

 

PS C:\WINDOWS\system32> choco install minikube kubernetes-cli

Chocolatey v0.10.11

Installing the following packages:

minikube;kubernetes-cli

By installing you accept licenses for the packages.

Minikube v1.1.1 [Approved]

minikube package files install completed. Performing other installation steps.

ShimGen has successfully created a shim for minikube.exe

The install of minikube was successful.

Software install location not explicitly set, could be in package or

default install location if installer.

kubernetes-cli v1.14.3 already installed.

Use --force to reinstall, specify a version to install, or try upgrade.

Chocolatey installed 1/2 packages.

See the log for details (C:\ProgramData\chocolatey\logs\chocolatey.log).

Warnings:

- kubernetes-cli - kubernetes-cli v1.14.3 already installed.

Use --force to reinstall, specify a version to install, or try upgrade.

  • 通過下載安裝包安裝

下載地址:https://github.com/kubernetes/minikube/releases/

需下載【minikube-windows-amd64.exe】,下載完成後,需要重新命名為“minikube.exe”進行使用。

 

4.啟動Minikube

Minikube在Windows上支援使用VirtualBox和Hyper-V,這裡我們使用Hyper-V進行實踐。

我們需要執行“minikube start”命令來啟動Minikube。這個過程中會下載Minikube ISO映象,如果Minikube ISO映象下載失敗,可複製連結手工下載或者配置容器代理再試。如果是手工下載,下載後,請將ISO檔案放置C:\Users\<使用者名稱>\.minikube\cache\iso目錄,然後再次執行“start”命令。具體命令如下所示:

需使用管理員執行以下Powershell指令碼:

minikube.exe start --registry-mirror=https://registry.docker-cn.com --vm-driver="hyperv" --memory=4096

其中,--registry-mirror引數用於設定映象服務地址,這裡設定為國內映象服務地址。--vm-driver引數設定了虛擬機器型別,這裡我們使用Hyper-V,預設是VirtualBox。--memory引數設定了虛擬機器記憶體大小。執行此指令碼後,會使用預設的Hyper-V的虛擬交換機,我們也可以使用引數--hyperv-virtual-switch進行指定指定的虛擬網路交換機。虛擬網路交換機設定如下圖所示:

 

在中國,由於網路和防火牆的原因,通常會無法拉取k8s相關映象或者下載速度過於緩慢,因此,我們可以通過引數--image-repository來設定Minikube使用阿里雲映象。如下列命令:

minikube.exe start --registry-mirror=https://registry.docker-cn.com --vm-driver="hyperv" --memory=4096 --hyperv-virtual-switch="NET" --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers

 

PS C:\WINDOWS\system32> minikube.exe start --registry-mirror=https://registry.docker-cn.com --vm-driver="hyperv" --memory=4096 --hyperv-virtual-switch="NET" --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers

* minikube v1.1.1 on windows (amd64)

* using image repository registry.cn-hangzhou.aliyuncs.com/google_containers

* Creating hyperv VM (CPUs=2, Memory=4096MB, Disk=20000MB) ...

* Configuring environment for Kubernetes v1.14.3 on Docker 18.09.6

* Pulling images ...

* Launching Kubernetes ...

* Verifying: apiserver proxy etcd scheduler controller dns

* Done! kubectl is now configured to use "minikube"

成功之後,我們就可以使用kubectl來操作叢集了,比如檢視當前所有pod的狀態:

kubectl get pods --all-namespaces

 

剛才我們使用Minikube建立了預設的叢集,我們還可以使用Minikube建立新的叢集,比如:

minikube start -p mycluster

值得注意的是,Minikube搭配Hyper-V使用需要禁用動態記憶體(Docker for Windows初始化時指定禁用了相關虛擬機器使用動態記憶體),執行Powershell指令碼如下所示:

Set-VMMemory -VMName 'minikube' -DynamicMemoryEnabled $false。

在Windows 10下,我們還可以使用docker-desktop來啟用k8s,不過由於網路的原因,並不是很推薦:

 

 

開啟Minikube視覺化面板

成功啟動Minikube之後,我們就可以通過以下命令來開啟Minikube視覺化面板:

minikube dashboard

啟用面板

PS C:\WINDOWS\system32> minikube dashboard

* Enabling dashboard ...

* Verifying dashboard health ...

* Launching proxy ...

* Verifying proxy health ...

* Opening http://127.0.0.1:3173/api/v1/namespaces/kube-system/services/http:kubernetes-dashboard:/proxy/ in your default browser...

 

 

 

常見錯誤

啟動Minikube時提示錯誤如下:X Unable to start VM: start: exit status 1

處理方案:執行“minikube delete”或者手工清理時虛擬機器目錄存在殘留內容,需手動刪除目錄“C:\Users\{your username} \.minikube\machines”後再次嘗試。

 

Linux下安裝

1.安裝虛擬機器(可選)

在Linux環境下,Minikube支援直接在主機上執行Kubernetes,因此此步驟為可選。所以大家可以根據實際情況來選擇是否安裝虛擬機器,比如KVM和VirtualBox。

注意:如果直接在主機上執行,Minikube會執行一個不安全的API Server,可能會導致安全隱患,因此不建議在個人工作環境安裝。

 

2.安裝kubectl

由於Google網路不太穩定,我們使用阿里雲映象進行安裝。

  • CentOS

echo '#k8s

[kubernetes]

name=Kubernetes

baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64

enabled=1

gpgcheck=0

'>/etc/yum.repos.d/kubernetes.repo

#kubeadm和相關工具包

yum -y install kubelet kubeadm kubectl kubernetes-cni

  • Debian / Ubuntu

apt-get update && apt-get install -y apt-transport-https

curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -

echo 'deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main' >/etc/apt/sources.list.d/kubernetes.list

apt-get update

apt-get install -y kubelet kubeadm kubectl

 

3.安裝Minikube

這裡我們直接下載安裝:

curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 \

&& chmod +x minikube

由於網路問題,我們可以選擇使用阿里雲的執行程式:

curl -Lo minikube https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/latest/minikube-linux-amd64 \

&& chmod +x minikube

然後將可執行檔案新增到/usr/local/bin目錄下

sudo install minikube /usr/local/bin

 

4.啟動Minikube

minikube start --vm-driver=none

如果存在網路問題,請使用--image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers指定映象倉庫地址。

 

安裝過程中如出現問題,可以執行以下命令之後再重新嘗試:

minikube delete

rm ~/.minikube

 

往期內容連結

Docker最全教程——從理論到實戰(一)

Docker最全教程——從理論到實戰(二)

Docker最全教程——從理論到實戰(三)

Docker最全教程——從理論到實戰(四)

Docker最全教程——從理論到實戰(五)

Docker最全教程——從理論到實戰(六)

Docker最全教程——從理論到實戰(七)

Docker最全教程——從理論到實戰(八)

Docker最全教程之使用Tencent Hub來完成CI(九)

Docker最全教程——資料庫容器化(十)

Docker最全教程——資料庫容器化之持久儲存資料(十一)

Docker最全教程——MongoDB容器化(十二)

Docker最全教程——Redis容器化以及排行榜實戰(十三)

Docker最全教程之Ubuntu下安裝Docker(十四)

Docker最全教程之樹莓派和Docker(十五)

Docker最全教程之使用TeamCity來完成內部CI、CD流程(十六)

Docker最全教程之使用Docker搭建Java開發環境(十七)

Docker最全教程之Go實戰,牆裂推薦(十八)

Docker最全教程之使用.NET Core推送釘釘訊息(十九)

Docker最全教程之使用 Visual Studio Code玩轉Docker(二十)

Docker最全教程之Python爬網實戰(二十一)

Docker最全教程之使用PHP搭建個人部落格站點(二十二)

Docker最全教程之使用Node.js搭建團隊技術文件站(二十三)

Docker最全教程之MySQL容器化 (二十四)

Docker+ Kubernetes已成為雲端計算的主流(二十五)

容器化之後如何節省雲端成本?(二十六)

瞭解Kubernetes主體架構(二十七)