K8S之yaml文件详解

这篇具有很好参考价值的文章主要介绍了K8S之yaml文件详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文章目录

一、概述
二、YAML文件优点
三、YAML与 JSON 和 XML 的关系
四、YAML 文件的结构
五、YAML 在 Kubernetes 中的使用
六、YAML文件模板生成/导出

一、概述 

Kubernetes只支持YAML和JSON格式创建资源对象
JSON格式用于接口之间消息的传递,YAML格式用于配置和管理
YAML是专门用来写配置文件的语言,非常简洁和强大,使用比json更方便。它实质上是一种通用的数据串行化格式。 

二、YAML文件优点 

  1. YAML 文件易于人类阅读,具有表达性和可扩展性。
  2. YAML 文件易于实现和使用。
  3. 可在编程语言之间轻松移植。
  4. 与敏捷语言的原生数据结构相匹配。
  5. YAML 文件具有一致模型,支持通用工具。
  6. YAML 文件支持 One-pass 处理。
  7. 使用方便,因此您无需再将所有的参数添加到命令行中。
  8. 易于维护 – 可以将 YAML 文件添加到源控件中以跟踪更改。
  9. 灵活便捷 – 可以使用 YAML 创建更加复杂的结构(相对于使用命令行可以创建的结构)
三、YAML与 JSON 和 XML 的关系

kubectl 查看yaml,kubernetes,容器,云原生

  1. XML 是许多领域的优先采用格式。XML 最初设计为与标准通用标记语言 (SGML) 向后兼容,后者旨在支持结构化文档。因此,XML存在许多设计上的约束。
  2. JSON 的设计理念是简单性和通用性,并且易于生成和解析。JSON 格式的可读性低,但是这种格式的数据每一种现代编程环境都可以轻松处理。
  3. YAML 的设计目标是提升可读性,提供更加完善的信息模型。YAML 的生成和解析更加复杂,因此可以将其视为 JSON 的自然超集。每个JSON 文件都是一个有效的 YAML 文件。
  4. 综上所述,在需要额外功能的情况下,可以轻松地从 JSON 迁移到 YAML。YAML 是从 XML 衍生而来。
四、YAML 文件的结构
  1. 键值对 – YAML 文件中的基本条目类型是键值对。键值对的格式是键和冒号,之后是空格,然后是值。
  2. 数组/列表 – 列表会在列表名称下列出一些项目。列表的元素以 - 开头。可以有 n 个列表,但是,数组中各个元素的缩进非常重要。
  3. 字典/地图 – YAML 文件的更复杂类型是字典和地图。

kubectl 查看yaml,kubernetes,容器,云原生

  

 在编写 YAML 文件时,切记以下准则:

  1. 缩进标识层级关系
  2. 不支持制表符缩进,使用空格缩进 通常开头缩进两个空格
  3. 字符后缩进一个空格,如冒号,逗号等 “—”表示YAML格式,一个文件的开始
  4. “#”表示注释
五、YAML 在 Kubernetes 中的使用
  1. Kubernetes 资源是通过声明的方式创建的,因此可以使用 YAML 文件。
  2. Kubernetes 资源(比如 Pod、服务和部署)是使用 YAML 文件创建的。

YAML文件开头需要编写标签信息,对应不同资源信息

[root@k8s_master ~]# kubectl api-versions
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
apps/v1           ##应用资源
apps/v1beta2      ##测试版本
authentication.k8s.io/v1
authentication.k8s.io/v1beta1
authorization.k8s.io/v1
authorization.k8s.io/v1beta1
autoscaling/v1
autoscaling/v2beta1    ##弹性伸缩资源
autoscaling/v2beta2
batch/v1
batch/v1beta1
certificates.k8s.io/v1beta1
coordination.k8s.io/v1beta1
events.k8s.io/v1beta1
extensions/v1beta1
networking.k8s.io/v1
policy/v1beta1
rbac.authorization.k8s.io/v1     ##权限控制资源
rbac.authorization.k8s.io/v1beta1
scheduling.k8s.io/v1beta1
storage.k8s.io/v1
storage.k8s.io/v1beta1
v1
 

例如创建一个nginx资源

编写yaml文件

[root@k8s_master ~]# vim nginx-deploy.yaml 
apiVersion: apps/v1   ##版本号  ,pod资源
kind: Deployment      ##类型/控制器
metadata:                       ##数据标签
  name: nginx-deployment
  labels:                        ##子标签
    app: nginx                ##业务容器
spec:
  replicas: 3                    ##副本集
  selector:                        ##选择器
    matchLabels:                ##匹配标签
      app: nginx                    ##对应上面的业务容器
  template:                    ##模板
    metadata:
      labels:
        app: nginx
    spec:
      containers:       ##容器
      - name: nginx     ##对应上面的业务容器
        image: nginx:1.15.4     ##使用镜像信息
        ports:
        - containerPort: 80      ##容器端口信息
---
apiVersion: v1        ##版本号
kind: Service        ##服务类型
metadata:
  name: nginx-service
  labels:
    app: nginx
spec:
  type: NodePort     ##端口映射
  ports:
  - port: 80         ##内部端口
    targetPort: 80   ##映射端口
  selector:       ##选择器/
    app: nginx            ##选择业务进行发布
 

 执行创建

###测试yaml文件命令的正确性
[root@k8s_master ~]# kubectl create -f nginx-deploy.yaml --dry-run
deployment.apps/nginx-deployment created (dry run)
service/nginx-service created (dry run)

##执行创建
[root@k8s_master ~]# kubectl create -f nginx-deploy.yaml 
deployment.apps/nginx-deployment created
service/nginx-service created
 

 访问pod资源

 ##卡看容器对外端口
[root@k8s_master ~]# kubectl get all

kubectl 查看yaml,kubernetes,容器,云原生

使用49810端口访问nginx

kubectl 查看yaml,kubernetes,容器,云原生

六、YAML文件模板生成/导出

利用nginx镜像创建资源,生成yaml格式文件

[root@k8s_master ~]# kubectl run nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run -o yaml

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    run: nginx-deployment
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      run: nginx-deployment
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        run: nginx-deployment
    spec:
      containers:
      - image: nginx
        name: nginx-deployment
        ports:
        - containerPort: 80
        resources: {}
status: {}
 

利用nginx镜像创建资源,生成json格式文件

[root@k8s_master ~]# kubectl run nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run -o json

{
    "kind": "Deployment",
    "apiVersion": "apps/v1beta1",
    "metadata": {
        "name": "nginx-deployment",
        "creationTimestamp": null,
        "labels": {
            "run": "nginx-deployment"
        }
    },
    "spec": {
        "replicas": 3,
        "selector": {
            "matchLabels": {
                "run": "nginx-deployment"
            }
        },
        "template": {
            "metadata": {
                "creationTimestamp": null,
                "labels": {
                    "run": "nginx-deployment"
                }
            },
            "spec": {
                "containers": [
                    {
                        "name": "nginx-deployment",
                        "image": "nginx",
                        "ports": [
                            {
                                "containerPort": 80
                            }
                        ],
                        "resources": {}
                    }
                ]
            }
        },
        "strategy": {}
    },
    "status": {}
}
 

将现有的资源生成模板导出到指定文件中(–export -o)

##查看现有资源
[root@k8s_master ~]# kubectl get pods,deploy
NAME                                  READY   STATUS    RESTARTS   AGE
pod/nginx-deployment-d55b94fd-5jvtq   1/1     Running   0          16m
pod/nginx-deployment-d55b94fd-pfb7n   1/1     Running   0          16m
pod/nginx-deployment-d55b94fd-vtm7t   1/1     Running   0          16m

NAME                                     DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.extensions/nginx-deployment   3         3         3            3           16m

##导出资源成yaml文件到新的文件中
[root@k8s_master ~]#  kubectl get deployment/nginx-deployment --export -o yaml > nginx_abc.yaml

##验证导出的yaml文件
[root@k8s_master ~]# cat nginx_abc.yaml 
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "1"
  creationTimestamp: null
  generation: 1
  labels:
    app: nginx
  name: nginx-deployment
  selfLink: /apis/extensions/v1beta1/namespaces/default/deployments/nginx-deployment
spec:
  progressDeadlineSeconds: 600
  replicas: 3
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: nginx
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx:1.15.4
        imagePullPolicy: IfNotPresent
        name: nginx
        ports:
        - containerPort: 80
          protocol: TCP
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
status: {}
 

查看字段帮助信息

使用 kubectl explain命令可以查看yaml文件的字段中可以使用那些信息字段

例如:查看pod资源中spec下的containers下的ports可以使用哪些信息字段

[root@k8s_master ~]# kubectl explain pod.spec.containers.ports
KIND:     Pod
VERSION:  v1

RESOURCE: ports <[]Object>

DESCRIPTION:
     List of ports to expose from the container. Exposing a port here gives the
     system additional information about the network connections a container
     uses, but is primarily informational. Not specifying a port here DOES NOT
     prevent that port from being exposed. Any port which is listening on the
     default "0.0.0.0" address inside a container will be accessible from the
     network. Cannot be updated.

     ContainerPort represents a network port in a single container.

FIELDS:
   containerPort    <integer> -required-
     Number of port to expose on the pod's IP address. This must be a valid port
     number, 0 < x < 65536.

   hostIP    <string>
     What host IP to bind the external port to.

   hostPort    <integer>
     Number of port to expose on the host. If specified, this must be a valid
     port number, 0 < x < 65536. If HostNetwork is specified, this must match
     ContainerPort. Most containers do not need this.

   name    <string>
     If specified, this must be an IANA_SVC_NAME and unique within the pod. Each
     named port in a pod must have a unique name. Name for the port that can be
     referred to by services.

   protocol    <string>
     Protocol for port. Must be UDP, TCP, or SCTP. Defaults to "TCP".

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

到了这里,关于K8S之yaml文件详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • K8S:Yaml文件详解

    目录 一.Yaml文件详解 1.Yaml文件格式 2.YAML 语法格式 二.Yaml文件编写及相关概念 1.查看 api 资源版本标签 2.yaml编写案例 (2)Deployment类型编写nginx服务 (3)k8s集群中的port介绍 (5)快速编写yaml文件 (6)案例:自主式创建service并关联上面的pod (7)Pod yaml文件详解 (8)deploymen

    2024年02月08日
    浏览(48)
  • K8S之yaml文件详解

    文章目录 一、概述 二、YAML文件优点 三、YAML与 JSON 和 XML 的关系 四、YAML 文件的结构 五、YAML 在 Kubernetes 中的使用 六、YAML文件模板生成/导出 一、概述  Kubernetes只支持YAML和JSON格式创建资源对象 JSON格式用于接口之间消息的传递,YAML格式用于配置和管理 YAML是专门用来写配置

    2024年02月02日
    浏览(50)
  • K8s中yaml文件详解

    文章目录 目录 一、YAML基础 二、说明 三、使用YAML创建Pod 附上一个具体的yaml解释文件: YAML是专门用来写配置文件的语言,非常简洁和强大,使用比json更方便。它实质上是一种通用的数据串行化格式。 YAML语法规则: 1.1 YAML Maps Map顾名思义指的是字典,即一个Key:Value 的键值

    2024年02月15日
    浏览(54)
  • 容器化进阶Kubernetes(K8S)详解

    1.1.1 Kubernetes是什么及作用 Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。 Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 官网地址 Kubernetes 中文社区 Kubernetes(k8s)中文文档 目录_Kubernetes中文社

    2024年02月05日
    浏览(74)
  • K8S:Yaml文件详解及编写示例

    (1)Kubernetes 支持 YAML 和 JSON 格式管理资源对象 (2)JSON 格式:主要用于 api 接口之间消息的传递 (3)YAML 格式:用于配置和管理,YAML 是一种简洁的非标记性语言,内容格式人性化,较易读 (1)大小写敏感 (2)使用缩进表示层级关系 (3)不支持Tab键制表符缩进,只使用

    2024年02月04日
    浏览(39)
  • k8s的yaml文件中kind类型详解

    在Kubernetes(k8s)的YAML语法中,kind是一种重要的,它用于指定Kubernetes资源的类型。根据Kubernetes官方文档,以下是kind可能的取值: Deployment:用于定义应用程序的声明式更新。 StatefulSet:用于有状态应用程序的声明式更新和管理。 DaemonSet:用于在集群中运行一个pod的声

    2024年02月06日
    浏览(35)
  • Kubectl-AI: 一款 OpenAI GPT 自动生成应用 K8s yaml神器

    首页: 官网 下载安装 kubectl-ai需要OpenAI API密钥或Azure OpenAI服务 API密钥和端点以及有效的Kubernetes配置 OpenAI和Azure OpenAI,您可以使用以下环境变量: 支持以下模型: code-davinci-002 text-davinci-003 gpt-3.5-turbo-0301(Azure的部署必须命名为gpt-35-turbo-0301) gpt-3.5-turbo gpt-35-turbo-0301 开始测试

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

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

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

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

    2024年02月12日
    浏览(62)
  • Kubernetes技术--k8s核心技术kubectl命令行工具

    (1).概述        kubectl是Kubernetes集群的 命令行工具 , 通过 kubectl 能够对集群本身进行管理 ,并能够在集群上进行容器化应用的安装部署。 (2).语法    Kubectl [command] [type] [name] [flags]   语法参数说明:   command: 指定要对资源执行的操作 ,例如 create、get、describe 和 delete   

    2024年02月10日
    浏览(39)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包