何为Kubernetes?

最简单的一句话来概括Kubernetes。它就是一套成熟的商用服务编排解决方案。Kubernetes定位在Paas层,重点解决了微服务大规模部署时的服务编排问题。

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,除了多学,多练,多填坑。好像真没有其它好途径。

所以这篇文章就当抛砖引玉,权当业余交流了。

 原文地址:https://www.cnblogs.com/vikings-blog/p/11101159.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 

十分钟了解Kubernetes相关推荐

  1. 十分钟带你理解Kubernetes核心概念

    原文地址:http://www.dockone.io/article/932 十分钟带你理解Kubernetes核心概念 本文将会简单介绍Kubernetes的核心概念.因为这些定义可以在Kubern ...

  2. erwin模型怎么保存_一行命令启动,十分钟内完成部署,Paddle Serving开放模型即服务功能...

    机器之心发布 机器之心编辑部 百度飞桨的 Paddle Serving 能够实现服务器端快速部署,最近,随着飞桨更新到 1.7 版本,Paddle Serving 也有了新变化.更新后的 Paddle ...

  3. 【Microsoft Azure 的1024种玩法】五十四. 十分钟快速上手创建部署Azure speech服务

    [简介] Azure语音服务是Microsoft提供稳定可靠的云通信服务,其在单个 Azure 订阅中统合了语音转文本.文本转语音以及语音翻译功能,我们可以通过各种方式(语音 CLI.语音 SDK.S ...

  4. 十分钟万台服务器部署能力,探秘阿里双十一弹性扩容背后的技术故事

    往往在大促等高峰时段都需要对流量提前预估,但实际上预先计算好的资源和应用容量,依然可能不足以支撑流量高峰,需要紧急扩容:而容器技术则非常适合这种场景,在需要时快速地.自动弹性伸缩.那么在业务需求极速上 ...

  5. 十分钟成为 Contributor 系列 | 为 TiDB 重构 built-in 函数

    2019独角兽企业重金招聘Python工程师标准>>> 这是十分钟成为 TiDB Contributor 系列的第二篇文章,让大家可以无门槛参与大型开源项目,感谢社区为 TiDB 带 ...

  6. 用D3.js 十分钟实现字符跳动效果

    用D3.js 十分钟实现字符跳动效果 注 本文基于 D3.js 作者 Mike Bostock 的 例子 原文分为三部分, 在这里笔者将其整合为了一篇方便阅读. 该效果基于 D3.js, 主要使用到了 ...

  7. 飞机的“黑色十分钟”能被人工智能消灭吗?

    [导读]近年来,"AI的应用和落地"逐渐成了具化的关键词,它和很多事物很多行业结合在一起,形成了奇妙的"化学反应".例如,在日常生活中,AI可以推送我们喜欢的新 ...

  8. 十分钟上手2022latex安装与入门

    序言:本次下载是为美赛而用,因此我们选择的下载组合为texlive+texstudio,使用windows10安装.在此提醒大家,类似工具的下载建议大家亲历亲为,不要相信一些诱导性网站,都是非官方的安 ...

  9. 十分钟用Windows服务器简单搭建DHCP中继代理!!

                         十分钟用Windows服务器简单搭建DHCP中继代理!! 一.什么是中继代理? 大家都知道DHCP分配地址都需要用到IP广播,但是广播是不能在两个网段之间进行 ...

最新文章

  1. java javaw javaws MC_java和 javaw 以及 javaws的區別
  2. 160个Crackme024之Opcode加密
  3. 偏振模色散及保偏光纤的正确理解
  4. Que2Search: Fast and Accurate Query and Document Understanding for Search at Facebook论文笔记
  5. CentOS 禁用Ctrl+Alt+Del重启功能
  6. loadrunner11 下载路径+安装+破解+汉化
  7. ucos II 操作系统
  8. 一次简单的软件系统培训计划安排
  9. hdu 4565(推公式、矩阵快速幂)
  10. 五十个产品可靠性性能提高的方法详解
  11. Java中间件mock_JAVA中间件Diamond整理
  12. 花儿还有重开日,人生没有再少年.
  13. Mac brew更新国内源或重置官方源
  14. 细说SSH隧道——本地端口转发
  15. 离网型风力发电机与并网型风力发电机之间的区别
  16. 用Qt搭建图书管理系统(三)
  17. mongoDB的读书笔记(04)_【Replica】(01)_Replica的一些基本概念
  18. 教你使用python做一段魔性的音乐
  19. C 修改服务器代码,rpg c 游戏服务器代码大全
  20. 火影忍者插曲(不是主题曲或者片尾曲)

热门文章

  1. oracle 分组后取每组第一条数据
  2. 搭建 vue2 单元测试环境(karma+mocha+webpack3)
  3. MySQL添加新用户、为用户创建数据库、为新用户分配权限
  4. android脚步---不同activity之间参数传递
  5. 64位的Linux中运行32位的应用程序
  6. python 抓取的网页默认是bytes的,要转码
  7. 酷桌面:随身携带你的企业
  8. 算法面试:精选微软等公司经典的算法面试100题 第26-35题
  9. 使用C#开发交互式命令行应用
  10. Abp Vnext Vue3 的版本实现