一、API 对象

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

每个API对象都有3大类属性:元数据metadata、规范spec和状态status。

1.1、元数据metadata

元数据是用来标识API对象的,每个对象都至少有3个元数据:

  • namespace
  • name
  • uid

除此以外还有各种各样的标签labels用来标识和匹配不同的对象,

例如用户可以用标签env来标识区分不同的服务部署环境,分别用env=dev、env=testing、env=production来标识开发、测试、生产的不同服务。

1.2、规范spec

规范spec描述了用户期望K8s集群中的分布式系统达到的理想状态(Desired State),

例如用户可以通过复制控制器Replication Controller设置期望的Pod副本数为3;

K8s中所有的配置都是通过API对象的spec去设置的,也就是用户通过配置系统的理想状态来改变系统,这是k8s重要设计理念之一,即所有的操作都是声明式(Declarative)的而不是命令式(Imperative)的。

声明式操作在分布式系统中的好处是稳定,不怕丢操作或运行多次,

例如设置副本数为3的操作运行多次也还是一个结果,而给副本数加1的操作就不是声明式的,运行多次结果就错了。

1.3、status

status描述了系统实际当前达到的状态(Status),

例如:系统当前实际的Pod副本数为2;那么复制控制器当前的程序逻辑就是自动启动新的Pod,争取达到副本数为3。

二、控制器对象

1、复制控制器(Replication Controller,RC)

RC是K8s集群中最早的保证Pod高可用的API对象。通过监控运行中的Pod来保证集群中运行指定数目的Pod副本。
指定的数目可以是多个也可以是1个;

  • 少于指定数目,RC就会启动运行新的Pod副本;
  • 多于指定数目,RC就会杀死多余的Pod副本。

即使在指定数目为1的情况下,通过RC运行Pod也比直接运行Pod更明智,因为RC也可以发挥它高可用的能力,保证永远有1个Pod在运行。

RC是K8s较早期的技术概念,只适用于长期伺服型的业务类型,比如控制小机器人提供高可用的Web服务。

2、副本集(Replica Set,RS)

RS是新一代RC,提供同样的高可用能力,

区别主要在于RS后来居上,能支持更多种类的匹配模式。

副本集对象一般不单独使用,而是作为Deployment的理想状态参数使用。

3、部署(Deployment)

部署表示用户对K8s集群的一次更新操作。

部署是一个比RS应用模式更广的API对象,可以是创建一个新的服务,更新一个新的服务,也可以是滚动升级一个服务。

滚动升级一个服务,实际是创建一个新的RS,然后逐渐将新RS中副本数增加到理想状态,将旧RS中的副本数减小到0的复合操作;这样一个复合操作用一个RS是不太好描述的,

所以用一个更通用的Deployment来描述。以K8s的发展方向,未来对所有长期伺服型的的业务的管理,都会通过Deployment来管理。

三、service 对象

RC、RS和Deployment只是保证了支撑服务的微服务Pod的数量,但是没有解决如何访问这些服务的问题。

一个Pod只是一个运行服务的实例,随时可能在一个节点上停止,在另一个节点以一个新的IP启动一个新的Pod,因此不能以确定的IP和端口号提供服务。

服务发现是针对客户端访问的服务,找到对应的的后端服务实例,才能稳定地提供服务需要服务发现和负载均衡能力。

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

在K8s集群中微服务的负载均衡是由Kube-proxy实现的。Kube-proxy是K8s集群内部的负载均衡器。

kube-prox是一个分布式代理服务器,在K8s的每个节点上都有一个;这一设计体现了它的伸缩性优势,需要访问服务的节点越多,提供负载均衡能力的Kube-proxy就越多,高可用节点也随之增多。

与之相比,我们平时在服务器端做个反向代理做负载均衡,还要进一步解决反向代理的负载均衡和高可用问题。

四、任务

Job是K8s用来控制批处理型任务的API对象。
批处理业务与长期伺服业务的主要区别是批处理业务的运行有头有尾,而长期伺服业务在用户不停止的情况下永远运行。
Job管理的Pod根据用户的设置把任务成功完成就自动退出了,成功完成的标志根据不同的spec.completions策略而不同:

  • 单Pod型任务有一个Pod成功就标志完成;
  • 定数成功型任务保证有N个任务全部成功;
  • 工作队列型任务根据应用确认的全局成功而标志成功。
  • 后台支撑服务集(DaemonSet)

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

五、有状态服务集(PetSet)

K8s在1.3版本里发布了Alpha版的PetSet功能。

在云原生应用的体系里,有下面两组近义词;
第一组是无状态(stateless)、牲畜(cattle)、无名(nameless)、可丢弃(disposable);
第二组是有状态(stateful)、宠物(pet)、有名(having name)、不可丢弃(non-disposable)。

RC和RS主要是控制提供无状态服务的,其所控制的Pod的名字是随机设置的,一个Pod出故障了就被丢弃掉,在另一个地方重启一个新的Pod,名字变了、名字和启动在哪儿都不重要,重要的只是Pod总数;

而PetSet是用来控制有状态服务,PetSet中的每个Pod的名字都是事先确定的,不能更改。PetSet中Pod的名字的作用,关联与该Pod对应的状态。

对于RC和RS中的Pod,一般不挂载存储或者挂载共享存储,保存的是所有Pod共享的状态,Pod像牲畜一样没有分别(这似乎也确实意味着失去了人性特征);

对于PetSet中的Pod,每个Pod挂载自己独立的存储,如果一个Pod出现故障,从其他节点启动一个同样名字的Pod,要挂载上原来Pod的存储继续以它的状态提供服务。

适合于PetSet的业务包括数据库服务MySQL和PostgreSQL,集群化管理服务Zookeeper、etcd等有状态服务。

PetSet的另一种典型应用场景是作为一种比普通容器更稳定可靠的模拟虚拟机的机制。

传统的虚拟机正是一种有状态的宠物,运维人员需要不断地维护它,容器刚开始流行时,我们用容器来模拟虚拟机使用,所有状态都保存在容器里,而这已被证明是非常不安全、不可靠的。

使用PetSet,Pod仍然可以通过漂移到不同节点提供高可用,而存储也可以通过外挂的存储来提供高可靠性,PetSet做的只是将确定的Pod与确定的存储关联起来保证状态的连续性。

PetSet还只在Alpha阶段,后面的设计如何演变,我们还要继续观察。

六、名字空间(Namespace)

名字空间为K8s集群提供虚拟的隔离作用,K8s集群初始有两个名字空间,分别是默认名字空间default和系统名字空间kube-system,除此以外,管理员可以可以创建新的名字空间满足需要。

七、RBAC访问授权

K8s在1.3版本中发布了alpha版的基于角色的访问控制(Role-based Access Control,RBAC)的授权模式。

相对于基于属性的访问控制(Attribute-based Access Control,ABAC),RBAC主要是引入了角色(Role)和角色绑定(RoleBinding)的抽象概念。

在ABAC中,K8s集群中的访问策略只能跟用户直接关联;而在RBAC中,访问策略可以跟某个角色关联,具体的用户在跟一个或多个角色相关联。

显然,RBAC像其他新功能一样,每次引入新功能,都会引入新的API对象,从而引入新的概念抽象,而这一新的概念抽象一定会使集群服务管理和使用更容易扩展和重用。

八、集群联邦(Federation)

K8s在1.3版本里发布了beta版的Federation功能。在云计算环境中,服务的作用距离范围从近到远一般可以有:同主机(Host,Node)、跨主机同可用区(AvailableZone)、跨可用区同地区(Region)、跨地区同服务商(Cloud Service Provider)、跨云平台。
K8s的设计定位是单一集群在同一个地域内,因为同一个地区的网络性能才能满足K8s的调度和计算存储连接要求。
而联合集群服务就是为提供跨Region跨服务商K8s集群服务而设计的。
每个K8s Federation有自己的分布式存储、API Server和Controller Manager。
用户可以通过Federation的API Server注册该Federation的成员K8s Cluster。
当用户通过Federation的API Server创建、更改API对象时,Federation API Server会在自己所有注册的子K8s Cluster都创建一份对应的API对象。
在提供业务请求服务时,K8sFederation会先在自己的各个子Cluster之间做负载均衡,而对于发送到某个具体K8sCluster的业务请求,会依照这个K8s Cluster独立提供服务时一样的调度模式去做K8s
Cluster内部的负载均衡。而Cluster之间的负载均衡是通过域名服务的负载均衡来实现的。
所有的设计都尽量不影响K8s Cluster现有的工作机制,这样对于每个子K8s集群来说,并不需要更外层的有一个K8s Federation,也就是意味着所有现有的K8s代码和机制不需要因为Federation功能有任何变化。

九、存储卷(Volume)

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

十、持久存储卷(Persistent Volume,PV)和持久存储卷声明(Persistent Volume Claim,PVC)

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

十一、节点(Node)

K8s集群中的计算能力由Node提供,最初Node称为服务节点Minion,后来改名为Node。

K8s集群中的Node也就等同于Mesos集群中的Slave节点,是所有Pod运行所在的工作主机,可以是物理机也可以是虚拟机。不论是物理机还是虚拟机,工作主机的统一特征是上面要运行kubelet管理节点上运行的容器。

十二、密钥对象(Secret)

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

十三、用户帐户(User Account)和服务帐户(Service Account)

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

kubernetes入门(06)kubernetes的核心概念(3)相关推荐

  1. Kubernetes入门--搭建Kubernetes集群,并启动容器服务

    英文原作者:Ben Cane  翻译作者:Miazzy 翻译&转载:https://blog.codeship.com/getting-started-with-kubernetes/ Kub ...

  2. 二.Kafka入门到精通-Kafka核心概念

    前言 上一篇我们认识了一下Kafka以及完成了一个快速入门程序.这篇文章我们将学习Kafka的整体架构,工作流程,以及一些核心概念,正所谓知其然知其所以然. Kafka的架构 我们知道,消息队列的工作 ...

  3. Kubernetes 入门(1)基本概念

    1. Kubernetes简介 作为一个目前在生产环境已经广泛使用的开源项目 Kubernetes 被定义成一个用于自动化部署.扩容和管理容器应用的开源系统:它将一个分布式软件的一组容器打包成一个个更 ...

  4. kubernetes入门(04)kubernetes的核心概念(1)

    一.ReplicationController/ReplicaSet 在Kubernetes集群中,ReplicationController能够确保在任意时刻,指定数量的Pod副本正在运行.如果Po ...

  5. Kubernetes 核心概念介绍

    云计算.容器化以及容器编排是 DevOps 中最重要的发展趋势,无论你是数据科学家.软件开发者还是产品经理,了解 Docker 和 Kubernetes 的基本概念总是有好处的,二者可以帮助你与他人协 ...

  6. [k8s] 第一章 十分钟带你理解Kubernetes核心概念

    本章节主要介绍应用程序在服务器上部署方式演变以及kubernetes的概念.组件和工作原理. 应用部署方式演变 在部署应用程序的方式上,主要经历了三个时代: 传统部署:互联网早期,会直接将应用程序部署 ...

  7. Kubernetes 核心概念

    本节课程要点 什么是 Kubernetes :介绍 Kubernetes 的主要功能以及能力: Kubernetes 的架构:介绍 Kubernetes 的核心组件,以及介绍它们之间是如何相互互动连接 ...

  8. 从零开始入门 K8s | Kubernetes 网络概念及策略控制

    作者 | 阿里巴巴高级技术专家 叶磊 一.Kubernetes 基本网络模型 本文来介绍一下 Kubernetes 对网络模型的一些想法.大家知道 Kubernetes 对于网络具体实现方案,没有什么 ...

  9. Kubernetes 核心概念 1

    概述 Kubernetes 有各类资源对象来描述整个集群的运行状态.这些对象都需要通过调用 kubernetes api 来进行创建.修改.删除,可以通过 kubectl 命令工具,也可以直接调用 k ...

  10. 十分钟带你理解Kubernetes核心概念

    原文地址:http://www.dockone.io/article/932 十分钟带你理解Kubernetes核心概念 本文将会简单介绍Kubernetes的核心概念.因为这些定义可以在Kubern ...

最新文章

  1. 表单提交、页面注册案例
  2. 异常处理:Mybatis报错:There is no getter for property named ‘xxxx‘ in ‘class xxx‘
  3. 索引文件核心头文件定义
  4. Unity3d之AssetBundle打包与读取
  5. html静态页面引用其他页面,Shtml完美解决静态页面内部调用其他页面(非Iframe、Object、Js方法)...
  6. 对上一篇博客问题的回应
  7. like mybatis 用法_Mybaits中Like 的使用方式以及一些注意点
  8. 给你自己的博客加个 Markdown
  9. [POJ1830] 开关问题
  10. 故障排除:如何解决常见的 Mac 问题?
  11. 海思制作EXT4文件系统工具make_ext4fs
  12. Python 正则表达式的$美元符号
  13. kubelet nodelost
  14. PWM控制电机转速、PWM原理
  15. SAP那些事-职业篇-26-企业信息化:从拼图到搭积木
  16. Android控件隐藏方式
  17. MinGW-w64 C/C++编译器各版本说明
  18. 基于单片机的智能小区安防系统毕业设计
  19. 不重启容器的情况下添加或者删除端口
  20. 瑞芯微RK3399助力AI场景应用

热门文章

  1. DeepKey:科学家提出一种基于脑纹独特性的多模态生物识别系统可以防范身份欺骗...
  2. 三星专业级360度视频拍摄设备登场,能直接传输3D VR视频
  3. 删库跑路大神的一生:曾在家造炸弹被捕,现卖房押宝NFT,原是开源创业之星...
  4. 3秒获得Win11系统管理员权限,微软高危漏洞被公开,只因悬赏奖金打骨折
  5. 报名开启 | 李开复等AI大咖齐聚量子位MEET大会,邀你共探新形势下智能产业发展之路...
  6. 又是加拿大!连年拒签NeurIPS参会者被指太荒唐,Hinton亲自过问也没辙
  7. 五行代码玩转GPT-2,新加坡高中生开源轻量级GPT-2“客户端”
  8. 我平常整理了CString的一些用法,很实用,发给你共享,相信你以后遇到CString的问题都会迎刃而解:...
  9. WIN7如何替换开机登录画面
  10. 第八章 工厂方法模式