4、Kubernetes 集群 YAML 文件详解
目录
一、YAML 概述
二、YAML 基本语法
三、YAML 数据结构
四、k8s资源清单描述方法
五、YAML 快速编写
1、使用 kubectl create 命令
2、使用 kubectl get 命令导出 yaml 文件
一、YAML 概述
k8s 集群中对资源管理和资源对象编排部署都可以通过声明YAML文件来解决,也就是可以把需要对资源对象操作编辑到 YAML 格式文件中,我们把这种文件叫做资源清单文件,通过 kubectl 命令直接使用资源清单文件就可以实现对大量的资源对象进行编排部署了。
- YAML 文件 : 就是资源清单文件,用于资源编排。
二、YAML 基本语法
- 通过缩进表示层级关系;
- 使用空格做为缩进,缩进的空格数目不重要,只要相同层级的元素左侧对齐即可,一般缩进两个空格;
- 低版本缩进时不允许使用 Tab 键,只允许使用空格;
- 使用#代表注释,从这个字符一直到行尾,都会被解释器忽略;
- 使用 --- 表示新的 yaml 文件开始;
三、YAML 数据结构
- 对象:键值对的集合,又称为映射 (mapping) / 哈希(hashes) / 字典(dictionary)
# 对象类型:对象的一组键值对,使用冒号结构表示
name: Tom
age: 18# yaml 也允许另一种写法,将所有键值对写成一个行内对象
hash: {name: Tom, age: 18}
- 数组: 一组按次序排列的值,又称为序列(sequence) / 列表 (list)
# 数组类型:一组连词线开头的行,构成一个数组
People
- Tom
- Jack# 数组也可以采用行内表示法
People: [Tom, Jack]
- 纯量(scalars): 单个的、不可再分的值
number: 10.01flag: true# 字符串默认不使用引号表示
str: hello world# 如果字符串中间包含空格或者特殊字符,需要放到引号中
str1: 'hello: world'# 双引号不会对特殊字符进行转义
s1: '张\n三'
s2: "张\n三"# 单引号中还有单引号,需要连续用两个单引号进行转义
s3: 'hello''world'
四、k8s资源清单描述方法
在 k8s 中,一般使用 YAML 格式的文件来创建符合我们预期期望的pod,这样的YAML 文件称为资源清单。主要分为两大部分,一个是控制器的定义、另一个是被控制的对象。
资源清单中常用的属性名称:
参数名 | 字段类型 | 说明 | 是否必须 |
version | String | 这里指定是K8S API的版本,目前基本上是v1,可以通过kubectl api-versions命令查询 | 是 |
kind | String | yaml文件定义的资源类型和角色,比如:Pod、Deployment、ReplicaSet、Service | 是 |
metadata | Object | 元数据对象,固定值就写metadata | 是 |
metadata.name | String | 元数据对象的名字,由我们自定义,比如命名Pod的名字,Service的名字 | 是 |
metadata.namespace | String | 元数据对象的命名空间,由我们自定义。非必填,默认为default | 否 |
spec | Object | 详细定义对象,固定值就写spec | 是 |
spec.containers[] | list | spec对象的容器列表定义 | 是 |
spec.containers[].name | String | 容器名字 | 是 |
spec.containers[].image | String | 容器所使用的镜像 | 是 |
spec.containers[].imagePullPolicy | String | 定义镜像拉取策略,有Always、Never、IfNotPresent三个值。 Always:意思是每次都尝试重新拉取镜像。(默认值是Always) Never:表示仅使用本地镜像。 IfNotPresent:如果本地有镜像,就使用本地镜像,本地没有就拉取在线镜像。 | 否 |
spec.containers[].args[] | List | 指定容器启动命令参数,因为是数组可以指定多个 | 否 |
spec.containers[].command[] | list | 容器启动时执行的命令,因为是数组,可以指定多个。如果不指定,使用镜像打包时的启动命令 | |
spec.containers[].workingDir | String | 指定容器工作目录 | 否 |
spec.containers[].volumeMounts[] | List | 指定容器内部的存储卷配置 | 否 |
spec.containers[].volumeMounts[].name | String | 指定可以被容器挂载的存储卷的名称 | 否 |
spec.containers[].volumeMounts[].mountPath | String | 指定可以被容器挂载的存储卷的路径 | 否 |
spec.containers[].volumeMounts[].readOnly | String | 设置存储卷路径的读写模式,true或者false 默认为读写模式 | 否 |
spec.containers[].ports[] | List | 指定容器需要用到的端口列表 | 否 |
spec.containers[].ports[].name | String | 指定端口名 | 否 |
spec.containers[].ports[].containerPort | String | 指定容器需要监听的端口号 | 否 |
spec.containers[].ports[].hostPort | String | 指定容器所在主机需要监听的端口号,默认跟上面的containerPort相同,注意设置了hostPort,同一台主机无法启动该容器的相同副本(因为主机端口号不能相同,这样会冲突) | 否 |
spec.containers[].ports[].protocol | String | 指定端口协议,支持TCP和UDP。默认值为TCP | 否 |
spec.containers[].env[] | List | 容器运行前需要设置的环境变量列表 | 否 |
spec.containers[].env[].name | String | 环境变量的名称 | 否 |
spec.containers[].env[].value | String | 环境变量的值 | 否 |
spec.containers[].resources | Object | 指定资源限制和资源请求的值(这里开始就是设置容器的资源上限) | 否 |
spec.containers[].resources.limits | Object | 指定容器运行时资源的运行上限 | 否 |
spec.containers[].resources.limits.cpu | String | 指定CPU的限制,单位为core数,将用于docker run --cou-shares参数 | 否 |
spec.containers[].resources.limits.memory | String | 指定MEM内存的限制,单位为MiB、GiB | 否 |
spec.containers[].resources.requests | Object | 指定容器启动和调度时的限制设置 | 否 |
spec.containers[].resources.requests.cpu | String | CPU请求,单位为core数,容器启动时初始化可用数量 | 否 |
spec.containers[].resources.requests.memory | String | 内存请求,单位为MiB、GiB,容器启动时初始化可用数量 | 否 |
spec.restartPolicy | String | 定义Pod重启策略,可选值为Always、OnFailure、Never,默认值为Always。 Always:Pod一旦终止运行,则无论容器是如何终止的,kubelet服务都将重启Pod OnFailure:只有Pod以非零退出码终止时,kubelet才会重启该容器。如果容器正常结束(退出码为0),则kubelet将不会重启它。 Never:Pod终止后,kubelet将退出码报告给Master,不会重启该Pod | 否 |
spec.nodeSelector | Object | 定义Node的Label过滤标签,以key-value格式指定 | 否 |
spec.imagePullSecrets | Object | 定义PUll镜像时使用secret名称,以name:secretkey格式指定 | |
spec.hostNetwork | Bollean | 是否使用主机网络模式,默认值为false。设置为true表示使用宿主机网络,不适用docker网桥。同时设置了true将无法在同一台宿主机上启动第二个副本。 |
五、YAML 快速编写
一般来说,我们很少自己手写 YAML 文件,因为这里面涉及到了很多内容,我们一般都会借助工具来创建。
1、使用 kubectl create 命令
这种方式一般用于资源没有部署的时候,我们可以直接创建一个 YAML 配置文件。
# 尝试运行,并不会真正的创建镜像
[root@localhost ~]# kubectl create deployment web --image=nginx -o yaml --dry-run=client
apiVersion: apps/v1
kind: Deployment
metadata:creationTimestamp: nulllabels:app: webname: web
spec:replicas: 1selector:matchLabels:app: webstrategy: {}template:metadata:creationTimestamp: nulllabels:app: webspec:containers:- image: nginxname: nginxresources: {}
status: {}
--dry-run:尝试运行,并不会真正的创建镜像。
或者我们可以输出到一个文件中:
[root@localhost ~]# kubectl create deployment web --image=nginx -o yaml --dry-run=client > nginx.yaml[root@localhost ~]# cat nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:creationTimestamp: nulllabels:app: webname: web
spec:replicas: 1selector:matchLabels:app: webstrategy: {}template:metadata:creationTimestamp: nulllabels:app: webspec:containers:- image: nginxname: nginxresources: {}
status: {}
然后我们就在文件中直接修改即可。
2、使用 kubectl get 命令导出 yaml 文件
可以首先查看一个目前已经部署的镜像:
kubectl get deploy
然后我们导出 nginx 的配置,然后会生成一个 nginx.yaml 的配置文件。
# 本例使用的1.21.3版本
kubectl get deploy nginx -o=yaml > nginx.yaml# 如果是旧版本的k8s,需指定--export
kubectl get deploy nginx -o=yaml --export > nginx.yaml
示例如下:
[root@localhost ~]# kubectl create deployment nginx --image=nginx
deployment.apps/nginx created[root@localhost ~]# kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 1/1 1 1 8s[root@localhost ~]# kubectl get deploy nginx -o=yaml > nginx.yaml
[root@localhost ~]# cat nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:annotations:deployment.kubernetes.io/revision: "1"creationTimestamp: "2022-11-25T06:55:03Z"generation: 1labels:app: nginxname: nginxnamespace: defaultresourceVersion: "4408"uid: d6dc9709-72d1-4657-ace2-273cee3e0013
spec:progressDeadlineSeconds: 600replicas: 1revisionHistoryLimit: 10selector:matchLabels:app: nginxstrategy:rollingUpdate:maxSurge: 25%maxUnavailable: 25%type: RollingUpdatetemplate:metadata:creationTimestamp: nulllabels:app: nginxspec:containers:- image: nginximagePullPolicy: Alwaysname: nginxresources: {}terminationMessagePath: /dev/termination-logterminationMessagePolicy: FilednsPolicy: ClusterFirstrestartPolicy: AlwaysschedulerName: default-schedulersecurityContext: {}terminationGracePeriodSeconds: 30
status:availableReplicas: 1conditions:- lastTransitionTime: "2022-11-25T06:55:09Z"lastUpdateTime: "2022-11-25T06:55:09Z"message: Deployment has minimum availability.reason: MinimumReplicasAvailablestatus: "True"type: Available- lastTransitionTime: "2022-11-25T06:55:03Z"lastUpdateTime: "2022-11-25T06:55:09Z"message: ReplicaSet "nginx-6799fc88d8" has successfully progressed.reason: NewReplicaSetAvailablestatus: "True"type: ProgressingobservedGeneration: 1readyReplicas: 1replicas: 1updatedReplicas: 1
相关文章:
4、Kubernetes 集群 YAML 文件详解
目录 一、YAML 概述 二、YAML 基本语法 三、YAML 数据结构 四、k8s资源清单描述方法 五、YAML 快速编写 1、使用 kubectl create 命令 2、使用 kubectl get 命令导出 yaml 文件 一、YAML 概述 k8s 集群中对资源管理和资源对象编排部署都可以通过声明YAML文件来解决&…...
leetcode93. 复原 IP 地址(java)
复原 IP 地址 leetcode93. 复原 IP 地址回溯算法代码演示 回溯算法 leetcode93. 复原 IP 地址 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。 例如:“0.1.2…...
极光Java 版本服务器端实现别名消息推送
文章目录 引言I 概述1.1 依赖包1.2 极光证书环境参数1.3 构建推送对象II 推送内容2.1 配置推送内容2.2 获取通知消息内容2.3 配置IOS通知内容2.4 配置Android通知内容2.5 发起推送2.6 分批推送2.7 初始化密钥2.8 配置密钥引言 REST API 文档:https://docs.jiguang.cn/jpush/se…...

【Lua学习笔记】Lua进阶——Table(4)继承,封装,多态
文章目录 封装继承多态 封装 // 定义基类 Object {}//由于表的特性,该句就相当于定义基类变量 Object.id 1//该句相当于定义方法,Object可以视为定义的对象,Test可以视为方法名 //我们知道Object是一个表,但是抽象地看ÿ…...

Linux中常用的指令
ls ls [选项] [目录或文件] 功能:对于目录,列出该目录下所有的子目录和文件;对于文件,列出该文件的文件名和其他属性 常用选项: -a:列出目录下的所有文件,包括以.开头的隐藏文件 -l:列出文件的详细信息。…...

【java】【面对对象高级4】内部类、枚举、泛型
目录 1、内部类 1.1 成员内部类【了解】 1.1.1 定义 1.1.2 扩展变量 1.2 静态内部类【了解】 1.2.1 定义 1.2.2 扩展变量 1.3 局部内部类【了解】 1.4 匿名内部类【重点】 1.4.1 定义 1.4.1.1 常规写法 1.4.1.2 匿名内部类改造 1.4.2 匿名内部类的常见使用场景 1.4.2…...
Python的用处到底是什么?(三)
11. 数据库操作:Python的库,如sqlite3和SQLAlchemy,可以连接和操作各种类型的数据库。 Python提供了一些库和工具,如sqlite3和SQLAlchemy,用于连接和操作各种类型的数据库。以下是关于这两个库的详细解释:…...

【Nodejs】Express基本使用
Express 中文网 基于 Node.js 平台,快速、开放、极简的 web 开发框架。 1.Express的安装方式 Express的安装可直接使用npm包管理器上的项目,在安装npm之前可先安装淘宝镜像: npm install -g cnpm --registryhttps://registry.npmmirror.com/…...
k8s集群安装v1.20.9
参考网上资料并将异常问题解决,经测试可正常安装集群。 1.我的环境准备 本人使用vmware pro 17新建三个centos7虚拟机,每个2cpu,20GB磁盘存储,内存2GB,其中主节点的内存3GB,可使用外网. 2.所有节点安装D…...

Staples Drop Ship EDI 需求分析
Staples 是一家美国零售公司,总部位于马萨诸塞州弗拉明汉,主要提供支持工作和学习的产品和服务。该公司于 1986 年在马萨诸塞州布莱顿开设了第一家门店。到 1996 年,该公司已跻身《财富》世界 500 强,后来又收购了办公用品公司 Qu…...

模型调参及优化
调参 调权重参数,偏置参数 训练数据集用来训练参数w,b 调超参数 验证数据集用来选择超参数学习率lr,隐藏层大小等 如何调参 当泛化误差和训练误差都没有降下去说明欠拟合;当训练误差降下去,但泛化误差出现上升形式&…...
多数据源数据转换和同步的ETL工具推荐
有许多支持多数据源数据转换和同步的ETL工具可供选择。以下是一些常见的ETL工具和它们支持多数据源数据转换和同步的特点: Apache NiFi:Apache NiFi是一个开源的ETL工具,支持多种数据源的连接,包括文件系统、数据库、消息队列、网…...

配置 gitlab https 访问
文章目录 1. 备份2. 生成SSL证书3. 配置文件4. 重启5. 访问 1. 备份 docker exec -ti gitlab-ce gitlab-rake gitlab:backup:create2. 生成SSL证书 yum install openssl openssl-devel -y mkdir /data/gitlab/config/ssl ; cd /data/gitlab/config/ssl### 生成证书 openssl…...

Kepware Modbus驱动简介
1. Modbus驱动能够解决什么问题? 它是Modbus设备驱动的集合,为用户提供一种方便快捷的Modbus设备数采解决方案。 只需要通过简单的配置就可以将常见的例如Modbus TCP/IP Ethernet、RTU Serial 和 ASCII Serial等协议设备无缝连接到 HMI/SCADA、MES/His…...

从零开始学习CTF——CTF是什么
引言: 从2019年10月开始接触CTF,学习了sql注入、文件包含等web知识点,但都是只知道知识点却实用不上,后来在刷CTF题才发现知识点的使用方法,知道在哪里使用,哪里容易出漏洞,可是在挖src漏洞中还…...

为Android构建现代应用——主体结构
创建Screents和ViewModels 在前面的章节中,我们已经分析了OrderNow项目的理论概念和我们将赋予的组织。 在本章中,我们将开始实现初始结构和模板,这将联接每一个应用程序的部分。 首先将添加以下带有各自视图模型的主屏幕: •…...
【shell脚本】shell脚本之日志切割(进阶实战三)
恭喜你,找到宝藏博主了,这里会分享shell的学习整过程。 shell 对于运维来说是必备技能之一,它可以提高很多运维重复工作,提高效率。 shell的专栏,我会详细地讲解shell的基础和使用,以及一些比较常用的she…...
VMLogin和虚拟机里的浏览器有什么区别?
虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。 指纹浏览器,也称防关联浏览器。 简单来说,就是允许在同一台电设备上操作和管理多个平台、多个账号,账…...
unimrcp server的session资源分配与回收
unimrcp使用APR的内存池管理内存,因此,处理函数中一般都会传递一个pool指针,需要内存时,就从pool里分配一块,一般也不需要关心内存的释放。因为,一路呼叫关联一个session,一个session对应一个po…...

第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...

shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...