简介

官方文档:https://www.kubernetes.org.cn/docs
Kubernetes简称K8s。
K8s的前身是谷歌内部集群管理系统Borg。

架构

在这里插入图片描述

名词解释

参考文档:https://www.kubernetes.org.cn/kubernetes%e8%ae%be%e8%ae%a1%e7%90%86%e5%bf%b5

API对象
  • 比如,RS就是一个API对象。
  • API对象都有3大属性:元数据metadata、规范spec和状态status。
3大属性
  • 元数据metadata
    每个对象都至少有3个元数据:namespace,name和uid。
    还有各种各样的标签labels用来标识和匹配不同的对象,如环境变量env=dev、env=testing、env=production
  • 规范spec
    规范描述了用户期望的理想状态(Desired State),例如用户希望的副本数是3。
  • 状态status
    status描述了系统当前实际的状态,比如当前的副本数是2,小于理想状态的3。系统会争取达到理想状态。
Pod
  • Pod是一个或一个以上的容器组成的,就像一个主机包含有多个进程一样
  • 在Kubernetes中,Pod是最小的可被调度的原子单位,一个Pod里的所有container都只会被分配到同一台主机上运行
  • 在Pod里面的容器共享网络/存储
  • Pod拥有唯一Pod IP
  • 组成:Pause根容器、其他业务容器
RC副本控制器
  • Replication Controller副本控制器
  • 作用:自动控制副本数量
  • 副本就是Pod,之所以叫副本,是因为他们都是相同的,从同一个镜像中启动。
RS副本集
  • Replica Set,副本集
  • 下一代RC,能支持更多种类的匹配模式。
  • 副本集对象一般不单独使用,而是作为Deployment的理想状态参数使用。
Deployment部署
  • 内部使用RS,是RC的升级
  • 部署是用户对集群的一次更新操作。比如创建一个新服务,滚动升级一个服务。
Service服务
  • 拥有Endpoint访问点(ip+port),后端为Pod集群。
  • K8s中微服务的负载均衡是由Kube-proxy实现的。
Job任务
  • Job是K8s用来控制批处理型任务的API对象。
  • 比如:扩容某服务至指定数量
Namespace名字空间
  • namespace提供虚拟的隔离作用。
  • K8s初始有两个namespace,分别是默认名字空间default和系统名字空间kube-system。
  • 管理员还可以自己创建namespace。
Node节点
  • 相当于Slave节点。
  • k8s的计算能力由Node提供,是所有Pod运行所在的工作主机。
  • Node节点中都运行了Docker和kubelet
集群联邦(Federation)
  • 服务的作用距离范围从近到远一般可以有:同主机(Host,Node)、跨主机同可用区(Available Zone)、跨可用区同地区(Region)、跨地区同服务商(Cloud Service Provider)、跨云平台。
  • Federation就是为提供跨Region跨服务商K8s集群服务而设计的。
Volume存储卷
  • Volume存储卷跟Docker的存储卷有些类似,只不过Docker的存储卷作用范围为一个容器,而K8s的存储卷的生命周期和作用范围是一个Pod。
  • K8s支持非常多的存储卷类型,特别的,支持多种公有云平台的存储,如AWS,Google和Azure云。还支持多种分布式存储包括GlusterFS和Ceph。
  • 也支持较容易使用的主机本地目录hostPath和NFS。
  • K8s还支持使用PVC(Persistent Volume Claim)这种逻辑存储.使用这种存储,使得存储的使用者可以忽略后台的实际存储技术(例如AWS,Google或GlusterFS和Ceph),而将有关存储实际技术的配置交给存储管理员通过PV(Persistent Volume)来配置。
PV(持久存储卷)和PVC(持久存储卷声明)(Persistent Volume Claim,)
  • PV(Persistent Volume)
  • PVC(Persistent Volume Claim)
  • PV和PVC使得K8s集群具备了存储的逻辑抽象能力,使得在配置Pod的逻辑里可以忽略实际后台存储技术,而把这项配置的工作交给PV的配置者,即集群的管理者。
  • 跟Node和Pod的关系类似:PV是资源的提供者,根据集群的基础设施变化而变化,由K8s集群管理员配置;而PVC是资源的使用者,根据业务服务的需求变化而变化,有K8s集群的使用者即服务的管理员来配置。
密钥对象(Secret)
  • 背景:在K8s集群中配置和使用服务不可避免的要用到各种敏感信息实现登录、认证等功能,例如访问AWS存储的用户名密码。
  • Secret的作用:用来保存和传递密码、密钥、认证凭证这些敏感信息的对象。
  • 好处:使用Secret的好处是可以避免把敏感信息明文写在配置文件里。
用户帐户(User Account)和服务帐户(Service Account)
  • 用户帐户为人提供账户标识、服务账户为计算机进程和Pod提供账户标识。
  • 用户帐户是跨namespace的。用户帐户对应的是人的身份,人的身份与服务的namespace无关,所以用户账户是跨namespace的。
  • 服务账户与namespace相关。服务帐户对应的是一个运行中程序的身份,所以与特定namespace是相关的。
DaemonSet(后台支撑服务集)
  • 背景:可能有些Node运行多个同类业务的Pod,有些Node上又没有这类Pod运行。
  • 概念:DaemonSet是长期伺服型和批处理型服务的核心在业务应用。DaemonSet要保证每个Node上都有一个此类Pod运行。如存储、日志、监控等在每个Node都必须运行的服务。
RBAC访问授权
  • 基于角色的访问控制(Role-based Access Control,RBAC)的授权模式。
  • 相对于基于属性的访问控制(Attribute-based Access Control,ABAC),RBAC主要是引入了角色(Role)和角色绑定(RoleBinding)的抽象概念。
  • 好处:在ABAC中,K8s集群中的访问策略只能跟用户直接关联;而在RBAC中,访问策略可以跟某个角色关联,具体的用户在跟一个或多个角色相关联。
  • 作用:每次引入新功能,都会引入新的API对象,从而引入新的概念抽象,而这一新的概念抽象一定会使集群服务管理和使用更容易扩展和重用。
有状态服务集(PetSet)
  • PetSet还只在Alpha阶段,后面的设计如何演变,我们还要继续观察。
  • 在云原生应用的体系里,有下面两组近义词;第一组是无状态(stateless)、牲畜(cattle)、无名(nameless)、可丢弃(disposable);第二组是有状态(stateful)、宠物(pet)、有名(having name)、不可丢弃(non-disposable)。
  • RC和RS主要是控制提供无状态服务的,一般不挂载存储或者挂载共享存储,其所控制的Pod的名字也是随机设置的,一个Pod出故障了就被丢弃掉,在另一个地方重启一个新的Pod,名字变了、名字和启动在哪儿都不重要,重要的只是Pod总数;
  • 而PetSet是用来控制有状态服务,PetSet中的Pod,每个Pod挂载自己独立的存储。如果一个Pod出现故障,从其他节点启动一个同样名字的Pod,要挂载上原来Pod的存储继续以它的状态提供服务。PetSet中的每个Pod的名字都是事先确定的,不能更改。
  • 适用场景:数据库服务MySQL和PostgreSQL,集群化管理服务Zookeeper、etcd等有状态服务。

注意点

K8s推荐使用etcd_v3。因为etcd_v3存储在磁盘中,而v2存储在内存中。k8s v1.11+已经弃用etcd_v2

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐