使用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
使用Kind快速构建k8s的更多相关文章
- 菜鸟系列k8s——快速部署k8s集群
快速部署k8s集群 1. 安装Rancher Rancher是业界唯一完全开源的企业级容器管理平台,为企业用户提供在生产环境中落地使用容器所需的一切功能与组件. Rancher2.0基于Kuberne ...
- 从零入门 Serverless | 教你 7 步快速构建 GitLab 持续集成环境
作者 | 存诚 阿里云弹性计算团队 本文整理自<Serverless 技术公开课>,"Serverless"公众号后台回复"入门",即可获取系列文章 ...
- 9. 利用Docker快速构建MGR | 深入浅出MGR
目录 1.安装Docker 2.拉取GreatSQL镜像,并创建容器 2.1 拉取镜像 2.2 创建新容器 2.3 容器管理 3.构建MGR集群 3.1 创建专用子网 3.2 创建3个新容器 3.3 ...
- 玩转Windows服务系列——使用Boost.Application快速构建Windows服务
玩转Windows服务系列——创建Windows服务一文中,介绍了如何快速使用VS构建一个Windows服务.Debug.Release版本的注册和卸载,及其原理和服务运行.停止流程浅析分别介绍了Wi ...
- Apache Commons CLI官方文档翻译 —— 快速构建命令行启动模式
昨天通过几个小程序以及Hangout源码学习了CLI的基本使用,今天就来尝试翻译一下CLI的官方使用手册. 下面将会通过几个部分简单的介绍CLI在应用中的使用场景. 昨天已经联系过几个基本的命令行参数 ...
- 使用Asp.net WebAPI 快速构建后台数据接口
现在的互联网应用,无论是web应用,还是移动APP,基本都需要实现非常多的数据访问接口.其实对一些轻应用来说Asp.net WebAPI是一个很快捷简单并且易于维护的后台数据接口框架.下面我们来快速构 ...
- 利用Nodejs快速构建应用原型
利用Nodejs快速构建应用原型 开发一个应用往往需要快速的构建原型,然后在此基础上设计和改进,前端可能立马能看到效果,但是后端业务逻辑不会那么快,这个时候其实我们需要额只是一些模拟数据,所以不需要真 ...
- C# Winform 通过FlowLayoutPanel及自定义的编辑控件,实现快速构建C/S版的编辑表单页面
个人理解,开发应用程序的目的,不论是B/S或是C/S结构类型,无非就是实现可供用户进行查.增.改.删,其中查询用到最多,开发设计的场景也最为复杂,包括但不限于:表格记录查询.报表查询.导出文件查询等等 ...
- Java Swing快速构建窗体应用程序
以前接触java感觉其在桌面开发上,总是不太方便,没有一个好的拖拽界面布局工具,可以快速构建窗体. 最近学习了一下NetBeans IDE 8.1,感觉其窗体设计工具还是很不错的 , 就尝试一下做了一 ...
随机推荐
- Python paho-mqtt使用心得
一.概述 一)基本概念 使用回调处理从MQTT代理返回的数据,要使用回调需要先定义回调函数然后将其指派给客户端实例(client). 例如: # 定义一个回调函数 def on_connect(cli ...
- 记一次MySQL数据迁移到SQLServer全过程
为什么要做迁移? 由于系统版本.数据库的升级,导致测试流程阻塞,为了保证数据及系统版本的一致性,我又迫切需要想用这套环境做性能测试,所以和领导.开发请示,得到批准后,便有了这次学习的机会,所以特此来记 ...
- 解决PLSQL developer 乱码问题
今天打开 PLSQL developer 登录数据库后,查看数据的时候,发现表里面的中文数据全部变成了 ??? 这样的东西, 打开表看表的 中文描述信息 , 一样 显示问号. 什么鬼啊? 第一次 ...
- 基于Koa与umi实现服务端(SSR)渲染
工具: umijs:react前端应用框架. koa:基于 Node.js 平台的web 开发框架. 介绍: 本文主要是简单介绍,利用umi开发前端页面,打包成服务端渲染工程包.由Koa实现服务端渲染 ...
- javaScript中Math内置对象基本方法入门
概念 Math 是javaScript的内置对象,包含了部分数学常数属性和数学函数方法. Math 不是一个函数对象,用户Number类型进行使用,不支持BigInt. Math 的所有属性与方法都是 ...
- mask-image实现聚光灯效果
大家好,我是半夏,一个刚刚开始写文的沙雕程序员.如果喜欢我的文章,可以关注 点赞 加我微信:frontendpicker,一起学习交流前端,成为更优秀的工程师-关注公众号:搞前端的半夏,了解更多前端知 ...
- 一篇讲清楚String、StringBuffer和StringBuild
一.String篇 1.String基本介绍? (jdk文档原文)String类代表字符串. Java程序中的所有字符串文字(例如"abc" )都被实现为此类的实例. 说人 ...
- C++基础-6-继承
6. 继承 1 #include<iostream> 2 using namespace std; 3 4 5 class Base { 6 public: 7 Base() { 8 m_ ...
- node技术是啥?
node.js 一句话,就是把js代码放在服务器段运行的一种技术.
- Go Http Get 和 Post 工具函数
前言 先说一下为什么要搞这个小东西? 米攸服务端前期主要是基于 Go 构建的,版本迭代过程中,业务复杂度不断增加,再加上中员团队有人员变动,考虑到目前团队的技术背景,我们开始考虑把接口服务分批迁移到 ...
