天天看點

minikube系列(1):在Macos上,使用minikube安裝單機版Kubernetes叢集

minikube系列(1):在Macos上,使用minikube安裝單機版Kubernetes叢集

在容器編排工具中,安裝配置最複雜的要數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

繼續閱讀