一仗阅、Minikube 簡介
1泛释、什么是Minikube?
Minikube是一種輕量化的Kubernetes集群,是Kubernetes社區(qū)為了幫助開發(fā)者和學(xué)習(xí)者能夠更好學(xué)習(xí)和體驗(yàn)k8s功能而推出的谤绳,借助個(gè)人PC的虛擬化環(huán)境就可以實(shí)現(xiàn)Kubernetes的快速構(gòu)建啟動拧簸。目前已支持在macOS、Linux巫延、Windows平臺上利用各類本地虛擬化環(huán)境作為驅(qū)動運(yùn)行励两。
1)配置需求
2核 CPU 及以上
2G 空閑的內(nèi)存
20G 空閑磁盤空間
可以連接Internet(用于下載組件)
容器或著虛擬機(jī)底座黎茎,諸如 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復(fù)用了docker-machine,在其軟件包中已經(jīng)支持了相應(yīng)的VirtualBox, VMware Fusion驅(qū)動
VT-x/AMD-v 虛擬化必須在 BIOS 中開啟
在Windows環(huán)境下慕爬,如果開啟了Hyper-V窑眯,不支持VirtualBox方式
2、Minikube 和 Kubernetes 的區(qū)別
1)Kubernetes 集群的架構(gòu):
通常情況下医窿,一套完整的Kubernetes集群至少需要包括master
節(jié)點(diǎn)和node
節(jié)點(diǎn)磅甩,下圖是常規(guī)k8s的集群架構(gòu),master
節(jié)點(diǎn)一般是獨(dú)立的姥卢,用于協(xié)調(diào)調(diào)試其它節(jié)點(diǎn)之用卷要,而容器實(shí)際運(yùn)行都是在node節(jié)點(diǎn)上,kubectl
位于 master
節(jié)點(diǎn)独榴。
2)Minikube 的架構(gòu):
下圖是 Minikube 的架構(gòu)僧叉,可以看出,master
節(jié)點(diǎn)與其它節(jié)點(diǎn)合為一體棺榔,而整體則通過宿主機(jī)上的 kubectl
進(jìn)行管理瓶堕,這樣可以更加節(jié)省資源。
3症歇、Minikube 的基本運(yùn)作原理
簡單來說就是郎笆,用戶使用Minikube CLI管理虛擬機(jī)上的Kubernetes環(huán)境,比如:啟動当船,停止题画,刪除,獲取狀態(tài)等德频。一旦Minikube虛擬機(jī)啟動苍息,用戶就可以使用熟悉的Kubectl CLI在Kubernetes集群上執(zhí)行操作。
Minikube運(yùn)作的基本原理如下所示:
- A: Minikube 在PC本地生成
kubeconfig
配置文件- B: Minikube 在虛擬環(huán)境中創(chuàng)建 Minikube 虛擬機(jī)
- C: Minikube 在虛擬機(jī)中構(gòu)建 Kubernetes
- D: Kubectl 通過
kubeconfig
對虛機(jī)中的 Kubernetes 進(jìn)行管理
二、各環(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. 使用二進(jìn)制包安裝
??注意: 由于Apple M1的芯片使用的底層架構(gòu)不同表谊,故在下載二進(jìn)制包時(shí)需要針對性下載適合對應(yīng)架構(gòu)的包,如果使用的 macOS為 2021款 Big Sur的 Mac 都是使用的 M1芯片盖喷,具體可以在
左上角?? => 關(guān)于本機(jī)
中查看處理器型號爆办。
1?? 下載二進(jìn)制包
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?? 下載校驗(yàn)文件
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 校驗(yàn)
??注意: 不要使用與二進(jìn)制包不同版本的校驗(yàn)文件進(jìn)行校驗(yàn),否則校驗(yàn)必定失敗
echo "$(<kubectl.sha256) kubectl" | shasum -a 256 --check
如果驗(yàn)證通過课梳,返回:
kubectl: OK
如果驗(yàn)證失敗距辆,返回:
kubectl: FAILED
shasum: WARNING: 1 computed checksum did NOT match
4?? 賦予執(zhí)行權(quán)限
chmod +x ./kubectl
5?? 移動到PATH
可識別路徑
sudo mv ./kubectl /usr/local/bin/kubectl
6?? 查詢版本(驗(yàn)證)
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ū)動跨算,并且在起步資源方面需求量更小。但是處于學(xué)習(xí)目的椭懊,這邊還是介紹一下 VM的方便诸蚕。
??注意: 必須在 BIOS 中 開啟 VT-x/AMD-v 虛擬化,否則無法啟用虛擬機(jī)氧猬。這里選用通用性更強(qiáng)的
VirtualBox
下載地址 (當(dāng)前最新版本6.1)
下載對應(yīng)版本的dmg背犯,一路安裝即可,要注意的是:安裝過程中盅抚,可能會彈出一個(gè)系統(tǒng)安全相關(guān)的對話框漠魏,一定要允許,并在Security&Privacy 這里泉哈,把VirtualBox勾上蛉幸,否則minikube會無法啟動。
4)安裝 minikube
??注意: 官方出品的minikube丛晦,默認(rèn)連接的是google官方站點(diǎn)奕纫,正常情況下國內(nèi)是無法訪問√躺常可以使用阿里版的minikube
執(zhí)行以下命令匹层,進(jìn)行自動安裝:
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=***** | 利用阿里云的鏡像地址下載相應(yīng)的 .iso 文件 (阿里云版本可選) |
**--registry-mirror=***** | 為了拉取Docker Hub鏡像升筏,需要為 Docker daemon 配置鏡像加速,參考阿里云鏡像服務(wù) |
--cpus=2 | 為minikube虛擬機(jī)分配CPU核數(shù) |
--memory=2048mb | 為minikube虛擬機(jī)分配內(nèi)存數(shù) |
**--kubernetes-version=***** | minikube 虛擬機(jī)將使用的 kubernetes 版本 |
**--insecure-registry=***** | 設(shè)置私有鏡像倉庫地址瘸爽,跟私有倉庫的域名或者IP:Port |
2. 啟動minikube
為保持kubernetes的版本和kubectl的版本一致您访,所以這里使用
1.18.8
版本,具體選擇可以根據(jù)個(gè)人需要自定剪决,默認(rèn)minikube 1.18.1 已支持 kubernetes 1.20.x
minikube start --registry-mirror=https://registry.docker-cn.com --kubernetes-version=1.18.8
正常啟動灵汪,結(jié)果如下:
??注意: 如果首次失敗了(比如:步驟一中的安全設(shè)置沒勾選檀训,導(dǎo)致無法啟用),可以先嘗試minikute delete 刪除現(xiàn)有虛機(jī)享言,刪除
~/.minikube
目錄緩存的文件峻凫。然后重新創(chuàng)建 minikube環(huán)境,升級minikube同理览露。minikube 1.5.0 之后的版本最自動選擇最優(yōu)的驅(qū)動方式啟動minikube荧琼,默認(rèn)會使用 docker 啟動,在 docker desktop dashboard 中可以找到差牛,相較于使用 vm啟動命锄,docker作為驅(qū)動所需的默認(rèn)資源更小。
3. 啟動minikube dashboard
minikube dashboard
正常啟動多糠,結(jié)果如下:
瀏覽器會自動打開 dashboard Overview:
4. kubectl測試
1?? 查看集群信息
kubectl cluster-info
集群啟動正常累舷,返回如下:
2?? 查看節(jié)點(diǎn)信息
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.使用二進(jìn)制包安裝
1?? 下載二進(jìn)制包
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)
時(shí)下載的為最新穩(wěn)定版本的發(fā)行版夹孔,如果要下載指定版本的發(fā)行版,可以執(zhí)行如下命令析孽,以下載 v1.21.0為例:wget -c https://dl.k8s.io/release/v1.21.0/bin/linux/amd64/kubectl
2?? 下載校驗(yàn)文件
wget -c "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"
??注意: 不要使用與二進(jìn)制包不同版本的校驗(yàn)文件進(jìn)行校驗(yàn)搭伤,否則校驗(yàn)必定失敗,如果要下載指定版本的校驗(yàn)文件袜瞬,可以執(zhí)行如下命令怜俐,以下載 v1.21.0 為例:
wget -c https://dl.k8s.io/release/v1.21.0/bin/linux/amd64/kubectl.sha256
3?? md5校驗(yàn):
echo "$(<kubectl.sha256) kubectl" | sha256sum --check
如果驗(yàn)證通過,返回:
kubectl: OK
如果驗(yàn)證失敗邓尤,返回:
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權(quán)限拍鲤,也可以在安裝在對應(yīng)用戶的home目錄
~/.local/bin
下:mkdir -p ~/.local/bin/kubectl mv ./kubectl ~/.local/bin/kubectl
最后將
~/.local/bin/kubectl
添加至$PATH
,使其可被識別汞扎。
5?? 查詢版本(驗(yàn)證)
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
添加認(rèn)證公鑰:
??注意: 官方使用的是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铛漓,默認(rèn)連接的是google官方站點(diǎn),正常情況下國內(nèi)是無法訪問鲫构∨ǘ瘢可以使用阿里版的minikube
執(zhí)行以下命令,進(jìn)行自動安裝:
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)化
默認(rèn)情況下结笨,kubernetes對于系統(tǒng)參數(shù)有一定的預(yù)設(shè)值要求包晰,如果不滿足要求湿镀,就會導(dǎo)致啟動時(shí)出現(xiàn)異常,比如如下情況:
由于參數(shù)
nf_conntrack_max(系統(tǒng)丟包限制)
未能達(dá)到要求值的131072
杜窄,因此導(dǎo)致kube-proxy
啟動異常肠骆,并且導(dǎo)致 minikube 內(nèi)部無法與外部通信,因而拉取鏡像時(shí)就會失敗塞耕,服務(wù)就無法正常啟動蚀腿,因此就需要對該參數(shù)進(jìn)行調(diào)整,否則將無法正常使用minikube扫外。執(zhí)行以下命令莉钙,可以查看當(dāng)前系統(tǒng)丟包限制:
sysctl net.netfilter.nf_conntrack_max
執(zhí)行以下命令,則可以查看當(dāng)前是否超限:
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ù)具體反饋的值來設(shè)置為準(zhǔn)。
執(zhí)行如下命令加載內(nèi)核參數(shù)配置(立刻生效):
sysctl -p /etc/sysctl.d/kubernetes.conf
??注意: 如果執(zhí)行上述命令出錯(cuò)驾讲,錯(cuò)誤信息如下:
sysctl: cannot stat /proc/sys/net/netfilter/nf_conntrack_max: No such file or directory
則可能是
conntrack
沒有被加載蚊伞,執(zhí)行如下命令查看:lsmod |grep conntrack
如何返回是空,表示沒有加載吮铭,那執(zhí)行如下命令加載即可:
modprobe ip_conntrack
再次執(zhí)行
lsmod |grep conntrack
驗(yàn)證时迫,如果正常,反饋類似下圖:然后再次加載內(nèi)核優(yōu)化配置就可以了谓晌。
2. root用戶沖突解決
??注意: 使用docker作為 minikube的驅(qū)動掠拳,不能使用 root 用戶,否則將會出現(xiàn)如下報(bào)錯(cuò):
解決方案如下:
方案一:
1?? 創(chuàng)建普通用戶作為啟動用戶
useradd -g docker -G wheel minikube
-g: 默認(rèn)組(用戶登錄時(shí)就是這個(gè)組) -G: 其他群組 wheel:sudo組(加到這個(gè)組里才會有sudo權(quán)限)
2?? 設(shè)置啟動用戶密碼
passwd minikube
方案二:
切換使用普通用戶進(jìn)行操作纸肉,執(zhí)行如下命令:
minikube start --driver=docker
反饋如下:
根據(jù)提示溺欧,將用戶添加至docker組,執(zhí)行如下命令(需要root操作或sudo提權(quán)):
usermod -aG docker minikube && newgrp docker
以上兩種方案仍選其一柏肪,執(zhí)行完成后姐刁,再次啟動minikube。
3. 啟動minikube
為保持kubernetes的版本和kubectl的版本一致,所以這里使用
1.18.8
版本,具體選擇可以根據(jù)個(gè)人需要自定菊匿,默認(rèn)minikube 1.18.1 已支持 kubernetes 1.20.x
minikube start --registry-mirror=https://registry.docker-cn.com --kubernetes-version=1.18.8
正常啟動适贸,結(jié)果如下:
4. kubectl測試
1?? 查看集群信息
kubectl cluster-info
正常返回如下:
2?? 查看節(jié)點(diǎn)信息
kubectl get node
正常返回如下:
3?? 查看內(nèi)部服務(wù)組件
kubectl get pod -A
5)啟動 minikube dashboard
1. 用服務(wù)器內(nèi)網(wǎng) IP 訪問 dashboard
??注意:
正常啟動過的情況下,dashboard 默認(rèn)會以本地回環(huán)地址拉起proxy,我們執(zhí)行以下命令:
minikube dashboard --url
由于centos按照最小化安裝是沒有瀏覽器的,也沒有圖形化功能,所以這邊使用了
--url
參數(shù)宿礁,這將不掉用瀏覽器,而直接返回可用戶訪問的 endpoint蔬芥,正常啟動成功梆靖,結(jié)果如下:但是控汉,由于我們是部署在服務(wù)器上,從外部訪問又無法訪問服務(wù)器的回環(huán)地址返吻,因此我們需要做代理姑子,來實(shí)現(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段和服務(wù)器IP段打通沐旨,否則就需要做端口映射,將端口暴露出來榨婆,這里的端口可以隨便指定未占用的端口磁携,也可以不使用--port
參數(shù),這樣會隨機(jī)分配一個(gè)端口 良风。
proxy控制臺啟動成功谊迄,返回如下,開啟本地 45396
端口監(jiān)聽:
2?? 獲取k8s api endpoint
再次運(yùn)行 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. 安裝圖形化界面吊档,通過服務(wù)器瀏覽器啟動 dashboard
??注意: minikube的 dashboard 默認(rèn)需要默認(rèn)瀏覽器的支持,而一般性如果我們是按照最小化原則安裝的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)核(可選項(xiàng))
yum update -y
4?? 啟動圖形化界面
startx
圖形化界面打開后,一路 next(skip)后嵌溢,就可以正常訪問圖形化桌面了:
?? 拓展知識: 開機(jī)啟動圖形化界面
1?? 查看當(dāng)前開機(jī)啟動模式:
以 root用戶身份在命令行中執(zhí)行如下命令:
systemctl get-default
graphical.target
代表開機(jī)時(shí)啟動圖形化界面
multi-user.target
代表開機(jī)時(shí)啟動dos界面2?? 設(shè)置開機(jī)啟動圖形界面:
以 root用戶身份在命令行中執(zhí)行如下命令:
systemctl set-default graphical.target
同理眯牧,如果想開機(jī)啟動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
中打開終端:
在終端中執(zhí)行如下命令:
minikube dashboard
minikube 就會自動調(diào)用默認(rèn)的瀏覽器(之前安裝的火狐)拉起 dashboard:
3赖草、Windows
作為個(gè)人開發(fā)者学少,個(gè)人并不推薦使用 windows 系統(tǒng)作為kubernetes的運(yùn)行環(huán)境,究其原因有很多秧骑,最主要的原因在于 windows 要安裝docker 需要依賴Hyper-V(微軟開發(fā)的虛擬機(jī))版确,一旦開啟了就無法再使用 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 基礎(chǔ)操作
1惕虑、基礎(chǔ)命令行
啟動并運(yùn)行一個(gè)集群:
minikube start
訪問 minikube中的 k8s dashboard
minikube dashboard
當(dāng)你啟動了 minikube 后,你可以像操作其他k8s集群一樣士修,通過kubectl
進(jìn)行集群管理枷遂,比如創(chuàng)建一個(gè)服務(wù):
kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4
以 NodePort
的形式暴露一個(gè)服務(wù):
kubectl expose deployment hello-minikube --type=NodePort --port=8080
使用minikube在瀏覽器中快速打開服務(wù)放出的endpoint
:
minikube service hello-minikube
升級集群:
minikube start --kubernetes-version=latest
啟動另一個(gè)本地集群:
??注意: 如果 minikube 運(yùn)作在 裸金屬/none 驅(qū)動時(shí),將不生效
minikube start -p cluster2
停止一個(gè)集群:
minikube stop
刪除一個(gè)集群:
minikube delete
刪除本地所有集群和配置:
minikube delete --all
2棋嘲、發(fā)布應(yīng)用
1)通過 kubectl 發(fā)布服務(wù)
1. 創(chuàng)建服務(wù):
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. 刪除服務(wù)
kubectl delete deployment -n default hello-minikube1 --force --grace-period=0
2)通過 Addons 管理插件
Minikube 自帶了一個(gè)內(nèi)置應(yīng)用列表酒唉,包括諸如 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. 同時(shí)啟用多個(gè)插件
minikube start --addons <name1> --addons <name2>
4. 在瀏覽器打開插件暴露出的endpoint
minikube addons open <name>
5. 停用指定插件
minikube addons disable <name>
3、訪問應(yīng)用
1)NodePort 方式訪問
NodePort 方式是訪問服務(wù)最基礎(chǔ)的方式雹锣,顧名思義网沾,就是將端口映射到本地,并通過本地的 IP + 映射的端口訪問服務(wù)放出的 endpoint蕊爵,這種方式下辉哥,服務(wù)會共用 VM 的 IP。
1. 使用service命令訪問 endpoint
minikube 內(nèi)置的 service
命令可以快速訪問服務(wù)放出的endpoint
攒射,并在瀏覽器中打開
minikube service --url <service-name>
2. 使用 kubectl
獲取 nodePort 端口
通過minikube ip
命令可以獲取到虛擬機(jī)的IP地址醋旦,執(zhí)行以下命令,可以獲取到服務(wù)映射的 nodePort 端口
kubectl get service <service-name> --output='jsonpath="{.spec.ports[0].nodePort}"'
3. 擴(kuò)展 NodePort 的范圍
一般來說会放,minikube 包括的端口范圍為 30000-32767
饲齐,如果不夠的話,可以通過如下命令進(jìn)行擴(kuò)展
minikube start --extra-config=apiserver.service-node-port-range=1-65535
2)LoadBalancer 方式訪問
LoadBalancer 方式咧最,是將服務(wù)暴露到公網(wǎng)中的標(biāo)準(zhǔn)方法捂人,使用這種方法,每一個(gè)服務(wù)都有其獨(dú)立的IP矢沿。
以
LoadBalancer
方式暴露的服務(wù)需要通過minikube tunnel
命令訪問滥搭,并且必須在一個(gè)獨(dú)立的終端窗口保持LoadBalancer
運(yùn)行,使用Ctrl-C
可以退出進(jìn)程咨察,但是相關(guān)的路由信息將會被情況
1. 使用 minikube tunnel
在獨(dú)立的終端運(yùn)行 tunnel论熙,它會在k8s的CIDR中新增路由規(guī)則,將集群的IP地址作為網(wǎng)關(guān)摄狱,tunnel
命令會將服務(wù)的外部訪問IP直接暴露給主機(jī)操作系統(tǒng)上運(yùn)行的所有程序脓诡。
minikube tunnel
2. 創(chuàng)建一個(gè)deployment
kubectl create deployment hello-minikube1 --image=registry.cn-hangzhou.aliyuncs.com/google_containers/echoserver:1.10
檢查服務(wù):
kubectl get pod
NAME READY STATUS RESTARTS AGE
hello-minikube1-7587585f9-pn6l2 1/1 Running 0 37s
3. 創(chuàng)建LB服務(wù)无午,將服務(wù)暴露出來
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
窗口的話,服務(wù)的EXTERNAL-IP
將會顯示pending
5. 在瀏覽器中訪問服務(wù)(通過IP:Port)
打開瀏覽器祝谚,訪問http://127.0.0.1:8080
宪迟,(確保服務(wù)沒有proxy設(shè)置)
4、Minikube Dashboard
1)基礎(chǔ)使用
執(zhí)行以下命令交惯,訪問 dashboard:
minikube dashboard
這將會開啟 dashboard 插件次泽,,并自動在默認(rèn)瀏覽器中開啟代理的 endpoint席爽,同樣意荤,這也需要在終端中保持進(jìn)程運(yùn)行,使用Ctrl + C 結(jié)束代理只锻,之后 dashboard 將不能使用玖像。
??注意: 默認(rèn)瀏覽器是不能以 root 用戶的身份開啟的,minikube 同樣默認(rèn)不能以 root 用戶身份啟動齐饮。
2)獲取 dashboard 的URL
如果你不想直接在瀏覽器中打開代理捐寥,也可以執(zhí)行以下命令,這會只返回可訪問的URL地址:
minikube dashboard --url
3)界面使用
minikube 的 dashboard祖驱,即 Kubernetes 默認(rèn)的 dashboard握恳,具體可見: dashboard官方文檔
5、Minikube 的配置項(xiàng)
minikube 的大多戶配置已做成了參數(shù)接口捺僻,具體可以查看乡洼,可以執(zhí)行以下命令:
minikube start --help
這里使用的是阿里云版本的 minikube,已基本全部漢化匕坯,具體參數(shù)選項(xiàng)如下:
Starts a local Kubernetes cluster
Options:
--addons=[]: 啟用插件就珠。執(zhí)行 `minikube addons list` 查看可用插件名稱列表
--apiserver-ips=[]: 一組在為 kubernetes 生成的證書中使用的 apiserver IP
地址。如果您希望將此 apiserver 設(shè)置為可從機(jī)器外部訪問醒颖,則可以使用這組
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 設(shè)置為可從機(jī)器外部訪問壳炎,則可以使用這組
apiserver 名稱
--apiserver-port=8443: apiserver 偵聽端口
--auto-update-drivers=true: 如果設(shè)置了泞歉,將自動更新驅(qū)動到最新版本。默認(rèn)為
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
虛擬機(jī)的磁盤大醒摇(格式:<數(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 守護(hù)進(jìn)程的環(huán)境變量稼病。(格式:鍵值對)
--docker-opt=[]: 指定要傳遞給 Docker
守護(hù)進(jìn)程的任意標(biāo)志选侨。(格式:key=value)
--download-only=false: 如果為 true掖鱼,僅會下載和緩存文件以備后用 -
不會安裝或啟動任何項(xiàng)。
--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
版功能/實(shí)驗(yàn)性功能的功能限制的鍵值對援制。
--force=false: 強(qiáng)制 minikube 執(zhí)行可能有風(fēng)險(xiǎn)的操作
--force-systemd=false: If set, force the container runtime to use sytemd as cgroup manager.
Defaults to false.
--host-dns-resolver=true: 為 NAT DNS 請求啟用主機(jī)解析器(僅限 virtualbox
驅(qū)動程序)
--host-only-cidr='192.168.99.1/24': 需要用于 minikube 虛擬機(jī)的 CIDR(僅限
virtualbox 驅(qū)動程序)
--host-only-nic-type='virtio': 網(wǎng)卡類型僅用于主機(jī)網(wǎng)絡(luò)戏挡。Am79C970A, Am79C973,
82540EM, 82543GC, 82545EM 之一,或 virtio(僅限 VirtualBox 驅(qū)動程序)
--hyperkit-vpnkit-sock='': 用于網(wǎng)絡(luò)連接的 VPNKit
套接字的位置晨仑。如果為空褐墅,則停用 Hyperkit VPNKitSock;如果為“auto”洪己,則將
Docker 用于 Mac VPNKit 連接妥凳;否則使用指定的 VSock(僅限 hyperkit 驅(qū)動程序)
--hyperkit-vsock-ports=[]: 應(yīng)在主機(jī)上公開為套接字的訪客 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 虛擬交換機(jī)名稱。默認(rèn)為找到的第一個(gè) hyperv
虛擬交換機(jī)答捕。(僅限 hyperv 驅(qū)動程序)
--image-mirror-country='cn':
需要使用的鏡像鏡像的國家/地區(qū)代碼逝钥。留空以使用全球代碼。對于中國大陸用戶噪珊,請將其設(shè)置為
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 中啟用實(shí)驗(yàn)性 NVIDIA GPU 支持
--kvm-hidden=false: 向 minikube 中的訪客隱藏管理程序簽名(僅限 kvm2
驅(qū)動程序)
--kvm-network='default': KVM 網(wǎng)絡(luò)名稱痢站。(僅限 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 共享的根目錄位置,默認(rèn)為 /nfsshares(僅限
hyperkit 驅(qū)動程序)
--no-vtx-check=false: 禁用在啟動虛擬機(jī)之前檢查硬件虛擬化的可用性(僅限
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 守護(hù)進(jìn)程的注冊表鏡像
--service-cluster-ip-range='10.96.0.0/12': 需要用于服務(wù)集群 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='': 提供虛擬機(jī) UUID 以恢復(fù) 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)