时下互联网最火的技术无非是容器云和AI,而虚拟云技术方面最火则是docker和K8S。docker学习和实践都很容易,但是K8S的由于集群化,部署需要较多的机器,环境搭建学习实践比较费劲这一度影响了K8S技术的普及。所以业界也除了一些简易版的K8s集群环境,比如K3S(5 less than k8s),本文虫虫给大家介绍也是这样一个项目Kind,一键部署的单机K8S环境,可以用于学习、本地开发和CI环境。
概述
kind是主要是为了测试和简化K8S而设计的,项目基于Golang开发依赖极少,只需要Golang 1.11版本以上和docker既可。
kind由以下组件构成:
Go 实现集群创建,映镜像构建等的软件包。
kind命令行界面。
运行systemd,Kubernetes等的Docker 镜像
基于这些软件包(WIP)kubetest 集成。
安装
kind的安装也很简单,只需下载kind在github上发布的包,然后把他移动到安装目录即可。另外kind操作依赖docker,需要先安装docker。
macOS/Linux安装:
curl -Lo kind github /kubernetes-sigs/kind/releases/download/v0.7.0/kind-$(uname)-amd64
chmod x ./kind
mv kind /usr/sbin/kind
通过Homebrew方式安装
如果系统有Homebew包管理器,也可以用brew命令一键安装:
brew install kind
Windows安装
Window下的安装也类似,直接从github发布页面下载Window版本的发布包即可
curl.exe -Lo kind-windows-amd64.exe github/kubernetes-sigs/kind/releases/download/v0.7.0/kind-windows-amd64
Move-Item .\kind-windows-amd64.exe c:\some-dir-in-your-PATH\kind.exe
Chocolatey包管理器方式安装
Windows如果有Chocolatey包管理器,则可以直接一键安装
choco install kind
go get源码安装
也可以使用go get下载源码编译安装:
go get sigs.k8s.io/kind。
该命令会自动在$(go env GOPATH)/bin下安装kind。如果安装报错,
比如报:kind: command not found
则需要将该执行目录添加到系统PATH中:
基本使用
kind是一个单文件二进制运行程序,使用也非常简单,基本命令如下:
create、delete 创建、删除集群
export是将内部所有容器的日志拷贝到宿主机的某个目录下。
get 查看当前有哪些集群,哪些节点,以及 kubectl 配置文件的地址
load 可以从宿主机向 k8s 容器内导入镜像。
version 显示kind的版本
创建集群
创建Kubernetes集群非常简单,可以一键创建:
kind create cluster
该命令使用预构建的节点镜像引导Kubernetes集群,默认为从docker hub获取kindest/node镜像,也支持自定义镜像来源,使用–image指定其他镜像。
默认情况下,集群名称为kind。可使用–name制定特定的名称。
删除集群
删除同样简单,可以使用下面命令一键删除
kind delete cluster
如果–name未指定该标志,则kind将使用默认的群集上下文名称kind并删除该群集。
加载docker镜像
可以使用以下命令将Docker镜像加载到集群节点中:
kind load docker-image my-custom-image
注意:如果使用命名集群,则需要指定要将镜像加载到的集群的名称:
kind load docker-image my-custom-image –name kind-2
此外,镜像archive也可以加载:
kind load image-archive /my-image-archive.tar
所以从docker创建镜像到加载流程为:
docker build -t my-custom-image:unique-tag ./my-image-dir
kind load docker-image my-custom-image:unique-tag
kubectl apply -f my-manifest-using-my-image:unique-tag
镜像编译
kind通过使用Docker容器作为”节点”来运行本地Kubernetes集群。使用node-image来运行K8S工件,比如kubeadm或kubelet。node-image会依次创建base-image,并加载容器中运行所需要的docker和K8S的依赖层。
当前,支持两种编译node-image的方法。如果主机中存在K8S源,则可以使用docker或bazel来构建。如果要指定构建类型,需要使用—type参数。
如果要使用bazel源(–type=bazel)由于Kubelet,使用的CGO需要依赖Linux GCC/glibc,因此当前无法在Windows或MacOS上使用。
docker如果未指定,则kind默认使用构建类型。
kind build node-image –type bazel
与集群交互
创建集群后,可以使用kubectl 通过与它交互的一种生成的配置文件。默认情况下,如果未设置$KUBECONFIG环境变量,则群集访问配置存储在~/.kube/config中。
如果设置了$KUBECONFIG环境变量,那么它将用作路径列表。修改值后,将在定义节的文件中对其进行修改。创建值后,将在存在的第一个文件中创建该值。如果链中没有文件,那么它将创建列表中的最后一个文件。
可以–kubeconfig在创建集群时使用该标志,然后仅加载该文件。该标志只能设置一次,并且不会发生合并。
export KUBECONFIG="$(kind get kubeconfig-path --name="kind")"
查看集群信息,可以用用kubectl cluster-info
查看节点信息用kubectl get node
对于多个集群,可以用可以使用get clusters 命令。
例如,假设创建了两个集群:
kind create cluster
kind create cluster –name kind-2
当列出kind群集时,结果会显示:
kind get clusters
kind
kind-2
与特定集群交互,需要使用—context参数在kubectl中指定集群名称:
kubectl cluster-info –context kind-kind
kubectl cluster-info –context kind-2
Docker Desktop
如果要kind build node-image在MacOS或Windows上构建K8S,则需要至少6GB的RAM专门运行Docker引擎的虚拟机(VM),建议使用8GB。
Mac设置Docker内存设置方法如下:
打开”Preferences”菜单:
转到Advanced页签,可以在此处设置。
要更改Windows Docker的资源限制,需要右键单击任务栏上的Moby图标,然后选择”Settings”。如果看到”切换到Linux容器”,则需要先执行此操作,然后再打开”Settings”
现在,转到” Advanced”页面,然后在此处更改设置,请参阅更改Docker的资源限制。
如果要清理Docker内容,可以使用prune命令
docker system prune
多节点集群
kind中也支持创建多多节点群集。创建多节点集群需要配置,配置格式为yaml,比如我们创建一个三节点(两个wokers)的配置(config.yaml):
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
– role: control-plane
– role: worker
– role: worker
kind create cluster --config=kind-config.yaml
也可以设置多个控制节点的集群:
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
– role: control-plane
– role: control-plane
– role: worker
– role: worker
– role: worker
配置好后,使用kind create cluster --config=config.yaml
代理
可以使用以下一个或多个环境变量(大写优先)将kind配置为使用代理:
HTTP_PROXY 或者 http_proxy
HTTPS_PROXY 或者 https_proxy
NO_PROXY 或者 no_proxy
配置代理后,所有连接将使用它。可以通过配置NO_PROXY来制定本地不需要代理的网段:
NO_PROXY=172.17.0.0/16
日志
kind可以导出所有种类的相关日志浏览。导出日志使用export命令:
kind export logs
Exported logs to: /tmp/396758314
如果要制定日志路径可以直接在其后制定路径::
kind export logs ./logs
日志的结构大致如下所示:
.
├── docker-info.txt
└── kind-control-plane/
├── containers
├── docker.log
├── inspect.json
├── journal.log
├── kubelet.log
├── kubernetes-version.txt
└── pods/
日志包含有关Docker主机,容器运行类型,Kubernetes集群本身等信息。
总结
本文我们介绍了一个在本地单机部署K8S集群的方法,使用kind可以一键建立一个K8S实验环境供我们学习熟悉K8S架构,当然这只是作为一个初步的指导,更多的功能和实践需要大家动手去探索。
内容出处:,
声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。文章链接:http://www.yixao.com/soft/13267.html