kind 搭建 k8s 集群

kind (Kubernetes IN Docker) 是一个用于在本地使用 Docker 容器快速搭建 Kubernetes 集群的工具。它主要用于测试和开发环境,允许用户在本地机器上轻松创建和管理多节点的 Kubernetes 集群,而无需复杂的安装过程。 kind 使用 Docker 容器作为 Kubernetes 节点,每个节点都是一个独立的容器,这使得集群的创建和销毁变得非常快速和高效。 kind 支持多种 Kubernetes 版本,用户可以根据需要选择不同的版本进行测试。此外, kind 还支持自定义集群配置,例如节点数量、网络设置等,满足不同的测试需求。总体而言,kind 是一个轻量级且易于使用的工具,非常适合开发者和测试人员在本地环境中快速搭建和管理 Kubernetes 集群。

安装 kind

  1. 首先需要确定要安装的 k8s 版本 (比如 1.34.0)

  2. 准备公网环境的 ubuntu 22.04 或 24.04 系统

  3. 安装 kubectl

  4. 安装 kind

  5. 安装 docker

# 安装 kubectl 1.34.0 版本
curl -LO https://dl.k8s.io/release/v1.34.0/bin/linux/amd64/kubectl
chmod +x kubectl
sudo mv kubectl /usr/local/bin/

# 安装 kind
[ $(uname -m) = x86_64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.30.0/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/

# 安装 docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

创建 k8s 集群

kind 支持的 k8s 版本请参考镜像仓库:dockerhub kindest/node

# 首先更新下 kind
# 在 kind 版本低的时候,可能会遇到一些问题,比如 kind load docker-image 镜像不成功等等。。。
GO111MODULE="on" go install sigs.k8s.io/kind@latest

# 创建集群
# 增加了端口映射,可以通过宿主机的 80 和 443 端口访问集群内的服务,配合 ingress 使用
cat << EOF | kind create cluster --image=kindest/node:v1.34.0 --config=-
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
networking:
  disableDefaultCNI: true
  podSubnet: "10.10.0.0/16"
  serviceSubnet: "10.11.0.0/16"
nodes:
  - role: control-plane
    extraPortMappings:
    - containerPort: 80
      hostPort: 80
      protocol: TCP
    - containerPort: 443
      hostPort: 443
      protocol: TCP
  - role: worker
  - role: worker
# containerdConfigPatches:
# - |-
#   [plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.ll2019.cn"]
#     endpoint = ["https://registry.ll2019.cn"]
EOF

# 安装 helm
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash


# 网络插件安装
# 如果使用了 disableDefaultCNI: true,需要手动安装网络插件,例如 cilium
# https://docs.cilium.io/en/stable/installation/kind/
helm repo add cilium https://helm.cilium.io/
helm repo update

docker pull quay.io/cilium/cilium:v1.18.3
kind load docker-image quay.io/cilium/cilium:v1.18.3

helm install cilium cilium/cilium --version 1.18.3 \
   --namespace kube-system \
   --set image.pullPolicy=IfNotPresent \
   --set ipam.mode=kubernetes \
   --set debug.verbose=""

# 部署一个 nginx 访问看看
kubectl create deployment nginx \
  --image=nginx:alpine \
  --replicas=3

kubectl expose deployment nginx \
  --port=80 \
  --target-port=80 \
  --type=NodePort