Minikube 用於快速在本地搭建 Kubernetes 單節點集羣環境,它對硬件資源沒有過高的要求,方便開發人員學習試用,或者進行平常的開發。linux
其支持大部分kubernetes的功能,列表以下git
Minikube 支持 Windows、macOS、Linux 三種 OS,會根據平臺不一樣,下載對應的虛擬機鏡像,並在鏡像內安裝 k8s。github
目前的虛擬機技術都是基於Hypervisor 來實現的,Hypervisor 規定了統一的虛擬層接口,由此 Minikube 就能夠無縫切換不一樣的虛擬機實現,如 macOS 能夠切換hyperkit 或 VirtualBox, Windows 下能夠切換 Hyper-V 或 VirtualBox 等。docker
虛擬機的切換能夠經過 --vm-driver 實現,如minikube start --vm-driver hyperkit/ minikube start --vm-driver hyperv
shell
若是 Minikube 安裝在內核原生就支持 LXC 的 OS 內,如 Ubuntu 等,再安裝一次虛擬機顯然就是對資源的浪費了,Minikube 提供了直接對接 OS 底層的方式json
driver!=none modebootstrap
In this case minikube provisions a new docker-machine (Docker daemon/Docker host) using any supported providers. For instance: a) local provider = your Windows/Mac local host: it frequently uses VirtualBox as a hypervisor, and creates inside it a VM based on boot2docker image (configurable). In this case k8s bootstraper (kubeadm) creates all Kubernetes components inside this isolated VM. In this setup you have usually two docker daemons, your local one for development (if you installed it prior), and one running inside minikube VM. b) cloud hosts - not supported by minikube
ubuntu
driver=none modewindows
In this mode, your local docker host is re-used. In case no.1 there will be a performance penalty, because each VM generates some overhead, by running several system processes required by VM itself, in addition to those required by k8s components running inside VM. I think driver-mode=none is similar to " HYPERLINK "https://blog.alexellis.io/be-kind-to-yourself/"kind" version of k8s boostraper, meant for doing CI/integration tests.
api
curl -Lo minikube https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.13.0/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/
啓動命令:minikube start "參數"
- --image-mirror-country cn 將缺省利用 registry.cn-hangzhou.aliyuncs.com/google_containers 做爲安裝Kubernetes的容器鏡像倉庫, - --iso-url=*** 利用阿里雲的鏡像地址下載相應的 .iso 文件 - --cpus=2: 爲minikube虛擬機分配CPU核數 - --memory=2000mb: 爲minikube虛擬機分配內存數 - --kubernetes-version=***: minikube 虛擬機將使用的 kubernetes 版本 ,e.g. --kubernetes-version v 1.17.3 - --docker-env http_proxy 傳遞代理地址 默認啓動使用的是 VirtualBox 驅動,使用 --vm-driver 參數能夠指定其它驅動 # https://minikube.sigs.k8s.io/docs/drivers/ - --vm-driver=none 表示用容器; - --vm-driver=virtualbox 表示用虛擬機;
注意: To use kubectl or minikube commands as your own user, you may need to relocate them. For example, to overwrite your own settings, run:
sudo mv /root/.kube /root/.minikube $HOME sudo chown -R $USER $HOME/.kube $HOME/.minikube
參考: https://minikube.sigs.k8s.io/docs/drivers/kvm2/
minikube start --image-mirror-country cn --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --registry-mirror=https://ovfftd6p.mirror.aliyuncs.com --driver=kvm2
# 建立基於Hyper-V的Kubernetes測試環境 minikube.exe start --image-mirror-country cn \ --iso-url=https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/iso/minikube-v1.5.0.iso \ --registry-mirror=https://xxxxxx.mirror.aliyuncs.com \ --vm-driver="hyperv" \ --hyperv-virtual-switch="MinikubeSwitch" \ --memory=4096
sudo minikube start --image-mirror-country cn --vm-driver=none
sudo minikube start --vm-driver=none --docker-env http_proxy=http://$host_IP:8118 --docker-env https_proxy=https:// $host_IP:8118
其中$host_IP指的是host的IP,能夠經過ifconfig查看;好比在我這臺機器是10.0.2.15,用virtualbox部署,則用下列命令啓動minikube
sudo minikube start --vm-driver=none --docker-env http_proxy=http://10.0.2.15:8118 --docker-env https_proxy=https://10.0.2.15:8118
啓動完畢,將會運行一個單節點的Kubernetes集羣。Minikube也已經把kubectl配置好,所以無需作額外的工做就能夠管理容器。
Minikube 建立一個Host-Only(僅主機模式)網絡接口,經過這個接口能夠路由到節點。若是要與運行的pods或services進行交互,你應該經過這個地址發送流量。使用 minikube ip
命令能夠查看這個地址:
用戶使用Minikube CLI管理虛擬機上的Kubernetes環境,好比:啓動,中止,刪除,獲取狀態等。一旦Minikube虛擬機啓動,用戶就能夠使用熟悉的Kubectl CLI在Kubernetes集羣上執行操做
# 查看集羣的全部資源 kubectl get all # 進入節點服務器 minikube ssh # 執行節點服務器命令,例如查看節點 docker info minikube ssh -- docker info # 刪除集羣, 刪除 ~/.minikube 目錄緩存的文件 minikube delete # 關閉集羣 minikube stop ## 銷燬集羣 minikube stop && minikube delete
sudo minikube addons list
Minikube 默認集成了 Kubernetes Dashboard。執行 minikube dashboard
命令後,默認會打開瀏覽器
Failed to save config: failed to acquire lock for /root/.minikube/profiles/minikube/config.json: unable to open /tmp/juju-mk270d1b5db5965f2dc9e9e25770a63417031943: permission denied
解決辦法:
sudo rm -rf /tmp/juju-mk* sudo rm -rf /tmp/minikube.*
unable to read client-cert /root/.minikube/client.crt for minikube due to open /root/.minikube/client.crt: permission denied
unable to read client-key /root/.minikube/client.key for minikube due to open /root/.minikube/client.key: permission denied
unable to read certificate-authority /root/.minikube/ca.crt for minikube due to open /root/.minikube/ca.crt: permission denied
解決辦法:
minikube stop minikube delete rm -rf ~/.kube rm -rf ~/.minikube sudo rm -rf /var/lib/minikube sudo rm /var/lib/kubeadm.yaml sudo rm -rf /etc/kubernetes
參考:https://stackoverflow.com/questions/58541104/minikube-wont-work-after-ubuntu-upgrade-to-19-10
Error restarting cluster: restarting kube-proxy: waiting for kube-proxy to be up for configmap update: timed out waiting for the condition
經過 minikube delete,minikube start 能夠解決
$ kubectl run hello-minikube --image=k8s.gcr.io/echoserver:1.10 --port=8080 deployment.apps/hello-minikube created #訪問應用 $ kubectl expose deployment hello-minikube --type=NodePort service/hello-minikube exposed #獲取服務地址 $ minikube service hello-minikube --url http://192.168.99.105:30555