使用 kind 在本地運行 k8s

本文介紹如何使用 kind 在本地快速啟動一個 k8s 集群胃榕。kind 是 Kubernetes in Docker 的簡寫霹菊,從名字上看很容易猜出 kind 的目標(biāo)是將一個 k8s 集群以容器的方式部署在本機電腦上伤提。這種方式對平臺依賴少搜变,安裝部署比較干凈利落艘蹋,理論上本地只需要一個 Docker 運行環(huán)境即可车酣。

安裝過程介紹

實驗環(huán)境

  • 操作系統(tǒng):macOS Catalina (10.15.7)
  • 容器環(huán)境:Docker Desktop for Mac 3.2.2
  • 包管理工具:Homebrew

設(shè)置 Docker 鏡像加速

打開 Docker Desktop for Mac 的首選項界面,選擇 Docker Engine榴都,加入如下設(shè)置:

{
  "registry-mirrors": [
    "https://8km017g6.mirror.aliyuncs.com"
  ]
}

之后點擊 Apply & Restart 重啟 Docker待锈。

安裝 kind 和 kubectl

kind 并不依賴于 kubectl,但是開發(fā)人員需要 kubectl 與 kind 所創(chuàng)建的 k8s 集群進(jìn)行通訊:

$ brew install kubectl
$ brew install kind

創(chuàng)建 k8s 集群

使用 kind create cluster 命令新建集群嘴高,注意 --name 選項指定集群的名稱竿音,若未指定該參數(shù),kind 將會是默認(rèn)的集群名稱拴驮。

$ kind create cluster --name demo
Creating cluster "demo" ...
 ? Ensuring node image (kindest/node:v1.20.2) ??
 ? Preparing nodes ??
 ? Writing configuration ??
 ? Starting control-plane ???
 ? Installing CNI ??
 ? Installing StorageClass ??
Set kubectl context to "kind-demo"
You can now use your cluster with:

kubectl cluster-info --context kind-demo

Thanks for using kind! ??

此時根據(jù)提示輸入 kubectl cluster-info --context kind-demo 會顯示集群當(dāng)前的基本信息:

$ kubectl cluster-info --context kind-demo
Kubernetes control plane is running at https://127.0.0.1:56770
KubeDNS is running at https://127.0.0.1:56770/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

查看集群 demo 中的節(jié)點信息:

$ kubectl get node
NAME                 STATUS   ROLES                  AGE     VERSION
demo-control-plane   Ready    control-plane,master   4m46s   v1.20.2

$ kubectl get pods -n kube-system
NAME                                         READY   STATUS    RESTARTS   AGE
coredns-74ff55c5b-9gdc5                      1/1     Running   0          6m24s
coredns-74ff55c5b-tnb5w                      1/1     Running   0          6m24s
etcd-demo-control-plane                      1/1     Running   0          6m38s
kindnet-4fmq9                                1/1     Running   0          6m24s
kube-apiserver-demo-control-plane            1/1     Running   0          6m38s
kube-controller-manager-demo-control-plane   1/1     Running   0          6m38s
kube-proxy-6wrdz                             1/1     Running   0          6m24s
kube-scheduler-demo-control-plane            1/1     Running   0          6m38s

至此春瞬,一個最基本的 k8s 集群就已經(jīng)創(chuàng)建好了。

刪除集群

使用以下命令刪除上面已經(jīng)創(chuàng)建的集群 demo:

$ kind delete cluster --name demo
Deleting cluster "demo" ...

支持 Ingress 控制器的集群

帶有 Ingress Controller 的集群則需要向主機暴露 80 和 443 端口以便于主機可以通過域名進(jìn)行訪問莹汤。kind 除了可以支持通過命令行選項的方式創(chuàng)建集群快鱼,也支持使用配置文件的方式對集群進(jìn)行更細(xì)致的配置颠印,創(chuàng)建命令如下:

cat <<EOF | kind create cluster --config=-
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  kubeadmConfigPatches:
  - |
    kind: InitConfiguration
    nodeRegistration:
      kubeletExtraArgs:
        node-labels: "ingress-ready=true"
  extraPortMappings:
  - containerPort: 80
    hostPort: 80
    protocol: TCP
  - containerPort: 443
    hostPort: 443
    protocol: TCP
EOF

當(dāng)然你也可以把這個配置信息以文件的形式保存纲岭,比如叫 kind.yaml ,那么創(chuàng)建命令就是:

kind create cluster --config=kind.yaml

部署 NGINX Ingress 控制器

國內(nèi)對于 GitHub 和 k8s.gcr.io 鏡像倉庫的訪問速度不太理想线罕,因此此處我們需要做一些針對于國內(nèi)網(wǎng)絡(luò)的準(zhǔn)備工作止潮。

拉取鏡像

# 從阿里云鏡像倉庫拉取鏡像
$ docker pull registry.aliyuncs.com/kubeadm-ha/ingress-nginx_controller:v0.43.0
# 重命名為官方鏡像名稱
$ docker tag registry.aliyuncs.com/kubeadm-ha/ingress-nginx_controller:v0.43.0 k8s.gcr.io/ingress-nginx/controller:v0.43.0

將鏡像導(dǎo)入到 kind

kind 的 load 命令可以幫助我們將 Docker 中的鏡像導(dǎo)入到由 kind 創(chuàng)建的集群中,命令如下:

$ kind load docker-image k8s.gcr.io/ingress-nginx/controller:v0.43.0
Image: "k8s.gcr.io/ingress-nginx/controller:v0.43.0" with ID "sha256:38dca1cbd23197f591e58fc6c949110b53f7a003e15f6d4974d86e7f7a00815d" not yet present on node "kind-control-plane", loading...

部署 Ingress 控制器

我們使用 Gitee 的鏡像倉庫地址來加速資源的下載:

$ kubectl apply -f https://gitee.com/mirrors/ingress-nginx/raw/controller-v0.43.0/deploy/static/provider/kind/deploy.yaml

Ingress 控制器的部署和啟動需要等待一會钞楼,可以使用以下命令來查看運行情況:

$ kubectl get pod -n ingress-nginx
NAME                                        READY   STATUS      RESTARTS   AGE
ingress-nginx-admission-create-ktp2g        0/1     Completed   0          7h4m
ingress-nginx-admission-patch-q4vmb         0/1     Completed   2          7h4m
ingress-nginx-controller-55bc59c885-mcp25   1/1     Running     0          7h4m

如果 ingress-nginx-controller-xxx 的狀態(tài)的是 Running喇闸,說明已經(jīng)成功運行。

部署測試應(yīng)用

此處我們使用 kind 官網(wǎng)提供的測試應(yīng)用:

kubectl apply -f https://kind.sigs.k8s.io/examples/ingress/usage.yaml

測試 Ingress 的連通性:

$ curl localhost/foo
foo
$ curl localhost/bar
bar

參考資料

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末询件,一起剝皮案震驚了整個濱河市燃乍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌宛琅,老刑警劉巖刻蟹,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異嘿辟,居然都是意外死亡舆瘪,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進(jìn)店門红伦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來英古,“玉大人,你說我怎么就攤上這事昙读≌俚鳎” “怎么了?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長某残。 經(jīng)常有香客問我国撵,道長,這世上最難降的妖魔是什么玻墅? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任介牙,我火速辦了婚禮,結(jié)果婚禮上澳厢,老公的妹妹穿的比我還像新娘环础。我一直安慰自己,他們只是感情好剩拢,可當(dāng)我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布线得。 她就那樣靜靜地躺著,像睡著了一般徐伐。 火紅的嫁衣襯著肌膚如雪贯钩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天办素,我揣著相機與錄音角雷,去河邊找鬼。 笑死性穿,一個胖子當(dāng)著我的面吹牛勺三,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播需曾,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼吗坚,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了呆万?” 一聲冷哼從身側(cè)響起商源,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谋减,沒想到半個月后牡彻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡逃顶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年讨便,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片以政。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡霸褒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出盈蛮,到底是詐尸還是另有隱情废菱,我是刑警寧澤,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站殊轴,受9級特大地震影響衰倦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜旁理,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一樊零、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧孽文,春花似錦驻襟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至减牺,卻和暖如春豌习,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拔疚。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工肥隆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人草雕。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓巷屿,卻偏偏與公主長得像固以,于是被迫代替她去往敵國和親墩虹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內(nèi)容