Kubernetes 构建工具浅析_第1页
Kubernetes 构建工具浅析_第2页
Kubernetes 构建工具浅析_第3页
Kubernetes 构建工具浅析_第4页
Kubernetes 构建工具浅析_第5页
已阅读5页,还剩4页未读, 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Kubernetes集群的组件众多,要部署一套符合生产环境的集群并不是一件容易的事。不过随着云原生生态的逐渐成熟、社区的快速发展,特别是在它成为事实上的容器编排标准以后,基本所有的主流云平台都完全支持Kubernetes,或把它作为核心的云解决方案。同时,本地部署也伴随着出现了各类成熟的主动化解决方案。

因此,当我们计划或者开始使用Kubernetes时,我们都应该尝试问自己一个问题:“我该如何进行第一次的部署?”。在本文中,笔者将向大家介绍4种不同的技术,大家可以基于此4种不同的构建工具在自己的计算机上使用Kubernetes。对于每一个,笔者尽可能都会对解决方案进行简短描述,并对其优缺点进行分析,以帮助大家能够对Kubernetes的有所了解。MinikubeMinikube是由Kubernetes社区维护的单机版的Kubernetes集群,其支持macOS,Linux、以及Windows等多种操作系统平台,基于其最新的官方Stable版本,并开始支持Kubernetes的大部分功能,从基础的容器编排管理,到高级特性如负载均衡、Ingress,权限控制等。非常适合作为Kubernetes入门,或开发测试环境使用。Minikube支持以下Kubernetes功能:DNS、NodePorts、ConfigMaps和Secrets、Dashboards、容器运行时:Docker、CRI-O以及containerd、启用CNI(容器网络接口)以及Ingress等等。其架构示意图如下所示:下面我们以Mac环境为例,简要描述下Minikube相关部署过程,具体如下所示:[administrator@JavaLangOutOfMemory~]%/bin/zsh-c"$(curl-fsSL/cunkai/HomebrewCN/raw/master/Homebrew.sh)"[administrator@JavaLangOutOfMemory

~

]%

brew

install

minikube[administrator@JavaLangOutOfMemory~]%minikubestart当然,我们还可以自定义参数进行启动,具体如下所示:

[administrator@JavaLangOutOfMemory

~

]%

minikube

start

--iso-url=/minikube/iso/minikube-v1.x.x.iso--registry-mirror=--image-mirror-country=cn--image-repository=/google_containers--vm-driver=none--memory=4096部署完成后,检测相关配置参数等。[administrator@JavaLangOutOfMemory~]%kubectlversionClientVersion:version.Info{Major:"1",Minor:"21",GitVersion:"v1.21.2",GitCommit:"092fbfbf53427de67cac1e9fa54aaa09a28371d7",GitTreeState:"clean",BuildDate:"2021-06-16T12:52:14Z",GoVersion:"go1.16.5",Compiler:"gc",Platform:"darwin/amd64"}ServerVersion:version.Info{Major:"1",Minor:"20",GitVersion:"v1.20.7",GitCommit:"132a687512d7fb058d0f5890f07d4121b3f0a2e2",GitTreeState:"clean",BuildDate:"2021-05-12T12:32:49Z",GoVersion:"go1.15.12",Compiler:"gc",Platform:"linux/amd64"}[administrator@JavaLangOutOfMemory~]%kubectlgetnode-owideNAMESTATUSROLESAGEVERSIONINTERNAL-IPEXTERNAL-IPOS-IMAGEKERNEL-VERSIONCONTAINER-RUNTIMEminikubeReadycontrol-plane,master15hv1.20.7<none>Ubuntu20.04.2LTS5.10.25-linuxkitdocker://20.10.7[administrator@JavaLangOutOfMemory~]%kubectlgetpod-ANAMESPACENAMEREADYSTATUSRESTARTSAGEkube-systemcoredns-74ff55c5b-p6dlz1/1Running015hkube-systemetcd-minikube1/1Running015hkube-systemkube-apiserver-minikube1/1Running015hkube-systemkube-controller-manager-minikube1/1Running015hkube-systemkube-proxy-dcr721/1Running015hkube-systemkube-scheduler-minikube1/1Running015hkube-systemstorage-provisioner1/1Running315hMinikube是一个Kubernetes-SIGs项目,其实现方法为生成一个实质上是单节点K8s集群的VM。由于对一系列管理程序的支持,它可以在所有主要操作系统上使用。还允许并行创建多个实例。基于用户的角度而言,Minikube是一款非常适合初学者的工具。使用minikubestart命令行启动集群,几分钟后Kubectl就可以开始了。若要指定特定的Kubernetes版本,可以使用--Kubernetesversion标志参数即可。KindKind即

“KubernetesInDocker”的缩写,顾名思义是使用Docker容器作为Node并将Kubernetes部署至其中的一个工具。官方文档中也把Kind作为一种本地集群搭建的工具进行推荐。Kind是一个命令行工具,可帮助我们基于Docker镜像创建本地Kubernetes集群,使其能够模拟本地系统上的Kubernetes集群。Kind是另一个KubernetesSIGs项目,但与Minikube相比有很大不同。顾名思义,它将集群移动到Docker容器中。与生成VM相比,这将显著加快启动速度。创建集群与Minikube的方法非常相似。执行类创建集群。通过使用不同的名称(-name)kind,可以并行创建多个实例。其架构示意图如下所示:与Minikube类似,简要描述一下其部署过程,具体如下所示:[administrator@JavaLangOutOfMemory~]%brewinstallkind==>Downloading/homebrew-bottles/bottles/kind-0.11.1.big_sur.bottle.tar.gz########################################################################100.0%==>Pouringkind-0.11.1.big_sur.bottle.tar.gz==>Caveatszshcompletionshavebeeninstalledto:/usr/local/share/zsh/site-functions==>Summary

/usr/local/Cellar/kind/0.11.1:

8

files,

8.4MB[administrator@JavaLangOutOfMemory~]%kindversionkindv0.11.1go1.16.4darwin/amd64接下来,将下面的配置内容保存至一个YAML文件中,比如名为kind-config.yaml,具体如下所示:kind:ClusterapiVersion:kind.sigs.k8s.io/v1alpha3kubeadmConfigPatches:-|apiVersion:kubeadm.k8s.io/v1beta1kind:ClusterConfigurationmetadata:name:confignetworking:serviceSubnet:/16imageRepository:/google_containersnodeRegistration:kubeletExtraArgs:pod-infra-container-image:/google_containers/pause:3.1-|apiVersion:kubeadm.k8s.io/v1beta1kind:InitConfigurationmetadata:name:confignetworking:serviceSubnet:/16imageRepository:/google_containersnodes:-

role:

control-plane[administrator@JavaLangOutOfMemory

~

]%

Kind

create

cluster

--name

demo-cls

--config

kind.yamlCreating

cluster

"kind"

...✓Ensuringnodeimage(kindest/node:v1.21.1)🖼✓Preparingnodes📦✓Creatingkubeadmconfig📜✓Startingcontrol-plane🕹️Clustercreationcomplete.Youcannowusetheclusterwith:

export

KUBECONFIG="$(kind

get

kubeconfig-path

--name="demo-cls")"kubectl

cluster-info基于此解决方案,允许我们部署所有类型的集群:例如:单节点、1个Master和几个Worker以及多个Master和多个Worker。不仅如此,这些集群非常容易部署。通常可以借助一个非常简单的YAML文件完成。从本质上而言,Kind并不是打包一个虚拟化镜像,而是直接将基于K8S组件运行在Docker环境。那么,此种模式能够带来了哪些好处呢?具体主要涉及以下方面:1、不需要运行GuestOS,占用资源更低。2、不基于虚拟化技术,可以在VM中使用。3、文件更小,更利于移植。K3s基于其简单性。作为一个单一的二进制文件(约100MB)进行打包和部署,我们只需几秒钟就可以得到一个完全成熟的Kubernetes集群。安装体验就像在集群的每个节点上运行一个脚本一样简单。基于其二进制文件封装实体,K3s几乎运行了Kubernetes集群的所有组件,包括APIserver、Scheduler和Controller。默认情况下,每个K3s的安装都包括控制平面、Kubelet和Containerd运行时,这些已经足以运行Kubernetes工作负载。当然,也可以添加只运行KubeletAgent和Containerd运行时的专用Worker节点,来调度和管理Pod生命周期。与传统的Kubernetes集群相比,K3s中的Master节点和Worker节点并没有明显的区别。可以在任何节点上调度和管理Pod,不管它们扮演的是什么角色。所以,Master节点和Worker节点的命名方式不适用于K3s集群。在K3s集群中,将运行控制平面组件与Kubelet的节点称为Server,而只运行Kubelet的节点称为Agent。Server和Agent都有容器运行时和一个Kubeproxy,管理整个集群的Tunnel和网络流量。其单节点架构示意图如下所示:源自官网(同下)K3s单节点集群的架构如上图所示,该集群有一个内嵌SQLite数据库的单节点K3sServer。在这种配置中,每个Agent节点都注册到同一个Server节点。K3s用户可以通过调用Server节点上的K3sAPI来操作Kubernetes资源。虽然单节点k3s集群可以满足各种用例,但对于KubernetesControl-Plane的正常运行至关重要的环境,我们可以在高可用配置中运行K3s。一个高可用K3s集群由以下几个部分组成:1、K3sServer节点:两个或更多的Server节点将为KubernetesAPI提供服务并运行其他Control-Plane服务2、外部数据库:与单节点k

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论