天天看點

使用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叢集(二十八)

使用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部署本地Kubernetes叢集(二十八)

Minikube支援的功能

Minikube支援以下Kubernetes功能:

  • DNS
  • NodePorts(可使用“minikube service”指令來管理)
  • ConfigMaps和Secrets
  • 儀表闆(Dashboards,minikube dashboard)
  • 容器運作時:Docker,rkt,CRI-O和containerd
  • Enabling CNI(容器網絡接口)
  • Ingress
  • LoadBalancer(負載均衡,可以使用“minikube tunnel”指令來啟用)
  • Multi-cluster(多叢集,可以使用“minikube start -p <name>”指令來啟用)
  • Persistent Volumes
  • RBAC
  • 通過指令配置apiserver和kubelet

Windows 10下安裝

1.安裝要求

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

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

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

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

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

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

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

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.

  • 通過下載下傳安裝包安裝

下載下傳位址: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進行指定指定的虛拟網絡交換機。虛拟網絡交換機設定如下圖所示:

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

在中國,由于網絡和防火牆的原因,通常會無法拉取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

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

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部署本地Kubernetes叢集(二十八)

剛才我們使用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部署本地Kubernetes叢集(二十八)

打開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部署本地Kubernetes叢集(二十八)
使用Minikube部署本地Kubernetes叢集(二十八)

常見錯誤

啟動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 \

然後将可執行檔案添加到/usr/local/bin目錄下

sudo install minikube /usr/local/bin

minikube start --vm-driver=none

如果存在網絡問題,請使用--image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers指定鏡像倉庫位址。

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

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

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主體架構(二十七)

作者:雪雁

出處:http://www.cnblogs.com/codelove/

溝通管道:程式設計交流群<85318032> 産品交流群<897857351>

如果喜歡作者的文章,請關注【麥扣聊技術】訂閱号以便第一時間獲得最新内容。本文版權歸作者和湖南心萊資訊科技有限公司共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。

靜聽鳥語花香,漫賞雲卷雲舒。