任何人都能看懂的 Kubernetes 教程!
容器
在我们尝试了解 Kubernetes 之前,让我们花一点时间来澄清容器是什么,以及它们为什么如此受欢迎。
毕竟,在不知道容器是什么的情况下谈论容器编排器(Kubernetes)是没有意义的!
容器
“容器”是一个用来存放你放入的所有物品的容器。像应用程序代码,依赖库以及它的依赖关系一直到内核。
这里的关键概念是隔离。将所有内容与其余内容隔离开,以便你更好地控制它们。
容器提供三种隔离类型:
- 工作区隔离(流程,网络)
- 资源隔离(CPU,内存)
- 文件系统隔离(联合文件系统)
考虑一下像 VM 一样的容器。它们精简,快速(启动)且体积小。而且,所有这些都没有构建起来。
取而代之的是,他们使用 Linux 系统中存在的结构(例如 cgroups,namespaces)在其上构建了一个不错的抽象。
现在我们知道什么是容器了,很容易理解为什么它们很受欢迎。不仅可以分发应用程序的二进制/代码,还可以以实用的方式交付运行应用程序所需的整个环境。
因为可以将容器构建为非常小的单元,解决“在我的机器上工作”问题的完美解决方案。
什么时候使用 Kubernetes?
容器一切都很好,软件开发人员的生活现在要好很多。那么,为什么我们需要另一项技术,如 Kubernetes 这样的容器编排工具呢?
当进入某个状态时,你需要用到它来管理众多容器。
问:我的前端容器在哪里,我要运行几个?
答:很难说,使用容器编排工具。
问:如何使前端容器与新创建的后端容器对话?
答:对 IP 进行硬编码,或者,使用容器编排工具。
问:如何进行滚动升级?
答:在每个步骤中手动握住,或者,使用容器编排工具。
为什么我更喜欢 Kubernetes
有很多容器编排工具,例如 Docker Swarm,Mesos 和 Kubernetes。我的选择是 Kubernetes(因此有了本文),因为 Kubernetes 是……
就像乐高积木一样,它不仅具有大规模运行容器编排所需的组件,而且还具有使用自定义组件交换内部和外部不同组件的灵活性。
想要拥有一个自定义的调度程序,也很方便。需要具有新的资源类型,编写一个 CRD。此外,社区非常活跃,并且工具迅速发展。
Kubernetes 架构
每个 Kubernetes 集群都有两种类型的节点,主节点和工作节点。顾名思义,主节点是在工作程序运行有效负载(应用程序)的地方控制和监视群集。
集群可以与单个主节点一起工作,但是最好拥有三个以实现高可用性(称为 HA 群集)。
让我们仔细看一下主节点及其组成:
①etcd:数据库,用于存储有关 Kubernetes 对象,其当前状态,访问信息和其他集群配置信息的所有数据。
②API Server:RESTful API 服务器,公开端点以操作整个集群。主节点和工作节点中的几乎所有组件都与该服务器通信以执行其职责。
③调度程序:负责决定哪个有效负载需要在哪台机器上运行。
④控制管理器:这是一个控制循环,它监视集群的状态(通过调用 API 服务器来获取此数据)并采取措施将其置于预期状态。
⑤kubelet:是工作节点的心脏。它与主节点 API 服务器通信并运行为其节点安排的容器。
⑥kube-proxy:使用 IP 表/IPVS 处理 Pod 的网络需求。
⑦Pod:运行所有容器的 Kubernetes 的功劳。如果没有 Pod 的抽象,就无法在 Kubernetes 中运行容器。Pod 添加了对容器之间的 Kuberenetes 联网方式至关重要的功能。
快乐的 Pod
一个 Pod 可以有多个容器,并且在这些容器中运行的所有服务器都可以将彼此视为本地主机。
这使得将应用程序的不同方面分离为单独的容器,并将它们全部作为一个容器加载在一起非常方便。
有多种不同的 Pod 模式,例如 Sidecar,Proxy 和大使,可以满足不同的需求。查看这篇文章[1]可以了解有关它们的更多信息。
Pod 网络接口提供了一种将其与同一节点和其他工作节点中的其他 Pod 通信的机制。
而且,每个 Pod 都将分配有自己的 IP 地址,kube-proxy 将使用该 IP 地址来路由流量,而且此 IP 地址仅在群集中可见。
所有容器也都可以看到安装在容器内的卷,有时可以使用这些卷在容器之间进行异步通信。
例如,假设你的应用是照片上传应用(例如 Instagram),它可以将这些文件保存在一个卷中,而同一 Pod 中的另一个容器可以监视该卷中的新文件,并开始对其进行处理以创建多种尺寸,将它们上传到云存储。
控制器
在 Kubernetes 中,有很多控制器,例如 ReplicaSet,Replication Controllers,Deployments,StatefulSets 和 Service。
这些是以一种或另一种方式控制 Pod 的对象。让我们看一些重要的。
ReplicaSet
ReplicaSet 做自己擅长的事情,复制 Pod
该控制器的主要职责是创建给定 Pod 的副本,如果 Pod 因某种原因死亡,则会通知该控制器,并立即跳入操作以创建新的 Pod。
Deployment
试图控制 ReplicaSet 的部署(头发凌乱)
部署是一个高阶对象,它使用 ReplicaSet 来管理副本。它通过放大新的 ReplicaSet 和缩小(最终删除)现有的 ReplicaSet 来提供滚动升级。
Service
表示为无人机的服务,将数据包传递到相应的 Pod
服务是一个控制器对象,其主要职责是在将“数据包”分发到相应节点时充当负载平衡器。
基本上,它是一种控制器构造,用于在工作节点之间对相似的 Pod(通常由 Pod 标签标识)进行分组。
假设你的“前端”应用程序想与“后端”应用程序通信,则每个应用程序可能有许多正在运行的实例。
你不必担心对每个后端 Pod 的 IP 进行硬编码,而是将数据包发送到后端服务,然后由后端服务决定如何进行负载平衡并相应地转发。
PS:请注意,服务更像是一个虚拟实体,因为所有数据包路由均由 IP 表/IPVS/CNI 插件处理。
它只是使它更容易被视为一个真正的实体,让它们脱颖而出以了解其在 Kubernetes 生态系统中的作用。
Ingress
进入一个浮动平台,所有数据包都通过该平台流入集群
入口控制器是与外界联系的单点,可以与集群中运行的所有服务进行对话。这使我们可以轻松地在单个位置设置安全策略,监视甚至记录日志。
PS:Kubernetes 中还有很多其他控制器对象,例如 DaemonSets,StatefulSets 和 Jobs。
还有一些诸如 Secrets,ConfigMaps 之类的对象,用于存储应用程序的机密和配置,我将在下一篇博客文章介绍它们。
相关链接:
https://matthewpalmer.net/kubernetes-app-developer/articles/multi-container-pod-design-patterns.ht
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
新零售篇
2019,是新零售继续遍地开花的一年,也是新零售充满变数的一年。 新零售在2019留下太多痕迹,此次通过“云栖号2019云计算领域盘点--新零售篇”,让我们一起来了解2019新零售行业的那些事。 盒马推出新业态:盒马里 11月30日,在深圳莲塘正式开业的盒马里岁宝是全国第一家实现线上线下打通的社区Mall(购物中心)。盒马里相比此前推出的6个业态,是主打实现“一站式一体化”服务。正如侯毅在视频中透露的,盒马里可以解决用户周末的消费需求,小孩的亲子活动和教育,以及日常生活的便利性服务。 华润万家推出萬家Mart 1月5日,首家华润·万家MART借由深圳梅龙店亮相业界。营业面积压缩近一半,约为8500平方米,并新增特色餐饮区小海鲜、面食等。卖场以生鲜区的大圆为中心向两边放射式发散,两边多是餐厨家电和用具、图书、寝具、清洁日化等,搭配大量岛柜、堆头、低矮货架与自选区域。门店还投入大量高科技的应用,移动支付、扫码购、自助称重、自助点餐等在万家MART店都已应用。 三只松鼠上市 从发展历程来看,三只松鼠是个实实在在的互联网品牌。背靠淘宝店铺起家,有了品牌知名度之后,走到线下,完成“新零售”的转型...
- 下一篇
6个SD-WAN挑战及其优势
软件定义WAN(SD-WAN)具有明显的优势,并且目前已经趋于成熟,如果你的企业有分支机构,则应该考虑SD-WAN。但企业在决定部署此技术前,必须权衡SD-WAN带来的挑战。 SD-WAN主要挑战 在尝试使用这项新技术前,请先了解SD-WAN的主要缺点,并考虑可能会对网络环境造成的影响。 成本。与任何新投资一样,在短期内,SD-WAN会增加成本,但是从长远来看,随着这些部署成本被平摊,它将提高运营效率并节省成本。并且,短期内,基础WAN电路成本可能不会立即改变,但可能需要为此新软件层购买额外的软件许可。 技术技能。SD-WAN完全颠覆了WAN的现状,并且,由于采用新的WAN管理方法,因此企业需要对IT团队进行大量培训。IT专业人员不能只是简单地部署SD-WAN,然后丢给团队进行管理。IT部门还必须确保为培训预算分配足够的资金。 安全。WAN代表着巨大的风险,因为它面向外部并且依赖于防火墙外的传输。部署任何新的WAN技术都会引入意外的安全问题。此外,现在跨WAN层都可能存在漏洞。 复杂性。通常,WAN连接是一家公司的单个服务。SD-WAN在顶部添加了额外的组件,为现有WAN连接(底层)带...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果