十分钟了解Kubernetes
何为Kubernetes?
最简单的一句话来概括Kubernetes。 它就是一套成熟的商用服务编排解决方案。Kubernetes定位在Saas层,重点解决了微服务大规模部署时的服务编排问题。
Kubernetes组件介绍
了解Kubernetes都是从Pod开始的。 Pod是Kubernetes最小的调度单元,所以组件介绍就从Pod开始。Pod是一组容器的集合,这些容器共享IPC,Network和UTS,也就是这些容器相互之间可以共享进程信息,网络信息和主机信息。这一组容器相互之间可以通过Localhost互访。
Kubernetes其它组件都是围绕着Pod来工作的。
Pod有时也称为实例(或者服务实例)。 当我们说一个服务存在2个实例时,也就是说这个服务有两个Pod。
在Kubernetes中可以单独创建Pod,单独管理Pod。 但这却无法体现出服务编排的优势,例如需要资源利用率动态伸缩,或者对外部提供网络访问。 这时Kubernetes就又提供了一些管理Pod的组件。 这些组件适用于不同的场景,但本质都是在管理Pod。
以下先介绍DaemonSet、ReplicaSet、StatefulSet和Job这四个组件。
DaemonSet用来保证在集群中每个计算节点中都运行指定的Pod。 这个组件通常用来运行监控类和数据采集类的Pod,像定时采集节点资源信息,采集节点容器日志等等。
ReplicaSet,有时简称RS。和它相对应的有RC(新版本中已经剔除了)。此组件用来维护Pod状态,时刻让集群中Pod的状态满足用户所期望的状态。 例如用户期望运行4组Pod,当集群中Pod数量大于4或者小于4时,都会动态缩容或扩容来满足4组Pod这样的状态。
StatefulSet,专为解决有状态应用而推出的组件。 DaemonSet和ReplicaSet都是无状态的,也就是Pod的启停和网络信息都是无序的。 而StatefulSet则会保证Pod的启停顺序和网络信息与之前是保持一致的。
Job,顾名思义,是运行作业的组件。 使用Job组件会保证Pod至少执行成功一次。
添加这四个组件之后,上面的图就变成了下面的样子:
在上面四个组件里面,ReplicaSet是使用最多的组件,90%的Pod的创建、销毁都是通过RS来完成的。 但RS在使用上还是有点不方便,例如Pod p1现在要修改Container A的镜像版本。 那么就需要在创建一份新RS,然后通过新RS来创建新的Pod p2。 等p2创建完成之后,在返回来销毁p1。 这个时候就会同时存在RS1和RS2,当变更很频繁时,RS的管理就会变成瓶颈。 所以Kubernetes增加了Deployment来管理ReplicaSet, 请注意Deployment是直接管理ReplicaSet的,而ReplicaSet则直接管理Pod。 所以Deployment是间接管理Pod。
通过Deployment,用户可以声明最新的Pod状态,例如新镜像版本,新的环境变量,新的数量等等这些状态信息。 Deployment会通过动态创建和销毁ReplicaSet来满足用户所期望的状态,用户不需要关心中间过程如何实现(声明式API就是好)。
因此上面的图就变成了下面的样子:
和Deployment类似,Kubernetes也提供了CronJob来动态管理Job,其实就是定时作业。 因此就不多说了。在上图中再添加一个CronJob。
说到现在,管理Pod基本就聊完了。 此时创建的Pod会有以下特点:
- 每个Pod都是内网IP。
- Pod销毁/创建会产生新IP。
那么如何访问这些Pod呢? 访问分两类,集群内访问和集群外访问。 但无论是集群内访问还是集群外访问,Pod的变更都不应该对调用方产生干扰。 因此对于调用方来说Pod的IP必须要固定下来。 而Service就应运而生,用来解决这个问题。
Kubernetes可以为一组Pod创建一个单独的Service,这个Service拥有固定的IP,并会将网络请求转发到相对应的这组Pod上。通俗来说,Service就是4层LB。 好吧,上面的图在添加点东西:
Service产生的基本都是内网IP(也可以产生其它网段IP,但不在极简史讨论范畴),并且是4层LB。如果要对集群外开放网络请求,就需要使用Kubernetes提供的Ingress组件。
Ingress是7层LB,而使用最多的是Nginx Ingress。 这个时候再添加点东西:
从大面上说,几个大组件都齐了。 下面再说Pod持久化和参数配置的问题。
Pod持久化就需要挂载Volume,通过将数据写入指定Volume的方式来完成持久化。Kubernetes为Volume提供了多种实现方式,大体分为两类:临时挂载和永久挂载。第三次请注意:
临时挂载指的是卷随着Pod的生命周期而存在,当Pod被删除时挂载的Volume也会随之消失。而永久挂载则是真的永久保存。
临时挂载有EmptyDir和HostPath两种方式。 永久挂载称之为PresistentVolume(PV)。PV是与Pod完全无关的一种资源,当Pod有持久化需求时,就需要向PV申请所需要的资源,这种资源称之为PersistentVolumeClaim(PVC)。
简单理解,PV就是存储池,PVC就是向存储池中申请存储资源。
在Pod中添加所申请的PVC,Pod产生的数据就可以写入到存储池中了。 上面的图再增加点东西:
极简史就剩下最后一部分了:配置文件。
配置文件指的是Kubernetes支持Pod创建时,将指定的配置文件以文件或者环境变量的形式添加到Pod中。在Kubernetes中这类配置文件称之为configmap。 既然是配置文件,就免不了会涉及到口令,放入配置文件就很不安全。 Kubernetes为这类需求单独提供了secret,其实就是特殊的configmap。 为啥是特殊,其实就是将口令做了Base64编码,连加密都不是。。
所以最后这张图就变成了这样:
到这里,极简史就算聊完了。 Kubernetes里面的概念很多也很晦涩,作为入门没法完全说清,有些地方就浅入浅出了。
实践出真知,大力出奇迹。 要想掌握好K8s,除了多学,多练,多填坑。好像真没有其它好途径。
所以这篇文章就当抛砖引玉,权当业余交流了。
十分钟了解Kubernetes的更多相关文章
- 后端技术杂谈11:十分钟理解Kubernetes核心概念
本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 本文转自 https://github.com/h2pl/Java-Tutorial 喜欢的 ...
- 1.入门篇十分钟了解Spring Cloud
文章目录 Spring Cloud入门系列汇总 为什么需要学习Spring Cloud 什么是Spring Cloud 设计目标与优缺点 设计目标 优缺点 Spring Cloud发展前景 整体架构 ...
- 【NLP】十分钟快览自然语言处理学习总结
十分钟学习自然语言处理概述 作者:白宁超 2016年9月23日00:24:12 摘要:近来自然语言处理行业发展朝气蓬勃,市场应用广泛.笔者学习以来写了不少文章,文章深度层次不一,今天因为某种需要,将文 ...
- 十分钟轻松让你认识ASP.NET MVC6
这篇文章说明下如何在普通编辑器下面开发mvc6应用程序. 上篇文章: 十分钟轻松让你认识ASP.NET 5(MVC6) 首先安装mvc6的nuget包: 可以看到在project.json文件中添加了 ...
- 十分钟轻松让你认识ASP.NET 5(MVC6)
ASP.NET 5差不多快发布了.自己也学习了有两个月了.今天给没有接触asp.net 5的同学写一个简单地十分钟教程,教你认识一下asp.net 5. 1.安装kvm 首先,你需要以管理员权限打开c ...
- 十分钟了解分布式计算:Google Dataflow
介绍 Google Cloud Dataflow是一种构建.管理和优化复杂数据处理流水线的方法,集成了许多内部技术,如用于数据高效并行化处理的Flume和具有良好容错机制流处理的MillWheel.D ...
- 十分钟了解分布式计算:GraphX
GraphX原型论文 GraphX是Spark中用于图(e.g., Web-Graphs and Social Networks)和图并行计算(e.g., PageRank and Collabora ...
- 快速入门:十分钟学会Python
初试牛刀 假设你希望学习Python这门语言,却苦于找不到一个简短而全面的入门教程.那么本教程将花费十分钟的时间带你走入Python的大门.本文的内容介于教程(Toturial)和速查手册(Cheat ...
- 十分钟入门less(翻译自:Learn lESS in 10 Minutes(or less))
十分钟入门less(翻译自:Learn lESS in 10 Minutes(or less)) 注:本文为翻译文章,因翻译水平有限,难免有缺漏不足之处,可查看原文. 我们知道写css代码是非常枯燥的 ...
随机推荐
- 一个2013届毕业生(踏上IT行业)的迷茫(5)
很快就到了该找工作的时间了,听说这一年是历史上找工作的人对多的一年,我也不知道是怎么统计的,可信不可信.跑了大概快一个月了,终于有offer了,就这样在这里实习了3个月,一直工作到现在. 回忆了整个学 ...
- Parallel file system processing
A treewalk for splitting a file directory is disclosed for parallel execution of work items over a f ...
- Notepad++ 自定义关键字
Notepad++是一款輕便好用的編輯器,但可能有些語言的關鍵字不全,比方SQL中,默認關鍵字沒有Merge. 怎样給Notepad++中的語言添加關鍵字,而不是大動干戈自定義一個語言? 步驟: Se ...
- WPF中StringFormat的用法
原文:WPF中StringFormat的用法 WPF中StringFormat的用法可以参照C#中string.Format的用法 1. C#中用法: 格式化货币(跟系统的环境有关,中文系统默认格式化 ...
- WPF中的 Layout To Layout
原文:WPF中的 Layout To Layout WPF中的 Layout To Layout 周银辉 WPF的布局功能异常强大,当有时我 ...
- WPF中实现PropertyGrid(用于展示对象的详细信息)的三种方式
原文:WPF中实现PropertyGrid(用于展示对象的详细信息)的三种方式 由于WPF中没有提供PropertyGrid控件,有些业务需要此类的控件.这篇文章介绍在WPF中实现PropertyGr ...
- AngularJS 计时器
<div ng-controller="MyController"> <!--显示$scope.clock的now属性--> <h1>hello ...
- Introduction To The Smart Client Software Factory (CAB/SCSF Part 18)
1. Shell This is the start-up project for the solution. It is very similar to the start-up projects ...
- MASMPlus汇编之简单窗体
.386 .model flat,stdcall option casemap:none ;include 定义 include windows.inc include gdi32.inc i ...
- C#根据对象的指定字段去除重复值
PersonInfo类: public class PersonInfo { public int Index; public string Name; public override string ...