百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

hostpath和config ma p区别 host和master区别

feilongw 2025-03-26 17:07 24 浏览

分钟了解K8S

微服务演进方向

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

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

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

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

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

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

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

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

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

满足微服务架构模式要求

o 容器化

o 服务发现

o 可编排

o 动态调度

o 支持标准cicd

o 分布式配置架构

o 声明式配置

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


K8S的特性

o Predictable Demands

资源使用

服务配置

流量控制

依赖管理

o Declarative Deployment

滚动升级

固定方式升级

蓝绿升级

金丝雀发布

o HealthProbe

健康检查:health check

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

可用性检查:readiness probe

o Managed Lifecycle

Signal

sigkill

Restart

Prestop hook

Poststart hook

o Automated Placement

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

K8S各个组件的联动


Pod介绍

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

Pod基础

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

Pod调度的筛选策略

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

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

o BestEffort

o Bustable

o Guaranteed

Service

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

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

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

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

流量接入

通过proxy方式

负载均衡器直接接入到service

通过ingress组件暴露接口

ETCD说明

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

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

Controller控制器模型

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

控制原理示意图

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

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

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

Operator

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

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

一个标准的crd定义举例:

1. Name

2. API归属组

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

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

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

6. 版本

7. 具体支持的版本号

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

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

. openapi的版本schema定义模式

Volume

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

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

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

gcePersistentDisk、awsElasticBlockStore:挂载公有云盘。

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

K8S声明式配置标准

o apiVersion

o kind

o metadata

o spec

示例:

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

容器内和K8S配置联动方式

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

第一为环境变量

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

第二为挂载的文件

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

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

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

DaemonSet模式

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

SideCar模式

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

Init Container

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

后交由服务容器器使用。

Singleton Service

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

Stateful Service

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

Ambassador

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

动态扩缩容

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

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

o POD的动态调整模型

o 集群的动态调整模型

其他

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

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

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

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

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

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

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

o operatorhub:https://operatorhub.io/

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

相关推荐

13款用于Web的流行HTML5视频播放器

开源项目评测之Html5视频播放器推荐Web项目开发中视频播放是一个非常常见的需求,需要播放器能够支持pc端和移动端的使用,并且支持常见的视频格式。我们从github上精选了5款优秀的Html5播放...

[ 渗透入门篇 ] 渗透行业必备术语大集合(全 -- 五万字总结)

反渗透系统常用术语(1)淡水:又称渗透水、产品水,是反渗透系统的净化水。(2)供水:又称给水,是进入反渗透膜系统的供给水源。(3)浓水:又称盐水,是反渗透系统的浓缩废液。(4)半透膜:允许溶液中溶剂透...

java-verbose是什么意思 java -verbose

灵魂拷问:为什么short、byte会被提升为int?boolean到底多大?为什么short、byte会被提升为int?在学习Java语法的时候,知道short、byte、byte类型在做运...

Android Hanlder 揭密之路- 深入理解异步消息传递机制Looper、Handler、Message三者关系

Handler知识点梳理:Handler、Looper以及Message三者之间的关系前言Handler、Looper以及Message之间的关系,概括性来说,Looper负责的是创建一个Me...

csdn freemarker jquery 预览word

高质量人才助推高质量发展——西安市高新区“精益创业带动就业示范行动”系列活动西安市高新区“精益创业带动就业示范行动”系列活动已于8月日在高新区软件新城正式启动。本周五(8月日)上午点分,系列活动之“直...

android 修改菜单menu背景

教你把手机的状态栏和通知栏改造成安卓L风格说道颜值,就得吐槽一下安卓及一下的版本了。原生真的是丑,丑到没朋友。到了安卓,谷歌终于大刀阔斧的对安卓的颜值进行了大动刀。【下拉通知栏】那么,安卓有没有办法搞...

DCDC架构中 dcdc类型(dcdc的主要作用)

DC-DC工作原理,看完你就懂了上篇文章说了LDO的原理,那本篇就来说一下DCDC的工作原理吧。开关电源:是一种高频化电能转换装置,其主要利用电力电子开关器件(如晶体管、MOS管、可控晶闸管等),通过...

getPath(),getAbsolutePath(),getCanonicalPath() 区别

java获取文件路径1.前言Java开发中我们经常要获取文件的路径,比如读取配置文件等等。今天我们就关于文件的路径和如何读取文件简单地探讨一下。2.文件的路径文件的路径通常有相对路径与绝对...

android 多任务键app后台重新唤起生命周期 安卓任务管理器快捷键

好用的备忘录待办提醒APP任务管理工具怎么选?在这个信息高速流通的时代,选择一款合适的任务管理应用变得尤为关键。一个好的任务管理工具不仅能帮助我们更好地规划时间、提升效率,还能在快节奏的生活中保持条...

android数据包下载地址 数据包apk

《地牢猎手5》安卓怎么下载APK数据包下载万众期待的地牢猎手5终于推出啦,此次Gameloft在安卓平台首发推出,不过目前谷歌商店还未提供正式下载数据包,不过不用担心,蚕豆网小编为大家带来了地牢猎手...

51c大模型~合集24(c5.0模型)

北大校友打造的个智能体「我的世界」,背后原理揭晓了!来源:量子位北大校友打造的个智能体「我的世界」,背后原理揭晓了!团队全新公开页技术报告,详尽解密AI智能体如何产生专业化分工、社交互动、甚至传播虚拟...

ao3archive of own our如何使用

肖战ao3事件始末揭秘ao3是啥意思肖战粉丝举报AO3为什么惹众怒3月4日凌晨2时分,肖战工作室再次发表声明:肖战海外社交账号已无法正常登陆,任何更改均非本人及工作人员操作,后续动作均与肖战本人无关...

ansible变量运算 ansible查看变量的命令

Python中的Ansible库在Python中集成Ansible功能,主要通过以下两种方式实现,结合官方库和核心API可满足不同场景的自动化需求:一、AnsibleRunner库Ansible官方...

25个简单shell例子(shell实例讲解)

shell编程其实真的很简单(一)如今,不会Linux的程序员都不意思说自己是程序员,而不会shell编程就不能说自己会Linux。说起来似乎shell编程很屌啊,然而不用担心,其实shell编程真的...

ByConity ELT 测试体验

字节跳动开源云原生数仓引擎ByConity技术详解与应用导读本文介绍字节跳动开源的云原生数仓引擎,ByConity。主要包含四个主题:1.ByConity产生背景2.ByConity设计...