【k8s学习笔记】理解kubernetes对象
Kubernetes对象
在Kubernetes中,对象是持久化到etcd中的实体,使用这些对象的状态来表示集群的状态。
创建对象本质上是告知k8s系统期望工作负载是什么样子的,称为期望状态(Desired State)。
操作k8s对象本身就是通过Kubernetes API操作etcd中对象的状态。
对象规格与状态(Object Spec and Status)
绝大多数k8s的对象都包含两部分,分别为 期望状态(Spec)
与 实际状态(Status)
,Spec 是用户设置的期望状态;而Status由k8s系统提供,由k8s系统设置。
当Spec 与 Status 不一致时,控制平面会启动新的 Pod 以匹配期望状态。
以一个简单的 nginx-deployment
举例(暂不关心内容):
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2 kind: Deployment metadata: name: nginx-deployment spec: selector: matchLabels: app: nginx replicas: 2 # tells deployment to run 2 pods matching the template template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80
通过kubectl diff -f nginx-deployment
,我们可以看到spec与status处于平级关系:
kubectl diff
命令不是真的去应用配置文件,而是展示应用后会如何,后续有时间介绍kubectl的常用命令
用yaml描述Kubernetes对象
当需要创建k8s对象时,必须提供对象的期望状态,包含此对象的基本信息(如,名称等)。这些描述信息要被Kubernetes API接收,都需要转换成 JSON的请求体。一般而言,对于kubectl使用的是yaml格式的文件,kubectl 会将其转换为JSON发送到 Kubernetes API
还用刚才的文件nginx-deployment.yaml
进行举例,以展示Kubernetes Deployment的必要字段:
apiVersion: apps/v1 #创建此对象使用的Kubernetes API版本 kind: Deployment #对象类型 metadata: #唯一标识对象,常包含name、UID和可选的namespace name: nginx-deployment #对象名称唯一标识 spec: #期望状态 selector: #label选择器 matchLabels: app: nginx #匹配的标签 replicas: 2 #副本数,告知k8s集群要创建几个当前对象的pod template: #根据此模板创建Pod副本 metadata: labels: app: nginx #Pod副本的标签,可用于Service匹配 spec: containers: #Pod内容器定义部分 - name: nginx #容器名称 image: nginx:1.14.2 #docker镜像 ports: - containerPort: 80 #容器内占用的端口号
通过kubectl
创建Deployment类型对象到集群
kubectl apply -f nginx-deployment.yaml
每个描述k8s对象的yaml文件,都需要设置四个字段:
apiVersion
:创建此对象使用的Kubernetes API版本kind
:创建对象类型metadata
:对象唯一标识设置spec
:期望状态
更多关于配置spec,可以参考官方文档相关类型的部分
本文作者:东北小狐狸
本文链接:https://www.cnblogs.com/hellxz/p/13267478.html
版权声明:本作品采用自由转载-非商用-非衍生-保持署名 (CC BY-NC-ND 3.0)许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步