Hello folks,我是 Luga,今天我們來聊一下云原生生態核心技術之 Kube.NETes 編排工具 —— Minikube。
— 01 —
為什么需要 Minikube 工具 ?
隨著容器技術的迅猛發展和廣泛應用,Kubernetes 在企業中扮演著重要的角色。通常情況下,我們將 Kubernetes 描述為“將 linux 容器集群作為單個系統進行管理,以加速開發并簡化維護”。對于企業應用服務的容器化改造而言,學習和使用 Kubernetes 已經成為不可避免的一部分。
然而,對于剛接觸這個體系的 DevOps 人員來說,在環境中完整部署一整套多節點的 Kubernetes 集群確實具有一定的難度。這種部署涉及到復雜的配置、網絡設置和資源管理等方面,需要具備深入的理解和相關經驗。
為了幫助這些 DevOps 人員克服這種難度,出現了一些工具和平臺,如 Minikube、K3s 和 Kind 等。這些工具提供了簡化和輕量級的 Kubernetes 部署選項,使得在本地或開發環境中搭建一個功能齊全的 Kubernetes 集群變得更加容易。
此外,云服務提供商也提供了托管的 Kubernetes 服務,如 Amazon EKS、google Kubernetes Engine(GKE)和 Microsoft Azure Kubernetes Service(AKS)等。這些托管服務解決了底層基礎設施的復雜性,使得 DevOps 人員可以專注于應用程序的部署和管理,而無需擔心底層的 Kubernetes 集群細節。
因此,對于那些剛接觸 Kubernetes 的 DevOps 人員來說,他們可以利用這些工具和托管服務來降低部署和管理 Kubernetes 的難度。隨著經驗的積累和深入學習,他們將能夠逐漸掌握和理解 Kubernetes 的各個方面,并能夠在實際生產環境中部署和管理復雜的多節點 Kubernetes 集群。
總之,雖然在環境中完整部署一整套多節點的 Kubernetes 集群對于剛接觸這個體系的 DevOps 人員來說具有一定難度,但通過使用簡化部署工具和托管服務,他們可以逐步克服這些挑戰,并為企業應用服務的容器化改造提供可靠的支持。
— 02 —
何為 Minikube 工具 ?
Kubernetes 是一個基于 Go 語言開發的用于 Docker 容器的開源編排系統。它能夠處理計算集群中節點的調度,并主動管理工作負載,以確保它們的狀態與用戶聲明的意圖相匹配。然而,與此同時,Minikube 被詳細地描述為一個開源的"本地 Kubernetes 引擎",它可以在 macOS、Linux 和 windows 平臺上實現本地化的 Kubernetes 集群。作為 Kubernetes 官方推薦的最佳協同工具之一,Minikube 的目標是成為本地 Kubernetes 應用程序開發的工具,并支持所有適用的 Kubernetes 功能。
Minikube 的主要功能是運行單節點 Kubernetes 集群,以便在本地機器上進行開發。它支持多種虛擬機驅動程序,如 VirtualBox、HyperV 和 KVM2。由于 Minikube 是 Kubernetes 世界中相對成熟的解決方案,它支持的功能列表令人印象深刻,包括負載均衡器、多集群、節點端口、持久卷、入口、儀表板和容器運行時等。
基于 Minikube 這個開源工具,開發人員、運維人員和 DevOps 工程師能夠快速搭建本地的 Kubernetes 單節點集群環境。Minikube 對軟硬件資源的要求并不高,因此方便技術人員進行學習、實踐和日常的項目開發。
總的來說,Kubernetes 和 Minikube 為容器化應用開發和部署提供了強大的支持。Kubernetes 作為一個分布式系統的編排工具,可以管理和調度容器化的應用程序,而 Minikube 則提供了一個簡單實用的方式,在本地機器上搭建和管理 Kubernetes 集群。這些工具的使用使得開發人員能夠更加高效地進行應用程序開發、測試和部署,加速了應用交付的速度和質量。
— 03 —
認識不一樣的 Minikube 技術堆棧
基于 Minikube 的相關特性,我們從操作系統(OS)、CPU 架構、程序管理技術(Hypervisor tech)、容器運行時(CRI)以及容器網絡接口插件(CNIs)等多方位角度簡要描繪 Minikube 所支持的技術運行棧形態,具體如下圖所示:
1、操作系統(OS):
Minikube 支持在多種操作系統上運行,包括但不限于以下幾種:
macOS:Minikube 可以在 macOS 上運行,提供了方便的本地開發和測試環境。
Linux:Minikube 支持在不同的 Linux 發行版上運行,使開發人員能夠在本地機器上搭建 Kubernetes 集群。
Windows:Minikube 可以在 Windows 平臺上運行,為 Windows 用戶提供了本地化的 Kubernetes 開發環境。
2、CPU架構:
Minikube 能夠適應不同的 CPU 架構,包括但不限于以下幾種:
x86 架構:Minikube 支持 x86 架構的處理器,這是目前最常見的桌面和服務器處理器架構。
ARM 架構:Minikube 還支持 ARM 架構,這是一種常見于嵌入式設備和移動設備的處理器架構。
3、程序管理技術(Hypervisor tech):
Minikube 利用虛擬化管理器來創建和管理虛擬機,以模擬多節點的 Kubernetes 集群。它支持多種虛擬化管理器技術,包括但不限于以下幾種:
VirtualBox:Minikube 可以使用 VirtualBox 作為虛擬化管理器,在本地機器上創建和管理虛擬機。
HyperV:對于 Windows 平臺,Minikube 支持使用 HyperV 作為虛擬化管理器,提供了本地化的Kubernetes環境。
KVM2:在 Linux 平臺上,Minikube 可以使用 KVM2 作為虛擬化管理器,以實現本地 Kubernetes 集群的搭建和管理。
4、容器運行時(CRI):
Minikube 支持多種容器運行時,以在本地機器上運行和管理容器化的應用程序。以下是一些 Minikube 所支持的常見容器運行時:
Docker:作為最流行的容器運行時之一,Minikube 支持使用 Docker 來創建和管理容器,使得應用程序可以在本地的Kubernetes集群中以容器的形式運行。
contAInerd:Minikube 還支持使用 containerd 作為容器運行時,containerd 是一個輕量級的容器運行時,為 Kubernetes 提供了容器管理的能力。
5、容器網絡接口插件(CNIs):
Minikube 支持多種容器網絡接口插件,以實現容器之間的網絡通信和連接。以下是一些 Minikube 所支持的常見容器網絡接口插件:
Calico:Minikube 可以集成 Calico 作為容器網絡接口插件,提供網絡策略和安全性功能。
flannel:Minikube 還支持使用 flannel 作為容器網絡接口插件,flannel 提供了簡單而高效的網絡覆蓋,使得容器可以相互通信。
— 04 —
Minikube 工具基本部署安裝
Minikube 安裝部署較為簡單,這里,我們以 macOS 平臺為例,進行簡單介紹,具體如下:
[administrator@JAVALangOutOfMemory ~ ]% brew install minikube
[administrator@JavaLangOutOfMemory ~ ]% minikube start
當然,我們還可以自定義參數進行啟動,具體如下所示:
[administrator@JavaLangOutOfMemory ~ ]% minikube start --iso-url=https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/iso/minikube-v1.x.x.iso
--registry-mirror=https://registry.docker-cn.com
--image-mirror-country=cn
--image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers
--vm-driver=none
--memory=4096
部署完成后,檢測相關配置參數等。
[administrator@JavaLangOutOfMemory ~ ]% kubectl version
Client Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.2", GitCommit:"092fbfbf53427de67cac1e9fa54aaa09a28371d7", GitTreeState:"clean", BuildDate:"2021-06-16T12:52:14Z", GoVersion:"go1.16.5", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.7", GitCommit:"132a687512d7fb058d0f5890f07d4121b3f0a2e2", GitTreeState:"clean", BuildDate:"2021-05-12T12:32:49Z", GoVersion:"go1.15.12", Compiler:"gc", Platform:"linux/amd64"}
[administrator@JavaLangOutOfMemory ~ ]% kubectl get node -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
minikube Ready control-plane,master 15h v1.20.7 192.168.49.2 <none> Ubuntu 20.04.2 LTS 5.10.25-linuxkit docker://20.10.7
[administrator@JavaLangOutOfMemory ~ ]% kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coreDNS-74ff55c5b-p6dlz 1/1 Running 0 15h
kube-system etcd-minikube 1/1 Running 0 15h
kube-system kube-apiserver-minikube 1/1 Running 0 15h
kube-system kube-controller-manager-minikube 1/1 Running 0 15h
kube-system kube-proxy-dcr72 1/1 Running 0 15h
kube-system kube-scheduler-minikube 1/1 Running 0 15h
kube-system storage-provisioner 1/1 Running 3 15h
常見命令行如下所示: [administrator@JavaLangOutOfMemory ~ ] % minikube --help
minikube provisions and manages local Kubernetes clusters optimized for development workflows.
Basic Commands:
start Starts a local Kubernetes cluster
status Gets the status of a local Kubernetes cluster
stop Stops a running local Kubernetes cluster
delete Deletes a local Kubernetes cluster
dashboard Access the Kubernetes dashboard running within the minikube cluster
pause pause Kubernetes
unpause unpause Kubernetes
Images Commands:
docker-env Configure environment to use minikube's Docker daemon
podman-env Configure environment to use minikube's Podman service
cache Add, delete, or push a local image into minikube
image Manage images
Configuration and Management Commands:
addons Enable or disable a minikube addon
config Modify persistent configuration values
profile Get or list the current profiles (clusters)
update-context Update kubeconfig in case of an IP or port change
Networking and Connectivity Commands:
service Returns a URL to connect to a service
tunnel Connect to LoadBalancer services
Advanced Commands:
mount Mounts the specified directory into minikube
ssh Log into the minikube environment (for debugging)
kubectl Run a kubectl binary matching the cluster version
node Add, remove, or list additional nodes
cp Copy the specified file into minikube
Troubleshooting Commands:
ssh-key Retrieve the ssh identity key path of the specified node
ssh-host Retrieve the ssh host key of the specified node
ip Retrieves the IP address of the specified node
logs Returns logs to debug a local Kubernetes cluster
update-check Print current and latest version number
version Print the version of minikube
options Show a list of global command-line options (Applies to all commands).
Other Commands:
completion Generate command completion for a shell
Use "minikube <command> --help" for more information about a given command.
— 05 —
Minikube 工具架構原理解析
Minikube 基于本地虛擬機環境部署 Kubernetes 集群,其基本架構參考示意圖,如下圖所示:
具體實現原理涉及如下:
1、下載 .iso 文件以能夠使得本地環境處于可用狀態
在 Minikube 啟動過程中,首先需要下載一個 .iso 文件,以確保本地環境處于可用狀態。這個 .iso 文件通常包含一個 Linux 發行版(通常是 boot2docker )和所需的工具和依賴項。
2、從下載的 .iso 文件中提取 boot2docker.iso 鏡像文件
從下載的 .iso 文件中提取 boot2docker.is o鏡像文件。這個鏡像是一個輕量級的 Linux 操作系統,專門用于在 Minikube 中運行。
3、創建用于 SSH 目的的動態證書
在 Minikube 中,為了能夠通過 SSH 與虛擬機進行通信,需要創建一對動態證書。這些證書用于安全地建立 SSH 連接,以便管理和操作虛擬機。
4、使用指定的配置創建 VirtualBox VM 文件
根據指定的配置信息,使用 VirtualBox 虛擬化軟件創建一個虛擬機(VM)文件。這個虛擬機將用作 Minikube 集群的節點。
5、設置存儲以掛載 boot2docker.iso 文件
在虛擬機中設置存儲配置,以便將 boot2docker.iso 文件掛載到虛擬機的文件系統中。這樣,虛擬機就能夠訪問其中的文件并引導啟動。
6、設置網絡相關配置(IP、DHCP 等)以及在 VM 內設置 SSH 等
配置虛擬機的網絡相關設置,例如為虛擬機分配 IP 地址、配置 DHCP 等。此外,還在虛擬機內部設置 SSH,以便允許通過 SSH 與虛擬機進行遠程連接和管理。
7、啟動虛擬機
現在,啟動虛擬機并等待它完成啟動過程。一旦虛擬機啟動成功,它就成為 Minikube 集群中的一個節點。
8、設置 /etc/hostname、 /etc/hosts 以及設置 systemd 相關文件以使得 Docker 容器引擎能夠正常啟動
在虛擬機中進行一些配置操作,例如設置主機名(/etc/hostname)、設置主機解析(/etc/hosts)以及配置systemd相關文件。這些操作有助于確保Docker容器引擎能夠在虛擬機中正常啟動和工作。
9、準備 Kubernetes 和 Docker 等相關基礎環境配置
在虛擬機中準備 Kubernetes 和 Docker 等相關基礎環境配置。這可能涉及安裝和配置所需的軟件包、設置環境變量、創建相關目錄等。
10、下載所有相關的 Kubernetes 文件 - kubelet、kubeadm 等
在虛擬機中下載所有相關的 Kubernetes 文件,包括 kubelet、kubeadm 等工具。這些工具用于管理和操作 Kubernetes 集群。
11、為 Kubernetes 所需的不同包拉取 Docker 鏡像并啟動不同的服務,例如,分布式存儲系統 Etcd、調度程序 Scheduler、控制器 Controller Manager 以及 Api Server
在虛擬機中為 Kubernetes 所需的不同組件和服務拉取 Docker 鏡像,并啟動這些服務。這可能涉及拉取 Etcd 鏡像(用于分布式存儲系統)、啟動調度程序、控制器管理器和API服務器等關鍵組件。
通過以上步驟,Minikube 成功完成了組件的啟動流程,并為用戶提供了一個本地的、可用于開發和測試的 Kubernetes 集群環境。
以上為本文關于 Minikube 工具的簡要概述,若有幫助,歡迎大家隨時溝通,交流。