十分钟了解Kubernetes

何为Kubernetes?

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

Kubernetes组件介绍

了解Kubernetes都是从Pod开始的。Pod是Kubernetes最小的调度单元,所以组件介绍就从Pod开始。Pod是一组容器的集合,这些容器共享IPC,Network和UTS,也就是这些容器相互之间可以共享进程信息,网络信息和主机信息。这一组容器相互之间可以通过Localhost互访。

640?wx_fmt=jpeg

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至少执行成功一次。
添加这四个组件之后,上面的图就变成了下面的样子:
640?wx_fmt=jpeg

在上面四个组件里面,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就是好)。

因此上面的图就变成了下面的样子:
640?wx_fmt=jpeg

和Deployment类似,Kubernetes也提供了CronJob来动态管理Job,其实就是定时作业。因此就不多说了。在上图中再添加一个CronJob。
640?wx_fmt=jpeg

说到现在,管理Pod基本就聊完了。此时创建的Pod会有以下特点:

  • 每个Pod都是内网IP。

  • Pod销毁/创建会产生新IP。

那么如何访问这些Pod呢?访问分两类,集群内访问和集群外访问。但无论是集群内访问还是集群外访问,Pod的变更都不应该对调用方产生干扰。因此对于调用方来说Pod的IP必须要固定下来。而Service就应运而生,用来解决这个问题。

Kubernetes可以为一组Pod创建一个单独的Service,这个Service拥有固定的IP,并会将网络请求转发到相对应的这组Pod上。通俗来说,Service就是4层LB。好吧,上面的图在添加点东西:
640?wx_fmt=jpeg

Service产生的基本都是内网IP(也可以产生其它网段IP,但不在极简史讨论范畴),并且是4层LB。如果要对集群外开放网络请求,就需要使用Kubernetes提供的Ingress组件。

Ingress是7层LB,而使用最多的是Nginx Ingress。这个时候再添加点东西:
640?wx_fmt=jpeg

从大面上说,几个大组件都齐了。下面再说Pod持久化和参数配置的问题。

Pod持久化就需要挂载Volume,通过将数据写入指定Volume的方式来完成持久化。Kubernetes为Volume提供了多种实现方式,大体分为两类:临时挂载和永久挂载。第三次请注意:
临时挂载指的是卷随着Pod的生命周期而存在,当Pod被删除时挂载的Volume也会随之消失。而永久挂载则是真的永久保存。

临时挂载有EmptyDir和HostPath两种方式。永久挂载称之为PresistentVolume(PV)。PV是与Pod完全无关的一种资源,当Pod有持久化需求时,就需要向PV申请所需要的资源,这种资源称之为PersistentVolumeClaim(PVC)。

简单理解,PV就是存储池,PVC就是向存储池中申请存储资源。
在Pod中添加所申请的PVC,Pod产生的数据就可以写入到存储池中了。上面的图再增加点东西:
640?wx_fmt=jpeg

极简史就剩下最后一部分了:配置文件。
配置文件指的是Kubernetes支持Pod创建时,将指定的配置文件以文件或者环境变量的形式添加到Pod中。在Kubernetes中这类配置文件称之为configmap。既然是配置文件,就免不了会涉及到口令,放入配置文件就很不安全。Kubernetes为这类需求单独提供了secret,其实就是特殊的configmap。为啥是特殊,其实就是将口令做了Base64编码,连加密都不是。。
所以最后这张图就变成了这样:
640?wx_fmt=jpeg

到这里,极简史就算聊完了。Kubernetes里面的概念很多也很晦涩,作为入门没法完全说清,有些地方就浅入浅出了。

实践出真知,大力出奇迹。要想掌握好K8s,除了多学,多练,多填坑。好像真没有其它好途径。

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

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


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/315233.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【CF1194E】Count The Rectangles【类扫描线】【单调性】【树状数组】

传送门 题意:给定NNN条与坐标轴平行的线段,保证不垂直的线段没有交点,求一共构成多少个矩形(以线段交点为顶点)。 1≤N≤50001\leq N\leq50001≤N≤5000 显然是个数据结构乱搞题。 直觉告诉我们先枚举一条线段。 假…

.NET Core 的过去、现在和未来

在最新的微软 Build 大会主题网站上,微软.NET 程序经理 Scott Hunter 发表了一篇文章,指出.NET Core 是.NET 的未来。去年,微软就已经确认 Visual Studio Live 中的.NET 框架将会被.NET Core 取代。将.NET Core 作为开源开发技术栈在 2014 年…

Visual Basic 兴衰记

这是一篇暴露年龄的文章。为什么这么说?因为现在年轻的程序员可能没有接触过当年红极一时的 Visual Basic。28 年前的 1991 年 4 月,Microsoft 发布了 Visual Basic 1.0 for Windows,次年 9 月,发布了 Visual Basic 1.0 for DOS。…

函数式编程里的Materialization应该翻译成什么?

Materialization是函数式编程里的一个专业术语, 用于特指函数式编程中查询被实际执行并生成结果的这一过程.首先, 搜了一下中文资料, 暂时没有对该词的中文翻译, CSDN\博客园\阿里云上所有关于它的文档都没有做中文翻译, 直接沿用这个英文单词.难道轮到我来创造这个词的中文翻…

Ozon Tech Challenge 2020 (Div.1 + Div.2) E.Kuroni and the Score Distribution 构造

传送门 文章目录题意:思路:题意: 思路: 不难想到,长度为nnn的数组最多的满足条件的三元组序列是1,2,3....,n1,2,3....,n1,2,3....,n,对于每一个位置贡献为i−12\frac{i-1}{2}2i−1​,那么如果m…

Exceptionless(二) - 使用进阶

作者:markjiang7m2原文地址:https://www.cnblogs.com/markjiang7m2/p/11100563.html官网地址:http://letyouknow.net在上一篇文章Exceptionless - .Net Core开源日志框架中就说到如何对Exceptionless进行本地化部署,不过我也跟大家…

基于 Kong 和 Kubernetes 的 WebApi 多版本解决方案

前言大家好,很久没有写博客了,最近半年也是比较的忙,所以给关注我的粉丝们道个歉。去年和朱永光大哥聊的时候提了一下我们的这个方案,他说让我有空写篇博客讲一下,之前是非常的忙,所以这次趁着有些时间就写…

CodeCraft-20 (Div. 2) D. Nash Matrix 构造 + dfs

传送门 文章目录题意:思路:题意: 给定一个n∗nn*nn∗n的矩阵,每个点上面都有一个xi,yix_i,y_ixi​,yi​,表示这个点到xi,yix_i,y_ixi​,yi​这个点停下,当xi−1,yi−1x_i-1,y_i-1xi​−1,yi​−1的时候代表…

从严治码-别人在项目中下毒,我该怎么治?

01 从软考说起从4月份开始,由于备考《系统集成项目管理工程师》的原因,博客没有持续更新,在上半年考试结束之后,又对项目进行了一些收尾的工作。下面就这段时间的学习作一个记录和总结吧。在学习的过程中,提炼了一些自…

学习MVVM设计模式后第一次用于生产

WPF的MVVM设计模式从winform转变到WPF的过程,难点主要还是在MVVM的设计模式。当然,如果依然采用winform的涉及方式,在每个控件背后绑定事件的方式运用在wpf中,依然可行,但是假如GUI改版,其背后绑定的特别为…

netcore mvc快速开发系统(菜单,角色,权限[精确到按钮])开源

基于netcore2.0 mvc 开发的 快速搭建具有如下特色的后台管理系统用户管理菜单管理角色管理权限管理[精确到按钮])代码生成器代码克隆到本地 用vs2017或以上版本 打开工程。项目结构如下:找到DbModel下面的初始化db脚本里面包含4张表的schema和初始化数据…

asp.net core 系列之Startup

这篇文章简单记录 ASP.NET Core中 ,startup类的一些使用。一.前言在 Startup类中,一般有两个方法:ConfigureServices 方法: 用来配置应用的 service 。 Configure 方法:创建应用的请求处理管道它们都在应用启动时,被AS…

译 | .NET Core 基础架构进化之路(一)

原文:Matt Mitchell翻译:Edi Wang随着 .NET Core 3.0 Preview 6 的推出,我们认为简要了解一下我们基础设施系统的历史以及过去一年左右所做的重大改进会很有用。如果您对构建基础结构感兴趣,或者想要了解我们如何构建与 .NET Core…

剑指 Offer 27. 二叉树的镜像

思路:递归 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/ class Solution { public:TreeNode* mirrorTree(TreeNode*…

Codeforces Round #626 (Div. 2) D. Present 按位贡献 + 快排新姿势

传送门 文章目录题意:思路:题意: 给你一个长度为nnn的序列aaa,让你计算 n≤4e5,a≤1e7n\le 4e5,a\le 1e7n≤4e5,a≤1e7 思路: 首先这个式子是n2n^2n2的,显然不能直接算,并且异或没有分配律&…

.NET开发框架(一)-框架介绍与视频演示

本文主要介绍一套基于.NET CORE的SPA高并发、高可用的开发框架.我们暂且称它为:(让你懂.NET)开发框架。以此为主线,陆续编写教程,讲述如何构建高并发、高可用的框架。(欢迎转载与分享)它标准化了…

译 | .NET Core 基础架构进化之路(二)

原文:Matt Mitchell翻译:Edi Wang(接上篇 译 | .NET Core 基础架构进化之路(一))Maestro 及依赖流.NET Core 3.0 基础结构难题的最后一部分就是我们所说的依赖项流。这不是 .NET Core 的唯一概念。除非它们…

在.Net Core中实现一个WebSocket路由

Net Core中使用WebSocket默认是没有路由系统的,只能通过Request.Path"/xxx"来判断请求,例如:1 2 3 4 5 6 7 8 91011121314151617181920app.Use(async (context, next) >{ if (context.Request.Path "/ws") { …

Dapper介绍--Micro-ORM

一.概述目前对于.net的数据访问ORM工具很多,EF和EF Core是一个重量级的框架。最近在搭建新的项目架构,来学习一下轻量级的数据访问ORM工具Dapper。Dapper支持SQL Server,MySQL,Sqlite,SqlCE,Fir…

剑指 Offer 31. 栈的压入、弹出序列

思路&#xff1a;模拟就完事 class Solution { public:bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {stack<int> c;int idx0;for(int v:pushed){c.push(v);while(c.size()&&c.top()popped[idx]){c.pop();idx;}…