Kind+Docker一键部署K8s实验环境

时下互联网最火的技术无非是容器云和AI,而虚拟云技术方面最火则是docker和K8S。docker学习和实践都很容易,但是K8S的由于集群化,部署需要较多的机器,环境搭建学习实践比较费劲这一度影响了K8S技术的普及。所以业界也除了一些简易版的K8s集群环境,比如K3S(5 less than k8s),本文虫虫给大家介绍也是这样一个项目Kind,一键部署的单机K8S环境,可以用于学习、本地开发和CI环境。

Kind   Docker 一键部署K8s实验环境

概述

kind是主要是为了测试和简化K8S而设计的,项目基于Golang开发依赖极少,只需要Golang 1.11版本以上和docker既可。

kind由以下组件构成:

Go 实现集群创建,映镜像构建等的软件包。

kind命令行界面。

运行systemd,Kubernetes等的Docker 镜像

基于这些软件包(WIP)kubetest 集成。

安装

kind的安装也很简单,只需下载kind在github上发布的包,然后把他移动到安装目录即可。另外kind操作依赖docker,需要先安装docker。

Kind   Docker 一键部署K8s实验环境

macOS/Linux安装:

curl -Lo kind github /kubernetes-sigs/kind/releases/download/v0.7.0/kind-$(uname)-amd64

chmod x ./kind

Kind   Docker 一键部署K8s实验环境

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是一个单文件二进制运行程序,使用也非常简单,基本命令如下:

Kind   Docker 一键部署K8s实验环境

create、delete 创建、删除集群

export是将内部所有容器的日志拷贝到宿主机的某个目录下。

get 查看当前有哪些集群,哪些节点,以及 kubectl 配置文件的地址

load 可以从宿主机向 k8s 容器内导入镜像。

version 显示kind的版本

创建集群

创建Kubernetes集群非常简单,可以一键创建:

kind create cluster

Kind   Docker 一键部署K8s实验环境

该命令使用预构建的节点镜像引导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

Kind   Docker 一键部署K8s实验环境

查看节点信息用kubectl get node

Kind   Docker 一键部署K8s实验环境

对于多个集群,可以用可以使用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”菜单:

Kind   Docker 一键部署K8s实验环境

转到Advanced页签,可以在此处设置。

Kind   Docker 一键部署K8s实验环境

要更改Windows Docker的资源限制,需要右键单击任务栏上的Moby图标,然后选择”Settings”。如果看到”切换到Linux容器”,则需要先执行此操作,然后再打开”Settings”

Kind   Docker 一键部署K8s实验环境

现在,转到” Advanced”页面,然后在此处更改设置,请参阅更改Docker的资源限制。

Kind   Docker 一键部署K8s实验环境

如果要清理Docker内容,可以使用prune命令

docker system prune

Kind   Docker 一键部署K8s实验环境

多节点集群

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

发表评论

登录后才能评论