Loading

使用 Kind 创建1.20.7 版本的 K8s 一主二从集群

Kind 是 Kubernetes In Docker 的缩写,顾名思义是使用 Docker 容器作为 Node 并将 Kubernetes 部署至其中的一个工具。官方文档中也把 Kind 作为一种本地集群搭建的工具进行推荐。

1.安装 kind

# 建议下载最新版本的 kind
go get sigs.k8s.io/kind@v0.11.1
cp $(go env GOPATH)/bin/kind /usr/local/bin

2.使用 kind 搭建k8s集群

2.1 创建3结点集群的配置文件

vim ~/k8s-3nodes.yaml, 添加下述内容:

# three node (two workers) cluster config
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker

2.2 创建集群:

使用kind创建集群之前首先要确保 ~/.kube 目录存在,如果不存在,要先使用 mkdir ~/.kube 创建 .kube 目录。(防止后续非 root 用户使用 kubectl 查看 Kind 创建的集群需要加sudo的问题)

mkdir ~/.kube

创建指定版本,指定节点的集群:

kind create cluster --config ~/k8s-3nodes.yaml --image kindest/node:v1.20.7@sha256:cbeaf907fc78ac97ce7b625e4bf0de16e3ea725daf6b04f930bd14c67c671ff9
  • 如果不指定--config,默认创建单master集群;
  • 使用--image参数可以指定创建的k8s版本,kind v0.11.1版本可以使用的node镜像可以在这里面找到:https://github.com/kubernetes-sigs/kind/releases/tag/v0.11.1
  • 不手动使用 --name 指定集群名称的时候,集群默认名为 kind
    注:镜像后面的@sha256的这一串token最好加上。

这样集群就创建好了,如下图所示:
image

2.3 注意事项

1.如果结点一直处于NotReady,有可能是kind的版本问题。
2.由于前面只创建了一个集群,如果创建了很多个集群的话(使用--name可以指定集群名称,所以可以创建很多不同名称的集群),那么使用Kubectl命令的时候要使用 --context 指定集群名称

查看集群信息
❯ kubectl  cluster-info --context kind-kind
Kubernetes master is running at https://127.0.0.1:41801
KubeDNS is running at https://127.0.0.1:41801/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

可以看到我们 k8s master 地址和 dns 的地址,注意一般情况下我们只创建一个集群不需要指定 --context cluster name 但是创建了多个集群时这个基本就是必须的一个命令了。如果不加这个参数可能会报下面的错误

The connection to the server localhost:8080 was refused - did you specify the right host or port?

这是因为 kubectl默认连接的 apiserver 地址是 localhost:8080但是我们的 apiserver 地址不是这个所以报错。

为什么我们使用 --context cluster-name 就可以了呢?

这是因为 kind 在创建集群的时候会修改 $HOME/.kube/config 的配置,将集群的 apiserver 地址,证书等相关信息都自动写入进去了

每次命令都要加上这个参数好麻烦怎么办?

我们可以使用 kubectl config use-context context-name 来进行设置,设置好了之后我们后续就不用每次都加上 –-context 的参数了,同时还可以通过 kubectl config current-context 查询我们当前默认操作的集群是哪一个

3. 登录 k8s 结点

3.1 登录结点

由于 Node 是 docker 容器,则可以使用 docker ps 命令查看当前运行的容器:
image
可以看到,3个结点对应3个 docker 容器,那么使用如下命令就可以登录结点了,以master结点为例:

docker exec -it kind-control-plane bash

image

3.2 查看结点中已经下载的镜像

可以使用 crictl 命令操作 kind 结点中的镜像:

# 查看镜像
crictl images

3.3 结点中安装 vim 编辑器

但是进入结点后,会发现没有 vim 命令,所以无法编辑文件。使用

kubectl describe node kind-control-plane

或者直接在此链接中可以发现,v0.11.1版本的kind中node的底层操作系统镜像是 Ubuntu 21.04,因此可以使用 apt 来安装vim命令。

# 这条 update 命令是必须的,否则会提示 Unable to locate package vim
apt-get update
apt-get install vim

这样就安装好了 vim 。

参考文章

https://kind.sigs.k8s.io/docs/user/quick-start/

https://github.com/kubernetes-sigs/kind/releases/tag/v0.11.1

Kind: 如何快速搭建本地 K8s 开发环境? - Mohuishou (lailin.xyz)

使用 Kind 搭建你的本地 Kubernetes 集群 - SegmentFault 思否

Docker---(6)问题:bash: vi: command not found_IT云清-CSDN博客

posted @ 2021-10-14 20:38  拾月凄辰  阅读(1826)  评论(0编辑  收藏  举报