当前位置: 首页 > 网络应用技术

kubernetes条目教程

时间:2023-03-06 21:07:45 网络应用技术

  简介:本文是有关Kubernetes的文章(而不是在下面的K8),其中涉及K8S架构,集群构建,重新示例,以及如何使用操作员SDK开发操作员。例如POD,部署,状态填充类等。这些概念是通过示例来提出的,这更容易理解和实践。

  作者|风扇Che来源|阿里技术公共帐户

  本文是Kubernetes(而不是下面的K8)的一篇文章,其中将涉及K8S架构,集群建筑,重新示例,以及如何使用操作员开发操作员。,部署,状态填充等被散布。这些概念是通过示例绘制出来的,这很容易理解和练习。文章指的是许多博客和材料,这些博客和材料都放在最后一个参考数据部分中。

  让我们看一下K8S群集的架构。从左到右,将其分为两部分。第一部分是主节点(即图中的控制平面),第二部分是节点节点。

  主节点通常包括四个组件,Apiserver,调度程序,控制器管理器等,它们的区别是什么:

  节点节点通常包括三个组件,docker,kube-proxy,kubelet

  总而言之,K8S群集是由主节点和节点节点的两个部分组成的架构。其中,主节点是整个群集的大脑。节点节点运行主节点调度的应用程序。我们将遵循一个特定的调度示例来解释这些组件的相互作用过程。

  在谈论K8S群集中的组件之后,让我们看看如何首先构建K8S群集,有以下方法(请参阅文章末尾的链接):

  本文背后的示例是由本地Docker Desktop App构建的K8。

  让我们看一下如何从实际需求中从K8上部署Redis服务。

  1部署单基机器版本

  如果我们想在K8S上部署架子 - 唯一版本,我们可以执行以下命令:

  您可以使用kubectl exec输入redis执行命令的内部连接:

  那么POD和REDIS之间的关系是什么?Redis实际上是一个Docker流程启动,但是在K8S中,它被称为POD。

  2个豆荚和部署

  让我们谈谈第一个K8S概念荚。POD是K8S中最小的调度单元。一个吊舱可以包含多个Docker。这些Docker将安排到同一节点。这些Docker共享网络名称空间,可以被声明为同一卷以共享磁盘空间。

  这有什么好处?实际上,在现实世界中,许多应用程序需要在同一台计算机中部署。例如,必须收集REDIS日志集合插头 - 要收集日志。必须将其部署在与Redis的同一台计算机上,以读取REDIS的日志。我们较早地谈论背景。当Docker Swarm遇到一些问题时,会有一些问题。其中之一是它仅基于Docker计划。尽管它还可以设置亲和力,以允许两个Docker在同一台计算机上安排安排,但是由于无法将其安排在一起,因此将预先安排在资源较少的机器上进行Docker Advance,这会导致第二座码头调度的时间安排失败。

  例如,我们有2个容器A和B,它们是Redis和Log Collection组件,每个都需要2G内存。现在有两个节点,Node1 3.5内存,Node2 4G内存。在Docker swarm的调度策略下,首先可以将重新分配给重新数字为node1,然后我将安排日志集合组件,并发现Node1只有1.5G内存,而调度则失败。根据POD进行安排。在一个pod中,计划不被视为node1。

  尽管POD已经可以运行REDIS服务,但他没有高可用性,因为一旦POD绑定到节点(节点),除非此绑定已更改(pod.spec.node字段已修改),它将始终是Foreverit不会离开此节点,这意味着如果主机关闭,则该吊舱将不会主动迁移到其他节点。

  Redis-Deployment-866C4C6CF9-8Z8K5是Kubectl Create创建的新部署。为了验证高可用性,我们使用kubectl删除POD删除Redis和Redis-Deployment-866CF9-8Z8K5。

  Redis已经消失了,但是Redis-Deployment-866C4C6CF9-ZSKKB更改了名称,再次出现!

  部署可以定义多复制豆荚,以提供应用程序的迁移功能。如果简单地使用POD,实际上,当应用程序安排到机器时,则无法自动迁移计算机停机应用程序。指定器)以确保当前群集中应用程序数量的一致性。

  3 k8使用yaml描述命令

  在K8S中,您可以使用Kubectl创建简单的服务,但是还有另一种方法可以与创建复杂的服务相对应,即提供YAML文件。例如,上面的POD的命令,我们可以用下面的YAML文件替换它。执行Kubectl创建后,您可以看到Redis Pod再次创建。

  让我们看一下K8S群集到kubectl创建部署redis-deplayment-image = redis。

  在这些步骤中,Apiserver的作用是自我的,因此其他组件与较低的ETCD连接在一起,但是可以水平扩展Apiserver,然后通过负载平衡,ETCD已成为K8S架构中的瓶颈。

  当您第一次查看此体系结构时,您会考虑为什么Apiserver,调度程序,控制器管理器不是合成的。实际上,在Google Borg中,Borgmaster就是这样,功能也是这些功能,但最终它们在一起。发现群集更大后,Borgmaster会遇到一些性能问题,包括Kubelet的心跳是一个大件,因此K8S在K8S设计设计方面具有三个组件。

  我们已经在上方部署了REDIS的立场版本,并实现了通过部署运行的连续服务。接下来,让我们看看如何部署主的版本。最困难的地方之一是如何确定主的同步关系。

  1个状态填充

  K8S设计了国家应用程序的状态填充控制器。它主要通过以下两个特征为状态申请服务:

  让我们看一下redis状态表的示例:

  然后启动此状态填充集并发现Redis-SFS-0和Redis-SFS-1 Pod出现。

  然后,我们继续看到主是否从关系中生效。检查Redis-SFS-1的日志,但发现:

  2个无头服务

  外部访问的机制。例如,部署有3个POD,然后我可以定义服务。

  无头服务是一种DNS方法,可以解析到POD的地址。此DNS地址的规则是:

  下面我们创建与集群相对应的无头服务:

  再次检查后,我发现redis-sfs-1已经成功了,因为在创建无头服务后,redis-sfs-0.rdis-sfs.default.svc.cluster.local是群集中唯一可访问的。

  目前,无论我们删除哪个POD,都将根据原始名称将其提起,以确保准备关系。这个示例只是状态填充的一个示例。分析后,这次是Canat,您目前无法切换,因为没有组件可以帮助我们进行此切换操作。一种方法是使用Redis Sentinel。您可以参考此项目的配置:K8S-REDIS-HA-MASTER。如果您的K8更新,则需要对此PR进行需求。

  尽管有状态填充,但这仅对基本版本有用。如果您想自己自定义更复杂的操作,那么K8的解决方案是操作员。简而言之,操作员是对应于其K8S对象和对象操作的操作的解决方案。

  那么什么是对象?redis群集,一个ETCD群集和ZK群集可以是对象。实际上,我们要描述的内容,我们将定义什么。实际上,我们在K8S YAML,部署,状态表中设置了一种设置,它们默认情况下由K8实施。现在,如果要定义对象,则有两个进程:

  操作员的方法基于编程。您可以使用各种语言。使用最多的是Go语言。通常,每个人都会使用操作员SDK完成,因为许多代码将自动生成。它等同于操作员生成框架,然后我们实现相应的业务逻辑。

  1准备

  2初始化项目

  然后,我们按照官方网站的SDK示例进行逐步实现Memcached的操作员,该操作员也可以在此处替换为Redis,但是为了确保官方网站保持一致,我们将根据官方网站创建Memcached Operator。。

  3创建API和控制器

  上面的步骤实际生成了操作员的框架。接下来,我们首先定义了模因集群所包含的内容,并将默认实现修改为大小,指示备用群集中的memcacached数量。最终DeceepCopy和CRD资源。

  4个实施控制器

  下一步是定义在创建一个备用群集时该怎么做。

  5发布操作员镜子

  6修改镜子和部署

  7创建备用群集

  您可以通过kubectl日志查看操作员的日志:

  在这一点上,我们的操作员SDK的任务已经结束。

  本文通过一个逐渐的redis示例介绍了K8S的体系结构,每个组件的功能以及pod,部署的概念,部署,状态满足,并通过操作员SDK演示了一个完整的操作员示例。

  [1]“在阿里巴巴的CNCF TOC成员的Kubernetes的 - 深入分析”。[2]第五版的“ Kubernetes权威指南” [3]“与Borg一起在Google上进行的大规模集群管理” https://research.google/pubs/pubs/pub43438/ [4]主题/容器/什么是kubernetes?[5] https://www.inf Present.com/article/3632142/how-docker-in-hlf.html?[6] https://landscape.cncf.io/ [7] https://docs.docker.com/desktop/kubernetes/ [8]9] https://www.aliyunun.com/product/kubernetes?[10] https://github.com/kubernetes/kubeadm [11] https://www.cnblogs.com/chiangchou/p/k8s-html [12]-HA [13] https://sdk.operatorframework.io/docs/installation/