前言
我们平时本地搭建kubernetes集群少则耗时半小时,多则耗时数小时,而本文介绍的kind工具则可以实现在分钟级完成kubernetes集群的搭建,大大提高了k8s集群安装和调试效率,本文主要介绍了kind的安装以及如何使用kind进行各类容器化kubernetes集群的创建,比如多节点的kubernetes集群、控制平面高可用集群、集群和主机端口相互映射的集群等,同时详细介绍了如何安装kubectl工具以便和kubernetes集群进行交互,希望对各位小伙伴有所帮助。
环境准备
在正式开始安装kind之前请先安装docker,因为kind依赖docker运行
1.安装kind
请根据实际使用的操作系统选择对应的下载地址
# For AMD64 / x86_64
[ $(uname -m) = x86_64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64
# For ARM64
[ $(uname -m) = aarch64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-arm64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind
2.创建集群
kind create cluster --name host
参数列表:
--name 指定创建集群的名称
--image 指定创建集群使用的镜像版本
3.安装kubectl
为了和kind创建的集群进行交互, 我们需要安装kubectl工具, kubectl默认会使用 ${HOME}/.kube/config 这个配置与kind创建的集群进行交互。
kind会将创建的k8s集群的相关接入信息写入 ${HOME}/.kube/config 这个文件
3.1 下载kubectl
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
3.2 添加执行权限
chmod +x ./kubectl
3.3 将kubectl添加到path
mv ./kubectl /usr/local/bin/kubectl
3.4 使用kubectl与集群进行交互
注意操作之前一定要切换到对应的集群
kubectl config get-contexts ## 查看所有集群
kubectl config use-context context名称 ## 切换到指定集群
kubectl cluster-info 查看集群相关信息
kubectl get pod -A 查看pod信息
4.通过kind命令查看或删除kind创建的集群
4.1 查看所有集群
kind get clusters
4.2 删除所有集群
kind delete clusters --all
4.3 删除指定集群
kind delete clusters --name xxx(kind集群名)
5.高级用法
通过kind配置文件创建集群
kind create cluster --config kind-example-config.yaml(配置文件名字不固定,可以随意命名)
下面根据创建集群时不同的需求列举了几种配置文件
5.1 创建多节点集群
# three node (two workers) cluster config
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker
5.2 创建多控制面板的集群
# 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
5.3 创建将集群端口映射到主机的集群
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
5.4 创建指定kubernetes版本的集群
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
image: kindest/node:v1.16.4@sha256:b91a2c2317a000f3a783489dfb755064177dbc3a0b2f4147d50f04825d016f55
- role: worker
image: kindest/node:v1.16.4@sha256:b91a2c2317a000f3a783489dfb755064177dbc3a0b2f4147d50f04825d016f55
5.5 集群开启特性门控
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
featureGates:
FeatureGateName: true ##注意此处特性门控的key要真实存在的
注意 FeatureGateName: true ##此处特性门控的key要真实存在的,具体的key值可在 kubernetes.io/zh-cn/docs/… 查看
6.导出kind创建的集群的日志
kind export logs --name kind-集群名 日志路径