kind 快速开始

kind 快速开始

使用二进制安装

发布页面上下载。

1
2
3
curl -Lo ./kind https://github.com/kubernetes-sigs/kind/releases/download/v0.13.0/kind-linux-amd64
chmod +x ./kind
mv ./kind /some-dir-in-your-PATH/kind

创建集群

1
2
3
4
5
6
# 创建集群
kind create cluster
# 指定集群名字
kind create cluster --name kind-2
# 删除集群
kind delete cluster

列出kind集群

1
kind get clusters

与特定集群交互

1
2
3
# 在 kubectl 中将集群名称指定为上下文
kubectl cluster-info --context kind-kind
kubectl cluster-info --context kind-kind-2

删除集群

1
2
3
4
# 删除集群
kind delete cluster
# 删除指定名字的集群
kind delete cluster --name kind-2

加载容器镜像到集群

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 加载镜像到集群
kind load docker-image my-custom-image-0 my-custom-image-1
# 加载镜像到指定集群
kind load docker-image my-custom-image-0 my-custom-image-1 --name kind-2
# 加载镜像存档
kind load image-archive /my-image-archive.tar

# 就像这样的工作流程
docker build -t my-custom-image:unique-tag ./my-image-dir
kind load docker-image my-custom-image:unique-tag
kubectl apply -f my-manifest-using-my-image:unique-tag

# 查看集群节点中的镜像列表使用 docker exec
docker exec -it my-node-name crictl images
# my-node-name 是容器的名字(例如: kind-control-plane)。

Kubernetes 默认拉取策略是 IfNotPersent;除非镜像标签是 latest 或省略,在这种情况下,默认策略是 Always

IfNotPresent :Kubelet 跳过拉取已存在的镜像。

指定拉取策略:

iamgePullPolicy: IfNotPresentimagePullPolicy: Never

配置你的 kind 集群

详细配置

一个配置示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# kind create cluster --config=/foo/bar/config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
# InitConfiguration 在第一个控制平面节点上运行
# 在kubeadm init期间有四种配置类型可用:InitConfiguration、ClusterConfiguration、KubeProxyConfiguration、KubeletConfiguration
# kubeadmConfigPatches:
# - |
# kind: InitConfiguration
# nodeRegistration:
# kubeletExtraArgs:
# node-labels: "ingress-ready=true"
extraPortMappings:
- containerPort: 30080 # 映射dashboard 端口
hostPort: 30080
protocol: TCP
# the three workers
- role: worker
# 这个node作为 ingress;配置 ingress-ready=true 标签;配置入口端口映射
# 在 KIND 集群、工作器或控制平面(在 HA 模式下)中配置的每个附加节点上,KIND 运行kubeadm join,可以使用 JoinConfiguration ( spec )进行配置
kubeadmConfigPatches:
- |
kind: JoinConfiguration
nodeRegistration:
kubeletExtraArgs:
node-labels: "ingress-ready=true"
extraPortMappings:
- containerPort: 80
hostPort: 80
listenAddress: "0.0.0.0" # Optional, defaults to "0.0.0.0"
protocol: TCP
- containerPort: 443
hostPort: 443
protocol: TCP
- role: worker
- role: worker

使用指定配置文件创建集群,使用 --config 标志。

1
kind create cluster --config kind-example-config

多节点集群

1
2
3
4
5
6
7
# three node (two workers) cluster config
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker

控制平面 HA

1
2
3
4
5
6
7
8
9
10
# a cluster with 3 control-plane nodes and 3 workers
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: control-plane
- role: control-plane
- role: worker
- role: worker
- role: worker

映射端口到主机

使用 extraPortMappings 映射额外端口到主机

1
2
3
4
5
6
7
8
9
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
extraPortMappings:
- containerPort: 80
hostPort: 80
listenAddress: "0.0.0.0" # Optional, defaults to "0.0.0.0"
protocol: udp # Optional, defaults to tcp

如果使用暴露主机端口的 NodePort 服务或守护程序集,这可能很有用。

注意:将 listenAddress 绑定到 127.0.0.1 可能会影响您访问服务的能力。

您可能希望查看 Ingress 指南LoadBalancer 指南

导出集群日志

1
2
3
kind export logs
Exported logs to: /tmp/396758314
# 如果要在不同的集群上执行操作,请使用 --name 标志

日志结构:

1
2
3
4
5
6
7
8
9
10
.
├── docker-info.txt
└── kind-control-plane/
├── containers
├── docker.log
├── inspect.json
├── journal.log
├── kubelet.log
├── kubernetes-version.txt
└── pods/

参考