一、服务的状态
在kubernetes中,有状态服务和无状态服务是两种不同类型的应用程序部署方式,它们在容器编排和管理方面有一些关键区别。
1.有状态
1.1.有状态服务是指会对本地环境产生依赖,通常需要稳定的数据和标识。每个实例都有自己的唯一表示,如消息队列或者数据库,他们需要在启动、停止、故障转移时保留数据或状态。
1.2.有状态服务使用Kubernetes 提供 StatefulSet 来部署有状态服务。StatefulSet 具有管理有状态应用程序的能力,为每个 Pod 提供唯一的标识,以及稳定的网络标识,从而支持有状态服务的稳定性。
1.3.代表:MySQL、Redis
2.无状态
2.1.无状态服务是指不会对本地环境产生任何依赖,每个请求都能以相同的方式处理。也就是说无状态服务的任何一个实例都可以去处理用户的请求,请求之间没有任何关系。
2.2.无状态服务通常使用Kubernetes 中的 Deployment 进行部署。因为它们的实例可以随意启动和停止,而不会影响应用程序的状态或数据。
2.3代表:Nginx
总结:存数据或有持久化就是有状态,不存数据、没有持久化是无状态。
二、对象规约(Spec)与状态(Status)
创建 Kubernetes 对象时,必须提供对象的 spec
,用来描述该对象的期望状态, 以及关于对象的一些基本信息(例如名称)。
1.规约:
Spec规约描述对象的期望状态,必须在创建对象时设置其内容,描述你希望对象所具有的特征。
2.状态:
Status状态描述当前实际状态,由 Kubernetes 系统和组件设置并更新的。在任何时刻,Kubernetes 控制平面 都一直在积极地管理着对象的实际状态,以使之达成期望状态。
三、资源与对象
划分的意识:能够更清晰的知道,资源能否跨集群使用,能否跨空间使用,为了方便后续旭熙使用,如果进行跨空间使用。
1.集群级别资源
集群级别资源,作用于集群之上,集群下的所有资源都可以共享使用。
1.1Namespace:命名空间,命名空间本身属于集群下的资源。
1.2Node:k8s只是管理Node上的资源。
1.3ClusterRole:集群角色,用于对集群权限管理。
1.4ClusterRoleBinding:角色绑定集群资源,用于对集群资源的管理。
2.命令空间资源
命名空间级别资源,作用在命名空间之上,一般只能在命名空间范围内使用。
2.1Pod :最小的可部署单元,一个Pod(容器组)包含一个应用程序容器(或多个容器)、存储资源、唯一的网络ip地址、及一些确定容器该如何运行的选项。Pod容器组嗲表了Kubernetes中一个独立的应用程序运行实例,该实力可能由单个容器或者几个紧耦合在一起的容器组成。
控制器:
--于无状态服务:RC、RS、Deployment
Deployment:针对RS的更高层次的封装,提供了更丰富的部署相关功能。创建RS、滚动升级/回滚、平滑扩容缩容、暂停恢复Deplouyment
--有状态服务:StatefulSet
--守护进程:DaemonSet
--任务/定时任务:Job、CronJob
2.2Service:简称svc。Pod不能直接提供给外网访问,而是应该使用service。Service就是把Pod暴露出来提供服务。Service代理Pod集合,对外表现为一个访问入口,访问该入口的请求将经过负载均衡,转发到Pod中的容器。
2.3Ingress:将Kubernetes内部服务暴露给外网访问的服务。
2.4Volume: 数据卷,共享Pod中容器使用的数据。用来放持久化的数据,如数据库数据。
2.5CSI:规范定义拉存储提供商实现CSI兼容Volume Plugin的最小操作集合部署建议。
2.6ConfigMap:key-value的配置
2.7Secret: 解决密码、token、密钥等敏感数据的配置问题。
2.8DownwardAPI:Pod的信息共享到容器内部,容器可以读取到Pod的共享信息。
3.元数据资源
元数据级别资源,每一个资源都可以使用原空间的数据。
3.1 Horizontal Pod Autosealer(HPA):Pod根据CPU使用率自定义指标自动对Pod进行扩容缩容,控制管理器每个30s查询Metrics使用资源情况,可自定义,具体细节参照官网。
3.2PodTemplate:关于pod定义,pod的模版。
3.3LimitRange:对集群资源进行一个限制,批量设置一个范围,控制预留资源以及使用上限。对某个命名空间的Pod的资源使用限制。(设置限制会影响部分策略)