在容器編排工具中,安裝配置最複雜的要數Kubernetes。對于一個沒有使用過Kubernetes的人來說,首先他需要安裝一個容器運作時環境,接着了解Kubernetes各元件的概念和功能,然後做大量的安裝配置工作,最後才能運作一個Kubernetes叢集。
一、minikube是什麼
從版本1.3開始,Kubernetes提供了minikube工具,這使得開發者和Devops工程師可以在本地主機上運作單節點的小型叢集。minikube預設安裝配置了一個Linux 虛拟機,其中包含Docker容器、Kubernetes的全部元件。目前,minikube支援Linux、Macos、Windows,這是minitube的github位址。
二、minikube支援Kubernete的特性
- DNS
- NodePorts
- ConfigMaps、Secrets
- Dashboard
- 容器運作時(Container Runtime),包括Docker、rkt
- 容器網絡接口CNI(Container Network Interface)
三、安裝minikube、kubectl、VirtualBox
3.1 安裝minikube
本文安裝的minikube版本是v0.18.0,若你希望安裝最新版本的minikube,請參考連結。
- Macos
對于minikube版本的更新更新,直接下載下傳安裝最新版本的二進制檔案即可,例如從v0.18.0更新到v0.19.0。
# curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.19.0/minikube-darwin-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
# minikube version
minikube version: v0
-
Windows
下載下傳minikube-installer.exe,執行安裝程式。
3.2 安裝最新版本的kubectl
# OS X
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/darwin/amd64/kubectl
# Linux
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
# Windows
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/windows/amd64/kubectl.exe
3.3 安裝虛拟機驅動器VirtualBox
minikube支援xhyve、VirtualBox、VMwareFusion、hyperV、KVM等多種虛拟機驅動器,這裡我們使用VirtualBox,請讀者自行下載下傳安裝。
四、啟動minikube虛拟機,開啟K8s叢集
使用預設配置,啟動minikube虛拟機
如果啟動不成功,我們可以去使用者主目錄下,删除.minikube檔案夾。
我們還可以檢視minikube的相關啟動選項
如果你想更改虛拟機驅動器(Hypervisor),就需要增加選項
--vm-driver=xxx
。
xxx
的值有virtualbox、xhyve、vmwarefusion,minikube預設支援virtualbox。
如果你想使用rkt容器引擎,請執行以下指令
如果你想使用特定版本的kubernetes,請執行以下指令
# minikube get-k8s-versions
# minikube start --kubernetes-version="v1.6.3"
如果你想檢視詳細的日志錯誤資訊,請加上如下參數
如果你想開啟Docker Insecure Registry,執行以下指令
一個奇妙的方法:在minikube中,允許運作的kubelet與部署在pod中的registry進行通信,而不是用TLS證書。由于預設的叢集服務IP是10.0.0.1,是以我們可以通過
minikube start --insecure-registry “10.0.0.0/24”
啟動單節點叢集,并從部署在叢集pod中的registry提取鏡像。
五、管理K8s叢集
5.1 關閉虛拟機,儲存叢集狀态
5.2 删除虛拟機,清空叢集資訊
六、與K8s叢集互動
打開dashboard
擷取minikube虛拟機IP
連接配接虛拟機
在主控端指令行,與客戶機docker守護程序通信
# eval $(minikube docker-env)
使用minikube叢集的上下文
建立服務
# kubectl run hello-minikube --image=locutus1/echoserver:1.4 --port=8080
//建立deployment——hello-minikube
# kubectl expose deployment hello-minikube --type=NodePort
//暴露hello-minikube的deployment
# kubectl describe service hello-minikube //檢視服務詳情
# kubectl logs hello-minikube-242032256-48t67 //檢視服務日志
# kubectl scale --replicas=3 deployment/hello-minikube
//擴充服務的deployment數量
# kubectl get deployment
# minikube service hello-minikube
//在浏覽器中,打開hello-minikube服務
# minikube service hello-minikube --url [-n namespace_name]
//檢視服務的通路位址URL
# curl $(minikube service hello-minikube --url)
//相當于在浏覽器中,鍵入IP:NodePort
七、網絡
minikube虛拟機通過host-only(僅主機模式)方式,将IP位址暴露給主控端,我們可通過
minikube ip
指令擷取。任何NodePort類型的服務,我們均可通過
minikue-IP:NodePort
的方式通路。要确定服務的NodePort,可以使用以下指令:
八、持久卷
minikube支援類型為hostPath的持久卷。hostPath持久卷映射到minikube虛拟機内的目錄下。minikube虛拟機的檔案系統是tmpfs,是以在minikube虛拟機重新啟動(
minikube stop
)之後,手動挂載的目錄都不再存在。但是,我們可以儲存資料到minikube虛拟機的以下目錄中
- /data
- /var/lib/localkube
- /var/lib/docker
- /tmp/hostpath_pv
- /tmp/hostpath-provisioner
下面是PersistentVolume的yaml配置檔案,用于在minikube虛拟機的/data目錄中保留資料卷/pv0001:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv0001
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: Gi
hostPath:
path: /data/pv0001/
我們還可以把hostPath映射到挂載主控端檔案夾的minikube虛拟機目錄,實作持久卷存儲。
九、挂載主控端檔案夾
為了在主控端與客戶機之間共享檔案,我們可以挂載主控端指定的檔案夾到minikube虛拟機中,格式如下:
# minikube mount /path/to/HOST_MOUNT_DIRECTORY:/path/to/VM_MOUNT_DIRECTORY &
//&,表示指令在背景運作。minikube虛拟機重新開機後,挂載檔案夾消失,即挂載是一次性的。
将主控端的minikube-dir目錄挂載到客戶機的minikube-dir目錄上:
# minikube mount /Users/jackyue/data/minikube-dir:/minikube-dir &
十、參考文獻
使用Minikube安裝Kubernetes叢集
kubernetes/minikube