前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >以图形化的方式了解Kubernetes

以图形化的方式了解Kubernetes

作者头像
程序猿Damon
发布2020-08-28 11:33:10
6370
发布2020-08-28 11:33:10
举报
文章被收录于专栏:程序猿 Damon 带你进阶全栈

容器

在我们尝试了解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中的另一个容器可以监视该卷中的新文件,并开始对其进行处理以创建多种尺寸,将它们上传到云存储。

Controller

在Kubernetes中,有很多controller,例如ReplicaSet、Replication Controllers、Deployments、StatefulSets和Service。这些是以一种或另一种方式控制Pod的对象。让我们看一些比较重要的controller。

ReplicaSet

ReplicaSet做自己擅长的事情:复制Pod

该controller的主要职责是创建给定Pod的副本,如果Pod因某种原因死亡,则会通知该controller,并立即跳入操作以创建新的Pod。

Deployment

试图控制ReplicaSet的部署(头发凌乱)

Deployment是一个高阶对象,它使用ReplicaSet来管理副本。它通过放大新的ReplicaSet和缩小(最终删除)现有的ReplicaSet来提供滚动升级。

Service

表示为无人机的服务,将数据包传递到相应的Pod

服务是一个控制器对象,其主要职责是在将“数据包”分发到相应节点时充当负载平衡器。基本上,它是一种控制器构造,用于在工作节点之间对相似的Pod(通常由Pod标签标识)进行分组。

假设你的“前端”应用程序想与“后端”应用程序通信,则每个应用程序可能有许多正在运行的实例。你不必担心对每个后端Pod的IP进行硬编码,而是将数据包发送到后端服务,然后由后端服务决定如何进行负载平衡并相应地转发。

PS:请注意,服务更像是一个虚拟实体,因为所有数据包路由均由IP表/IPVS/CNI插件处理。它只是使它更容易被视为一个真正的实体,让它们脱颖而出以了解其在Kubernetes生态系统中的作用。

Ingress

进入一个浮动平台,所有数据包都通过该平台流入集群

Ingress controller是与外界联系的单点,可以与集群中运行的所有服务进行对话。这使我们可以轻松地在单个位置设置安全策略,监控甚至记录日志。

相关链接:

1.https://matthewpalmer.net/kubernetes-app-developer/articles/multi-container-pod-design-patterns.html

原文链接:

https://medium.com/tarkalabs/know-kubernetes-pictorially-f6e6a0052dd0

本文转载自分布式实验室,点此查看原文链接

欢迎大家关注个站哟:damon8.cn

最后介绍新公号:天山六路折梅手,欢迎关注。

往期回顾

微服务自动化部署CI/CD

ArrayList、LinkedList 你真的了解吗?

大佬整理的mysql规范,分享给大家

如果张东升是个程序员

微服务架构设计之解耦合

浅谈负载均衡

Oauth2的认证实战-HA篇

Oauth2的授权码模式《上》

浅谈开发与研发之差异

浅谈 Java 集合 | 底层源码解析

基于 Sentinel 作熔断 | 文末赠资料

基础设施服务k8s快速部署之HA篇

今天被问微服务,这几点,让面试官刮目相看

Spring cloud 之多种方式限流(实战)

Spring cloud 之熔断机制(实战)

面试被问finally 和 return,到底谁先执行?

Springcloud Oauth2 HA篇

Spring Cloud Kubernetes之实战一配置管理

Spring Cloud Kubernetes之实战二服务注册与发现

Spring Cloud Kubernetes之实战三网关Gateway

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 交个朋友之猿天地 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 往期回顾
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档