松鼠乐园 松鼠乐园
  • 注册
  • 登录
  • 首页
  • 快捷入口
    • Vue
    • Tensorflow
    • Springboot
    • 语言类
      • CSS
      • ES5
      • ES6
      • Go
      • Java
      • Javascript
    • 工具类
      • Git
      • 工具推荐
    • 服务器&运维
      • Centos
      • Docker
      • Linux
      • Mac
      • MySQL
      • Nginx
      • Redis
      • Windows
    • 资源类
      • 论文
      • 书籍推荐
      • 后端资源
      • 前端资源
      • html网页模板
      • 代码
    • 性能优化
    • 测试
  • 重大新闻
  • 人工智能
  • 开源项目
  • Vue2.0从零开始
  • 广场
首页 › Docker › 以卡通的方式了解Kubernetes

以卡通的方式了解Kubernetes

迦娜王
2年前Docker
813 2 2

最近,我开始了Kubernetes之旅,希望更好地了解其内部。 我在这些方面做了一个演讲。

容器

在我们尝试了解Kubernetes之前,让我们花一点时间来澄清什么是容器以及它们为什么如此受欢迎。 毕竟,在不知道容器是什么的情况下谈论容器编排器(Kubernetes)是毫无意义的。

以卡通的方式了解Kubernetes

Container

“容器”是一个用来存放您放入的所有物品的容器。

像应用程序代码,依赖库以及它的依赖关系一直到内核。 这里的关键概念是隔离。 将所有内容与其余内容隔离开,以便您更好地控制它们。 容器提供三种隔离类型

· Workspace工作区隔离(进程,网络)

· 资源隔离(CPU,内存)

· 文件系统隔离(文件系统)

考虑一下像VM一样的容器。 它们精简,快速(启动)且体积小。 而且,所有这些都没有分离。 取而代之的是,他们使用linux系统中存在的构造(例如cgroups,namespace名称空间)在其上构建了一个不错的抽象。

现在我们知道什么是容器了,很容易理解为什么它们很受欢迎。 不仅可以发布应用程序二进制/代码,还可以以实用的方式交付运行应用程序所需的整个环境,因为可以将容器构建为非常小的单元。 解决”在我的机器上工作”问题的完美解决方案

什么时候使用Kubernetes?

容器一切都很好,软件开发人员的生活现在要好得多。 那么,为什么我们需要另一项技术,如Kubernetes这样的容器协调器呢?

以卡通的方式了解Kubernetes

进入此状态时,需要用到太多容器来管理

问:我的前端容器在哪里,我要在其中运行多少个容器? 使用容器协调器

问:如何使前端容器与新创建的后端容器对话?答:对IP进行硬编码。 或者,使用容器协调器

问:如何进行滚动升级?答:在每个步骤中手动控制。 或者,使用容器协调器

为什么我更喜欢Kubernetes

有多个编排器,例如docker swarm,Mesos和Kubernetes。 我的选择是Kubernetes(因此是本文),因为Kubernetes是……

以卡通的方式了解Kubernetes

……就像乐高积木一样。 它不仅具有大规模运行容器协调器所需的组件,而且还具有使用自定义组件交换不同组件的灵活性。 你可以plugin一个自定义的调度程序。当需要一个新的资源类型,你可以编写一个CRD(Custom Resource Definition客户资源定义)。 此外,社区非常活跃,并且工具发展迅速。

Kubernetes体系结构

以卡通的方式了解Kubernetes

每个Kubernetes集群都有两种类型的节点(机器)。 主节点(Master)和工作节点(Worker)。 顾名思义,Master是在运行有效负载(应用程序)的地方控制和监视群集。

群集可以与单个主节点一起使用。 但是最好拥有三个以实现高可用性(称为HA群集)

让我们仔细看一下主节点及其组成

以卡通的方式了解Kubernetes

etcd:数据库,用于存储有关kubernetes对象,其当前状态,访问信息和其他集群配置信息的所有数据

API服务器:RESTful API服务器,公开端点以操作集群。 主节点和工作节点中的几乎所有组件都与该服务器通信以执行其职责

调度程序Scheduler :负责决定哪个有效负载需要在哪台机器上运行

控制管理器Control Manager:这是一个控制循环,它监视群集的状态(通过调用API服务器来获取此数据)并采取措施将其置于预期状态

以卡通的方式了解Kubernetes

kubelet:是工作程序节点的心脏。 它与主节点API服务器通信并运行为其节点安排的容器

kube代理 kubeproxy:使用IP表/ IPVS处理Pod的网络需求

Pod:运行您所有容器的kubernetes的实体。 如果没有Pod的抽象,就无法在kubernetes中运行容器。 Pod定义了对容器之间的联网方式等至关重要的功能

以卡通的方式了解Kubernetes

Happy pod

一个Pod可以有多个容器,并且在这些容器中运行的所有服务器都可以将彼此视为本地主机。 这使得将应用程序的不同方面分离为单独的容器,并可以方便的把它们全部作为一个整体加载。 有不同的Pod模式,例如边车(Side Car),代理(Proxy)和大使(ambassador),可以满足不同的需求。

Pod联网接口提供了一种将其与同一节点和其他工作程序节点中的其他Pod联网的机制

以卡通的方式了解Kubernetes

此外,每个Pod都将分配有自己的IP地址,kube-proxy会使用该IP地址来路由流量。 而且此IP地址仅在群集中可见

所有容器也可以看到安装在Pod容器内的卷,有时这些卷可用于在容器之间进行异步通信。 例如,假设您的应用是照片上传应用(例如instagram),它可以将这些文件保存在一个卷中,而同一容器中的另一个容器可以监视该卷中的新文件,并开始对其进行处理以创建多种尺寸, 将它们上传到云存储

控制器

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

复制集 ReplicaSet

以卡通的方式了解Kubernetes

ReplicaSet doing what it is good at. Replicating pods

该控制器的主要职责是创建给定Pod的副本。 如果Pod因某种原因死亡,则会通知该控制器,并立即采取行动以创建新的Pod

部署 Deployments

以卡通的方式了解Kubernetes

Deployment (with a messy hair) trying to control the ReplicaSet

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

服务 Service

以卡通的方式了解Kubernetes

Service represented as a drone delivering data packets to corresponding pods

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

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

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

入口 Ingress

以卡通的方式了解Kubernetes

Ingress a floating platform through which all the packets flow into the cluster

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

P.S:Kubernetes中还有很多其他控制器对象,例如DaemonSets,StatefulSets和Jobs。 还有一些诸如Secrets,ConfigMaps之类的对象,用于存储应用程序的机密和配置。 我将在收到下一篇博客文章时介绍它们。

(本文翻译自Sudhakar Rayavaram的文章《Know Kubernetes — Pictorially》,参考https://medium.com/tarkalabs/know-kubernetes-pictorially-f6e6a0052dd0)

docker k8s Kubernetes 容器
2
macOS 上最棒的 ZSH 用法,你会配置了么?
上一篇
如何快速搭建完整的视频直播系统?| Gitee 项目推荐
下一篇
评论 (2)

请登录以参与评论。

现在登录
  • luck boy

    文章很好 很喜欢

    2年前
    • 松鼠1号

      @luck boy: 多收集一些

      2年前
聚合文章
Servicios profesionales Organizaciones
1年前
在Gitee收获近 5k Star,更新后的Vue版RuoYi有哪些新变化?
1年前
vue3.x reactive、effect、computed、watch依赖关系及实现原理
1年前
Vue 3 新特性:在 Composition API 中使用 CSS Modules
1年前
标签
AI AI项目 css docker Drone Elaticsearch es5 es6 Geometry Go gru java Javascript jenkins lstm mysql mysql优化 mysql地理位置索引 mysql索引 mysql规范 mysql设计 mysql配置文件 mysql面试题 mysql高可用 nginx Redis redis性能 rnn SpringBoot Tensorflow tensorflow2.0 UI设计 vue vue3.0 vue原理 whistle ZooKeeper 开源项目 抓包工具 日志输出 机器学习 深度学习 神经网络 论文 面试题
2 2
相关文章
idea、webstorm2020.2激活码
抖音无水印解析
开源的SQL查询优化工具–EverSQL
推介一个堪称神器的 Grid 代码生成器!前端工程师必备神器
松鼠乐园

资源整合,创造价值

小伙伴
墨魇博客 无同创意
目录
重大新闻 Centos CSS Docker ES5 ES6 Go Java Javascript Linux Mac MySQL Nginx Redis Springboot Tensorflow Vue Vue2.x从零开始 Windows 书籍推荐 人工智能 前端资源 后端资源 壁纸 开源项目 测试 论文
Copyright © 2018-2022 松鼠乐园. Designed by nicetheme. 浙ICP备15039601号-4
  • 重大新闻
  • Centos
  • CSS
  • Docker
  • ES5
  • ES6
  • Go
  • Java
  • Javascript
  • Linux
  • Mac
  • MySQL
  • Nginx
  • Redis
  • Springboot
  • Tensorflow
  • Vue
  • Vue2.x从零开始
  • Windows
  • 书籍推荐
  • 人工智能
  • 前端资源
  • 后端资源
  • 壁纸
  • 开源项目
  • 测试
  • 论文
热门搜索
  • jetson nano
  • vue
  • java
  • mysql
  • 人工智能
  • 人脸识别
迦娜王
坚持才有希望
1224 文章
35 评论
242 喜欢
  • 2
  • 2
  • Top