Kind 是我很喜歡也一直在參與的項目,我計劃將 Kind 相關的文章寫成一個系列。這是第二篇。node
同時,本文也可做爲 《Kubernetes 從上手到實踐》 第四節內容的補充,搭配食用效果更佳~git
Kind 是 Kubernetes In Docker 的縮寫,顧名思義是使用 Docker 容器做爲 Node 並將 Kubernetes 部署至其中的一個工具。如今包括 Kubernetes 自身在內的不少雲原生基礎項目都將 Kind 應用於自身的 e2e 測試或項目的入門示例中。github
默認狀況下使用 Kind 建立 Kubernetes 集羣,只須要先安裝好 Kind 執行 kind create cluster
即可, Kind 會自動下載所需的 Docker 鏡像,並啓動集羣。docker
可是,在某些狀況下,咱們也會有須要在離線環境中啓動 Kubernetes 集羣的需求。本篇文章我來爲你介紹兩種使用 Kind 在離線環境建立 Kubernetes 集羣的方式。bash
Kind 在每次發佈版本時,會同時構建併發布默認使用的鏡像,目前託管在 Docker Hub 上。建議你使用在每次 ReleaseNote 中指定了 shasum 的鏡像。網絡
當你在離線環境中想要使用 Kind 預構建的鏡像建立集羣時,你能夠在任意可聯網的機器上或目標機器上有網絡的狀況下,提早下載該鏡像,並拷貝至須要建立集羣的目標機器上。併發
若是你的機器上已經安裝了 Docker,那能夠直接使用 docker pull
命令下載鏡像:工具
(MoeLove) ➜ ~ docker pull kindest/node:v1.17.0@sha256:9512edae126da271b66b990b6fff768fbb7cd786c7d39e86bdf55906352fdf62
sha256:9512edae126da271b66b990b6fff768fbb7cd786c7d39e86bdf55906352fdf62: Pulling from kindest/node
cc5a81c29aab: Pull complete
81c62728355f: Pull complete
ed9cffdd962a: Pull complete
6a46f000fce2: Pull complete
6bd890da28be: Pull complete
0d88bd219ffe: Pull complete
af5240f230f0: Pull complete
Digest: sha256:9512edae126da271b66b990b6fff768fbb7cd786c7d39e86bdf55906352fdf62
Status: Downloaded newer image for kindest/node@sha256:9512edae126da271b66b990b6fff768fbb7cd786c7d39e86bdf55906352fdf62
docker.io/kindest/node:v1.17.0@sha256:9512edae126da271b66b990b6fff768fbb7cd786c7d39e86bdf55906352fdf62
複製代碼
接下來,你可使用 docker save
命令,將鏡像保存爲一個 tar 包:post
(MoeLove) ➜ ~ docker save -o kind.v1.17.0.tar kindest/node:v1.17.0@sha256:9512edae126da271b66b990b6fff768fbb7cd786c7d39e86bdf55906352fdf62
複製代碼
若是你以爲鏡像體積太大,而且你也已經安裝了 gzip 的話,可使用如下命令,將鏡像保存爲經 gzip 格式的壓縮包。測試
(MoeLove) ➜ ~ docker save kindest/node:v1.17.0@sha256:9512edae126da271b66b990b6fff768fbb7cd786c7d39e86bdf55906352fdf62 | gzip > kind.v1.17.0.tar.gz
複製代碼
在目標機器上,你可使用 docker load
命令將鏡像加載至 docker daemon 的存儲中:
(MoeLove) ➜ ~ docker load -i kind.v1.17.0.tar
Loaded image ID: sha256:ec6ab22d89efc045f4da4fc862f6a13c64c0670fa7656fbecdec5307380f9cb0
# 或者
➜ ~ docker load -i kind.v1.17.0.tar.gz
Loaded image ID: sha256:ec6ab22d89efc045f4da4fc862f6a13c64c0670fa7656fbecdec5307380f9cb0
複製代碼
至此,你即可以經過如下命令,使用已經導入的鏡像來建立集羣:
(MoeLove) ➜ ~ kind create cluster --image kindest/node:v1.17.0@sha256:9512edae126da271b66b990b6fff768fbb7cd786c7d39e86bdf55906352fdf62
Creating cluster "kind" ...
✓ Ensuring node image (kindest/node:v1.17.0) 🖼
✓ Preparing nodes 📦
✓ Writing configuration 📜
✓ Starting control-plane 🕹️
✓ Installing CNI 🔌
✓ Installing StorageClass 💾
Set kubectl context to "kind-kind"
You can now use your cluster with:
kubectl cluster-info --context kind-kind
Have a question, bug, or feature request? Let us know! https://kind.sigs.k8s.io/#community 🙂
複製代碼
PS:在下載 Docker 鏡像的步驟中,若是你沒有安裝 Docker,那你也能夠有其餘選擇,好比使用 skopeo 之類的工具。
若是你在對 Kubernetes 進行開發,或是 Kind 維護團隊沒有發佈特定 Kubernetes 版本的預構建的鏡像,那你能夠自行構建鏡像。
須要注意的是,構建鏡像時須要網絡和必定的磁盤空間。你能夠在構建完鏡像後,使用上一節提到的辦法在離線環境使用。
須要提早準備好 kind 的源代碼
(MoeLove) ➜ ~ mkdir -p $GOPATH/src/sigs.k8s.io
(MoeLove) ➜ ~ cd $GOPATH/src/sigs.k8s.io
(MoeLove) ➜ ~ git clone https://github.com/kubernetes-sigs/kind
複製代碼
接下來即可使用如下命令構建 base 鏡像了。
(MoeLove) ➜ ~ kind build base-image --image kindest/base:latest --source $GOPATH/src/sigs.k8s.io/kind/images/base
Building base image in: /tmp/kind-base-image147474678
Starting Docker build ...
...
Successfully tagged kindest/base:latest
Docker build completed.
複製代碼
構建完 base 鏡像,還須要以此鏡像做爲基礎構建 node 鏡像。
使用此方法,須要你提早準備好 Kubernetes 源代碼,你能夠參考 Kubernetes 項目的說明下載 Kubernetes 源代碼,或者將源代碼拷貝至目標機器的對應位置。
(MoeLove) ➜ ~ mkdir -p $GOPATH/src/k8s.io
(MoeLove) ➜ ~ cd $GOPATH/src/k8s.io
(MoeLove) ➜ ~ git clone https://github.com/kubernetes/kubernetes
複製代碼
接下來你即可以使用如下命令構建 node 鏡像了
(MoeLove) ➜ ~ kind build node-image --base-image kindest/base:latest --image kindest/node:latest --kube-root $GOPATH/src/k8s.io/kubernetes
Starting to build Kubernetes
+++ [0205 11:21:38] Verifying Prerequisites....
...
Image build completed.
複製代碼
鏡像構建成功後,即可使用此鏡像來建立集羣了。
(MoeLove) ➜ ~ kind create cluster --image kindest/node:latest
Creating cluster "kind" ...
✓ Ensuring node image (kindest/node:latest) 🖼
✓ Preparing nodes 📦
✓ Writing configuration 📜
✓ Starting control-plane 🕹️
✓ Installing CNI 🔌
✓ Installing StorageClass 💾
Set kubectl context to "kind-kind"
You can now use your cluster with:
kubectl cluster-info --context kind-kind
Have a question, bug, or feature request? Let us know! https://kind.sigs.k8s.io/#community 🙂
複製代碼
檢查集羣節點信息
(MoeLove) ➜ ~ kubectl get node
NAME STATUS ROLES AGE VERSION
kind-control-plane Ready master 40s v1.18.0-alpha.0.3222+4b294079458a72
複製代碼
能夠看到集羣版本是當前 kubernetes 源碼的版本了。
本文介紹了兩類使用 Kind 建立 Kubernetes 集羣的方法,分別是使用 Kind 預發佈的鏡像和使用 Kubernetes 源代碼構建鏡像。
以上兩種方法,鏡像中均已包含建立 Kubernetes 集羣所需的所有資源,無需再額外下載。(這也是和以前版本最大的區別)
能夠經過下面二維碼訂閱個人文章公衆號【MoeLove】