k8s学习笔记-07(借助kubectl explain编写yaml文件)

这篇具有很好参考价值的文章主要介绍了k8s学习笔记-07(借助kubectl explain编写yaml文件)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

原创文档编写不易,未经许可请勿转载。文档中有疑问的可以邮件联系我。 邮箱:yinwanit@163.com

说明

文章记录了本人学习yaml文件编写过程中的一些经验分享。

在k8s学习过程中yaml文件的编写无疑是比较让人头痛的,尤其是最开始学习的时候。作者结合自己学习过程总结了以下几点编写yaml文件时遇到的问题,或者说困惑更贴切:

  1. 哪些资源归属哪些apiVersion?
  2. yaml文件的基础格式和行文规定是怎么样的?
  3. 一个yaml文件基本格式包含哪些内容?
  4. 一个参数项后是否包含子参数项?
  5. 什么时候该用 - 横线什么时候不该用横线?

针对以上问题,第一点和第二点文章不再累述可在我往期的文章中找到答案(https://www.cnblogs.com/Pigs-Will-Fly/p/17602022.html),本文仅对第3、4、5三点进行经验分享。

全文归纳:

  • 通过kubectl explain 命令可查看资源参数配置项。
  • 通过kubectl explain命令查看到的参数类型为"[]"时,他的下级参数每个元组首行需要加中横线。
  • 通过kubectl explain命令查看到的参数类型为"map"时,他的下级参数每个元组以键值对出现不用遵守驼峰写法。
  • 通过kubectl explain命令查看到的子参数类型后包含"-required-"时,表示这个子参数对于他归属的父参数而言为必须的不可省略。

一、yaml文件基础组成

k8s中yaml文件结尾需以.yml或.yaml结尾。文件放置位置不做限定。

每一个yaml文件中至少要包含四个元素:apiVersion、kind、metadata、spec,这四个元素均处于最顶层层级就是说书写时这四个元素前不需要用空格。

书写yaml文件时可首先把四个元素写入到yaml文件中。

apiVersion: ******
kind: ******
metadata:
******
****** spec:
******
******

参数解释

apiVersion: 置于首行,标注该yaml文件使用的版本。不同资源版本中资源使用方式和配置参数存在一定的差异。

kind: 一般置于第二行,紧跟apiVersion行后。标注该yaml文件中使用的资源类型。

metadata: 一般处于第三行yaml文件的元数据,如名称、标签、属于哪个命名空间、文件作者信息等。

spec:  定义具体的资源配置参数信息。如pod、pv、svc、deployments等资源的具体参数配置。

(apiVersion、kind、metadata这行的配置方法对于k8s中所有类型资源参数基本通用,所以需要付出一点点汗水把常用的项记下来,如metadata中的name、namespace等)。

对于spec中的内容有一点映像就行不用死记硬背,不太清楚的可以上官网查看,也可以通过kubectl explain命令查看具体配置。

二、kubectl explain命令基础用法

在编写yaml文件时知道了资源类型即kind行处填写的值,本章节以pod资源举例展示kubectl explain命令使用方法及如何把explain的结果置入到yaml文件中。

通过kubectl explain  <资源类型> 的方法可以获取到该资源下有哪些参数配置。

candidate@node01:~$ kubectl explain pod.
KIND:       Pod
VERSION:    v1

DESCRIPTION:
    Pod is a collection of containers that can run on a host. This resource is
    created by clients and scheduled onto hosts.

FIELDS:
  apiVersion    <string>
    APIVersion defines the versioned schema of this representation of an object.
    Servers should convert recognized schemas to the latest internal value, and
    may reject unrecognized values. More info:
    https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources

  kind  <string>
    Kind is a string value representing the REST resource this object
    represents. Servers may infer this from the endpoint the client submits
    requests to. Cannot be updated. In CamelCase. More info:
    https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds

  metadata      <ObjectMeta>
    Standard object's metadata. More info:
    https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata

  spec  <PodSpec>
    Specification of the desired behavior of the pod. More info:
    https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status

  status        <PodStatus>
    Most recently observed status of the pod. This data may not be up to date.
    Populated by the system. Read-only. More info:
    https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status


candidate@node01:~$

通过kubectl explain pod 命令可以看到pod这个资源对应的第一层(顶层)参数5个,最后一个status这个在我们编写yaml时可以省略不写,只对前四个进行定义编写。

如果想看到下一层级有哪些参数,只需继续执行 kubectl explain 命令加上你想要参看的参数名(每个层级间用半角 点 隔开),以spec为例 kubectl explain pod.spec.

k8s学习笔记-07(借助kubectl explain编写yaml文件)

在输出结果中的FIELDS: 行以下就是pod这个资源spec参数下可设置的参数名。如果还想继续查看同理继续执行  kubectl explain xx.xxx.xxx就行了。

 文章来源地址https://www.toymoban.com/news/detail-760221.html

三、选项前是否需要加-横线

通过第二章,基本上可以找到资源各个层级的对应关系,但是这些内容怎么体现在yaml中,如经常能看到yaml文件中,有的参数名后直接跟的参数值,有的参数名前有横线,还有些没有按照驼峰格式来书写。

本章节通过一个简单的yaml文件来进行辅助说明。

yaml文件描述:使用nginx镜像创建一个名为web-server的pod,容器和pod同名,必须运行在标签为 cpu=amd的node节点。容器中提供一个名为http的TCP协议80端口服务。同时在容器的/v1目录挂载一个名为test1的emptydir类型的卷,/v2目录下挂载另外一个名为test2的emptydir卷。

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: web-server
  name: web-server
spec:
  containers:
  - image: nginx
    imagePullPolicy: IfNotPresent
    name: web-server
    ports:
    - name: http
      containerPort: 80
      protocol: TCP
    volumeMounts:
    - name: test1
      mountPath: /v1
    - name: test2
      mountPath: /v2
  restartPolicy: Always
  volumes:
  - name: test1
    emptyDir: {}
  - name: test2
    emptyDir: {}
  nodeSelector:
    cpu: amd

3.1 何时用横线

当你的父级参数是列表格式时,该父级参数下的第一行子参数前需要加上横线。metadata、spec这两个参数下的第一级子参数首行都不用加横线。

以pod的spec下的containers参数为例,执行kubectl explain  pod.spec.containers. 

k8s学习笔记-07(借助kubectl explain编写yaml文件)

 红圈处为containers参数的类型,中括号表示他是一个列表类型的数据,即containers下的第一级子参数第一行必须要加上“-” 横线。

FIELDS行下的橙圈处表示containers下子参数的格式,如果要换行书写,归属他们的第一级子第一行也必须加上“-”横线。

k8s学习笔记-07(借助kubectl explain编写yaml文件)

 再看yaml文件中的ports参数,也用kubectl explain  pod.spec.containers.ports. 命令来查看一下。

k8s学习笔记-07(借助kubectl explain编写yaml文件)

 通过kubectl explain  pod.spec.containers.ports. 命令查看得知 ports这个参数也是一个列表,同理可得它的下一层首行也必须要加上中横线。

k8s学习笔记-07(借助kubectl explain编写yaml文件)

 为了更一步确认找一个不是没加横线的看看,如 pod.spec.containers.name.这个参数,执行命令

k8s学习笔记-07(借助kubectl explain编写yaml文件)

 从执行结果看name没有下一级,同时它的格式时在name同行中跟参数即 name: xxxxx。

总结:在执行 kubectl explain 命令时你所要使用的参数父一级类型是列表( [] )那么,你需要加横线在该父级参数每个元组的第一行。

 

3.2 何时不用驼峰写法

kubectl explain命令查看到指定资源的类型为map时,该资源的下级资源即为键值对填写不用遵守驼峰写法。

如演示yaml中的nodeSelector参数,它作为pod.spec的子参数他的格式是 <map[string]string>,可直接在同行跟参数,也可换行后指定参数。

k8s学习笔记-07(借助kubectl explain编写yaml文件)

 map格式的下一层参数不用适用于驼峰写法。

 

3.3 哪些参数不能省略

kubectl explain结果输出中带有“-required-”字眼的参数不能省略。如pod.spec.containers.ports中的containerPort参数。

k8s学习笔记-07(借助kubectl explain编写yaml文件)

pod.spec.volumes.中的name参数一样不能审阅,如果yaml文件中存在pod.spec.volumes那么volumes的下层参数必须要有name这个参数。

k8s学习笔记-07(借助kubectl explain编写yaml文件)

 

到了这里,关于k8s学习笔记-07(借助kubectl explain编写yaml文件)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • k8s重启服务(kubectl)

    How to Restart Kubernetes Pods With Kubectl Deployments

    2024年02月11日
    浏览(41)
  • K8S---kubectl top

    该命令类似于linux–top命令,用于显示node和pod的CPU和内存使用情况

    2024年02月01日
    浏览(61)
  • K8S---kubectl options

    kubectl options 可以打印出所有命令行的共有选项 [root@yyzc-zjjcs01 ~]# /opt/kubernetes/bin/kubectl --kubeconfig /opt/kubernetes/conf/default-admin.kubeconfig options The following options can be passed to any command: –add-dir-header=false: If true, adds the file directory to the header of the log messages –alsologtostderr=false: log to sta

    2024年02月02日
    浏览(41)
  • k8s kubectl常用命令

    kubectl 是 Kubernetes 的一个命令行管理工具,可用于 Kubernetes 上的应用部署和日常管理。本文列举了 9 个常见的 kubectl 命令,并总结了一些使用技巧,希望可以帮助系统管理员简化管理工作。 对于刚开始使用命令行工具的开发者,最保险的方法是提出问题(读取操作),而不是

    2024年02月11日
    浏览(42)
  • k8s: kubectl: logs: rotate 问题

    设计文档: https://github.com/kubernetes/design-proposals-archive/blob/main/node/kubelet-cri-logging.md https://kubernetes.io/docs/concepts/cluster-administration/logging/ 当kubenet存放container的日志满了的时候,会发生rotate,当rotate发生的时候,是由kubectl logs 这个命令可能会出现以下两个问题: https://github.com

    2024年02月15日
    浏览(44)
  • K8S之kubectl命令详解及示例

    目录 1、查看类命令 2、操作类命令 3、进阶命令操作 4、kubectl replace 重启pod的四种方法 5、kubectl语法 # 获取节点和服务版本信息 kubectl get nodes # 获取节点和服务版本信息,并查看附加信息 kubectl get nodes -o wide # 获取pod信息,默认是default名称空间 kubectl get pod # 获取pod信息,默认

    2024年02月01日
    浏览(51)
  • 四、Kubernetes(K8S):kubectl概述、安装、设置

    目录 概述 安装与配置kubectl 语法 命令 对象 规则结构 命令选项 资源类型 输出选项 格式化输出 自定义列 排序列表对象 常用操作示例 kubectl 是Kubernetes命令行工具。它允许用户与Kubernetes集群进行交互,并管理Kubernetes对象,如Pod、Service、Deployment等。kubectl可以在命令行界面中

    2024年02月12日
    浏览(65)
  • 使用kubectl连接远程Kubernetes(k8s)集群

    你需要准备一个Kubernetes集群,你要记下你安装Kubernetes的版本。如图我已经准备好了一个版本号为 v1.21.14 的集群: 注意下载的版本号最好与你安装的Kubernetes版本对应上,各个版本的下载地址(⚠️注意修改url中的版本号): Windows: x86_64: arm64: MacOS: Intel: Apple Silicon: Linux: x86

    2024年02月04日
    浏览(61)
  • 五、Kubernetes(K8S):Kubectl常用命令详解

    注意:后续技术分享,第一时间更新,以及更多更及时的技术资讯和学习技术资料 ,将在公众号 CTO Plus 发布,请关注公众号: CTO Plus   Kubectl 是Kubernetes命令行工具,用于管理Kubernetes集群资源和应用程序的部署、升级和扩展等。其作用包括但不限于: 1. 创建、更新和删除应

    2024年02月04日
    浏览(45)
  • 【云原生】K8s管理工具--Kubectl(一)

    1、陈述式管理方式 kubernetes 集群管理集群资源的唯一入口是通过相应的方法调用 apiserver 的接口 kubectl 是官方的 CLI 命令行工具,用于与 apiserver 进行通信,将用户在命令行输入的命令,组织并转化为 apiserver 能识别的信息,进而实现管理 k8s 各种资源的一种有效途径 kubectl 的

    2024年02月05日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包