使用 kind 快速搭建kubernetes测试环境
kind 全称为 “kubernetes in docker”,用于将 kubernetes 运行于 docker 容器内。 每个容器为一个 node,支持一个物理机多个 node,kind 通常用于快速搭建测试集群。 其内部使用 kubeadm 来完成 kubernetes 集群初始化,并自带 csi 实现 local-storage 以及 cni 实现 kind network,保证开箱可用。
创建集群
确定 k8s 版本,k8s 版本是由 node 镜像确定,可以从DockerHub镜像仓库选择合适的版本。
配置镜像代理(mirror)
由于容器内部仅包含 k8s 镜像,其余镜像需要从公网拉取,这通常较为缓慢。
解决方式有几种方式:
加速 etcd
etcd 为高磁盘 IO,在非 ssd 机器上可能导致集群响应缓慢。 作为改善,可以将 etcd data 目录指向 tmpfs,以使用内存作为数据存储。通过来说这回占用约百 MB 的内存空间,如果内存足够,且确实无需持久化时可以使用它此方式。
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
kubeadmConfigPatches:
- |
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
etcd:
local:
dataDir: /tmp/etcd # /tmp directory is a tmpfs(in memory),use it for speeding up etcd and lower disk IO.
创建 kind cluster
#! /bin/sh
cat <<EOF | kind create cluster --kubeconfig=${HOME}/.kube/config --config=-
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: kubegems
networking:
apiServerAddress: 10.12.32.11 # your host ip
apiServerPort: 6443
containerdConfigPatches:
- |-
[plugins."io.containerd.grpc.v1.cri".containerd]
snapshotter = "native"
- |-
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["http://proxy:5000"]
- |-
nodes:
- role: worker
image: kindest/node:v1.20.2
- role: control-plane
image: kindest/node:v1.20.2
extraPortMappings:
- containerPort: 30000
hostPort: 30000
EOF
docker volume create registry
docker run -d --name proxy --restart=always --net=kind -vregistry:/var/lib/registry -e REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io registry:2