Kubernetes 声明式语言 YAML

news2024/12/25 9:03:57

什么是 YAML

YAML(YAML Ain’t Markup Language)是一种可读的数据序列化语言,通常用于配置文件、数据序列化和交换格式。YAML 的设计目标是易读易写,并且能够映射到动态语言中的数据结构

YA加粗样式ML 是 JSON 的超集,支持整数、浮点数、布尔、字符串、数组和对象等数据类型。也就是说,任何合法的 JSON 文档也都是 YAML 文档

和 JSON 比起来,YAML 的语法更简单,形式也更清晰紧凑,比如:

  • 使用空白与缩进表示层次(有点类似 Python),可以不使用花括号和方括号。
  • 可以使用 # 书写注释,比起 JSON 是很大的改进。
  • 对象(字典)的格式与 JSON 基本相同,但 Key 不需要使用双引号
  • 数组(列表)是使用 - 开头的清单形式(有点类似 MarkDown)。
  • 表示对象的 : 和表示数组的 - 后面都必须要有空格。
  • 可以使用 在一个文件里分隔多个 YAML 对象。

示例1

该 YAML 对象,声明了 1 个 Master 节点,3 个 Worker 节点

# YAML对象(字典)
Kubernetes:
  master: 1
  worker: 3

示例2

Kubernetes,组合数组和对象的yaml

Kubernetes:
  master:
    - apiserver: running
    - etcd: running
  node:
    - kubelet: running
    - kube-proxy: down
    - container-runtime: [docker, containerd, cri-o]

在这里插入图片描述

什么是 API 对象

使用 kubectl api-resources 来查看当前 Kubernetes 版本支持的所有对象:

kubectl api-resources 

在这里插入图片描述
在输出的“NAME”一栏,就是对象的名字,比如 ConfigMap、Pod、Service 等等,第二栏“SHORTNAMES”则是这种资源的简写,在我们使用 kubectl 命令的时候很有用,可以少敲几次键盘,比如 Pod 可以简写成 poService 可以简写成 svc

在使用 kubectl 命令的时候,你还可以加上一个参数 --v=9,它会显示出详细的命令执行过程,清楚地看到发出的 HTTP 请求,比如:

kubectl get pod --v=9

在这里插入图片描述
从截图里可以看到,kubectl 客户端等价于调用了 curl,向 8443 端口发送了 HTTP GET 请求,URL 是 /api/v1/namespaces/default/pods

目前的 Kubernetes 1.23 版本有 50 多种 API 对象,全面地描述了集群的节点、应用、配置、服务、账号等等信息,apiserver 会把它们都存储在数据库 etcd 里,然后 kubelet、scheduler、controller-manager 等组件通过 apiserver 来操作它们,就在 API 对象这个抽象层次实现了对整个集群的管理。

如何描述 API 对象

用 YAML 语言,使用“声明式”在 Kubernetes 里描述并创建 API 对象改造之前运行 Nginx 的命令:

kubectl run ngx --image=nginx:alpine

把它改写成“声明式”的 YAML,说清楚我们想要的 Nginx 应用是个什么样子,也就是“目标状态”,让 Kubernetes 自己去决定如何拉取镜像运行:

apiVersion: v1
kind: Pod
metadata:
  name: ngx-pod
  labels:
    env: test
    owner: lfgb
    
spec:
  containers:
    - image: nginx:alpine
      name: ngx
      ports:
        - containerPort: 80

API 对象采用标准的 HTTP 协议,为了方便理解,我们可以借鉴一下 HTTP 的报文格式,把 API 对象的描述分成“header”和“body”两部分。

API 对象header

header”包含的是 API 对象的基本信息,有三个字段:apiVersion、kind、metadata。

  • apiVersion 表示操作这种资源的 API 版本号,由于 Kubernetes 的迭代速度很快,不同的版本创建的对象会有差异,为了区分这些版本就需要使用 apiVersion 这个字段,比如 v1、v1alpha1、v1beta1 等等。
  • kind 表示资源对象的类型,这个应该很好理解,比如 Pod、Node、Job、Service 等等。
  • metadata 这个字段顾名思义,表示的是资源的一些“元信息”,也就是用来标记对象,方便 Kubernetes 管理的一些信息。

在这个 YAML 示例里就有两个“元信息”,一个是 name,给 Pod 起了个名字叫 ngx-pod,另一个是 labels,给 Pod“贴”上了一些便于查找的标签,分别是 env 和 owner。

apiVersion、kind、metadata 都被 kubectl 用于生成 HTTP 请求发给 apiserver,你可以用 --v=9 参数在请求的 URL 里看到它们,比如:

https://192.168.49.2:8443/api/v1/namespaces/default/pods/ngx-pod

和 HTTP 协议一样,“header”里的 apiVersion、kind、metadata 这三个字段是任何对象都必须有的。

API 对象body

“body”部分则会与对象特定相关,每种对象会有不同的规格定义,在 YAML 里就表现为 spec 字段(即 specification),表示我们对对象的“期望状态”(desired status)。

这个 Pod里,它的 spec 里就是一个 containers 数组,里面的每个元素又是一个对象,指定了名字、镜像、端口等信息:

spec:
  containers:
  - image: nginx:alpine
    name: ngx
    ports:
    - containerPort: 80

把这些字段综合起来,我们就能够看出,这份 YAML 文档完整地描述了一个类型是 Pod 的 API 对象,要求使用 v1 版本的 API 接口去管理,其他更具体的名称、标签、状态等细节都记录在了 metadataspec 字段等里。

API 生成、删除pod

使用 kubectl apply、kubectl delete,再加上参数 -f,你就可以使用这个 YAML 文件,创建或者删除对象了:

kubectl apply -f ngx-pod.yml
kubectl delete -f ngx-pod.yml

在这里插入图片描述
Kubernetes 收到这份“声明式”的数据,再根据 HTTP 请求里的 POST/DELETE 等方法,就会自动操作这个资源对象,至于对象在哪个节点上、怎么创建、怎么删除完全根据内置功能处理。

如何编写 YAML

官方参考文档
API 对象的所有字段都可以在里面找到。不过官方文档内容太多太细,查阅起来有些费劲,下面有几个简单实用的小技巧。

kubectl api-resources 命令

它会显示出资源对象相应的 API 版本和类型,
比如 Pod 的版本是“v1”,
Ingress 的版本是“networking.k8s.io/v1”。

kubectl explain

kubectl explain 相当于是 Kubernetes 自带的 API 文档,会给出对象字段的详细说明,这样我们就不必去网上查找了。比如想要看 Pod 里的字段该怎么写,就可以这样:

kubectl explain pod
kubectl explain pod.metadata
kubectl explain pod.spec
kubectl explain pod.spec.containers

在这里插入图片描述

文档样板

可以让 kubectl 为我们“代劳”,生成一份“文档样板”,免去我们打字和对齐格式的工作。

kubectl 的两个特殊参数 –dry-run=client-o yaml,前者是空运行,后者是生成 YAML 格式,结合起来使用就会让 kubectl 不会有实际的创建动作,而只生成 YAML 文件。

例如,想要生成一个 Pod 的 YAML 样板示例,可以在 kubectl run 后面加上这两个参数:

kubectl run ngx --image=nginx:alpine --dry-run=client -o yaml

可以将变量 $out 扩展为其包含的值,而不是作为一个整体。可以使用 ${out} 语法来执行这个操作,像这样:

export out="--dry-run=client -o yaml"
kubectl run ngx --image=nginx:alpine $out

屏幕输出的 YAML 文件内容:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: ngx
  name: ngx
spec:
  containers:
  - image: nginx:alpine
    name: ngx
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}
  • apiVersion: 指定 Kubernetes API 的版本,这里使用的是 v1 版本。
  • kind: 指定资源的类型,这里是一个 Pod。
  • metadata: 包含有关 Pod 的元数据,例如名称和标签。
  • creationTimestamp: Pod 的创建时间戳。由于这个 Pod 还没有被创建,因此值为 null。
  • labels: 包含一个标签,名称为 run,值为 ngx。
  • name: 指定 Pod 的名称,这里是 ngx。
  • spec: 包含有关 Pod 规范的信息,例如容器配置和资源限制。
  • containers: 指定要在 Pod 中运行的容器列表。
  • image: 指定容器要使用的镜像,这里是 nginx:alpine。
  • name: 指定容器的名称,这里也是 ngx。
  • resources: 指定容器的资源限制。在这个示例中,没有定义任何资源限制。
  • dnsPolicy: 指定 Pod 的 DNS 解析策略,这里是 ClusterFirst,表示使用集群中的 DNS 服务进行解析。
  • restartPolicy: 指定 Pod 终止后的重启策略,这里是 Always,表示总是重启 Pod。
  • status: 包含有关 Pod 状态的信息。在这个示例中,没有提供任何状态信息,因为 Pod 还没有被创建。
    在这里插入图片描述
    或者生成到指定文件:
kubectl run ngx --image=ngx:alpine $out > demo.yml

在这里插入图片描述

然后查阅对象的说明文档,添加或者删除字段来定制这个 YAML 了。

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

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

相关文章

纯血鸿蒙APP实战开发——Navigation实现多设备适配案例

介绍 在应用开发时,一个应用需要适配多终端的设备,使用Navigation的mode属性来实现一套代码,多终端适配。 效果图预览 使用说明 将程序运行在折叠屏手机或者平板上观看适配效果。 实现思路 本例涉及的关键特性和实现方案如下&#xff1a…

MyBatis(注解方式操作)

文章目录 1.注解方式操作文件目录1.快速入门(完整步骤)1.pom.xml(完整)2.resources/jdbc.properties外部配置文件(根据实际情况修改参数)3.在resources/mybatis-config.xml(完整)中配…

仓库管理系统(WMS)是什么?有哪些功能?

阅读本文,你将了解:1、仓库管理(WMS)是什么? 2、仓库管理系统(WMS)有什么功能 3、使用仓库管理系统能给企业带来什么好处 一、仓库管理系统是什么 WMS,全称Warehouse Management S…

借助Aspose.SVG图像控件,在线将 PNG 转换为 XML

Aspose.SVG for .NET 是用于SVG文件处理的灵活库,并且与其规范完全兼容。API可以轻松加载,保存和转换SVG文件,以及通过其文档对象模型(DOM)读取和遍历文件的元素。API独立于任何其他软件,使开发人员无需使用…

BGP配置和应用案例

策略路由的配置步骤 l 策略路由的配置步骤如下: 创建route-map 通过ACL匹配感兴趣的数据,定义策略动作 在指定接口下通过ip policy 命令应用route-map l 最终实现对通过该接口进入设备的数据进行检查,对匹配的数据执行规定的策略…

注意力机制(四)(多头注意力机制)

​🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀《深度学习基础知识》 相关专栏: ⚽《机器学习基础知识》 🏐《机器学习项目实战》 🥎《深度学习项目实…

如何使用python自动修改图片

如何使用python自动修改图片 首先: 要使用Python代码自动修改图片,你可以使用 imageio和matplotlib库.以下是一个简单的示例代码,演示如何调整图片尺寸. 确保已经安装了imageio和matplotlib库.如果没有安装,可以使用以下命令安装 pip install imageio matplotli…

10G MAC层设计系列-(2)MAC RX模块

一、概述 MAC RX模块的需要进行解码、对齐、CRC校验。 因为在空闲的时候10G PCS/PMA会一直向外吐空闲符(x07)所以需要根据开始符、结束符将有效数据从码流中截取,也就是解码。 因为开始字符的所在位置有两种形式,而结束字符的位…

C语言 | Leetcode C语言题解之第50题Pow(x,n)

题目&#xff1a; 题解&#xff1a; double myPow(double x, int n){if(n 0 || x 1){return 1;}if(n < 0){return 1/(x*myPow(x,-(n1)));}if(n % 2 0){return myPow(x*x,n/2);}else{return x*myPow(x*x,(n - 1)/2);} }

Node私库Verdaccio使用记录,包的构建,推送和拉取

Node私库Verdaccio使用记录&#xff0c;包的构建&#xff0c;推送和拉取 Verdaccio是一个轻量级的私有npm代理注册中心&#xff0c;它可以帮助你在本地搭建一个npm仓库&#xff0c;非常适合企业内部使用。通过使用Verdaccio&#xff0c;你可以控制和缓存依赖包&#xff0c;提高…

QT:信号和槽

文章目录 信号和槽connect函数槽自定义槽第一种第二种 信号和槽 这里的信号和Linux的信号一样吗&#xff1f; 答案是差不多&#xff0c;但是也有一定的区别&#xff0c;而且也是两个不同的概念 信号有三个概念&#xff0c;一个是信号源&#xff0c;这个信号是由谁发送的&…

基于Guava的异步线程结果监听:ListenableFuture

1.ListenableFuture概述&#xff1a; ListenableFuture是对原有Future的增强&#xff0c;它可以监听异步执行的过程&#xff0c;执行完了&#xff0c;自动触发回调操作。 除此之外&#xff0c;可以分别针对成功或者失败的情况做后续处理。 2.使用场景 你想拿到异步处理的结果…

vue2插件之@lucky-canvas/vue,大转盘、抽奖、老虎机

提示&#xff1a;vue2插件 文章目录 [TOC](文章目录) 前言一、查看nodejs版本二、创建项目三、大转盘四、抽奖五、老虎机六、官网总结 前言 lucky-canvas/vue 一、查看nodejs版本 node -v二、创建项目 1、安装插建 npm install lucky-canvas/vue --save2、目录结构 3、引用…

Stable Diffusion WebUI 中文提示词插件 sd-webui-prompt-all-in-one

本文收录于《AI绘画从入门到精通》专栏&#xff0c;订阅后可阅读专栏内所有文章&#xff0c;专栏总目录&#xff1a;点这里。 大家好&#xff0c;我是水滴~~ 今天为大家介绍 Stable Diffusion WebUI 的一款中文提示词插件 sd-webui-prompt-all-in-one&#xff0c;就像它的名字一…

2024中国(江西)国际先进陶瓷材料及智能装备博览会

2024中国&#xff08;江西&#xff09;国际先进陶瓷材料及智能装备博览会 “中国&#xff08;江西&#xff09;国际先进陶瓷材料及智能装备博览会” 陶瓷三新展 &#xff08;新材料、新装备、新技术&#xff09; 绿色智能、引领未来 2024年11月1日-11月3日 中国江西 南昌…

网工内推 | 网络工程师,CCIE认证优先,最高10k*13薪

01 广东丰德科技有限公司 招聘岗位&#xff1a;网络工程师 职责描述&#xff1a; 1、负责运营商机房的网络设备的运行维护、故障应急处理&#xff1b; 2、负责各类型网络设备或网络相关的故障的故障分析及诊断&#xff1b; 3、独立完成网络项目的方案设计编写并负责方案的验证…

Linux进程——进程的概念(PCB的理解)

前言&#xff1a;在了解完冯诺依曼体系结构和操作系统之后&#xff0c;我们进入了Linux的下一篇章Linux进程&#xff0c;但在学习Linux进程之前&#xff0c;一定要阅读理解上一篇内容&#xff0c;理解“先描述&#xff0c;再组织”才能更好的理解进程的含义。 Linux进程学习基…

关于配置nginx 代理去掉location 匹配的上下文规则

事情是这样的&#xff0c;有个需求&#xff0c;就是在本系统准备把所有的api 请求放到webman 框架 然后把后台的业务依然保留在fastadmin 框架&#xff0c; 打算加一个反向代理&#xff0c;用同一个域名的加上一个访问后缀&#xff0c;放到到webman 服务&#xff0c;也就是本…

mathtype中如何输入指示函数花体的 I

mathtype中如何输入花体的 I 问题描述解决办法 问题描述 写word文档时&#xff0c;借助mathtype敲公式&#xff0c;指示函数的花体I如何键入。 解决办法 1.编辑->插入符号 2.选择“Euclid Math Two”,里面有花体的各种字母。 3.成功。

新一代状态空间模型网络替代Transformer 综述

本文首先初步介绍了状态空间模型&#xff08;SSM&#xff09;的工作原理。然后&#xff0c;从多个方面回顾SSM的相关工作&#xff0c;包括SSM的起源和变化、自然语言处理、计算机视觉、图、多模态处理、多模态和多媒体、点云/事件流数据、时间序列数据等领域的相关工作。 此外…