一、Minikube 簡介

1、什么是Minikube?
Minikube是一種輕量化的Kubernetes集群,是Kubernetes社區(qū)為了幫助開發(fā)者和學習者能夠更好學習和體驗k8s功能而推出的,借助個人PC的虛擬化環(huán)境就可以實現(xiàn)Kubernetes的快速構建啟動。目前已支持在macOS、Linux、Windows平臺上利用各類本地虛擬化環(huán)境作為驅(qū)動運行。
1)配置需求
2核 CPU 及以上
2G 空閑的內(nèi)存
20G 空閑磁盤空間
可以連接Internet(用于下載組件)
容器或著虛擬機底座,諸如 Docker、Hyperkit、 Hyper-V、KVM、 Parallels、 Podman、 VirtualBox,、 VMWare
2)常用驅(qū)動
Minikube在不同操作系統(tǒng)上支持不同的驅(qū)動,具體如下:
- macOS
- xhyve driver , VirtualBox 或 VMware Fusion
- Docker 缺省驅(qū)動
- Linux
- VirtualBox 或 KVM2
- Docker 缺省驅(qū)動
- Windows
?? 注意:
由于minikube復用了docker-machine,在其軟件包中已經(jīng)支持了相應的VirtualBox, VMware Fusion驅(qū)動
VT-x/AMD-v 虛擬化必須在 BIOS 中開啟
在Windows環(huán)境下,如果開啟了Hyper-V,不支持VirtualBox方式
2、Minikube 和 Kubernetes 的區(qū)別
1)Kubernetes 集群的架構:
通常情況下,一套完整的Kubernetes集群至少需要包括master節(jié)點和node節(jié)點,下圖是常規(guī)k8s的集群架構,master節(jié)點一般是獨立的,用于協(xié)調(diào)調(diào)試其它節(jié)點之用,而容器實際運行都是在node節(jié)點上,kubectl位于 master節(jié)點。

2)Minikube 的架構:
下圖是 Minikube 的架構,可以看出,master 節(jié)點與其它節(jié)點合為一體,而整體則通過宿主機上的 kubectl 進行管理,這樣可以更加節(jié)省資源。

3、Minikube 的基本運作原理
簡單來說就是,用戶使用Minikube CLI管理虛擬機上的Kubernetes環(huán)境,比如:啟動,停止,刪除,獲取狀態(tài)等。一旦Minikube虛擬機啟動,用戶就可以使用熟悉的Kubectl CLI在Kubernetes集群上執(zhí)行操作。
Minikube運作的基本原理如下所示:

- A: Minikube 在PC本地生成
kubeconfig配置文件- B: Minikube 在虛擬環(huán)境中創(chuàng)建 Minikube 虛擬機
- C: Minikube 在虛擬機中構建 Kubernetes
- D: Kubectl 通過
kubeconfig對虛機中的 Kubernetes 進行管理
二、各環(huán)境安裝部署
1、macOS
1)環(huán)境
| 參數(shù) | 版本描述 |
|---|---|
| OS | macOS Catalina v10.15.7 |
| docker desktop | docker version v19.03.13 |
| kubectl | kubectl version v1.18.8 |
| Kubernetes | kubernetes version v1.18.8 |
| Virtual Machine | Oracle VirtualBox v6.1.22 |
2)安裝 kubectl
1. 使用二進制包安裝
??注意: 由于Apple M1的芯片使用的底層架構不同,故在下載二進制包時需要針對性下載適合對應架構的包,如果使用的 macOS為 2021款 Big Sur的 Mac 都是使用的 M1芯片,具體可以在
左上角?? => 關于本機中查看處理器型號。
1?? 下載二進制包
Intel 芯片(amd64):
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl"
Apple M1 芯片(arm64):
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/arm64/kubectl"
2?? 下載校驗文件
Intel 芯片(amd64):
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl.sha256"
Apple M1 芯片(arm64):
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/arm64/kubectl.sha256"
3?? md5 校驗
??注意: 不要使用與二進制包不同版本的校驗文件進行校驗,否則校驗必定失敗
echo "$(<kubectl.sha256) kubectl" | shasum -a 256 --check
如果驗證通過,返回:
kubectl: OK
如果驗證失敗,返回:
kubectl: FAILED
shasum: WARNING: 1 computed checksum did NOT match
4?? 賦予執(zhí)行權限
chmod +x ./kubectl
5?? 移動到PATH可識別路徑
sudo mv ./kubectl /usr/local/bin/kubectl
6?? 查詢版本(驗證)
kubectl version --client
正常返回類型下面:
Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.8", GitCommit:"9f2892aab98fe339f3bd70e3c470144299398ace", GitTreeState:"clean", BuildDate:"2020-08-13T16:12:48Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"darwin/amd64"}
2. 使用Homebrew安裝(推薦)
Homebrew 安裝方法:
1?? 安裝:
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"2?? 升級:
git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core fetch --unshallow git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask fetch --unshallow brew update
執(zhí)行以下命令,自動安裝 kubectl 最新穩(wěn)定版:
brew install kubectl
3)安裝virtualBox(低版本minikube必須)
新版本的Minikube已經(jīng)不需要再依賴于VM做為底層,也可以通過docker直接作為底層驅(qū)動,并且在起步資源方面需求量更小。但是處于學習目的,這邊還是介紹一下 VM的方便。
??注意: 必須在 BIOS 中 開啟 VT-x/AMD-v 虛擬化,否則無法啟用虛擬機。這里選用通用性更強的
VirtualBox下載地址 (當前最新版本6.1)

下載對應版本的dmg,一路安裝即可,要注意的是:安裝過程中,可能會彈出一個系統(tǒng)安全相關的對話框,一定要允許,并在Security&Privacy 這里,把VirtualBox勾上,否則minikube會無法啟動。

4)安裝 minikube
??注意: 官方出品的minikube,默認連接的是google官方站點,正常情況下國內(nèi)是無法訪問??梢允褂冒⒗锇娴膍inikube
執(zhí)行以下命令,進行自動安裝:
curl -Lo minikube https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.18.1/minikube-darwin-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
5)創(chuàng)建集群
1. 啟動參數(shù)說明
| 參數(shù) | 說明 |
|---|---|
| **--driver=***** | 從1.5.0版本開始,Minikube缺省使用本地最好的驅(qū)動來創(chuàng)建Kubernetes本地環(huán)境,測試過的版本 docker, kvm
|
| --image-mirror-country cn | 將缺省利用 registry.cn-hangzhou.aliyuncs.com/google_containers 作為安裝Kubernetes的容器鏡像倉庫 (阿里云版本可選) |
| **--iso-url=***** | 利用阿里云的鏡像地址下載相應的 .iso 文件 (阿里云版本可選) |
| **--registry-mirror=***** | 為了拉取Docker Hub鏡像,需要為 Docker daemon 配置鏡像加速,參考阿里云鏡像服務 |
| --cpus=2 | 為minikube虛擬機分配CPU核數(shù) |
| --memory=2048mb | 為minikube虛擬機分配內(nèi)存數(shù) |
| **--kubernetes-version=***** | minikube 虛擬機將使用的 kubernetes 版本 |
| **--insecure-registry=***** | 設置私有鏡像倉庫地址,跟私有倉庫的域名或者IP:Port |
2. 啟動minikube
為保持kubernetes的版本和kubectl的版本一致,所以這里使用
1.18.8版本,具體選擇可以根據(jù)個人需要自定,默認minikube 1.18.1 已支持 kubernetes 1.20.x
minikube start --registry-mirror=https://registry.docker-cn.com --kubernetes-version=1.18.8
正常啟動,結果如下:

??注意: 如果首次失敗了(比如:步驟一中的安全設置沒勾選,導致無法啟用),可以先嘗試minikute delete 刪除現(xiàn)有虛機,刪除
~/.minikube目錄緩存的文件。然后重新創(chuàng)建 minikube環(huán)境,升級minikube同理。minikube 1.5.0 之后的版本最自動選擇最優(yōu)的驅(qū)動方式啟動minikube,默認會使用 docker 啟動,在 docker desktop dashboard 中可以找到,相較于使用 vm啟動,docker作為驅(qū)動所需的默認資源更小。
image-20210617181833745.png
3. 啟動minikube dashboard
minikube dashboard
正常啟動,結果如下:

瀏覽器會自動打開 dashboard Overview:

4. kubectl測試
1?? 查看集群信息
kubectl cluster-info
集群啟動正常,返回如下:

2?? 查看節(jié)點信息
kubectl get node -A
正常返回如下:

2、Linux
1)環(huán)境
| 參數(shù) | 版本描述 |
|---|---|
| OS | CentOS Linux release 7.9.2009 (Core) |
| docker | docker version v 20.10.7 |
| kubectl | kubectl version v1.18.8 |
| Kubernetes | kubernetes version v1.18.8 |
2)安裝 kubectl
1.使用二進制包安裝
1?? 下載二進制包
wget -c "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
??注意: 使用
$(curl -L -s https://dl.k8s.io/release/stable.txt)時下載的為最新穩(wěn)定版本的發(fā)行版,如果要下載指定版本的發(fā)行版,可以執(zhí)行如下命令,以下載 v1.21.0為例:wget -c https://dl.k8s.io/release/v1.21.0/bin/linux/amd64/kubectl
2?? 下載校驗文件
wget -c "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"
??注意: 不要使用與二進制包不同版本的校驗文件進行校驗,否則校驗必定失敗,如果要下載指定版本的校驗文件,可以執(zhí)行如下命令,以下載 v1.21.0 為例:
wget -c https://dl.k8s.io/release/v1.21.0/bin/linux/amd64/kubectl.sha256
3?? md5校驗:
echo "$(<kubectl.sha256) kubectl" | sha256sum --check
如果驗證通過,返回:
kubectl: OK
如果驗證失敗,返回:
kubectl: FAILED
shasum: WARNING: 1 computed checksum did NOT match
4?? 安裝kubectl
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
??注意: 如果沒有root權限,也可以在安裝在對應用戶的home目錄
~/.local/bin下:mkdir -p ~/.local/bin/kubectl mv ./kubectl ~/.local/bin/kubectl最后將
~/.local/bin/kubectl添加至$PATH,使其可被識別。
5?? 查詢版本(驗證)
kubectl version --client
正常返回如下:
Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.18", GitCommit:"6f6ce59dc8fefde25a3ba0ef0047f4ec6662ef24", GitTreeState:"clean", BuildDate:"2021-04-15T03:31:30Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"}
2.使用包管理器安裝
1?? yum(紅帽系Linux發(fā)行版)
鏡像源制作:
??注意: 官方使用的是google源
https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64,國內(nèi)正常情況使用不了,故這里推薦使用阿里云的源https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
yum安裝kubectl:
yum install -y kubectl
2?? apt(Debian系Linux發(fā)行版)
升級 apt 并安裝依賴:
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
添加認證公鑰:
??注意: 官方使用的是google源
https://packages.cloud.google.com/apt/doc/apt-key.gpg,國內(nèi)正常情況使用不了,故這里推薦使用阿里云的源https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg
curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
添加 api 鏡像源:
??注意: 官方使用的是debian官方源,國內(nèi)正常情況使用不了,故這里推薦使用阿里云的
kubeadm源
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
apt安裝kubectl
apt-get update
apt-get install -y kubectl
3)安裝 minikube
??注意: 官方出品的minikube,默認連接的是google官方站點,正常情況下國內(nèi)是無法訪問??梢允褂冒⒗锇娴膍inikube
執(zhí)行以下命令,進行自動安裝:
curl -Lo minikube https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.18.1/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
4)創(chuàng)建集群
1. 系統(tǒng)參數(shù)優(yōu)化
默認情況下,kubernetes對于系統(tǒng)參數(shù)有一定的預設值要求,如果不滿足要求,就會導致啟動時出現(xiàn)異常,比如如下情況:
image-20210623204600777.png由于參數(shù)
nf_conntrack_max(系統(tǒng)丟包限制)未能達到要求值的131072,因此導致kube-proxy啟動異常,并且導致 minikube 內(nèi)部無法與外部通信,因而拉取鏡像時就會失敗,服務就無法正常啟動,因此就需要對該參數(shù)進行調(diào)整,否則將無法正常使用minikube。執(zhí)行以下命令,可以查看當前系統(tǒng)丟包限制:
sysctl net.netfilter.nf_conntrack_max執(zhí)行以下命令,則可以查看當前是否超限:
sysctl net.netfilter.nf_conntrack_count
0?? k8s內(nèi)核參數(shù)優(yōu)化模版:
新建文件 /etc/sysctl.d/kubernetes.conf,sysctl 會讀取 /etc/sysctl.d/ 下的子配置文件。模版內(nèi)容如下:
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
vm.swappiness=0
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=131072
net.netfilter.nf_conntrack_max的值根據(jù)具體反饋的值來設置為準。
執(zhí)行如下命令加載內(nèi)核參數(shù)配置(立刻生效):
sysctl -p /etc/sysctl.d/kubernetes.conf
??注意: 如果執(zhí)行上述命令出錯,錯誤信息如下:
sysctl: cannot stat /proc/sys/net/netfilter/nf_conntrack_max: No such file or directoryimage-20210623205837741.png則可能是
conntrack沒有被加載,執(zhí)行如下命令查看:lsmod |grep conntrack如何返回是空,表示沒有加載,那執(zhí)行如下命令加載即可:
modprobe ip_conntrack再次執(zhí)行
lsmod |grep conntrack驗證,如果正常,反饋類似下圖:image-20210623210107481.png然后再次加載內(nèi)核優(yōu)化配置就可以了。
2. root用戶沖突解決
??注意: 使用docker作為 minikube的驅(qū)動,不能使用 root 用戶,否則將會出現(xiàn)如下報錯:
image-20210618115513477.png
解決方案如下:
方案一:
1?? 創(chuàng)建普通用戶作為啟動用戶
useradd -g docker -G wheel minikube
-g: 默認組(用戶登錄時就是這個組) -G: 其他群組 wheel:sudo組(加到這個組里才會有sudo權限)
2?? 設置啟動用戶密碼
passwd minikube
方案二:
切換使用普通用戶進行操作,執(zhí)行如下命令:
minikube start --driver=docker
反饋如下:

根據(jù)提示,將用戶添加至docker組,執(zhí)行如下命令(需要root操作或sudo提權):
usermod -aG docker minikube && newgrp docker
以上兩種方案仍選其一,執(zhí)行完成后,再次啟動minikube。
3. 啟動minikube
為保持kubernetes的版本和kubectl的版本一致,所以這里使用
1.18.8版本,具體選擇可以根據(jù)個人需要自定,默認minikube 1.18.1 已支持 kubernetes 1.20.x
minikube start --registry-mirror=https://registry.docker-cn.com --kubernetes-version=1.18.8
正常啟動,結果如下:

4. kubectl測試
1?? 查看集群信息
kubectl cluster-info
正常返回如下:

2?? 查看節(jié)點信息
kubectl get node
正常返回如下:

3?? 查看內(nèi)部服務組件
kubectl get pod -A

5)啟動 minikube dashboard
1. 用服務器內(nèi)網(wǎng) IP 訪問 dashboard
??注意:
正常啟動過的情況下,dashboard 默認會以本地回環(huán)地址拉起proxy,我們執(zhí)行以下命令:
minikube dashboard --url由于centos按照最小化安裝是沒有瀏覽器的,也沒有圖形化功能,所以這邊使用了
--url參數(shù),這將不掉用瀏覽器,而直接返回可用戶訪問的 endpoint,正常啟動成功,結果如下:image-20210623182617904.png但是,由于我們是部署在服務器上,從外部訪問又無法訪問服務器的回環(huán)地址,因此我們需要做代理,來實現(xiàn)外部訪問,下面介紹具體方法:
1?? 在終端開啟本地IP代理窗口
kubectl proxy --port=45396 --address='0.0.0.0' --disable-filter=true --accept-hosts='^.*'
這里使用
0.0.0.0,旨在可以使公網(wǎng)網(wǎng)卡也監(jiān)聽端口,方便我們外部訪問,如果VPC環(huán)境的話,需要本地IP段和服務器IP段打通,否則就需要做端口映射,將端口暴露出來,這里的端口可以隨便指定未占用的端口,也可以不使用--port參數(shù),這樣會隨機分配一個端口 。
proxy控制臺啟動成功,返回如下,開啟本地 45396 端口監(jiān)聽:

2?? 獲取k8s api endpoint
再次運行 minikube dashboard --url ,將獲取到的 endpoint 的 IP:Port 替換成外部IP:45396 ,再在本地瀏覽器中訪問以下地址:
http://192.168.3.224:45396/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/
一切正常的話,就可以訪問 minikube dashboard 了:

2. 安裝圖形化界面,通過服務器瀏覽器啟動 dashboard
??注意: minikube的 dashboard 默認需要默認瀏覽器的支持,而一般性如果我們是按照最小化原則安裝的centos系統(tǒng),是不包含圖形化組件的,也不包含瀏覽器,因此直接啟動
minikube dashboard是無法正常使用的。那么如果要正常使用minikube dashboard,就需要安裝GUI包和瀏覽器,下面介紹下下具體方法:
1?? 安裝 GUI組件包
yum groupinstall -y 'X Window System' 'GNOME'
安裝成功,返回如下:

2?? 安裝火狐瀏覽器
yum install -y firefox
安裝成功,返回如下:

3?? 升級內(nèi)核(可選項)
yum update -y
4?? 啟動圖形化界面
startx
圖形化界面打開后,一路 next(skip)后,就可以正常訪問圖形化桌面了:

?? 拓展知識: 開機啟動圖形化界面
1?? 查看當前開機啟動模式:
以 root用戶身份在命令行中執(zhí)行如下命令:
systemctl get-default
graphical.target代表開機時啟動圖形化界面
multi-user.target代表開機時啟動dos界面2?? 設置開機啟動圖形界面:
以 root用戶身份在命令行中執(zhí)行如下命令:
systemctl set-default graphical.target同理,如果想開機啟動dos界面,就輸入如下命令:
systemctl set-default multi-user.target3?? dos界面與圖形化界面切換快捷鍵:
圖形到dos:ctrl+alt+f2
dos到圖形:輸入startx
或者
在命令上輸入 init 3 命令 切換到dos界面
輸入 init 5命令 切換到圖形界面
5?? 重新訪問 dashboard
在左上角 Applications - System Tools 中打開終端:

在終端中執(zhí)行如下命令:
minikube dashboard

minikube 就會自動調(diào)用默認的瀏覽器(之前安裝的火狐)拉起 dashboard:

3、Windows
作為個人開發(fā)者,個人并不推薦使用 windows 系統(tǒng)作為kubernetes的運行環(huán)境,究其原因有很多,最主要的原因在于 windows 要安裝docker 需要依賴Hyper-V(微軟開發(fā)的虛擬機),一旦開啟了就無法再使用 VirtualBox 或 Vmware 等VM,且本身和docker的相性就比較一般,而docker目前已基本為識別為 Minikube 的最佳驅(qū)動,因此,綜上所述在此僅做簡單介紹。
1)環(huán)境
| 參數(shù) | 版本描述 |
|---|---|
| OS | Windows 10 |
| docker desktop | docker version v19.03.13 |
| kubectl | kubectl version v1.18.8 |
| Kubernetes | kubernetes version v1.18.8 |
| Virtual Machine | Hypervisor |
參考文檔:
三、Minikube 基礎操作
1、基礎命令行
啟動并運行一個集群:
minikube start
訪問 minikube中的 k8s dashboard
minikube dashboard
當你啟動了 minikube 后,你可以像操作其他k8s集群一樣,通過kubectl 進行集群管理,比如創(chuàng)建一個服務:
kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4
以 NodePort 的形式暴露一個服務:
kubectl expose deployment hello-minikube --type=NodePort --port=8080
使用minikube在瀏覽器中快速打開服務放出的endpoint:
minikube service hello-minikube
升級集群:
minikube start --kubernetes-version=latest
啟動另一個本地集群:
??注意: 如果 minikube 運作在 裸金屬/none 驅(qū)動時,將不生效
minikube start -p cluster2
停止一個集群:
minikube stop

刪除一個集群:
minikube delete
刪除本地所有集群和配置:
minikube delete --all
2、發(fā)布應用
1)通過 kubectl 發(fā)布服務
1. 創(chuàng)建服務:
kubectl create deployment hello-minikube1 --image=registry.cn-hangzhou.aliyuncs.com/google_containers/echoserver:1.10
2. 暴露端口:
kubectl expose deployment hello-minikube1 --type=LoadBalancer --port=8080
3. 查看映射端口
export PORT=$(kubectl get svc hello-minikube1 -o go-template='{{range.spec.ports}}{{if .nodePort}}{{.nodePort}}{{"\n"}}{{end}}{{end}}')
# 查看端口
echo $PORT
4. 訪問端口
minikube service hello-minikube1

5. 刪除服務
kubectl delete deployment -n default hello-minikube1 --force --grace-period=0
2)通過 Addons 管理插件
Minikube 自帶了一個內(nèi)置應用列表,包括諸如 Istio、Ingress 等,可以方便快速部署插件。
1. 查詢插件列表
minikube addons list
輸出如下:
|-----------------------------|----------|--------------|
| ADDON NAME | PROFILE | STATUS |
|-----------------------------|----------|--------------|
| ambassador | minikube | disabled |
| auto-pause | minikube | disabled |
| csi-hostpath-driver | minikube | disabled |
| dashboard | minikube | enabled ? |
| default-storageclass | minikube | enabled ? |
| efk | minikube | disabled |
| freshpod | minikube | disabled |
| gcp-auth | minikube | disabled |
| gvisor | minikube | disabled |
| helm-tiller | minikube | disabled |
| ingress | minikube | disabled |
| ingress-dns | minikube | disabled |
| istio | minikube | disabled |
| istio-provisioner | minikube | disabled |
| kubevirt | minikube | disabled |
| logviewer | minikube | disabled |
| metallb | minikube | disabled |
| metrics-server | minikube | disabled |
| nvidia-driver-installer | minikube | disabled |
| nvidia-gpu-device-plugin | minikube | disabled |
| olm | minikube | disabled |
| pod-security-policy | minikube | disabled |
| registry | minikube | disabled |
| registry-aliases | minikube | disabled |
| registry-creds | minikube | disabled |
| storage-provisioner | minikube | enabled ? |
| storage-provisioner-gluster | minikube | disabled |
| volumesnapshots | minikube | disabled |
|-----------------------------|----------|--------------|
2. 啟用指定插件
minikube addons enable <name>
3. 同時啟用多個插件
minikube start --addons <name1> --addons <name2>
4. 在瀏覽器打開插件暴露出的endpoint
minikube addons open <name>
5. 停用指定插件
minikube addons disable <name>
3、訪問應用
1)NodePort 方式訪問
NodePort 方式是訪問服務最基礎的方式,顧名思義,就是將端口映射到本地,并通過本地的 IP + 映射的端口訪問服務放出的 endpoint,這種方式下,服務會共用 VM 的 IP。
1. 使用service命令訪問 endpoint
minikube 內(nèi)置的 service 命令可以快速訪問服務放出的endpoint,并在瀏覽器中打開
minikube service --url <service-name>
2. 使用 kubectl 獲取 nodePort 端口
通過minikube ip 命令可以獲取到虛擬機的IP地址,執(zhí)行以下命令,可以獲取到服務映射的 nodePort 端口
kubectl get service <service-name> --output='jsonpath="{.spec.ports[0].nodePort}"'
3. 擴展 NodePort 的范圍
一般來說,minikube 包括的端口范圍為 30000-32767,如果不夠的話,可以通過如下命令進行擴展
minikube start --extra-config=apiserver.service-node-port-range=1-65535
2)LoadBalancer 方式訪問
LoadBalancer 方式,是將服務暴露到公網(wǎng)中的標準方法,使用這種方法,每一個服務都有其獨立的IP。
以
LoadBalancer方式暴露的服務需要通過minikube tunnel命令訪問,并且必須在一個獨立的終端窗口保持LoadBalancer運行,使用Ctrl-C可以退出進程,但是相關的路由信息將會被情況
1. 使用 minikube tunnel
在獨立的終端運行 tunnel,它會在k8s的CIDR中新增路由規(guī)則,將集群的IP地址作為網(wǎng)關,tunnel 命令會將服務的外部訪問IP直接暴露給主機操作系統(tǒng)上運行的所有程序。
minikube tunnel

2. 創(chuàng)建一個deployment
kubectl create deployment hello-minikube1 --image=registry.cn-hangzhou.aliyuncs.com/google_containers/echoserver:1.10
檢查服務:
kubectl get pod
NAME READY STATUS RESTARTS AGE
hello-minikube1-7587585f9-pn6l2 1/1 Running 0 37s
3. 創(chuàng)建LB服務,將服務暴露出來
kubectl expose deployment hello-minikube1 --type=LoadBalancer --port=8080
tunnel 終端窗口會彈出:
?? Starting tunnel for service hello-minikube1.
4. 查看外部訪問IP
kubectl get svc
正常返回如下:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-minikube1 LoadBalancer 10.97.227.83 127.0.0.1 8080:31546/TCP 72s
??注意: 如果沒有開啟
minikube tunnel窗口的話,服務的EXTERNAL-IP將會顯示pending
5. 在瀏覽器中訪問服務(通過IP:Port)
打開瀏覽器,訪問http://127.0.0.1:8080,(確保服務沒有proxy設置)

4、Minikube Dashboard
1)基礎使用
執(zhí)行以下命令,訪問 dashboard:
minikube dashboard

這將會開啟 dashboard 插件,,并自動在默認瀏覽器中開啟代理的 endpoint,同樣,這也需要在終端中保持進程運行,使用Ctrl + C 結束代理,之后 dashboard 將不能使用。
??注意: 默認瀏覽器是不能以 root 用戶的身份開啟的,minikube 同樣默認不能以 root 用戶身份啟動。
2)獲取 dashboard 的URL
如果你不想直接在瀏覽器中打開代理,也可以執(zhí)行以下命令,這會只返回可訪問的URL地址:
minikube dashboard --url

3)界面使用
minikube 的 dashboard,即 Kubernetes 默認的 dashboard,具體可見: dashboard官方文檔
5、Minikube 的配置項
minikube 的大多戶配置已做成了參數(shù)接口,具體可以查看,可以執(zhí)行以下命令:
minikube start --help
這里使用的是阿里云版本的 minikube,已基本全部漢化,具體參數(shù)選項如下:
Starts a local Kubernetes cluster
Options:
--addons=[]: 啟用插件。執(zhí)行 `minikube addons list` 查看可用插件名稱列表
--apiserver-ips=[]: 一組在為 kubernetes 生成的證書中使用的 apiserver IP
地址。如果您希望將此 apiserver 設置為可從機器外部訪問,則可以使用這組
apiserver IP 地址
--apiserver-name='minikubeCA': The authoritative apiserver hostname for apiserver certificates
and connectivity. This can be used if you want to make the apiserver available from outside the
machine
--apiserver-names=[]: 一組在為 kubernetes 生成的證書中使用的 apiserver
名稱。如果您希望將此 apiserver 設置為可從機器外部訪問,則可以使用這組
apiserver 名稱
--apiserver-port=8443: apiserver 偵聽端口
--auto-update-drivers=true: 如果設置了,將自動更新驅(qū)動到最新版本。默認為
true。
--base-image='registry.cn-hangzhou.aliyuncs.com/google_containers/kicbase:v0.0.18@sha256:ddd0c02d289e3a6fb4bba9a94435840666f4eb81484ff3e707b69c1c484aa45e':
The base image to use for docker/podman drivers. Intended for local development.
--cache-images=true: If true, cache docker images for the current bootstrapper and load them
into the machine. Always false with --driver=none.
--cni='': CNI plug-in to use. Valid options: auto, bridge, calico, cilium, flannel, kindnet,
or path to a CNI manifest (default: auto)
--container-runtime='docker': The container runtime to be used (docker, cri-o, containerd).
--cpus=2: Number of CPUs allocated to Kubernetes.
--cri-socket='': The cri socket path to be used.
--delete-on-failure=false: If set, delete the current cluster if start fails and try again.
Defaults to false.
--disable-driver-mounts=false: 停用由管理程序提供的文件系統(tǒng)裝載
--disk-size='20000mb': 分配給 minikube
虛擬機的磁盤大?。ǜ袷剑?lt;數(shù)字>[<單位>],其中單位 = b、k、m 或 g)。
--dns-domain='cluster.local': The cluster dns domain name used in the Kubernetes cluster
--dns-proxy=false: 為 NAT DNS 請求啟用代理(僅限 virtualbox 驅(qū)動程序)
--docker-env=[]: 傳遞給 Docker 守護進程的環(huán)境變量。(格式:鍵值對)
--docker-opt=[]: 指定要傳遞給 Docker
守護進程的任意標志。(格式:key=value)
--download-only=false: 如果為 true,僅會下載和緩存文件以備后用 -
不會安裝或啟動任何項。
--driver='': Driver is one of: virtualbox, parallels, vmwarefusion, hyperkit, vmware, docker,
ssh (defaults to auto-detect)
--dry-run=false: dry-run mode. Validates configuration, but does not mutate system state
--embed-certs=false: if true, will embed the certs in kubeconfig.
--enable-default-cni=false: DEPRECATED: Replaced by --cni=bridge
--extra-config=: A set of key=value pairs that describe configuration that may be passed to
different components.
The key should be '.' separated, and the first part before the dot is the component to apply the
configuration to.
Valid components are: kubelet, kubeadm, apiserver, controller-manager, etcd, proxy, scheduler
Valid kubeadm parameters: ignore-preflight-errors, dry-run, kubeconfig, kubeconfig-dir, node-name,
cri-socket, experimental-upload-certs, certificate-key, rootfs, skip-phases, pod-network-cidr
--feature-gates='': 一組用于描述 alpha
版功能/實驗性功能的功能限制的鍵值對。
--force=false: 強制 minikube 執(zhí)行可能有風險的操作
--force-systemd=false: If set, force the container runtime to use sytemd as cgroup manager.
Defaults to false.
--host-dns-resolver=true: 為 NAT DNS 請求啟用主機解析器(僅限 virtualbox
驅(qū)動程序)
--host-only-cidr='192.168.99.1/24': 需要用于 minikube 虛擬機的 CIDR(僅限
virtualbox 驅(qū)動程序)
--host-only-nic-type='virtio': 網(wǎng)卡類型僅用于主機網(wǎng)絡。Am79C970A, Am79C973,
82540EM, 82543GC, 82545EM 之一,或 virtio(僅限 VirtualBox 驅(qū)動程序)
--hyperkit-vpnkit-sock='': 用于網(wǎng)絡連接的 VPNKit
套接字的位置。如果為空,則停用 Hyperkit VPNKitSock;如果為“auto”,則將
Docker 用于 Mac VPNKit 連接;否則使用指定的 VSock(僅限 hyperkit 驅(qū)動程序)
--hyperkit-vsock-ports=[]: 應在主機上公開為套接字的訪客 VSock
端口列表(僅限 hyperkit 驅(qū)動程序)
--hyperv-external-adapter='': External Adapter on which external switch will be created if no
external switch is found. (hyperv driver only)
--hyperv-use-external-switch=false: Whether to use external switch over Default Switch if
virtual switch not explicitly specified. (hyperv driver only)
--hyperv-virtual-switch='': hyperv 虛擬交換機名稱。默認為找到的第一個 hyperv
虛擬交換機。(僅限 hyperv 驅(qū)動程序)
--image-mirror-country='cn':
需要使用的鏡像鏡像的國家/地區(qū)代碼。留空以使用全球代碼。對于中國大陸用戶,請將其設置為
cn。
--image-repository='': Alternative image repository to pull docker images from. This can be
used when you have limited access to gcr.io. Set it to "auto" to let minikube decide one for you.
For Chinese mainland users, you may use local gcr.io mirrors such as
registry.cn-hangzhou.aliyuncs.com/google_containers
--insecure-registry=[]: Insecure Docker registries to pass to the Docker daemon. The default
service CIDR range will automatically be added.
--install-addons=true: If set, install addons. Defaults to true.
--interactive=true: 允許用戶提示以獲取更多信息
--iso-url=[https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/iso/minikube-v1.18.0.iso]:
Locations to fetch the minikube ISO from.
--keep-context=false: 這將保留現(xiàn)有 kubectl 上下文并創(chuàng)建 minikube 上下文。
--kubernetes-version='': The Kubernetes version that the minikube VM will use (ex: v1.2.3,
'stable' for v1.20.2, 'latest' for v1.20.5-rc.0). Defaults to 'stable'.
--kvm-gpu=false: 在 minikube 中啟用實驗性 NVIDIA GPU 支持
--kvm-hidden=false: 向 minikube 中的訪客隱藏管理程序簽名(僅限 kvm2
驅(qū)動程序)
--kvm-network='default': KVM 網(wǎng)絡名稱。(僅限 kvm2 驅(qū)動程序)
--kvm-numa-count=1: Simulate numa node count in minikube, supported numa node count range is
1-8 (kvm2 driver only)
--kvm-qemu-uri='qemu:///system': KVM QEMU 連接 URI。(僅限 kvm2 驅(qū)動程序)
--memory='': Amount of RAM to allocate to Kubernetes (format: <number>[<unit>], where unit =
b, k, m or g).
--mount=false: This will start the mount daemon and automatically mount files into minikube.
--mount-string='/Users:/minikube-host': The argument to pass the minikube mount command on
start.
--namespace='default': The named space to activate after start
--nat-nic-type='virtio': NIC Type used for nat network. One of Am79C970A, Am79C973, 82540EM,
82543GC, 82545EM, or virtio (virtualbox driver only)
--native-ssh=true: Use native Golang SSH client (default true). Set to 'false' to use the
command line 'ssh' command when accessing the docker machine. Useful for the machine drivers when
they will not start with 'Waiting for SSH'.
--network='': network to run minikube with. Only available with the docker/podman drivers. If
left empty, minikube will create a new network.
--network-plugin='': Kubelet network plug-in to use (default: auto)
--nfs-share=[]: 通過 NFS 裝載與訪客共享的本地文件夾(僅限 hyperkit
驅(qū)動程序)
--nfs-shares-root='/nfsshares': NFS 共享的根目錄位置,默認為 /nfsshares(僅限
hyperkit 驅(qū)動程序)
--no-vtx-check=false: 禁用在啟動虛擬機之前檢查硬件虛擬化的可用性(僅限
virtualbox 驅(qū)動程序)
-n, --nodes=1: The number of nodes to spin up. Defaults to 1.
-o, --output='text': Format to print stdout in. Options include: [text,json]
--ports=[]: List of ports that should be exposed (docker and podman driver only)
--preload=true: If set, download tarball of preloaded images if available to improve start
time. Defaults to true.
--registry-mirror=[]: 傳遞給 Docker 守護進程的注冊表鏡像
--service-cluster-ip-range='10.96.0.0/12': 需要用于服務集群 IP 的 CIDR。
--ssh-ip-address='': IP address (ssh driver only)
--ssh-key='': SSH key (ssh driver only)
--ssh-port=22: SSH port (ssh driver only)
--ssh-user='root': SSH user (ssh driver only)
--trace='': Send trace events. Options include: [gcp]
--uuid='': 提供虛擬機 UUID 以恢復 MAC 地址(僅限 hyperkit 驅(qū)動程序)
--vm=false: Filter to use only VM Drivers
--vm-driver='': DEPRECATED, use `driver` instead.
--wait=[apiserver,system_pods]: comma separated list of Kubernetes components to verify and
wait for after starting a cluster. defaults to "apiserver,system_pods", available options:
"apiserver,system_pods,default_sa,apps_running,node_ready,kubelet" . other acceptable values are
'all' or 'none', 'true' and 'false'
--wait-timeout=6m0s: max time to wait per Kubernetes or host to be healthy.
Usage:
minikube start [flags] [options]
Use "minikube options" for a list of global command-line options (applies to all commands).
參考文檔:
https://kubernetes.io/docs/tasks/tools/
https://minikube.sigs.k8s.io/docs/start/
https://developer.aliyun.com/article/221687
https://blog.csdn.net/fly_leopard/article/details/108790217
https://www.cnblogs.com/yjmyzz/p/install-k8s-on-mac-using-minikube.html
https://blog.csdn.net/qq_38340601/article/details/108437017)





