使用kind一键创建kubernetes容器化集群

387 阅读3分钟

前言

我们平时本地搭建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名称 ## 切换到指定集群

context-use.png

       kubectl cluster-info 查看集群相关信息

cluster-info.png

       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-集群名 日志路径

export-logs.png