Kubernetes中的所有操作都称为“资源对象”,由APIServer基于HTTP/HTTPS接收,响应客户端的操作请求。它是一个Restful风格的接口,将各种组件和操作内容抽象成标准的REST资源,如Namespace、Pod等,其中操作内容是对JSON或yml格式的数据进行操作。本文介绍了Kubernetes中最重要的部分——资源列表。如果我们要在Kubernetes中部署Pod、Service等资源对象,就需要通过资源列表来部署,无论是通过命令kubectl还是可视化控制平台,都离不开资源列表的定义。本文重点介绍如何定义、创建和使用资源列表。1.资源分类根据资源的功能,对资源进行分类。Kubernetes资源对象可以分为:工作负载(Workload):Pod、ReplicaSet、Deployment、StatefulSet、DaemonSet、Job、CronJob。发现和负载均衡(Discovery&LB):Service、Ingress。配置与存储(Config&Storage):Volume(存储卷)、CSI(容器存储接口,可以扩展各种第三方存储卷)。集群(Cluster):Namespace、Node、Role、ClusterRole、RoleBinding(角色绑定)、ClusterRoleBinding(集群角色绑定)。元数据:HPA、PodTemplate(Pod模板,用于让controller为Pod创建模板)、LimitRange(用于定义硬件资源限制)。一个应用通常需要多种资源的支持,例如使用Deployment资源管理应用实例(Pod),使用ConfigMap资源保存应用配置,使用Service或Ingress资源暴露服务,使用提供外部存储的卷资源等。2.资源列表资源列表相当于一个脚本,可以告诉我们每一步应该怎么做。Kubernetes收到这样的脚本后,就可以根据脚本执行,达到我们的预期。在Kubernetes中,一般通过定义一个资源列表来创建资源。一般使用yaml格式的文件来创建符合我们预期的资源。这样的yaml文件称为资源列表。(也可以定义为json格式)例如创建Pod资源:apiVersion:v1kind:Podmetadata:name:vue-frontendnamespace:testlabels:app:vue-frontendspec:containers:-name:vue-frontendimage:xcbeyond/vue-frontend:latestports:-name:portcontainerPort:80hostPort:8080下面以Pod资源定义为例展开资源列表的详细说明。2.1资源列表定义yaml格式的Pod资源列表定义文件的完整内容如下:apiVersion:v1kind:Pod#Resourcecategorymetadata:#Resourcemetadataname:stringnamespace:stringlabels:-name:stringannotations:-name:stringspec:#资源期望状态容器:#containerlist-name:string#容器名称,以下属性属于容器image的定义或约束:stringimagePullPolicy:[Always|Never|IfNotPresent]command:[string]args:[string]workingDir:stringvolumeMounts:-name:stringmountPath:stringreadOnly:booleanports:-name:stringcontainerPort:inthostPort:intprotocol:stringenv:-name:stringvalue:stringresources:limits:cpu:stringmemory:stringrequests:cpu:stringmemory:stringlivensProbe:exec:command:[string]httpGet:path:stringport:numberhost:stringscheme:stringhttpHeaders:-name:stringvalue:stringtcpSocket:port:numberinitialDelaySeconds:0timeoutSeconds:0periodSeconds:0successThreshold:0failureThreshold:0...详情各属性的led说明如下表:(必填属性,必须存在,否则创建失败。)上述列举的是常用的属性,如果想查看全部属性,可以使用命令kubectlexplainpod:[xcbeyond@bogon~]$kubectlexplainpodKIND:PodVERSION:v1DESCRIPTION:Podisacollectionofcontainersthatcanrunonahost.Thisresourceiscreatedbyclientsandscheduledontohosts.FIELDS:apiVersionAPIVersiondefinestheversionedschemaofthisrepresentationofanobject.Serversshouldconvertrecognizedschemastothelatestinternalvalue,andmayrejectunrecognizedvalues.更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resourceskindKindisastringvaluerepresentingtheRESTresourcethisobjectrepresents.Serversmayinferthisfromtheendpointtheclientsubmitsrequeststo.Cannotbeupdated.InCamelCase.Moreinfo:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kindsmetadata