Minikube 快速入門手冊

一、Minikube 簡介

minikube logo.jpeg

Minikube官網(wǎng)

Minikube官方github

Kubernetes教程

1、什么是Minikube?

Minikube是一種輕量化的Kubernetes集群,是Kubernetes社區(qū)為了幫助開發(fā)者和學習者能夠更好學習和體驗k8s功能而推出的,借助個人PC的虛擬化環(huán)境就可以實現(xiàn)Kubernetes的快速構建啟動。目前已支持在macOS、Linux、Windows平臺上利用各類本地虛擬化環(huán)境作為驅(qū)動運行。

1)配置需求

2)常用驅(qū)動

Minikube在不同操作系統(tǒng)上支持不同的驅(qū)動,具體如下:

  • macOS
  • Linux
  • 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é)點。

kubernetes cluster.png

2)Minikube 的架構:

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

minikube cluster.png

3、Minikube 的基本運作原理

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

Minikube運作的基本原理如下所示:

minikube.jpeg
  • 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

k8s官方文檔 - 安裝 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)

image-20210617161713190.png

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

image-20210617161842788.png

4)安裝 minikube

??注意: 官方出品的minikube,默認連接的是google官方站點,正常情況下國內(nèi)是無法訪問??梢允褂冒⒗锇娴膍inikube

阿里云容器服務 ACK

執(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 

正常啟動,結果如下:

image-20210617181210634.png

??注意: 如果首次失敗了(比如:步驟一中的安全設置沒勾選,導致無法啟用),可以先嘗試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

正常啟動,結果如下:

image-20210617181547293.png

瀏覽器會自動打開 dashboard Overview:

image-20210617181531965.png

4. kubectl測試

1?? 查看集群信息
kubectl cluster-info

集群啟動正常,返回如下:

image-20210617181342037.png
2?? 查看節(jié)點信息
kubectl get node -A

正常返回如下:

image-20210617181441072.png

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

阿里云容器服務 ACK

執(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 directory
image-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

反饋如下:

image-20210618120509901.png

根據(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 

正常啟動,結果如下:

image-20210618122349340.png

4. kubectl測試

1?? 查看集群信息
kubectl cluster-info

正常返回如下:

image-20210618131220222.png
2?? 查看節(jié)點信息
kubectl get node 

正常返回如下:

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

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)聽:

image-20210623200947007.png
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 了:

image-20210623201725539.png

2. 安裝圖形化界面,通過服務器瀏覽器啟動 dashboard

??注意: minikube的 dashboard 默認需要默認瀏覽器的支持,而一般性如果我們是按照最小化原則安裝的centos系統(tǒng),是不包含圖形化組件的,也不包含瀏覽器,因此直接啟動 minikube dashboard 是無法正常使用的。那么如果要正常使用 minikube dashboard ,就需要安裝GUI包和瀏覽器,下面介紹下下具體方法:

1?? 安裝 GUI組件包
yum groupinstall -y 'X Window System' 'GNOME'

安裝成功,返回如下:

image-20210623111952857.png
2?? 安裝火狐瀏覽器
yum install -y firefox

安裝成功,返回如下:

image-20210623112238393.png
3?? 升級內(nèi)核(可選項)
yum update -y
4?? 啟動圖形化界面
startx

圖形化界面打開后,一路 next(skip)后,就可以正常訪問圖形化桌面了:

image-20210623202734625.png

?? 拓展知識: 開機啟動圖形化界面

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.target 

3?? dos界面與圖形化界面切換快捷鍵:

  • 圖形到dos:ctrl+alt+f2

  • dos到圖形:輸入startx

    或者

  • 在命令上輸入 init 3 命令 切換到dos界面

  • 輸入 init 5命令 切換到圖形界面


5?? 重新訪問 dashboard

在左上角 Applications - System Tools 中打開終端:

image-20210623202844093.png

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

minikube dashboard
image-20210623203226621.png

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

image-20210623203208183.png

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

參考文檔:

Windows Docker 安裝

windows安裝minikube



三、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
image-20210621115031347.png

刪除一個集群:

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
image-20210618171957253.png

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
image-20210621095923915.png

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設置)

image-20210621102111013.png

4、Minikube Dashboard

1)基礎使用

執(zhí)行以下命令,訪問 dashboard:

minikube dashboard
image-20210621103951020.png

這將會開啟 dashboard 插件,,并自動在默認瀏覽器中開啟代理的 endpoint,同樣,這也需要在終端中保持進程運行,使用Ctrl + C 結束代理,之后 dashboard 將不能使用。

??注意: 默認瀏覽器是不能以 root 用戶的身份開啟的,minikube 同樣默認不能以 root 用戶身份啟動。

2)獲取 dashboard 的URL

如果你不想直接在瀏覽器中打開代理,也可以執(zhí)行以下命令,這會只返回可訪問的URL地址:

minikube dashboard --url
image-20210621104058380.png

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)

https://www.cnblogs.com/zhengchunyuan/p/12598210.html

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容