使用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 集群,创建方式和多节点集群类似,也是通过配置文件来实现。

  1. 创建高可用 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

 

posted @ 2021-03-29 23:33  畅聊科技  阅读(1152)  评论(0编辑  收藏  举报