图解 Kubernetes
容器
在了解 Kubernetes 之前,让我们先了解一个容器。
因为如果不了解容器就没法聊容器编排。
容器就是...一个你塞入所有材料的容器。
“材料”是指你的应用代码、依赖库,以及直到内核的依赖关系。
关键概念是隔离,把你的这些材料隔离出来,以便更好的控制他们。
容器提供了3种类型的隔离:
- 工作空间隔离(进程、网络)
- 资源隔离(CPU、内存)
- 文件系统隔离
容器可以理解为节食的VM,具有隔离性,但容器非常精简、体积小、启动快。
VM是在操作系统之上又安装了多个操作系统,VM之间自然是隔离的。
而容器是通过 Linux 的 cgroup
实现了VM那样的隔离性,并不需要安装操作系统。
什么时候使用Kubernetes?
容器挺好的,为什么需要 Kubernetes 这样的容器协调器呢?
如果你达到图中这个状态时,你就需要他了,有太多的容器需要管理了。
Q:我前端容器在哪儿呢?有多少个在运行?
A:很难说啊,快使用容器编排吧。
Q:如何让我的前端容器与新创建的后端容器沟通?
A:可以硬编码 IP,或者,使用容器编排。
Q:如何滚动升级?
A:你可以手动控制每一步,或者,使用容器编排。
Kubernetes 体系结构
每个Kubernetes集群都有两种类型的节点:master 和 worker。
master 是控制和监控 worker 工作的这个集群的。
- master 的构成
etcd: 作为数据库,所有 kubernetes 对象、当前状态、访问信息、集群配置信息 ……,都存在这。
API Server : 暴露集群操作的端点,master 和 worker 上的组件都需要访问 api servrer,以便完成自己的工作。
Scheduler : 调度程序,负责决定哪个工作由哪个机器干。
Control Manager : 控制管理器,监视集群的状态(通过调用API服务器来获取此数据)并采取措施将其置于预期状态。
- worker 的构成
kubelet : worker 节点的核心,与 master 的 api server 沟通,运行调度到本节点的容器。
kube Proxy : 使用 IP表/ IPVS 处理Pod的网络需求。
Pod : kubernetes 运行容器的主力,提供了容器间联网的能力。
一个 pod 中可以有多个容器,这些容器中的应用互相间都视为本地。
pod 的网络接口提供了一个机制,使其可以与本节点或其他节点上的 pod 进行网络连接。
每个 pod 都会被指定一个 IP,kube-proxy将使用该IP地址来路由流量,而且此IP地址仅在群集中可见。
一个 pod 中挂载的数据卷可以被所有容器看到,例如,你的 APP 是一个图片上传应用,把图片保存在一个数据卷中,同一个 pod 中的其他容器可以监控这个数据卷,发现有新图片时,就开始处理,例如缩放多个尺寸的图片、上传到云存储。
Controller 控制器
kubernetes 中有很多控制器,例如 ReplicaSet, Replication Controllers, Deployments, StatefulSets, Service。
他们都是控制 pod 的对象,我们来看几个重点的控制器。
(1)ReplicaSet
主要职责是根据给定的 pod 创建副本。
如果一个 pod 挂了,这个控制器就会得到通知,立马创建一个新的。
(2)Deployment
使用 ReplicaSet 来管理副本。
提供了滚动升级的能力,扩展新的,缩减旧的。
(3)Service
像一个负载均衡器一样,像相应节点分派包。
可以跨 worker 节点构建一个 pod 组(通常是根据 pod 的标签)。
例如你的前端应用、后端应用,各自都有很多个实例在运行,前后端怎么沟通?
前端需要知道后端各个实例的访问地址,硬编码后端 IP 的方式显然不能用,那么就需要把后端实例组成一个 service,前端只需要访问这个 service,由 service 对其中的后端实例进行流量负载均衡转发。
(4)Ingress
Ingress(入口)控制器是和外部世界沟通的唯一入口。
外部世界通过 Ingress 与集群中的所有服务沟通。
就像是一个网关,方便我们在一个地方统一设置安全策略、监控、记录日志。
小结
翻译整理自:
https://medium.com/tarkalabs/know-kubernetes-pictorially-f6e6a0052dd0
推荐阅读:
图解 Kubernetes的更多相关文章
- 图解kubernetes调度器SchedulingQueue核心源码实现
SchedulingQueue是kubernetes scheduler中负责进行等待调度pod存储的对,Scheduler通过SchedulingQueue来获取当前系统中等待调度的Pod,本文主要 ...
- 图解 kubernetes scheduler 架构设计系列-初步了解
资源调度基础 scheudler是kubernetes中的核心组件,负责为用户声明的pod资源选择合适的node,同时保证集群资源的最大化利用,这里先介绍下资源调度系统设计里面的一些基础概念 基础任务 ...
- 图解kubernetes调度器SchedulerCache核心源码实现
SchedulerCache是kubernetes scheduler中负责本地数据缓存的核心数据结构, 其实现了Cache接口,负责存储从apiserver获取的数据,提供给Scheduler调度器 ...
- 图解kubernetes调度器预选设计实现学习
Scheduler中在进行node选举的时候会首先进行一轮预选流程,即从当前集群中选择一批node节点,本文主要分析k8s在预选流程上一些优秀的筛选设计思想,欢迎大佬们指正 1. 基础设计 1.1 预 ...
- 图解kubernetes服务打散算法的实现源码
在分布式调度中为了保证服务的高可用和容灾需求,通常都会讲服务在多个区域.机架.节点上平均分布,从而避免单点故障引起的服务不可用,在k8s中自然也实现了该算法即SelectorSpread, 本文就来学 ...
- 图解kubernetes调度器抢占流程与算法设计
抢占调度是分布式调度中一种常见的设计,其核心目标是当不能为高优先级的任务分配资源的时候,会通过抢占低优先级的任务来进行高优先级的调度,本文主要学习k8s的抢占调度以及里面的一些有趣的算法 1. 抢占调 ...
- 图解kubernetes调度器SchedulerExtender扩展
在kubernetes的scheduler调度器的设计中为用户预留了两种扩展机制SchdulerExtender与Framework,本文主要浅谈一下SchdulerExtender的实现, 因为还有 ...
- 图解kubernetes控制器StatefulSet核心实现原理
StatefulSet是k8s中有状态应用管理的标准实现,今天就一起来了解下其背后设计的场景与原理,从而了解其适用范围与场景 1. 基础概念 首先介绍有状态应用里面的需要考虑的一些基础的事情,然后在下 ...
- 图解Kubernetes——故障排查指南
针对越来多的Kubernetes容器云,对Kubernetes集群的故障排查却成了一个棘手问题.本文虫虫给大家以直观图示方式介绍如何排查Kubernetes的故障.该篇是系列文章续——故障排查篇. 概 ...
随机推荐
- Linux 内核链表头数据结构
链表头必须在使用前用 INIT_LIST_HEAD 宏来初始化. 一个"要做的事情"的链表头可能声 明并且初始化用: struct list_head todo_list; INI ...
- 2018-10-17-Sublime-Text-好用的插件
title author date CreateTime categories Sublime Text 好用的插件 lindexi 2018-10-17 10:14:40 +0800 2018-2- ...
- PowerShell 拿到最近的10个系统日志
我最近发现我的程序总是调用一些不清真的代码,于是在运行的时候就退出了,我想要拿到系统的日志知道我的程序是怎么退出的,我如何通过 PowerShell 拿到最近的10个系统日志.为什么需要拿到最新10个 ...
- Flask学习-Virtualenv
http://www.pythondoc.com/ VirtualEnv Virtualenv用于同一台机器上创建多个独立的Python虚拟运行环境,多个Python环境相互独立,互不影响,它能够: ...
- 第二阶段:4.商业需求文档MRD:3.PRD-页面结构图
这也是功能结构以及优先级 这是页面层级 页面结构图 再细分某一个频道或者子页面 层层细分 用mind做的页面结构图 里面也包含了功能
- 分布式架构基石RPC的实现原理
RPC的由来 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 单一应用架构 当网站流量很小时, ...
- 20191010-7 alpha week 1/2 Scrum立会报告+燃尽图 06
此作业参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/8750 小组名称:“组长”组 组长:杨天宇 组员:魏新,罗杨美慧,王歆瑶,徐丽 ...
- 【题解】地精部落(DP)
[题解]地精部落(DP) 设\(f_i\)表示强制第一个是谷的合法方案数 转移枚举一个排列的最大值在哪里,就把序列分成了互不相干的两个部分,把其中\(i-1\choose j-1\)的数字分配给前面部 ...
- Linux常用命令大全(三)
Linux常用命令大全(三) 文件类型 普通文件(文本文件.数据文件.可执行的二进制文件) 目录文件 同上 差别:由成对的"I节点号.文件名"构成的列表 设备文件 (字符设备.块设 ...
- Java中日期格式化YYYY-DD的坑
写这篇博文是记录下跨年的bug.去年隔壁组的小伙伴就是计算两个日期之间间隔的天数,因为跨年的原因计算有误. 当时测试组的小姐姐也没有模拟出来这种场景,导致上生产环境直接影响线上的数据. 今天逛技术论论 ...