使用 kind 在本地运行 k8s

本文介绍如何使用 kind 在本地快速启动一个 k8s 集群。kind 是 Kubernetes in Docker 的简写,从名字上看很容易猜出 kind 的目标是将一个 k8s 集群以容器的方式部署在本机电脑上。这种方式对平台依赖少,安装部署比较干净利落,理论上本地只需要一个 Docker 运行环境即可。

安装过程介绍

实验环境

  • 操作系统:macOS Catalina (10.15.7)
  • 容器环境:Docker Desktop for Mac 3.2.2
  • 包管理工具:Homebrew

设置 Docker 镜像加速

打开 Docker Desktop for Mac 的首选项界面,选择 Docker Engine,加入如下设置:

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

之后点击 Apply & Restart 重启 Docker。

安装 kind 和 kubectl

kind 并不依赖于 kubectl,但是开发人员需要 kubectl 与 kind 所创建的 k8s 集群进行通讯:

$ brew install kubectl
$ brew install kind

创建 k8s 集群

使用 kind create cluster 命令新建集群,注意 --name 选项指定集群的名称,若未指定该参数,kind 将会是默认的集群名称。

$ 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! 😊

此时根据提示输入 kubectl cluster-info --context kind-demo 会显示集群当前的基本信息:

$ 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 中的节点信息:

$ 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 集群就已经创建好了。

删除集群

使用以下命令删除上面已经创建的集群 demo:

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

支持 Ingress 控制器的集群

带有 Ingress Controller 的集群则需要向主机暴露 80 和 443 端口以便于主机可以通过域名进行访问。kind 除了可以支持通过命令行选项的方式创建集群,也支持使用配置文件的方式对集群进行更细致的配置,创建命令如下:

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

当然你也可以把这个配置信息以文件的形式保存,比如叫 kind.yaml ,那么创建命令就是:

kind create cluster --config=kind.yaml

部署 NGINX Ingress 控制器

国内对于 GitHub 和 k8s.gcr.io 镜像仓库的访问速度不太理想,因此此处我们需要做一些针对于国内网络的准备工作。

拉取镜像

# 从阿里云镜像仓库拉取镜像
$ 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

将镜像导入到 kind

kind 的 load 命令可以帮助我们将 Docker 中的镜像导入到由 kind 创建的集群中,命令如下:

$ 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 的状态的是 Running,说明已经成功运行。

部署测试应用

此处我们使用 kind 官网提供的测试应用:

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

测试 Ingress 的连通性:

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

参考资料

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容