Kubernetes——YAML文件编写

目录

一、创建Kubernetes对象YAML文件必备字段

1.apiVersion

2.kind

3.metadata

4.spec

二、YAML格式基本规范

1.结构表示

2.键值对

3.列表(数组)

4.字典(映射)

5.数据类型

6.注释

7.多文档支持

8.复杂结构

9.示例 

三、YAML文件编写

1.YAML文件的组成

2.生成YAML文件框架

2.1--dry-run命令

2.2通过explain获取YAML文件字段的含义

3.调整YAML文件内容

3.1Deployment

3.2Service

4.Deployment Workload部署

5.Kubectl命令行使用


一、创建Kubernetes对象YAML文件必备字段

在Kubernetes创建对象,我们通常是通过一个声明式的清单来创建。Kubernetes 对象是持久化的实体。是一种“意向表达”(Record of Intent)。一旦创建该对象, Kubernetes 系统将不断工作以确保该对象存在。

我们在Kubernetes中创建对象,本质上是在通知 Kubernetes 系统,我们想要的集群工作负载状态看起来应该是什么样子的, 也就是 Kubernetes 集群所谓的期望状态(Desired State)。

1.apiVersion

创建该对象所使用的 Kubernetes API 的版本,比如 apps/v1,networking.k8s.io/v1等。

2.kind

想要创建的对象的类别,比如 Deployment,DaemonSet等。

3.metadata

帮助唯一标识对象的一些数据,包括一个 name 字符串(必需字段)、UID(自动生成) 和可选的 namespace。

4.spec

我们所期望的该对象的状态,对每个 Kubernetes 对象而言,其 spec都不同

具体的可以参考官方文档:https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/

apiVersion: v1           # Kubernetes API 的版本,对于 Pod 来说,通常是 v1  
kind: Pod                # 要创建的对象的类别,这里是 Pod  
metadata:  name: my-pod           # 对象的名称,在命名空间中必须是唯一的  namespace: default     # 命名空间,如果省略,则默认为 default  # UID 是由 Kubernetes 系统自动生成的,不需要在清单文件中指定  
spec:  containers:            # Pod 规格中定义了容器的列表  - name: my-container   # 容器的名称  image: nginx:1.19.2  # 容器使用的镜像及其标签  # 其他容器配置,如端口、环境变量等...
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

二、YAML格式基本规范

YAML(YAML Ain't Markup Language)是一种用于数据序列化的格式,常用于配置文件、数据交换等场景。YAML的目标是易于阅读和书写,同时也易于与编程语言交互。YAML文件通常以.yaml.yml作为文件扩展名。

1.结构表示

  • 使用缩进表示层级关系,通常使用两个或四个空格的缩进,但必须在同一文档中保持一致。
  • 不使用制表符(Tab)进行缩进。

2.键值对

  • 使用冒号加空格: 来分隔键和值。
  • 键是唯一的,通常是字符串。

3.列表(数组)

  • 使用短横线加空格-  来表示列表项。
  • 列表项通常会缩进,表示属于上一级的列表。

4.字典(映射)

  • 字典是一组键值对的集合。
  • 字典的每个键值对都会缩进,表示属于上一级的字典。

5.数据类型

  • 支持字符串、布尔值、整数、浮点数、null、时间、日期等数据类型。
  • 字符串通常不需要引号,但如果包含特殊字符,则需要用单引号或双引号括起来。
  • 使用true/false表示布尔值。
  • 使用null表示空值。

6.注释

使用井号 # 开头表示注释,注释内容不会被解析。

7.多文档支持

使用三个短横线---来分隔文件中的多个文档。

8.复杂结构

字典和列表可以嵌套使用,形成复杂的结构。

9.示例 

# 这是一个注释
person:  # 字典的开始name: John Doe  # 字符串age: 30  # 整数married: true  # 布尔值children:  # 列表的开始- name: Jane Doeage: 10- name: Doe Juniorage: 5
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

三、YAML文件编写

YAML文件通常用于配置管理系统、部署工具、持续集成和持续部署(CI/CD)等场景,它们易于阅读和编辑。在Kubernetes中,YAML文件被广泛用于定义资源对象,如Deployments、Services、Pods等。

1.YAML文件的组成

YAML文件由apiVersionkindmetadataspecstatus五部分组成,前四部分较常用。

kubectl explain deployment
KIND:     Deployment
VERSION:  apps/v1DESCRIPTION:Deployment enables declarative updates for Pods and ReplicaSets.FIELDS:apiVersion  <string>APIVersion defines the versioned schema of this representation of anobject. Servers should convert recognized schemas to the latest internalvalue, and may reject unrecognized values. More info:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resourceskind  <string>Kind is a string value representing the REST resource this objectrepresents. Servers may infer this from the endpoint the client submitsrequests to. Cannot be updated. In CamelCase. More info:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kindsmetadata  <Object>Standard object's metadata. More info:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadataspec  <Object>Specification of the desired behavior of the Deployment.status  <Object>Most recently observed status of the Deployment.
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

2.生成YAML文件框架

2.1--dry-run命令

kubectl create deployment jumpoint-web --image=nginx:latest --port=80 --replicas=2 --namespace=jumpoint-ns --dry-run=client --output=yamlapiVersion: apps/v1
kind: Deployment
metadata:creationTimestamp: nulllabels:app: jumpoint-webname: jumpoint-webnamespace: jumpoint-ns
spec:replicas: 2selector:matchLabels:app: jumpoint-webstrategy: {}template:metadata:creationTimestamp: nulllabels:app: jumpoint-webspec:containers:- image: nginx:latestname: nginxports:- containerPort: 80resources: {}
status: {}
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

若要定义Pod等资源对象,生成YAML文件的方法类似。

2.2通过explain获取YAML文件字段的含义

#若要查看metadata.labels字段的含义kubectl explain deployment.metadata.labels
KIND:     Deployment
VERSION:  apps/v1FIELD:    labels <map[string]string>DESCRIPTION:Map of string keys and values that can be used to organize and categorize(scope and select) objects. May match selectors of replication controllersand services. More info: http://kubernetes.io/docs/user-guide/labels
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==
#若要查看spec.selector.matchLabels字段的含义(其它字段含义查询方式类似)kubectl explain deployment.spec.selector.matchLabels
KIND:     Deployment
VERSION:  apps/v1FIELD:    matchLabels <map[string]string>DESCRIPTION:matchLabels is a map of {key,value} pairs. A single {key,value} in thematchLabels map is equivalent to an element of matchExpressions, whose keyfield is "key", the operator is "In", and the values array contains only"value". The requirements are ANDed.
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==
#若要查看deployment.spec.template.spec.containers字段下还有哪些字段可用,有时可能要根据实际需求添加一些字段(上边生成的YAML文件略简单)kubectl explain deployment.spec.template.spec.containers
KIND:     Deployment
VERSION:  apps/v1RESOURCE: containers <[]Object>DESCRIPTION:List of containers belonging to the pod. Containers cannot currently beadded or removed. There must be at least one container in a Pod. Cannot beupdated.A single application container that you want to run within a pod.FIELDS:
...imagePullPolicy  <string>Image pull policy. One of Always, Never, IfNotPresent. Defaults to Alwaysif :latest tag is specified, or IfNotPresent otherwise. Cannot be updated.More info:https://kubernetes.io/docs/concepts/containers/images#updating-imagesPossible enum values:- `"Always"` means that kubelet always attempts to pull the latest image.Container will fail If the pull fails.- `"IfNotPresent"` means that kubelet pulls if the image isn't present ondisk. Container will fail if the image isn't present and the pull fails.- `"Never"` means that kubelet never pulls an image, but only uses a localimage. Container will fail if the image isn't present
...
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

3.调整YAML文件内容

精简不用的字段、修改字段的内容、添加镜像的拉取策略等,将其保存到nginx-deployment.yaml文件中。

3.1Deployment

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: jumpoint-web-deployment-labelname: jumpoint-webnamespace: jumpoint-ns
spec:replicas: 2selector:matchLabels:app: jumpoint-web-pod-labeltemplate:metadata:labels:app: jumpoint-web-pod-labelspec:containers:- image: nginx:latestname: jumpoint-web-container-nameimagePullPolicy: Alwaysports:- containerPort: 80protocol: TCPname: http
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==
#使用nginx-deployment.yaml文件创建Deployment资源对象。kubectl create namespace jumpoint-nskubectl apply -f nginx-deployment.yamlkubectl get deployments -n jumpoint-nskubectl get pods -n jumpoint-ns -o widekubectl describe deployment -n jumpoint-ns jumpoint-web
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

注意:YAML文件中spec.selector.matchLabels必须与spec.template.metadata.labels一致,若不一致,如spec.selector.matchLabels=jumpoint-web-pod-selector,spec.template.metadata.labels=jumpoint-web-pod-label,会遇到如下报错:

kubectl apply -f nginx-deployment.yaml
The Deployment "jumpoint-web" is invalid: spec.template.metadata.labels: Invalid value: map[string]string{"app":"jumpoint-web-pod-label"}: `selector` does not match template `labels`

上述报错的原因也比较好理解,在Kubernetes中,Deployment标签、Pod选择器,和Pod标签之间的关系是为了确保Deployment能够正确地管理其下属的Pod。以下是这三个标签作用的说明

  • Deployment标签(metadata.labels)

这些标签是附加在Deployment资源本身上的,用于识别和组织资源,但并不直接影响Deployment如何选择和管理Pod。通常,这些标签用于帮助用户通过标签选择器(如kubectl get deployments -l app=jumpoint-web-deployment-label)找到特定的Deployment。

  • Pod选择器 (spec.selector.matchLabels)

这个选择器定义了Deployment如何找到它应该管理的Pod。Deployment会监视并管理所有与这个选择器匹配的Pod。因此,该选择器需要与创建的Pod的标签相匹配,以便Deployment可以“认领”并管理这些Pod。

  • Pod标签 (spec.template.metadata.labels)

这些标签是在Pod模板中定义的,将被附加到由Deployment创建的每个Pod实例上。该标签必须与Deployment的Pod选择器匹配,其会告诉Deployment哪些Pod属于它。如果这些标签不匹配,Deployment将无法找到(也就是无法选择)它应该管理的Pod,导致它不会执行任何更新或回滚操作。

简而言之,spec.selector.matchLabels必须与spec.template.metadata.labels一致,因为这样设置后,Deployment才能正确地识别出它应该管理的Pod。而metadata.labels在Deployment上的标签主要是为了方便用户对Deployment进行分类和查询,并不直接参与Pod的选择过程。

3.2Service

cat nginx-service.yamlapiVersion: v1
kind: Service
metadata:labels:app: nginx-web-service-labelname: nginx-web-servicenamespace: jumpoint-ns
spec:type: NodePortports:- name: httpport: 80protocol: TCPtargetPort: 80nodePort: 30001selector:app: jumpoint-web-pod-label

Service的spec.selector,会匹配Pod的spec.template.metadata.labels,并将网络流量路由到匹配到的Pod上。

4.Deployment Workload部署

下面开始部署一个完整的Deployment工作负载(创建NameSpace---->部署Deployment---->创建Service)

cat nginx-deployment-v2.yamlapiVersion: v1
kind: Namespace
metadata:name: jumpoint-ns-v2labels:app: jumpoint-ns-v2-namespace-label---
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: jumpoint-web-deployment-labelname: jumpoint-webnamespace: jumpoint-ns-v2
spec:replicas: 2selector:matchLabels:app: jumpoint-web-pod-labeltemplate:metadata:labels:app: jumpoint-web-pod-labelspec:containers:- image: nginx:latestname: jumpoint-web-container-nameimagePullPolicy: Alwaysports:- containerPort: 80protocol: TCPname: http---
apiVersion: v1
kind: Service
metadata:labels:app: nginx-web-service-labelname: nginx-web-servicenamespace: jumpoint-ns-v2
spec:type: NodePortports:- name: httpport: 80protocol: TCPtargetPort: 80nodePort: 30004selector:app: jumpoint-web-pod-labelkubectl apply -f nginx-deployment-v2.yaml

5.Kubectl命令行使用

kubectl get deployment -n jumpoint-ns-v2kubectl get pods -n jumpoint-ns-v2 -o widekubectl get svc -n jumpoint-ns-v2kubectl get ep -n jumpoint-ns-v2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/20917.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vuex 的安装与配置

聚沙成塔每天进步一点点 本文内容 ⭐ 专栏简介Vuex 的安装与配置1. 安装 Vuex使用 npm 安装使用 yarn 安装 2. 配置 Vuex创建和配置 store将 store 注入到 Vue 实例中 3. 在组件中使用 Vuex访问 State提交 Mutation分发 Action使用 Getter 原理解析小结 ⭐ 写在最后 ⭐ 专栏简介…

Proxmox 虚拟环境下1Panel Linux 服务器运维管理面板的安装

简介 以前安装服务器管理面板用的都是宝塔&#xff0c;今天发现 1Panel Linux 服务器运维管理面板也很好&#xff0c;面板清晰整洁&#xff0c;使用的技术比较先进&#xff0c;所以我决定亲自安装一下看看效果就竟如何&#xff1f; 1Panel Linux 服务器运维管理面板是一个开源…

vulhub中Jenkins CLI 接口任意文件读取漏洞复现(CVE-2024-23897)

Jenkins是一个开源的自动化服务器。 Jenkins使用[args4j](https://github.com/kohsuke/args4j)来解析命令行输入&#xff0c;并支持通过HTTP、Websocket等协议远程传入命令行参数。args4j中用户可以通过字符来加载任意文件&#xff0c;这导致攻击者可以通过该特性来读取服务器…

目标检测——植物幼种数据集

引言 亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 …

推荐网站(19)anytools图片分辨率处理网站

今天&#xff0c;我要向您推荐一个非常实用的在线图片处理工具网站——AnyTools。这个网站提供了一站式的图片分辨率处理服务&#xff0c;并且具备添加各种过滤器的功能&#xff0c;非常适合需要快速调整图片大小和风格优化的场合。 多分辨率支持&#xff1a;用户可以自定义图片…

人工智能与【肿瘤免疫微环境】结合,探索免疫治疗的新方向|24年6月·顶刊速递·06-02

罗小罗同学说 24-06-02&#xff5c;文献速递 今天分享的文章&#xff0c;主题是——人工智能&肿瘤免疫微环境。解释一下这张图&#xff0c;左列是文献标题&#xff0c;右侧是发表的年月&#xff0c;放心&#xff0c;都是顶刊&#xff0c;不然我也不会选的。 PS&#xff1a…

力扣刷题--2085. 统计出现过一次的公共字符串【简单】

题目描述 给你两个字符串数组 words1 和 words2 &#xff0c;请你返回在两个字符串数组中 都恰好出现一次 的字符串的数目。 示例 1&#xff1a; 输入&#xff1a;words1 [“leetcode”,“is”,“amazing”,“as”,“is”], words2 [“amazing”,“leetcode”,“is”] 输出…

一键实现文件夹批量高效重命名:轻松运用随机一个字母命名,让文件管理焕然一新!

在数字化时代&#xff0c;文件夹管理是我们日常生活和工作中不可或缺的一部分。然而&#xff0c;随着文件数量的不断增加&#xff0c;文件夹命名的繁琐和重复成为了一个让人头疼的问题。你是否曾因为手动一个个重命名文件夹而感到枯燥乏味&#xff1f;你是否曾渴望有一种方法能…

开发一个comfyui的自定义节点-支持输入中文prompt

文章目录 目标功能开发环境实现过程翻译中文CLIP编码拓展仓库地址完整代码目标功能 目前comfyui的prompt提示词输入节点 CLIP Text Encode 只支持输入英文的prompt,而有时候我们需要自己制定一些prompt,所以就得将我们想要的提示词翻译为英文后再复制粘贴到该节点的输入框中…

RTA GMH系列 SERIE MOTION电机驱动板手侧 英文版

RTA GMH系列 SERIE MOTION电机驱动板手侧 英文版

【Python系列】Python的多返回值

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

C51学习归纳1 --- led点亮、led闪烁、led流水灯

第一节主要是针对LED的控制学习。这个过程中我们需要掌握的&#xff1a;1、控制的实现方法&#xff0c;控制实现的方法在后续的学习中是通用的。2、如何知道谁控制谁&#xff0c;通过查找开发板原理图获取&#xff0c;原理图的阅读的能力&#xff0c;在日后也是非常常用的。 一…

关于 c++ cout << endl; 的源码解释

这行语句非常常用。以前在王老师课上&#xff0c;老师提到过 endl 是一个函数模板。现给出这行语句的相关源码&#xff1a; 反汇编的依据如下&#xff1a; 接着是 谢谢

yolov8使用:数据格式转换(目标检测、图像分类)多目标跟踪

安装 yolov8地址&#xff1a;https://github.com/ultralytics/ultralytics git clone https://github.com/ultralytics/ultralytics.git安装环境&#xff1a; pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple目标检测 标注格式转换 若使用 labelimg…

【PPT】根据字体大小自动缩放文本框大小

【PPT】根据字体大小自动缩放文本框大小 一般我们新建文本框输入文字后&#xff0c;文本框的大小是不会自动缩放的&#xff0c;是根据你一开始拖动的尺寸固定的 你可以设置文本框的长度随着文字的变化而自动调整。这样&#xff0c;无论你输入多少文字&#xff0c;文本框都会自…

pqgrid的使用

npm安装pqgrid npm install pqgridf --registryhttps://registry.npmmirror.com npm install jquery-ui --registryhttps://registry.npmmirror.comvue文件 <template><div><div id"grid_json"></div></div> </template><s…

Nested KVM Hypervisor Support

Description Nested KVM是指基于虚拟化技术的虚拟机管理系统。 Nested KVM在Intel处理器上&#xff0c;KVM使用Intel的vmx&#xff08;virtualmachine eXtensions&#xff09;来提高虚拟机性能&#xff0c;即硬件辅助虚拟化技术。如果一台虚拟机能够和物理机一样支持vmx&…

[数据集][目标检测]数据集VOC格式岸边垂钓钓鱼fishing目标检测数据集-4330张

数据集格式&#xff1a;Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件&#xff0c;仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数)&#xff1a;4330 标注数量(xml文件个数)&#xff1a;4330 标注类别数&#xff1a;1 标注类别名称:["fishing"] 每…

论文阅读笔记(十二)——Augmenting large language models with chemistry tools

论文阅读笔记(十二)——Augmenting large language models with chemistry tools TOC Abstract 大型语言模型&#xff08;LLMs&#xff09;在跨领域任务中表现出色&#xff0c;但在化学相关问题上却表现不佳。这些模型也缺乏外部知识源的访问权限&#xff0c;限制了它们在科…

数据中台设计方案(原版word获取)

通过中台建设实现企业能力复用&#xff0c;包括能力整合、业务创新、业务和数据闭环、组织模式演进等。 数字能力整合 企业的数字能力一般包括数字化营销、数字化产品、数字化供应链、数字化生产、数字化运营等。企业的数字化能力的充分利用&#xff0c;从而达到可持续发展。数…