Kubernetes之核?技术概念和API对象

目录

  • Kubernetes之核?技术概念和API对象

    • Pod
    • 副本控制器(Replication Controller,RC)
    • 副本集(Replica Set,RS)
    • 部署(Deployment)
    • 服务(Service)
    • 任务(Job)
    • 后台?撑服务集(DaemonSet)
    • 有状态服务集(StatefulSet)
    • 存储卷(Volume)
    • 持久存储卷(Persistent Volume,PV)和持久存储生命(Persistent Volume Claim,PVC)
    • 节点(Node)
    • 密钥对象(Secret)
    • 用户账户(User Account)和服务账户(Service Account)
    • 名称空间(Namespace)
    • 访问授权(RBAC)

Kubernetes之核?技术概念和API对象

API对象是Kubernetes集群中的管理操作单元。 Kubernetes集群系统每?持?项新功能, 引??项新技术, ?定会新引?对应的API对象, ?持对该功能的管理操作。 例如副本集Replica Set对应的API对象是RS。

每个API对象都有3?类属性: 元数据metadata、 规范spec和状态status。 元数据是?来标识API对象的, 每个对象都?少有3个元数据: namespace, name和uid; 除此以外还有各种各样的标签labels?来标识和匹配不同的对象, 例如?户可以?标签env来标识区分不同的服务部署环境, 分别?env=dev、 env=testing、 env=production来标识开发、 测试、?产的不同服务。 规范描述了?户期望Kubernetes集群中的分布式系统达到的理想状态(Desired State) , 例如?户可以通过复制控制器Replication Controller设置期望的Pod副本数为3; status描述了系统实际当前达到的状态(Status) , 例如系统当前实际的Pod副本数为2; 那么复制控制器当前的程序逻辑就是?动启动新的Pod, 争取达到副本数为3。

Kubernetes中所有的配置都是通过API对象的spec去设置的, 也就是?户通过配置系统的理想状态来改变系统, 这是Kubernetes重要设计理念之?, 即所有的操作都是声明式(Declarative) 的?不是命令式(Imperative) 的。 声明式操作在分布式系统中的好处稳定, 不怕丢操作或运?多次, 例如设置副本数为3的操作运?多次也还是?个结果, ?给副本数加1的操作就不是声明式的, 运?多次结果就错了。

Pod

Kubernetes有很多技术概念, 同时对应很多API对象, 最重要的也是最基础的是Pod。 Pod是在Kubernetes集群中运?部署应?或服务的最?单元, 它是可以?持多容器的。 Pod的设计理念是?持多个容器在?个Pod中共享?络地址和?件系统, 可以通过进程间通信和?件共享这种简单?效的?式组合完成服务。 Pod对多容器的?持是K8最基础的设计理念, ?如你运??个操作系统发?版的软件仓库, ?个Nginx容器?来发布软件, 另?个容器专??来从源仓库做同步, 这两个容器的镜像不太可能是?个团队开发的, 但是他们?块??作才能提供?个微服务; 这种情况下, 不同的团队各?开发构建??的容器镜像, 在部署的时候组合成?个微服务对外提供服务。
Pod是Kubernetes集群中所有业务类型的基础, 可以看作运?在K8集群中的?机器?, 不同类型的业务就需要不同类型的?机器?去执?。 ?前Kubernetes中的业务主要可以分为?期伺服型(long-running) 、 批处理型(batch) 、 节点后台?撑型(node-daemon) 和有状态应?型(stateful application) ; 分别对应的?机器?控制器为Deployment、
Job、 DaemonSet和StatefulSet.

副本控制器(Replication Controller,RC)

RC是Kubernetes集群中最早的保证Pod高可用的API对象,通过监控运行中的Pod来保证集群中运行指定数量的Pod副本。指定的数目可以是1或多个,少于指定数目,RC会启动运行新的Pod副本,多余则会杀死多余的Pod副本,即使在数目为1的情况下实用RC运行Pod也要比直接运行Pod更明智,因为RC可以保证永远有1个Pod在运行,RC适用于场次伺服型的业务类型。

副本集(Replica Set,RS)

RS是新?代RC, 提供同样的?可?能?, 区别主要在于RS后来居上, 能?持更多种类的匹配模式。 副本集对象?般不单独使?, ?是作为Deployment的理想状态参数使?。

部署(Deployment)

部署表示?户对Kubernetes集群的?次更新操作。 部署是?个?RS应?模式更?的API对象, 可以是创建?个新的服
务, 更新?个新的服务, 也可以是滚动升级?个服务。 滚动升级?个服务, 实际是创建?个新的RS, 然后逐渐将新RS中副本数增加到理想状态, 将旧RS中的副本数减?到0的复合操作; 这样?个复合操作??个RS是不太好描述的, 所以??个更通?的Deployment来描述。 以Kubernetes的发展?向, 未来对所有?期伺服型的的业务的管理, 都会通过Deployment来管理。

服务(Service)

RC、 RS和Deployment只是保证了?撑服务的微服务Pod的数量, 但是没有解决如何访问这些服务的问题。 ?个Pod只是?个运?服务的实例, 随时可能在?个节点上停?, 在另?个节点以?个新的IP启动?个新的Pod, 因此不能以确定的IP和端?号提供服务。 要稳定地提供服务需要服务发现和负载均衡能?。 服务发现完成的?作, 是针对客户端访问的服务, 找到对应的的后端服务实例。 在K8集群中, 客户端需要访问的服务就是Service对象。 每个Service会对应?个集群内部有效的虚拟IP, 集群内部通过虚拟IP访问?个服务。 在Kubernetes集群中微服务的负载均衡是由Kube-proxy实现的。 Kube-proxy是Kubernetes集群内部的负载均衡器。 它是?个分布式代理服务器, 在Kubernetes的每个节点上都有?个; 这?设计体现了它的伸缩性优势, 需要访问服务的节点越多, 提供负载均衡能?的Kube-proxy就越多, ?可?节点也随之增多。 与之相?, 我们平时在服务器端做个反向代理做负载均衡, 还要进?步解决反向代理的负载均衡和?可?问题。

任务(Job)

Job是Kubernetes?来控制批处理型任务的API对象。 批处理业务与?期伺服业务的主要区别是批处理业务的运?有头
有尾, ??期伺服业务在?户不停?的情况下永远运?。 Job管理的Pod根据?户的设置把任务成功完成就?动退出
了。 成功完成的标志根据不同的spec.completions策略?不同: 单Pod型任务有?个Pod成功就标志完成; 定数成功型
任务保证有N个任务全部成功; ?作队列型任务根据应?确认的全局成功?标志成功。

后台?撑服务集(DaemonSet)

长期伺服型和批处理型服务的核心在业务应用,可能有些节点运行多个同类服务的Pod,有些节点上又没有这类Pod运行,而后台支撑型服务的核心关注点在Kubernetes集群中的节点(物理机或虚拟机),要保证每个节点上都又一个此类Pod运行,节点可能是所有集群节点也可能是通过nodeSelector选定的一些特定节点,典型的后台支撑服务包括,存储,日志和监控等,在每个节点上支持kubernetes集群运行的服务。

有状态服务集(StatefulSet)

对于RC和RS中的Pod, ?般不挂载存储或者挂载共享存储, 保存的是所有Pod共享的状态, Pod像牲畜?样没有分别(这似乎也确实意味着失去了?性特征) ; 对于StatefulSet中的Pod, 每个Pod挂载??独?的存储, 如果?个Pod出现故障, 从其他节点启动?个同样名字的Pod, 要挂载上原来Pod的存储继续以它的状态提供服务。

适合于StatefulSet的业务包括数据库服务MySQL和PostgreSQL, 集群化管理服务ZooKeeper、 etcd等有状态服务。StatefulSet的另?种典型应?场景是作为?种?普通容器更稳定可靠的模拟虚拟机的机制。 传统的虚拟机正是?种有状态的宠物, 运维?员需要不断地维护它, 容器刚开始流?时, 我们?容器来模拟虚拟机使?, 所有状态都保存在容器?, ?这已被证明是?常不安全、 不可靠的。 使?StatefulSet, Pod仍然可以通过漂移到不同节点提供?可?, ?存储也可以通过外挂的存储来提供?可靠性, StatefulSet做的只是将确定的Pod与确定的存储关联起来保证状态的连续性。

存储卷(Volume)

Kubernetes集群中的存储卷跟Docker的存储卷有些类似, 只不过Docker的存储卷作?范围为?个容器, ?Kubernetes的存储卷的?命周期和作?范围是?个Pod。 每个Pod中声明的存储卷由Pod中的所有容器共享。 Kubernetes?持?常多的存储卷类型, 特别的, ?持多种公有云平台的存储, 包括AWS, Google和Azure云; ?持多种分布式存储包括设计理念120GlusterFS和Ceph; 也?持较容易使?的主机本地?录emptyDir, hostPath和NFS。 Kubernetes还?持使?PersistentVolume Claim即PVC这种逻辑存储, 使?这种存储, 使得存储的使?者可以忽略后台的实际存储技术(例如AWS,Google或GlusterFS和Ceph) , ?将有关存储实际技术的配置交给存储管理员通过Persistent Volume来配置。

持久存储卷(Persistent Volume,PV)和持久存储生命(Persistent Volume Claim,PVC)

PV和PVC使得Kubernetes集群具备了存储的逻辑抽象能?, 使得在配置Pod的逻辑?可以忽略对实际后台存储技术的配置, ?把这项配置的?作交给PV的配置者, 即集群的管理者。 存储的PV和PVC的这种关系, 跟计算的Node和Pod的关系是?常类似的; PV和Node是资源的提供者, 根据集群的基础设施变化?变化, 由Kubernetes集群管理员配置; ?PVC和Pod是资源的使?者, 根据业务服务的需求变化?变化, 有Kubernetes集群的使?者即服务的管理员来配置。

节点(Node)

Kubernetes集群中的计算能?由Node提供, 最初Node称为服务节点Minion, 后来改名为Node。 Kubernetes集群中的Node也就等同于Mesos集群中的Slave节点, 是所有Pod运?所在的?作主机, 可以是物理机也可以是虚拟机。 不论是物理机还是虚拟机, ?作主机的统?特征是上?要运?kubelet管理节点上运?的容器。

密钥对象(Secret)

Secret是?来保存和传递密码、 密钥、 认证凭证这些敏感信息的对象。 使?Secret的好处是可以避免把敏感信息明?写在配置??。 在Kubernetes集群中配置和使?服务不可避免的要?到各种敏感信息实现登录、 认证等功能, 例如访问AWS存储的?户名密码。 为了避免将类似的敏感信息明?写在所有需要使?的配置?件中, 可以将这些信息存??个Secret对象, ?在配置?件中通过Secret对象引?这些敏感信息。 这种?式的好处包括: 意图明确, 避免重复, 减少暴漏机会。

用户账户(User Account)和服务账户(Service Account)

顾名思义, ?户帐户为?提供账户标识, ?服务账户为计算机进程和Kubernetes集群中运?的Pod提供账户标识。 ?户帐户和服务帐户的?个区别是作?范围; ?户帐户对应的是?的身份, ?的身份与服务的namespace?关, 所以?户账户是跨namespace的; ?服务帐户对应的是?个运?中程序的身份, 与特定namespace是相关的。

名称空间(Namespace)

名称空间为Kubernetes集群提供虚拟的隔离作用,Kubernetes集群初始化有两个名称空间,分别是default和kube-system,除此之外,管理员可以创建新的名称空间满足要求。

访问授权(RBAC)

Kubernetes在1.3版本中发布了alpha版的基于??的访问控制(Role-based Access Control, RBAC) 的授权模式。 相对于基于属性的访问控制(Attribute-based Access Control, ABAC) , RBAC主要是引?了??(Role) 和??绑定(RoleBinding) 的抽象概念。 在ABAC中, Kubernetes集群中的访问策略只能跟?户直接关联; ?在RBAC中, 访问策略可以跟某个??关联, 具体的?户在跟?个或多个??相关联。 显然, RBAC像其他新功能?样, 每次引?新功能,都会引?新的API对象, 从?引?新的概念抽象, ?这?新的概念抽象?定会使集群服务管理和使?更容易扩展和重?。

参考文档

Kubernetes指南-倪朋飞
Kubernetes-handbook-jimmysong-20181218

原文地址:https://www.cnblogs.com/wlbl/p/10652835.html

时间: 2024-11-08 04:01:35

Kubernetes之核?技术概念和API对象的相关文章

Kubernetes介绍及基本概念

kubernetes介绍 Kubernetes是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,Kubernetes也叫K8S.K8S是Google内部一个叫Borg的容器集群管理系统衍生出来的,Borg已经在Google大规模生产运行十年之久.K8S主要用于自动化部署.扩展和管理容器应用,提供了资源调度.部署管理.服务发现.扩容缩容.监控等一整套功能.2015年7月,Kubernetes v1.0正式发布,截止到2018年1月27日最新稳定版本是v1.9.2.Kube

RRTI的概念以及Class对象作用

深入理解Class对象 RRTI的概念以及Class对象作用 认识Class对象之前,先来了解一个概念,RTTI(Run-Time Type Identification)运行时类型识别,对于这个词一直是 C++ 中的概念,至于Java中出现RRTI的说法则是源于<Thinking in Java>一书,其作用是在运行时识别一个对象的类型和类的信息,这里分两种:传统的"RRTI",它假定我们在编译期已知道了所有类型(在没有反射机制创建和使用类对象时,一般都是编译期已确定其类

【Kubernetes】深入解析声明式API

在Kubernetes中,一个API对象在Etcd里的完整资源路径,是由:Group(API组).Version(API版本)和Resource(API资源类型)三个部分组成的. 通过这样的结构,整个Kubernetes里的所有API对象,可以用如下的树形结构表示出来 如果现在要声明一个CronJob对象,那么YAML的开始部分会这么写 apiVersion: batch/v2alpha1 kind: CronJob ... CronJob就是这个API对象的资源类型,Batch就是它们的组,v

java:Hibernate框架(环境搭建,Hibernate.cfg.xml中属性含义,Hibernate常用API对象,HibernteUitl,对象生命周期图,数据对象的三种状态)

1.环境搭建: 三个准备+7个步骤 准备1:新建项目并添加hibernate依赖的jar文件  准备2:在classpath下(src目录下)新建hibernate的配置文件:hibernate.cfg.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configurati

Kubernetes Ingress API 对象

Ingress 它是什么 如何暴露您Kubernetes集群内部 "应用服务" 并向外(互联网)提供访问服务!!! 通常情况下集群内部Service和Pod仅可在集群内部网络中通过IP地址访问.所有到达边界路由器的流量或被丢弃或被转发到其它地方.(Ingress 的存在即是完成以上之目的) 不直接使用Ingress资源,也可有多种方法暴露Service. 使用 Service.Type=LoadBalancer 使用 Service.Type=NodePort 有几个是废弃的 未定义I

二、框架学习 (一)Hibernate框架学习 (2)Hibernate概念和api使用

目录 1 实体类编写规则 2 hibernate主键生成策略 3 实体类操作 (1)crud操作 (2)实体类对象状态 4 hibernate的一级缓存 5 hibernate的事务操作 (1)事务代码规则写法 6 hibernate其他的api(查询) 正文 实体类编写规则 1 实体类里面属性是私有的 2 私有属性使用公开的set和get方法操作. 3 要求实体类有属性作为唯一值(一般使用id值) 4 实体类属性建议不使用基本数据类型,使用基本数据类型对应的包装类 (1)八个基本数据类型对应的

kubernetes二进制搭建之概念

概念 Kubernetes 以下文字及图形摘字https://www.kubernetes.org.cn/kubernetes%E8%AE%BE%E8%AE%A1%E6%9E%B6%E6%9E%84 架构图 Kubernetes节点 在这张系统架构图中,我们把服务分为运行在工作节点上的服务和组成集群级别控制板的服务. Kubernetes节点有运行应用容器必备的服务,而这些都是受Master的控制. 每次个节点上当然都要运行Docker.Docker来负责所有具体的映像下载和容器运行. Kube

容器技术概念入门篇 (5讲)

05 | 白话容器基础(一):从进程说开去 Linux Cgroups 就是 Linux 内核中用来为进程设置资源限制的一个重要功能. 一个正在运行的 Docker 容器,其实就是一个启用了多个 Linux Namespace 的应用进程,而这个进程能够使用的资源量,则受 Cgroups 配置的限制.这也是容器技术中一个非常重要的概念,即:容器是一个“单进程”模型. 讲解了 Linux 容器最基础的两种技术:Namespace 和 Cgroups.希望此时,你已经彻底理解了“容器的本质是一种特殊

Java学习笔记(Javase毕向东版视频)七 常用API对象三

一.泛型:简单说就是对对象类型进行限定的技术 public class GenericDemo { public static void main(String[] args){ /*泛型作为1.5版之后的新技术,分两步使用 * 1.在类名之后用<类型参数>,这里就像函数中的普通参数一样命名即可 * 2.在生成对象和返回该对象参数时需要明确具体的类型,相当于传入实参 * 上面说的是泛型类,除此之外,泛型还可以用于类中方法和接口 */ GenericTest<Person> gt=n