Kind介绍

2020-11-04  本文已影响0人  iamChel

Kind:用于测试 Kubernetes 的本地集群

Kind 是一种使用 Docker 容器作为 node 节点,运行本地 Kubernetes 集群的工具,在 K8s 中有着非常广泛的应用。

什么是 Kind

Kind(Kubernetes IN Docker)[1]是一个用来快速创建和测试 kubernetes 的工具,它把环境的依赖降低到最小,仅需要机器安装了 Docker 即可使用。

Kind 可以做什么?

Kind 有哪些优势?

使用 Kind

image

Kind 的原理

Kind 使用一个 container 来模拟一个 node,在 container 里面跑 systemd ,并用 systemd 托管 kubelet 以及 containerd,然后通过容器内部的 kubelet 把其他 K8s 组件,比如 kube-apiserver、etcd、CNI 等跑起来。

它可以通过配置文件的方式创建多个 container 来模拟创建多个 node,并以这些 node 构建一个多节点的 Kubernetes 集群。

Kind 内部使用的集群部署工具是 kubeadm,借助 kubeadm 提供的 Alpha 特性,它可以部署包括 HA master 的高可用集群。同时,在 HA master 下, 它还额外部署了一个 Nginx,用来提供负载均衡 vip。

构建镜像

Kind 的镜像分为两个,一个 node 镜像,一个 base 镜像。

node 镜像

node 镜像的构建比较复杂,需要通过运行 base 镜像,并在 base 镜像内执行操作,再保存此容器内容为镜像的方式来完成构建。它包含的操作有:

具体的逻辑,可以参考 node.go[2]。

base 镜像

base 镜像目前使用了 Ubuntu:19.04 作为基础镜像,做了以下调整:

具体的逻辑,可以参考构建的 Dockerfile[3]。

创建集群

Kind 创建集群的基本过程为:

关于每个容器是如何作为 node 跑起来的,这里简单讲解下原理:根据不同的角色,调用不同的函数创建节点 nodes.go[5]。

image

节点(容器)创建时,通过配置 --privileged、挂载 tmpfs、修改主机名等,来运行节点 create[6]。

image

更多

Kind 是一个比较简单有趣的项目,它的 scope [7]定得比较明确具体,也比较小。开发者可以借助 Kind 或 Kind 的思想做更多事情,比如:

此外,文中提及到的 Kind 借助 kubeadm 新特性实现 HA master 高可用集群借助 join 的方式扩容 master 节点达到 HA master,其内部实现方式也有优缺点,感兴趣的读者可以参考 kubeadm 源码[8]。

参考文献

1. https://github.com/kubernetes-sigs/kind

2. https://github.com/kubernetes-sigs/kind/blob/master/pkg/build/node/node.go

3. https://github.com/kubernetes-sigs/kind/blob/master/images/base/Dockerfile

4. https://github.com/kubernetes-sigs/kind/blob/master/pkg/cluster/internal/create/create.go#L55

5. https://github.com/kubernetes-sigs/kind/blob/master/pkg/cluster/internal/create/nodes.go#L196

6. https://github.com/kubernetes-sigs/kind/blob/master/pkg/cluster/nodes/create.go#L124

7. https://kind.sigs.k8s.io/docs/contributing/project-scope/

8. https://github.com/kubernetes/kubernetes/tree/master/cmd/kubeadm

上一篇 下一篇

猜你喜欢

热点阅读