Kubernetes速成课程:掌握容器编排的精髓

news2024/9/24 5:29:15

微服务演进方向

• 面向分布式设计(Distribution):容器、微服务、API 驱动的开发;

• 面向配置设计(Configuration):⼀个镜像,多个环境配置;

• 面向韧性设计(Resistancy):故障容忍和自愈;

• 面向弹性设计(Elasticity):弹性扩展和对环境变化(负载)做出响应;

• 面向交付设计(Delivery):⾃动拉起,缩短交付时间;

• 面向性能设计(Performance):响应式,并发和资源高效利用;

• 面向自动化设计(Automation):⾃动化的 DevOps;

• 面向诊断性设计(Diagnosability):集群级别的日志、metric 和追踪;

• 面向安全性设计(Security):安全端点、API Gateway、端到端加密;

满足微服务架构模式要求

• 容器化

• 服务发现

• 可编排

• 动态调度

• 支持标准cicd

• 分布式配置架构

• 声明式配置

Kubernetes就是为了满足上述微服务的各种演进和特点诞生的,在K8S的设计哲学里充满了对微服务编排的各种模式的定制化支持。


aa58bbde0a86bf815cf72d58de741463.jpeg

K8S的特性

• Predictable Demands

○ 资源使⽤

○ 服务配置

○ 流量控制

○ 依赖管理

• Declarative Deployment

○ 滚动升级

○ 固定方式升级

○ 蓝绿升级

○ 金丝雀发布

• HealthProbe

○ 健康检查:health check

○ 存活检查: lineness probes (HTTP,TCP,EXEC)

○ 可用性检查:readiness probe

• Managed Lifecycle

○ Signal

○ sigkill

○ Restart

○ Prestop hook

○ Poststart hook

• Automated Placement

○ 面向最合适的资源进行调度

K8S各个组件的联动


f4be0b247587f2612492e6dd35889e24.jpeg

Pod介绍

将多个容器打通共享隔离机制,每个pod都会包含一个paused的容器用于初始化环境,其他容器继承该容器的隔离配置

Pod基础

Pod的本质是多个共享资源的容器的组合。

f9a730be9e3a8adae968093c7ba1b4ba.jpeg

Pod调度的筛选策略

10bbbff9fa8cb3cf0410003327e583b8.jpeg

Pod申请资源的优先级控制机制与模型

0a10f3486a27ef36cd8f42755404cb55.jpeg

如上图所示,三种资源分配模型各自具备一定的特点,基于模型的特点可以整合资源混合部署的优先级控制机制,增强整体集群资源的利用率

• BestEffort

• Bustable

• Guaranteed

Service

在K8集群中,客户端需要访问的服务就是Service对象。每个Service会对应一个集群内部有效的虚拟IP,集群内部通过虚拟IP访问⼀个服务。

8e3f07b7b01c1e2c098fbb34f2105dc2.jpeg

• label:用于过滤筛选pod,label在k8s内部会进行索引,因此检索效率非常高效,业务模型设计的时候用于过滤检索的字段可以用label表示,尽量写的所有label都是有效检索字段。

• annotations:用于注解一些label不易说清楚的事项,注意annotation不会被索引,因此不要使用annotation用来做筛选字段。

• configmap:当开发控制器或者定义容器的时候需要额外的配置,这些配置信息又无法通过label和annotation来传递,此时最好的方案就是用configmap。

流量接入

通过proxy方式

f41c1333ff358b7c3d7759380a0dc2e2.jpeg

负载均衡器直接接入到service

516f00abc84e250c2bf1aaa43b910617.jpeg

通过ingress组件暴露接口

03d435ab30ab45e0661b3da860804624.jpeg

ETCD说明

etcd是k8s的分布式存储中心,etcd集群管理,raft协议保证一致性。

关于etcd的详细说明有一个开源电子书:https://csunny.gitbook.io/etcd/introduce

Controller控制器模型

K8S在etcd基础之上提供了一个基于事件驱动的编程模型,基于该模型可以控制资源的生命周期以及响应事件的变化做出动态调整;

控制原理示意图

c643d89bae74e467c8d3a20c2eedf360.jpeg

Obeserve--->Analyze--->Act 事件循环,k8s提供的控制器编程模型提供了可靠的基于资源的扩展协议和通用的编程模型,在该模型下可以扩展更多的通用定制化逻辑。

用shell脚本模拟控制器模式如下:

1b1cf32b4564abdb26519e05920e1fc8.jpeg

K8S Watch的事件类型补充说明一下:

69ca7d06acc6b6f8155b05ac799074ba.jpeg

Operator

d2b91551889dc983dd416d70c52505d7.jpeg

operator本质上是定制化的控制器,只不过控制器层面额外做了很多封装操作,这些操作使得我们做定制化资源控制和服务管理时更得心应手。

CRD(CustomResourceDefinition)非常有用,CRD对于我们扩展K8S的接口非常有帮助,有CRD我们就可以基于K8S做更多的定制化场景的服务管控。CRD将K8S的能力和特定领域的软件的能力进行了整合,这个整合使得K8S具备了非常好的扩展空间。

一个标准的crd定义举例:

dd9ca57b9e3fb199704192aa3205e48e.jpeg

1. Name

2. API归属组

3. 确定资源类型,用于识别该资源

4. 名称的复数形式,用于 URL:/apis/<组>/<版本>/<名称的复数形式>

5. 作用域,名字空间维度或者集群维度等

6. 版本

7. 具体支持的版本号

8. 只有一个版本会标记为存档版本,设置为true表示当前版本需要存储

9. 每个版本都可以通过served表示启用与否

10. openapi的版本schema定义模式

d18ef918860be023fc7291b4ecc19804.jpeg

Volume

Volume是Pod中能够被多个容器访问的共享目录,Kubernetes中的Volume与Pod⽣生命周期相同,但与容器的⽣命周期不相关,Kubernetes⽀持多种类型的Volume,并且一个Pod可以同时使用任意多个Volume。

• EmptyDir:Pod分配时创建,K8S⾃自动分配,当Pod被移除数据被清空。⽤用于临时空间 等。

• hostPath: 为Pod上挂载宿主机⽬目录。⽤用于持久化数据。

○ gcePersistentDisk、awsElasticBlockStore:挂载公有云盘。

○ nfs、iscsi、glusterfs、rbd、gitRepo:挂载相应磁盘资源。

K8S声明式配置标准

• apiVersion

• kind

• metadata

• spec

示例:

2c8106efb260fbd569c717338d6861b3.jpeg

Resource资源

K8S几乎所有对象都被抽象为了资源(Resource),包括 K8s Core Resources(Pod, Service, Namespace 等)、CRD、APIService 扩展的资源类型。同时 K8s 底层将这些资源统一抽象为了 RESTful 的存储(Storage),一方面服务端按目录形式(/registry/xxx) 存放在 ETCD 中,另一方面也为客户端提供了 RESTful API 接口,便于对资源的操作(get/post/put/patch/delete 等)。

K8s Watch API 就是为资源提供的一种持续监听其变化的机制,当资源有任何变化的时候,都可以实时、顺序、可靠的传递给客户端,使得用户可以针对目标资源进行灵活应用与操作。

fb3e82bfa8e6ae7d6643808a4cd7c4b0.jpeg

容器内和K8S配置联动方式

容器内进程能获取到的外部编排的上下文信息有两个来源,环境变量和挂载项。

9b5146fc389324317beaf8c93c730175.jpeg

第一为环境变量

环境变量需要在编排期设置

a2e7c00fbc8a09cc810f5cf542dc1de3.jpeg

第二为挂载的文件

挂载文件以及生成规则也需要在编排期设置,对于配置是否只读也可以在编排期设置选项

2482e9b771ac23d4761c9da6bf64dc0f.jpeg

• 示例,比如容器想在运行时了解容器编排的一些注解信息和标签信息,基于该注解内容来控制流量策略和业务模型,那么实现可以如下方式:

201ea1275738c930dbf5692148878e1c.jpeg

K8S集群编排服务的模式梳理

DaemonSet模式

类似于守护进程一样,每个节点部署一个pod。

SideCar模式

⽣产环境中经常需要有一些通⽤的配置初始化策略,比如权限统⼀设置,类似的活⼉交由sidecar 模式的容器器进行管理,这样的容器可以只处理通用性的需求,比如统⼀将⽇志⽬录的挂载采集策略进⾏编排,将日志挂载路路径规范化,采集统⼀化;所谓的sidecar就是有一个容器器和其他容器进行了某种的共享策略,然后基于共享的内容各自负责各自的事情。

26df424fa629cab5d2617b3f45500e23.jpeg

Init Container

服务的启动依赖其他容器进⾏一些初始化工作,⽐如动态生成配置⽂件,静态文件独立编译生成

后交由服务容器器使⽤。

be05dc82268629540ac855032ee0e2b2.jpeg

Singleton Service

全局只能有一个Pod实例,有些特定场景的服务只能全局保证只有一个容器在干活,其他的同时处理会有资源竞争或者分布式锁的问题,因此该场景下可以考虑singleton的部署方式。

5aa2ce0111c51c945fd891220f6ebfb3.jpeg 38acb6ec91a1179a72886ec21062850f.jpeg

Stateful Service

ae791aa754e3fab42ec064b4810b80e9.jpeg

有状态服务比如mysql,其数据层关系到该POD不能跟无状态图服务一样故障后重新寻找资源然后启动就OK了,有状态服务需要保证带状态的层和服务的捆绑。因此一个服务一旦对某个特定状态有依赖务必需要重点考虑其部署编排模式。

Ambassador

0859818e20a8939213e3564737834193.jpeg

ambassador模式类似于代理模式,将服务基础能力通过封装的方式独立出去,然后业务逻辑通过容器内去访问,降低容器接入外部服务的成本。

动态扩缩容

扩容,缩容涉及到的维度不同工作原理与方案就不同,比如集群维度,pod维度等差异。

d9d6738562c91807f241b3b23e70a1a0.jpeg

K8S内置了很多可以面向动态扩缩容的机制,比如基于metirc指标动态生成扩容计划

• POD的动态调整模型

33eb466fb4989a14852bc474e9f0e40f.jpeg a58e3c771267859f7084268ee47ac1bc.jpeg

• 集群的动态调整模型

f319d1926408b5b69e5a1f0e03784d1a.jpeg

其他

• K8S常用的各种命令:https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#create

• k8s的watchapi整理:https://mp.weixin.qq.com/s/swmMoegiNgNHUwc67NN6AA

• kubebuilder:将多个crd整合到一起开发的项目

○ https://github.com/kubernetes-sigs/kubebuilder

• Metacontroller:提供一个定制化的crd,但是该crd提供了各种能力的通用型扩展语义

○ https://github.com/metacontroller/metacontroller

• jsonnet数据模板语言:https://github.com/google/jsonnet

• operatorhub:https://operatorhub.io/

• operator sdk:https://github.com/operator-framework/operator-sdk

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

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

相关文章

初识Java篇

1.介绍Java语言 1.1Java是什么 Java是一种优秀的程序设计语言&#xff0c;它具有令人赏心悦目的语法和易于理解的语义。 不仅如此&#xff0c;Java还是一个有一系列计算机软件和规范形成的技术体系&#xff0c;这个技术体系提供了完整的用于软件开发和跨平台部署的支持环境&am…

JS:将秒数转化为时分秒的形式

要求 将秒数转化为时分秒的形式,比如12&#xff1a;34&#xff1a;09代表12小时34分钟9秒注意&#xff1a; &#xff08;1&#xff09;如果只有一位数&#xff0c;前面要用0补齐&#xff0c;比如9秒要用09表示 &#xff08;2&#xff09;如果对应单位上的数字为0&#xff0c;要…

提升用户体验的利器:揭秘Spring框架中国际化的奇妙魔力

国际化 简单来说&#xff0c;国际化就是让应用&#xff08;app、web&#xff09;适应不同的语言和地区的需要&#xff0c;比如根据地区选择页面展示语言。 i18ninternationalization&#xff0c;首末字符i和n&#xff0c;18为中间的字符数 原理 基于传入语言or地区标识进行判…

【面试经典150 | 链表】两数相加

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;模拟 其他语言python3 写在最后 Tag 【单向链表】【数组】 题目来源 2. 两数相加 题目解读 对两个链表对应位置进行相加&#xff0c;最后返回结果链表的头结点。 解题思路 很多同学对链表操作不是很熟悉&#xff0c…

如何在 Chrome 中设置HTTP服务器?

首先&#xff0c;定义问题&#xff1a;在 Chrome 浏览器中设置HTTP服务器主要涉及到修改网络设置&#xff0c;使用HTTP服务器可以帮助用户访问网络内容&#xff0c;提高网络速度或者保护隐私。 亲身经验&#xff1a;我曾在使用 Chrome 浏览器时&#xff0c;为了访问一些受限的网…

找搭子平台小程序开发制作方案

找搭子小程序是一个基于地理位置的社交平台&#xff0c;旨在帮助用户找到附近的人&#xff0c;一起进行各种活动。的目标是打造一个安全、便捷、有趣的社交平台&#xff0c;让用户在享受活动的同时&#xff0c;也能结识新朋友。 找搭子平台小程序的目标用户主要是年轻人&#x…

Go语言入门心法(十五):Go微服务实战

Go语言入门心法(一): 基础语法 Go语言入门心法(二): 结构体 Go语言入门心法(三): 接口 Go语言入门心法(四): 异常体系 Go语言入门心法(五): 函数 Go语言入门心法(六): HTTP面向客户端|服务端编程 Go语言入门心法(七): 并发与通道 Go语言入门心法(八): mysql驱动安装报错o…

【从删库到跑路】MySQL数据库 | 存储过程 | 存储函数(使用代码辅助理解)

&#x1f38a;专栏【MySQL】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【The Right Path】 &#x1f970;欢迎并且感谢大家指出小吉的问题 文章目录 &#x1f384;存储过程介绍&#x1f384;存储过程特点&#x1f33a;存储过…

Uniapp 原生设置的动态tabbar如何传参数动态 ?

在 UniApp 中设置原生 TabBar 并实现动态传参&#xff0c;可以通过使用Vue的响应式机制或者Vuex状态管理来实现。 以下是一个简单的示例&#xff1a; 以上这就是一个大概代码框架示例&#xff0c;具体实现应该根据项目需求做相应调整。欢迎来 注册 体验

大数据-Storm流式框架(二)--wordcount案例

一、编写wordcount案例 1、新建java项目 2、添加storm的jar包 storm软件包中lib目录下的所有jar包 3、编写java类 WordCountTopology.java package com.bjsxt.storm.wc;import backtype.storm.Config; import backtype.storm.LocalCluster; import backtype.storm.genera…

ideaSSM在线商务管理系统VS开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 SSM 在线商务管理系统是一套完善的信息管理系统&#xff0c;结合SSM框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码 和数据库&#xff0c;系统主…

轮胎尺寸后面的91W、101Y是啥意思?解释一下:轮胎载重指数和轮胎速度等级。

轮胎载重指数 轮胎的语言沟通是一组数字&#xff0c;并表示数据规格&#xff0c;品牌和类型的一系列信件的形式。这是普遍的&#xff0c;并得到了所有轮胎制造商全球达成一致。 “载重指数”是一个对应于最大载重量的数字&#xff08;单位&#xff1a;公斤&#xff09;&#xf…

【尘缘赠书活动:01期】Python数据挖掘——入门进阶与实用案例分析

引言 本案例将根据已收集到的电力数据&#xff0c;深度挖掘各电力设备的电流、电压和功率等情况&#xff0c;分析各电力设备的实际用电量&#xff0c;进而为电力公司制定电能能源策略提供一定的参考依据。更多详细内容请参考**《Python数据挖掘&#xff1a;入门进阶与实用案例…

RocksDB基本架构与原理详解

Rocksdb Flink提供基于流的有状态计算&#xff0c;除了提供实时数据流的处理能力&#xff0c;还需要将计算产生的状态存储起来。 为了满足状态存取需求&#xff0c;提供了memory、flie system、rocksdb三种类型的状态存储机制。 memory存取高效单空间有限&#xff0c;且可用…

【VPX302】基于3U VPX总线架构的高性能数据预处理平台

板卡概述 VPX302是一款基于3U VPX总线架构的高性能数据预处理FMC载板&#xff0c;板卡具有1个FMC&#xff08;HPC&#xff09;接口&#xff0c;1个X8 GTH背板互联接口&#xff0c;可以实现1路PCIe x8&#xff1b;具有4路SRIO X4。板卡采用Xilinx的高性能Kintex UltraScale系列…

Kmssink插件添加缩放显示功能的分析思路与具体实现

XILINX MPSOC 实现输出缩放&#xff0c;PL一侧的配置如下&#xff1a; 修改PL侧的显示通道流程为&#xff1a;DDR -> FRAMBUF_RD -> VPSS(SCALE) -> V_MIX -> HDMI_TX -> MONITOR , 通过设置HDMI_TX的宽高&#xff0c;利用xlnx_bridge 接口关联设置VPSS(scal…

MathType7.4绿色和谐版数学公式编辑器

MathType 是一个功能强大、所见即所得的数学公式编辑器&#xff0c;可以在 Word、PowerPoint 等办公软件中轻松输入各种复杂的物理公式、化学方程式和符号。由 MathType 创建的公式能与 Office 文档完美结合&#xff0c;显示效果很好&#xff1b;MathType 可在任何支持 OLE 对象…

数据分享 I 各地级市2022年乡村振兴数据

数据地址&#xff1a; 各地级市2022年乡村振兴数据https://www.xcitybox.com/datamarketview/#/Productpage?id364 基本信息. 数据名称: 各地级市2022年乡村振兴数据 数据格式: Shpxlsx 数据时间: 2022年 数据几何类型: 面 数据坐标系: WGS84坐标系 数据来源&#xff…

分布式事务-Seata-详细图文讲解

目录 分布式事务问题概述现象 Seata简介作用分布式事务处理过程处理过程 使用安装下载解压修改配置文件创建数据库创建数据表修改配置文件启动 异常超时异常——没加GlobalTransactional故障分析 解决异常 部分补充再看TC/TM/RM三大组件分布式事务的执行流程AT模式如何做到对业…

【Cheat Engine7.5】基础教程第一关(STEP1-2)

Cheat Engine简称CE 一、CE STEP1-2练习 1、打开 2、简介 欢迎使用 Cheat Engine 训练教程 (3.4) 本教程将尝试讲解在游戏中作弊的一些基本知识. 并帮助你熟悉 Cheat Engine 的使用方法 (简称为CE). 请按下面的步骤开始. 1: 首先要打开Cheat Engine (如果你还没有运行它的话…