使用Kind快速构建k8s
什么是 Kind
Kind(Kubernetes in Docker) 是一个 Kubernetes 孵化项目,Kind 是一套开箱即用的 Kubernetes 环境搭建方案。顾名思义,就是将 Kubernetes 所需要的所有组件,全部部署在一个 Docker 容器中,可以很方便的搭建 Kubernetes 集群。
Kind 已经广泛的应用于 Kubernetes 上游及相关项目的 CI 环境中,官方文档中也把 Kind 作为一种本地集群搭建的工具推荐给大家。
项目地址:https://github.com/kubernetes-sigs/kind
Kind 可以做什么?
- 快速创建一个或多个 Kubernetes 集群
- 支持部署高可用的 Kubernetes 集群
- 支持从源码构建并部署一个 Kubernetes 集群
- 可以快速低成本体验一个最新的 Kubernetes 集群,并支持 Kubernetes 的绝大部分功能
- 支持本地离线运行一个多节点集群
Kind 有哪些优势?
- 最小的安装依赖,仅需要安装 Docker 即可
- 使用方法简单,只需 Kind Cli 工具即可快速创建集群
- 使用容器来模似 Kubernetes 节点
- 内部使用 Kubeadm 的官方主流部署工具
- 通过了 CNCF 官方的 K8S Conformance 测试
Kind 是如何工作的?
Kind 使用容器来模拟每一个 Kubernetes 节点,并在容器里面运行 Systemd 。 容器里的 Systemd 托管了 Kubelet 和 Containerd ,然后容器内部的 Kubelet 把其它 Kubernetes 组件: Kube-Apiserver 、 Etcd 、 CNI 等等组件运行起来。
Kind 内部使用了 Kubeadm 这个工具来做集群的部署,包括高可用集群也是借助 Kubeadm 提供的特性来完成的。在高用集群下还会额外部署了一个 Nginx 来提供负载均衡 VIP。
如何安装?前提是安装好docker
第一步:
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.10.0/kind-linux-amd64 chmod +x ./kind mv ./kind /usr/local/bin/kind
使用 Kind
简单说下几个比较常用选项的含义:
- build:用来从 Kubernetes 源代码构建一个新的镜像。
- create:创建一个 Kubernetes 集群。
- delete:删除一个 Kubernetes 集群。
- get:可用来查看当前集群、节点信息以及 Kubectl 配置文件的地址。
- load:从宿主机向 Kubernetes 节点内导入镜像。
使用 Kind 创建 Kubernetes 集群
搭建一个单节点集群
搭建单节点集群是 Kind
最基础的功能,当然使用起来也很简单,仅需一条指令即可完成。
kind create cluster --name my-cluster
然后出现....
最后是:
$ kubectl cluster-info Kubernetes master is running at https://localhost:34458 KubeDNS is running at https://localhost:34458/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'. $ kubectl get nodes NAME STATUS ROLES AGE VERSION my-cluster-control-plane Ready master 2m v1.15.3 $ kubectl get po -n kube-system NAME READY STATUS RESTARTS AGE coredns-86c58d9df4-6g66f 1/1 Running 0 21m coredns-86c58d9df4-pqcc4 1/1 Running 0 21m etcd-my-cluster-control-plane 1/1 Running 0 20m kube-apiserver-my-cluster-control-plane 1/1 Running 0 20m kube-controller-manager-my-cluster-control-plane 1/1 Running 0 20m kube-proxy-cjgnt 1/1 Running 0 21m kube-scheduler-my-cluster-control-plane 1/1 Running 0 21m weave-net-ls2v8 2/2 Running 1 21m
从上面的输出结果,可以看到单节点的 Kubernetes 已经搭建成功。单节点集群默认方式启动的节点类型是 control-plane,该节点包含了所有的组件。这些组件分别是:2*Coredns、Etcd、Api-Server、Controller-Manager、Kube-Proxy、Sheduler 和网络插件 Weave,目前默认使用的网络插件也是 Weave。
创建高可用 Kubernetes 集群
Kind
也支持搭建高可用的 Kubernetes
集群,创建方式和多节点集群类似,也是通过配置文件来实现。
-
创建高可用 Kubernetes 集群配置文件
$ vim my-cluster-ha.yaml # 一共六个节点,三个 control-plane 节点,三个 workers 节点 kind: Cluster apiVersion: kind.sigs.k8s.io/v1alpha3 kubeadmConfigPatches: - | apiVersion: kubeadm.k8s.io/v1beta2 kind: ClusterConfiguration metadata: name: config networking: serviceSubnet: 10.0.0.0/16 imageRepository: registry.aliyuncs.com/google_containers nodeRegistration: kubeletExtraArgs: pod-infra-container-image: registry.aliyuncs.com/google_containers/pause:3.1 - | apiVersion: kubeadm.k8s.io/v1beta2 kind: InitConfiguration metadata: name: config networking: serviceSubnet: 10.0.0.0/16 imageRepository: registry.aliyuncs.com/google_containers nodes: - role: control-plane - role: control-plane - role: control-plane - role: worker - role: worker - role: worker
可能会报错,解决办法。
The connection to the server localhost:8080 was refused - did you specify the right host or port?解决
解决方式 步骤一:设置环境变量 具体根据情况,此处记录linux设置该环境变量 方式一:编辑文件设置 vim /etc/profile 在底部增加新的环境变量 export KUBECONFIG=/etc/kubernetes/admin.conf 方式二:直接追加文件内容 echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile 步骤二:使生效 source /etc/profile
apiVersion: kind.sigs.k8s.io/v1alpha3 这个也会报错,解决办法。
修改一下:apiVersion: kind.x-k8s.io/v1alpha4
最后执行:
kind create cluster --config my-cluster-ha.yaml --name my-cluster-ha
同样,我们根据上面命令执行完后,输出的提示信息进行操作来验证一下集群是否部署成功。
kubectl get nodes
ectl get nodes NAME STATUS ROLES AGE VERSION my-cluster-ha-control-plane Ready master 3m42s v1.15.3 my-cluster-ha-control-plane2 Ready master 3m24s v1.15.3 my-cluster-ha-control-plane3 Ready master 2m13s v1.15.3 my-cluster-ha-worker Ready <none> 96s v1.15.3 my-cluster-ha-worker2 Ready <none> 98s v1.15.3 my-cluster-ha-worker3 Ready <none> 95s v1.15.3