Kubernetes资源清单篇:如何创建资源?

2025-05-29 0 57

Kubernetes中所有操作的内容,我们都称为“资源对象”,是由API Server基于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(集群角色绑定)。
  • 元数据(Metadata):HPA、PodTemplate(Pod模板,用于让控制器创建Pod时使用的模板)、LimitRange(用来定义硬件资源限制的)。

一个应用通常需要多个资源的支撑,例如,使用Deployment资源管理应用实例(Pod)、使用ConfigMap资源保存应用配置、使用Service或Ingress资源暴露服务、使用Volume资源提供外部存储等。

2.资源清单

资源清单,等同于一个剧本,能够告诉我们每一步应该怎么去做,Kubernetes接收到这么一个剧本,就能够按照这个剧本去执行,以达到我们的预期。在Kubernetes中,一般都是通过定义资源清单的方式去创建资源。一般使用yaml格式的文件来创建符合我们预期期望的资源,这样的yaml文件我们称为资源清单。(也可以定义为json格式)如,创建一个Pod资源:

apiVersion:v1

kind:Pod

metadata:

name:vue-frontend

namespace:test

labels:

app:vue-frontend

spec:

containers:

name:vue-frontend

image:xcbeyond/vue-frontend:latest

ports:

name:port

containerPort:80

hostPort:8080

接下来,以Pod资源定义为例展开对资源清单的详细说明。

2.1 资源清单定义

yaml格式的Pod资源清单定义文件的完整内容如下:

apiVersion:v1

kind:Pod#资源类别

metadata:#资源元数据

name:string

namespace:string

labels:

name:string

annotations:

name:string

spec:#资源期望的状态

containers:#容器列表

name:string#容器名称,下面的属性均属于对该容器的定义或约束

image:string

imagePullPolicy:[Always|Never|IfNotPresent]

command:[string]

args:[string]

workingDir:string

volumeMounts:

name:string

mountPath:string

readOnly:boolean

ports:

name:string

containerPort:int

hostPort:int

protocol:string

env:

name:string

value:string

resources:

limits:

cpu:string

memory:string

requests:

cpu:string

memory:string

livenssProbe:

exec:

command:[string]

httpGet:

path:string

port:number

host:string

scheme:string

httpHeaders:

name:string

value:string

tcpSocket:

port:number

initialDelaySeconds:0

timeoutSeconds:0

periodSeconds:0

successThreshold:0

failureThreshold:0

……

对各属性的详细说明如下表所示:(必选属性,是必须存在的,否则创建失败。)

Kubernetes资源清单篇:如何创建资源?

Kubernetes资源清单篇:如何创建资源?

Kubernetes资源清单篇:如何创建资源?

Kubernetes资源清单篇:如何创建资源?

上述列举的是常用的属性,如果想查看全部属性,可以使用命令kubectl explain pod:

[xcbeyond@bogon~]$kubectlexplainpod

KIND:Pod

VERSION:v1

DESCRIPTION:

Podisacollectionofcontainersthatcanrunonahost.Thisresourceis

createdbyclientsandscheduledontohosts.

FIELDS:

apiVersion<string>

APIVersiondefinestheversionedschemaofthisrepresentationofan

object.Serversshouldconvertrecognizedschemastothelatestinternal

value,andmayrejectunrecognizedvalues.Moreinfo:

https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources

kind<string>

KindisastringvaluerepresentingtheRESTresourcethisobject

represents.Serversmayinferthisfromtheendpointtheclientsubmits

requeststo.Cannotbeupdated.InCamelCase.Moreinfo:

https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds

metadata<Object>

Standardobject'smetadata.Moreinfo:

https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata

spec<Object>

Specificationofthedesiredbehaviorofthepod.Moreinfo:

https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status

status<Object>

Mostrecentlyobservedstatusofthepod.Thisdatamaynotbeuptodate.

Populatedbythesystem.Readonly.Moreinfo:

https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status

查看属性说明,使用如下命令,如:查看pod.spec.containers

[xcbeyond@bogon~]$kubectlexplainpod.spec.containers

KIND:Pod

VERSION:v1

RESOURCE:containers<[]Object>

DESCRIPTION:

Listofcontainersbelongingtothepod.Containerscannotcurrentlybe

addedorremoved.TheremustbeatleastonecontainerinaPod.Cannotbe

updated.

Asingleapplicationcontainerthatyouwanttorunwithinapod.

FIELDS:

args<[]string>

Argumentstotheentrypoint.Thedockerimage'sCMDisusedifthisisnot

provided.Variablereferences$(VAR_NAME)areexpandedusingthe

container'senvironment.Ifavariablecannotberesolved,thereferencein

theinputstringwillbeunchanged.The$(VAR_NAME)syntaxcanbeescaped

withadouble$$,ie:$$(VAR_NAME).Escapedreferenceswillneverbe

expanded,regardlessofwhetherthevariableexistsornot.Cannotbe

updated.Moreinfo:

https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell

command<[]string>

Entrypointarray.Notexecutedwithinashell.Thedockerimage's

ENTRYPOINTisusedifthisisnotprovided.Variablereferences$(VAR_NAME)

areexpandedusingthecontainer'senvironment.Ifavariablecannotbe

resolved,thereferenceintheinputstringwillbeunchanged.The

$(VAR_NAME)syntaxcanbeescapedwithadouble$$,ie:$$(VAR_NAME).

Escapedreferenceswillneverbeexpanded,regardlessofwhetherthe

variableexistsornot.Cannotbeupdated.Moreinfo:

https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell

……

2.2 示例

在命名空间test中,定义一个名为frontend的Pod。

(1)定义命名空间

为了便于后期测试,特定义一个新的命名空间test。(如果命名空间test已存在,则无需再建)

命名空间test的资源清单文件test-namespace.yaml如下:

apiVersion:v1

kind:Namespace

metadata:

name:test

执行kubectl create命令创建该Namespace:

[xcbeyond@bogon~]$kubectlcreate-ftest-namespace.yaml

namespace/testcreated

(2)定义Pod

定义一个名为frontend的Pod,由一个容器组成,资源清单文件frontend-pod.yaml如下:

apiVersion:v1

kind:Pod

metadata:

name:frontend

namespace:test

labels:

app:frontend

spec:

containers:

name:frontend

image:xcbeyond/vue-frontend:latest

ports:

name:port

containerPort:80

hostPort:8080

执行kubectl create命令创建该Pod:

[xcbeyond@bogon~]$kubectlcreate-ffrontend-pod.yaml

pod/frontendcreated

通过命令kubectl get pods -n 查看,创建Pod的状态:

[xcbeyond@bogon~]$kubectlgetpods-ntest

NAMEREADYSTATUSRESTARTSAGE

frontend1/1Runing079s

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 Kubernetes资源清单篇:如何创建资源? https://www.kuaiidc.com/95235.html

相关文章

发表评论
暂无评论