TOC
前言
由于各类基于 kubernetes 的云原生实验或测试的前提都是需要一个 kubernetes 环境,而在写博客时总是需要提及使用 kind 来搭建 kubernetes 环境. 因此这里单独写一篇文章来介绍如何用 kind 来部署 kubernetes,同时提供各种不同 kubernetes 环境的kind 配置文件供你使用.
使用
基本上,即使你没有使用过 Kind 也不是问题,因为基于 Kind 来搭建 kubernetes 就是一条命令的事,需要使用到 Kind 命令,因此你需要下载 Kind 命令行工具.
官方的 Kind 命令下载地址可以在Kind发布地址找到,而我提供了一个另一个地址来下载 Kind 命令行,在下载 Github 上文件速度慢的时候可以用这个地址:
https://res.cloudinary.com/lyp/raw/upload/v1678598428/lan/kind/kind
版本是 v0.17.0
对应的Github文件下载地址是:
https://github.com/kubernetes-sigs/kind/releases/download/v0.17.0/kind-linux-amd64
上述文件架构是 linux amd64的,其他架构文件可以自行在上述提供的Github发布地址上找到.
使用默认的节点镜像以及默认的集群测试环境名称:
kind create --config kind.yaml
使用特定节点镜像搭建的测试环境:
kind create --config kind.yaml --image kindest/node:v1.26.0
添加--name
参数为你的 kind kubernetes 集群命名:
kind create --config kind.yaml --image kindest/node:v1.26.0 --name mykind
各类环境的配置文件
由于 Kind 的配置文件也是区分版本的,因此将这个版本放到文件下载路径中,方便明白配置文件的适用范围.
其中大部分都配置了基于lank8s.cn
服务来拉取gcr.io
和registry.lank8s.cn
的容器镜像,因此你可以愉快的Tekton、Knative等云原生技术,而不需要考虑被墙的镜像的问题了.
相关配置如下:
containerdConfigPatches:
- |-
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."gcr.io"]
endpoint = ["https://gcr.lank8s.cn"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.k8s.io"]
endpoint = ["https://registry.lank8s.cn"]
祝你云原生之旅愉快! :)
默认带有 lank8s.cn 服务
https://liangyuanpeng.com/files/kind/v1alpha4/kind.yaml
基于flannel CNI的kubernetes
https://liangyuanpeng.com/files/kind/v1alpha4/kind_flannel.yaml
默认情况下 Kind 使用的 CNI 是,因此如果你需要使用 flannel CNI 的话,需要禁止默认的CNI并且部署flannel.
[email protected]:~$ k get po -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-787d4945fb-d84n2 0/1 Pending 0 34s
kube-system coredns-787d4945fb-zpvlf 0/1 Pending 0 34s
kube-system etcd-flannel-control-plane 1/1 Running 0 47s
...
可以看到 coredns 是没启动起来的,原因是缺少了 CNI 组件.因此首选需要下载 flannel cni需要的组件,然后部署 flannel.
下载 cni
https://liangyuanpeng.com/files/scripts/install-cni.sh
可以使用这个文件下载 CNI 二进制内容,
部署flannel
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
回来吧kubernetes!
现在再查看一下所有 pod 的情况,会看到 flannel 的 pod 正在拉取镜像启动,再过一会所有的 pod 都会启动起来了,当然也包括 coredns 的 pod,这时候就可以正常食用你的 kubernetes 测试环境了!
k8s 1.26 CEL准入校验功能
https://liangyuanpeng.com/files/kind/v1alpha4/kind_flannel.yaml
多节点
https://liangyuanpeng.com/files/kind/v1alpha4/kind_mult.yaml
K8S kube-apiserver 端口映射
默认情况下使用 Kind 搭建的 kubernetes 环境只能在本机使用,这个配置文件映射了 kube-apiserver 端口,因此可以在机器A用 Kind 搭建环境,在机器B访问Kind 的 K8S.
https://liangyuanpeng.com/files/kind/v1alpha4/kind_port.yaml
将event存储到单独的etcd服务
虽然使用 kind 时只有一个 etcd,但是不妨碍了解一下这个参数是如何使用的,或者你可以将参数值指向一个外部 etcd,作为实际效果验证。
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
containerdConfigPatches:
- |-
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."gcr.io"]
endpoint = ["https://gcr.lank8s.cn"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.k8s.io"]
endpoint = ["https://registry.lank8s.cn"]
nodes:
- role: control-plane
image: kindest/node:v1.26.0
kubeadmConfigPatches:
- |
kind: ClusterConfiguration
apiServer:
extraArgs:
etcd-servers-overrides: /events#https://127.0.0.1:2379
没有lank8s.cn服务
https://liangyuanpeng.com/files/kind/v1alpha4/kind_nolank8s.yaml
TODO
微信公众号
扫描下面的二维码关注我们的微信公众号,第一时间查看最新内容。同时也可以关注我的Github,看看我都在了解什么技术,在页面底部可以找到我的Github。
