Kind + Docker 一鍵部署K8s實驗環境


時下互聯網最火的技術無非是容器雲和AI,而虛擬雲技術方面最火則是docker和K8S。docker學習和實踐都很容易,但是K8S的由於集群化,部署需要較多的機器,環境搭建學習實踐比較費勁這一度影響了K8S技術的普及。所以業界也除了一些簡易版的K8s集群環境,比如K3S(5 less than k8s),本文蟲蟲給大家介紹也是這樣一個項目Kind,一鍵部署的單機K8S環境,可以用於學習、本地開發和CI環境。

Kind + Docker 一鍵部署K8s實驗環境

概述

kind是主要是為了測試和簡化K8S而設計的,項目基於Golang開發依賴極少,只需要Golang 1.11版本以上和docker既可。

kind由以下組件構成:

Go 實現集群創建,映鏡像構建等的軟件包。

kind命令行界面。

運行systemd,Kubernetes等的Docker 鏡像

基於這些軟件包(WIP)kubetest 集成。

安裝

kind的安裝也很簡單,只需下載kind在github上發佈的包,然後把他移動到安裝目錄即可。另外kind操作依賴docker,需要先安裝docker。

Kind + Docker 一鍵部署K8s實驗環境

macOS/Linux安裝:

curl -Lo kind github /kubernetes-sigs/kind/releases/download/v0.7.0/kind-$(uname)-amd64

chmod +x ./kind

Kind + Docker 一鍵部署K8s實驗環境

mv kind /usr/sbin/kind

通過Homebrew方式安裝

如果系統有Homebew包管理器,也可以用brew命令一鍵安裝:

brew install kind

Windows安裝

Window下的安裝也類似,直接從github發佈頁面下載Window版本的發佈包即可

curl.exe -Lo kind-windows-amd64.exe github/kubernetes-sigs/kind/releases/download/v0.7.0/kind-windows-amd64

Move-Item .\\kind-windows-amd64.exe c:\\some-dir-in-your-PATH\\kind.exe


Chocolatey包管理器方式安裝

Windows如果有Chocolatey包管理器,則可以直接一鍵安裝

choco install kind

go get源碼安裝

也可以使用go get下載源碼編譯安裝:

go get sigs.k8s.io/kind。

該命令會自動在$(go env GOPATH)/bin下安裝kind。如果安裝報錯,

比如報:kind: command not found

則需要將該執行目錄添加到系統PATH中:

基本使用

kind是一個單文件二進制運行程序,使用也非常簡單,基本命令如下:

Kind + Docker 一鍵部署K8s實驗環境

create、delete 創建、刪除集群

export是將內部所有容器的日誌拷貝到宿主機的某個目錄下。

get 查看當前有哪些集群,哪些節點,以及 kubectl 配置文件的地址

load 可以從宿主機向 k8s 容器內導入鏡像。

version 顯示kind的版本

創建集群

創建Kubernetes集群非常簡單,可以一鍵創建:

kind create cluster

Kind + Docker 一鍵部署K8s實驗環境

該命令使用預構建的節點鏡像引導Kubernetes集群,默認為從docker hub獲取kindest/node鏡像,也支持自定義鏡像來源,使用--image指定其他鏡像。

默認情況下,集群名稱為kind。可使用--name制定特定的名稱。

刪除集群

刪除同樣簡單,可以使用下面命令一鍵刪除

kind delete cluster

如果--name未指定該標誌,則kind將使用默認的群集上下文名稱kind並刪除該群集。

加載docker鏡像

可以使用以下命令將Docker鏡像加載到集群節點中:

kind load docker-image my-custom-image

注意:如果使用命名集群,則需要指定要將鏡像加載到的集群的名稱:

kind load docker-image my-custom-image --name kind-2

此外,鏡像archive也可以加載:

kind load image-archive /my-image-archive.tar

所以從docker創建鏡像到加載流程為:

docker build -t my-custom-image:unique-tag ./my-image-dir

kind load docker-image my-custom-image:unique-tag

kubectl apply -f my-manifest-using-my-image:unique-tag

鏡像編譯

kind通過使用Docker容器作為"節點"來運行本地Kubernetes集群。使用node-image來運行K8S工件,比如kubeadm或kubelet。node-image會依次創建base-image,並加載容器中運行所需要的docker和K8S的依賴層。

當前,支持兩種編譯node-image的方法。如果主機中存在K8S源,則可以使用docker或bazel來構建。如果要指定構建類型,需要使用—type參數。

如果要使用bazel源(--type=bazel)由於Kubelet,使用的CGO需要依賴Linux GCC/glibc,因此當前無法在Windows或MacOS上使用。

docker如果未指定,則kind默認使用構建類型。

kind build node-image --type bazel

與集群交互

創建集群后,可以使用kubectl 通過與它交互的一種生成的配置文件。默認情況下,如果未設置$KUBECONFIG環境變量,則群集訪問配置存儲在~/.kube/config中。

如果設置了$KUBECONFIG環境變量,那麼它將用作路徑列表。修改值後,將在定義節的文件中對其進行修改。創建值後,將在存在的第一個文件中創建該值。如果鏈中沒有文件,那麼它將創建列表中的最後一個文件。

可以--kubeconfig在創建集群時使用該標誌,然後僅加載該文件。該標誌只能設置一次,並且不會發生合併。

<code>export KUBECONFIG="$(kind get kubeconfig-path --name="kind")"/<code>

查看集群信息,可以用用kubectl cluster-info

Kind + Docker 一鍵部署K8s實驗環境

查看節點信息用kubectl get node

Kind + Docker 一鍵部署K8s實驗環境

對於多個集群,可以用可以使用get clusters 命令。

例如,假設創建了兩個集群:

kind create cluster

kind create cluster --name kind-2

當列出kind群集時,結果會顯示:

kind get clusters

kind

kind-2

與特定集群交互,需要使用—context參數在kubectl中指定集群名稱:

kubectl cluster-info --context kind-kind

kubectl cluster-info --context kind-2

Docker Desktop

如果要kind build node-image在MacOS或Windows上構建K8S,則需要至少6GB的RAM專門運行Docker引擎的虛擬機(VM),建議使用8GB。

Mac設置Docker內存設置方法如下:

打開"Preferences"菜單:

Kind + Docker 一鍵部署K8s實驗環境

轉到Advanced頁籤,可以在此處設置。

Kind + Docker 一鍵部署K8s實驗環境

要更改Windows Docker的資源限制,需要右鍵單擊任務欄上的Moby圖標,然後選擇"Settings"。如果看到"切換到Linux容器",則需要先執行此操作,然後再打開"Settings"

Kind + Docker 一鍵部署K8s實驗環境


現在,轉到" Advanced"頁面,然後在此處更改設置,請參閱更改Docker的資源限制。

Kind + Docker 一鍵部署K8s實驗環境

如果要清理Docker內容,可以使用prune命令

docker system prune

Kind + Docker 一鍵部署K8s實驗環境

多節點集群

kind中也支持創建多多節點群集。創建多節點集群需要配置,配置格式為yaml,比如我們創建一個三節點(兩個wokers)的配置(config.yaml):

kind: Cluster

apiVersion: kind.x-k8s.io/v1alpha4

nodes:

- role: control-plane

- role: worker

- role: worker

<code>kind create cluster --config=kind-config.yaml /<code>


也可以設置多個控制節點的集群:

kind: Cluster

apiVersion: kind.x-k8s.io/v1alpha4

nodes:

- role: control-plane

- role: control-plane

- role: worker

- role: worker

- role: worker

<code>配置好後,使用kind create cluster --config=config.yaml /<code>

代理

可以使用以下一個或多個環境變量(大寫優先)將kind配置為使用代理:

HTTP_PROXY 或者 http_proxy

HTTPS_PROXY 或者 https_proxy

NO_PROXY 或者 no_proxy

配置代理後,所有連接將使用它。可以通過配置NO_PROXY來制定本地不需要代理的網段:

NO_PROXY=172.17.0.0/16

日誌

kind可以導出所有種類的相關日誌瀏覽。導出日誌使用export命令:

kind export logs

Exported logs to: /tmp/396758314

如果要制定日誌路徑可以直接在其後制定路徑::

kind export logs ./logs

日誌的結構大致如下所示:

.

├── docker-info.txt

└── kind-control-plane/

├── containers

├── docker.log

├── inspect.json

├── journal.log

├── kubelet.log

├── kubernetes-version.txt

└── pods/

日誌包含有關Docker主機,容器運行類型,Kubernetes集群本身等信息。

總結

本文我們介紹了一個在本地單機部署K8S集群的方法,使用kind可以一鍵建立一個K8S實驗環境供我們學習熟悉K8S架構,當然這只是作為一個初步的指導,更多的功能和實踐需要大家動手去探索。


分享到:


相關文章: