当前位置: 首页 > news >正文

【容器】资源平台初探 - K8s核心资源全解析:从Pod到StatefulSet

目录

一、pod

1、什么是pod

2、pod的上下文环境怎么理解?

二、Namespace & ResourceQuota

1、命名空间

2、ResourceQuota

三、Replication controller/ReplicaSet

1、replication controller是什么?

四、Service

1、service是什么?

2、service的代理

五、Endpoint

六、Ingress / Ingress Controller

七、Label / Selector

八、Configmap / Secret

九、Deployment

十、DaemonSet

十一、PV / PVC

1、PV

2、PVC

十二、StorageClass

十三、StatefulSet

        开始本章内容之前,先讲解一下k8s对资源的定义:k8s将所有的内容都抽象为资源(例如:pod、service等),在k8s中运行的是对已经定义的资源的实例化实体(例如一个提供后端java服务的pod),所有内容均通过YAML/JSON文件描述。下面对k8s中的常用资源做一个简单的简介。

一、pod

1、什么是pod

K8s最基本的管理调度单元,逻辑上相当于一组共享上下文环境的托管应用。Pod模型在容器环境里表示为指定应用的逻辑主机。Pod可以包含一个或多个紧耦合的应用容器。

2、pod的上下文环境怎么理解?

pod的上下文环境可以理解为多个Linux namespace的连接体,包括:

        1) PID namespace(pod里的应用可以感知彼此的进程)

        2) Network namespace(pod里的应用可以同一IP和端口空间)

        3) IPC namespace(pod里的应用可以用SystemV IPC 信号量、消息队列和共享内存,POSIX信息队列)

        4) UTS namespace(pod里的应用可以共享主机名)

        pod的生命周期是相对短暂的,pod在node上被部署管理,直到被终止删除。当node节点无响应时,node上的pod将被删除,在node上的pod不会被迁移到其他node上,而是通过replicationSet被其它node上的pod所取代。

        但是在生产环境中,一般一个pod只部署一个服务,方便管理。

二、Namespace & ResourceQuota

1、命名空间

        1)namespace是k8s集群中的虚拟化集群。在一个k8s集群中可以拥有多个命名空间,他们在逻辑上彼此隔离。

        2)大多数的k8s集群会有一个叫default的默认namespace,实际上k8s会有三个:

                default:用户的service和app会默认创建在这个空间;

                kube-system:k8s系统组件使用;

                kube-public:公共资源使用,但实际上现在并不常用。

2、ResourceQuota

        1) 按类型限制命名空间下所创建对象的数量

        2) 限制所消耗计算资源的总量

三、Replication controller/ReplicaSet

1、replication controller是什么?

        1) replication controller是pod的复制抽象,用于解决pod的扩容缩容问题。通常,分布式应用为了性能或高可用性的考虑,需要复制多分资源,并且根据负载情况动态伸缩。

        2) 通过replicaitonController,我们可以指定一个应用需要几份复制,k8s将为每份复制创建一个pod,并且保证实际运行pod数量总是跟复制数量相等,当某一个pod宕机时,自动创建新的pod来替换。

注:最新版本的k8s已经用replicaSet来代替replicationController,使用方式没有改变,只是增加了支持集合式的selector。

Selector:

        matchLabels:

                Tier:frontend

        matchExpresions:

                -{key: tier, operator:In, values:[frontend]}

四、Service

1、service是什么?

        Service:是pod的路由代理抽象,用于解决pod之间的服务发现问题。因为pod的运行状态可动态变化(比如切换机器了、缩容过程中被终止了等),所以访问端不能以写死IP的方式去访问该pod提供的服务。service的引入旨在保证pod的动态变化对访问端保持透明,访问端只需要知道service的地址,由service来提供代理。

2、service的代理

        Kube-proxy从API Server获取服务及端点的对象状态。每个服务都会在本地节点打开一个端口。任何访问该端口的连接都会被代理到后端pod的相应端口上。

五、Endpoint

        K8s会根据service关联到pod的PodIP信息,组合成endpoint(PODIP + PODPort),若service定义中没有selector字段,service被创建时,也不会自动创建endpoint。

六、Ingress / Ingress Controller

1、Ingress

Service是后端真实服务的抽象,一个Service可以代表多个相同的后端服务。

Ingress是反向代理规则,用来规定HTTP/S请求应该被转发到哪个Service上,比如根据请求中不同的Host和url路径让请求落到不同的Sevice上。

2、Ingress Controller

Ingress Controller就是一个反向代理程序,它负责解析Ingress的反向代理规则,如果Ingress有增删改的变动,所有的Ingress Controller都会及时更新自己相应的转发规则,当Ingress Controller收到请求后就会根据这些规则将请求转发到对应的Service。

七、Label / Selector

        service和replicationController是建立在pod之上的抽象,那么它们如何跟pod联系起来呢?

这里使用了label的概念,label很好理解,就是为pod加上可用于搜索关联的一组key/value标签,而service和replicationController正是通过label selector机制来和pod关联的。

比如:现在有三个的pod的label为“app = backend”,创建service和replicationController时可以指定同样的label:“app = backend”,这样就将他们就与这三个pod关联起来了。当有其他frontend pod访问该service时,自动会转发到其中一个backend pod中。

八、Configmap / Secret

        K8s集群中的应用使用configmap资源或者Secret资源管理配置文件。Configmap资源主要管理通用配置文件,Secret资源解决了密码、token、密钥等敏感数据的配置问题。

Configmap使用方式:

        1)设置环境变量的值

        2)在容器里设置命令行参数

        3)在数据卷里面创建config文件(volume)

Secret使用方式:

        1)以Volume方式

        2)以环境变量方式

九、Deployment

deployment是构建于ReplicaSet资源之上,主要管理无状态应用。

        1)deployment借助ReplicaSet管理pod资源,其大部分管理操作于ReplicaSet相同。

        2)相比ReplicaSet具有的高级功能,主要为自动滚动更新以及回滚的功能。

十、DaemonSet

在每个Worker Node上都创建相同的POD

与deployment的不同之处:daemonSet每个node上最多只能运行一个副本;deployment部署的pod分布在各个node上,每个node都可能运行好几个副本。

十一、PV / PVC

1、PV

        PV是集群中已由管理员配置的存储(网络、本地)。集群中的资源就像一个节点是一个集群资源。PV是诸如卷之类的卷插件,但是具有独立于使用PV的任何单个pod的生命周期。

2、PVC

        PVC是用户存储的请求。它类似于pod。Pod消耗节点资源,PVC消耗存储资源。pod可以请求特定级别的资源(CPU和内存)。权限要求可以请求特定的大小和访问模式。

十二、StorageClass

K8s集群管理员通过提供不同的存储类,可以满足用户不同的服务质量级别、备份策略和任意策略要求的存储需求。动态存储卷供应使用StorageClass进行实现,其允许存储卷按需被创建。如果没有动态存储供应,k8s集群的管理员将不得不通过手工的方式创建新的存储卷。K8s将能够按照用户的需要,自动创建其需要的存储。

十三、StatefulSet

statefulSet是为了解决有状态服务的问题(对应Deployments和ReplicaSets是为无状态服务而设计),适用场景:

1、稳定的持久化存储,即pod重新调度后还是能访问到相同的持久化数据,基于PVC来实现

2、稳定的网络标志,即pod重新调度后其PodName和HostName不变,基于Headless Service(即没有Cluster IP的Service)来实现

3、有序部署,有序扩展,即pod是有顺序的,在部署或者扩展的时候要依据定义的顺序依次进行(即从0到N-1,在下一个od运行之前所有之前的pod必须都是Runnin和Ready状态),基于init containers来实现

4、有序收缩,有序删除(即从N-1到0)

5、有序的滚动更新

http://www.dtcms.com/a/277843.html

相关文章:

  • 板凳-------Mysql cookbook学习 (十一--------8)
  • Burp suite的下载安装基础用法(密码喷洒,密码爆破)
  • 算法入门--动态规划(C++)
  • Ribbon实战
  • 【枚举+差分】P6070 『MdOI R1』Decrease
  • RAG升级:Re-rank模型微调,实现极致检索精度
  • 【读书笔记】《C++ Software Design》第八章 The Type Erasure Design Pattern
  • 虚拟线程,多线程,单线程
  • 小白成长之路-LVS
  • 神经网络的基础原理介绍(网络、传播、梯度、以及一些常见的神经网络原型介绍)
  • 【设计模式】策略模式(政策(Policy)模式)
  • pycharm+SSH 深度学习项目 远程后台运行命令
  • AI生成单词消消乐游戏. HTML代码
  • hercules zos 安裝 jdk 8
  • 【读书笔记】《C++ Software Design》第十章与第十一章 The Singleton Pattern The Last Guideline
  • MyBatis04-MyBatis小技巧
  • 【读书笔记】《Effective Modern C++》第六章 Lambda Expressions
  • Spring AI多模态API初体验:文字、图片、语音,一个接口全搞定!
  • 【研报复现】开源证券:均线的收敛与发散
  • DevOps
  • 深度学习图像分类数据集—玉米粒质量识别分类
  • 设计模式之单例模式:深入解析全局唯一对象的艺术
  • JVM 锁自动升级机制详解
  • 哈希扩展 --- 布隆过滤器
  • 肿瘤浸润淋巴细胞是什么,与三级淋巴结构的关系
  • 会计 - 22 - 外币折算
  • Linux713 SAMBA;磁盘管理:手动挂载,开机自动挂载,自动挂载
  • 补:《每日AI-人工智能-编程日报》--2025年7月12日
  • CTFSHOW pwn161 WP
  • 如何成为 PostgreSQL 中级专家