時下互聯網最火的技術無非是容器雲和AI,而虛擬雲技術方面最火則是docker和K8S。docker學習和實踐都很容易,但是K8S的由於集群化,部署需要較多的機器,環境搭建學習實踐比較費勁這一度影響了K8S技術的普及。所以業界也除了一些簡易版的K8s集群環境,比如K3S(5 less than k8s),本文蟲蟲給大家介紹也是這樣一個項目Kind,一鍵部署的單機K8S環境,可以用於學習、本地開發和CI環境。
概述
kind是主要是為了測試和簡化K8S而設計的,項目基於Golang開發依賴極少,只需要Golang 1.11版本以上和docker既可。
kind由以下組件構成:
Go 實現集群創建,映鏡像構建等的軟件包。
kind命令行界面。
運行systemd,Kubernetes等的Docker 鏡像
基於這些軟件包(WIP)kubetest 集成。
安裝
kind的安裝也很簡單,只需下載kind在github上發佈的包,然後把他移動到安裝目錄即可。另外kind操作依賴docker,需要先安裝docker。
macOS/Linux安裝:
curl -Lo kind github /kubernetes-sigs/kind/releases/download/v0.7.0/kind-$(uname)-amd64
chmod +x ./kind
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是一個單文件二進制運行程序,使用也非常簡單,基本命令如下:
create、delete 創建、刪除集群
export是將內部所有容器的日誌拷貝到宿主機的某個目錄下。
get 查看當前有哪些集群,哪些節點,以及 kubectl 配置文件的地址
load 可以從宿主機向 k8s 容器內導入鏡像。
version 顯示kind的版本
創建集群
創建Kubernetes集群非常簡單,可以一鍵創建:
kind create cluster
該命令使用預構建的節點鏡像引導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
查看節點信息用kubectl get node
對於多個集群,可以用可以使用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"菜單:
轉到Advanced頁籤,可以在此處設置。
要更改Windows Docker的資源限制,需要右鍵單擊任務欄上的Moby圖標,然後選擇"Settings"。如果看到"切換到Linux容器",則需要先執行此操作,然後再打開"Settings"
現在,轉到" Advanced"頁面,然後在此處更改設置,請參閱更改Docker的資源限制。
如果要清理Docker內容,可以使用prune命令
docker system prune
多節點集群
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架構,當然這只是作為一個初步的指導,更多的功能和實踐需要大家動手去探索。
閱讀更多 蟲蟲安全 的文章