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…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...

Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...