文章目录

  • 一、yaml文件简介
    • 1)yaml的语法规则:
    • 2)在Kubernetes中,只需要知道两种结构类型即可:
  • 二、yaml常见语法
    • 1)apiVersion
    • 2)kind
    • 3)metadata
    • 4)spec
  • 三、port详解
  • 四、yaml简单示例
    • 1)deployment
    • 2)pod
    • 3)service
  • 五、Label与Selector
    • 1)Label
    • 2)Selector
  • 六、kubectl create还是 kubectl replace二者区别

一、yaml文件简介

Kubernetes只支持YAMLJSON格式创建资源对象,JSON格式用于接口之间消息的传递,适用于开发YAML格式用于配置和管理,适用于云平台管理,YAML是一种简洁的非标记性语言。

1)yaml的语法规则:

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进时不允许使用Tal键,只允许使用空格
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
  • ”#” 表示注释,从这个字符一直到行尾,都会被解析器忽略
  • 注:- - - 为可选的分隔符 ,当需要在一个文件中定义多个结构的时候需要使用

2)在Kubernetes中,只需要知道两种结构类型即可:

  • Lists
  • Maps

2.1)YAML Maps
Map顾名思义指的是字典,即一个Key:Value 的键值对信息。例如:

---
apiVersion: v1
kind: Pod

上述内容表示有两个键apiVersion和kind,分别对应的值为v1和Pod。

Maps的value既能够对应字符串也能够对应一个Maps。例如:

---
apiVersion: v1
kind: Pod
metadata:name: kube100-sitelabels:app: web

注:上述的YAML文件中,metadata这个KEY对应的值为一个Maps,而嵌套的labels这个KEY的值又是一个Map。实际使用中可视情况进行多层嵌套。

YAML处理器根据行缩进来知道内容之间的关联。上述例子中,使用两个空格作为缩进,但空格的数据量并不重要,只是至少要求一个空格并且所有缩进保持一致的空格数 。例如,name和labels是相同缩进级别,因此YAML处理器知道他们属于同一map;它知道app是lables的值因为app的缩进更大。

2.2)YAML Lists
List即列表,说白了就是数组,例如:

args-beijing-shanghai-shenzhen-guangzhou

可以指定任何数量的项在列表中,每个项的定义以破折号(-)开头,并且与父元素之间存在缩进。

当然Lists的子项也可以是Maps,Maps的子项也可以是List,例如:

---
apiVersion: v1
kind: Pod
metadata:name: kube100-sitelabels:app: web
spec:containers:- name: front-endimage: nginxports:- containerPort: 80- name: flaskapp-demoimage: jcdemo/flaskappports: 8080

如上述文件所示,定义一个containers的List对象,每个子项都由name、image、ports组成,每个ports都有一个KEY为containerPort的Map组成。

二、yaml常见语法

1)apiVersion

查看当前所有可用的API版本

$ kubectl api-versions

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9B31EtLI-1631028273805)(https://img-加粗样式blog.csdnimg.cn/f1facfa023cd430ebc16c4279b4a3abf.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5a-S5rGf5a2k5b2xMDA3,size_15,color_FFFFFF,t_70,g_se,x_16)]

1.6版本之前 apiVsersion:extensions/v1beta1
1.6版本到1.9版本之间:apps/v1beta1
1.9版本之后:apps/v1

常用apiversion

只要记住6个常用的apiversion一般就够用了。

  • v1: Kubernetes API的稳定版本,包含很多核心对象:pod、service等。
  • apps/v1: 包含一些通用的应用层的api组合,如:Deployments, RollingUpdates, and ReplicaSets。
  • batch/v1: 包含与批处理和类似作业的任务相关的对象,如:job、cronjob。
  • autoscaling/v1: 允许根据不同的资源使用指标自动调整容器。
  • networking.k8s.io/v1: 用于Ingress。
  • rbac.authorization.k8s.io/v1:用于RBAC。

下面是官方原文链接,有兴趣的同学可以看看,页面是可以选择语言的,但是中文翻译有点问题,建议中文英文对照着看。https://kubernetes.io/docs/reference/using-api/

2)kind

kind指定这个资源对象的类型,如 pod、deployment、statefulset、job、cronjob

3)metadata

metadata常用的配置项有 name,namespace,即配置其显示的名字与归属的命名空间。

4)spec

一个嵌套字典与列表的配置项,也是主要的配置项,支持的子项非常多,根据资源对象的不同,子项会有不同的配置。

如一个pod的spec配置:

apiVersion: v1 #必选,版本号,例如v1
kind: Pod #必选,Pod
metadata: #必选,元数据 name: nginx #必选,Pod名称 labels: #自定义标签 app: nginx #自定义标签名字
spec: #必选,Pod中容器的详细定义 containers: #必选,Pod中容器列表,一个pod里会有多个容器 - name: nginx #必选,容器名称 image: nginx #必选,容器的镜像名称 imagePullPolicy: IfNotPresent # [Always | Never | IfNotPresent] #获取镜像的策略 Alawys表示下载镜像 IfnotPresent表示优先使用本地镜像,否则下载镜像,Nerver表示仅使用本地镜像 ports: #需要暴露的端口库号列表 - containerPort: 80 #容器需要监听的端口号 restartPolicy: Always # [Always | Never | OnFailure]#Pod的重启策略,Always表示一旦不管以何种方式终止运行,kubelet都将重启,OnFailure表示只有Pod以非0退出码退出才重启,Nerver表示不再重启该Pod

一个service 的 spec 的配置:

apiVersion: v1
kind: Service
metadata:name: service-hellolabels:name: service-hello
spec:type: NodePort      #这里代表是NodePort类型的,另外还有ingress,LoadBalancerports:- port: 80          #这里的端口和clusterIP(kubectl describe service service-hello中的IP的port)对应,即在集群中所有机器上curl 10.98.166.242:80可访问发布的应用服务。targetPort: 8080  #端口一定要和container暴露出来的端口对应,nodejs暴露出来的端口是8081,所以这里也应是8081protocol: TCPnodePort: 31111   # 所有的节点都会开放此端口30000--32767,此端口供外部调用。selector:run: hello         #这里选择器一定要选择容器的标签,之前写name:kube-node是错的。

这里是将nginx映射到外网,访问地址就是本机ip:31111

三、port详解

  • port:port是k8s集群内部访问service的端口,即通过clusterIP: port可以访问到某个service
  • nodePort:nodePort是外部访问k8s集群中service的端口,通过nodeIP: nodePort可以从外部访问到某个service。
  • targetPort:targetPort是pod的端口,从port和nodePort来的流量经过kube-proxy流入到后端pod的targetPort上,最后进入容器。
  • containerPort:containerPort是pod内部容器的端口,targetPort映射到containerPort。

四、yaml简单示例

接下来就是看看deployment、pod、service 这三种资源的说明书例子

1)deployment

apiVersion: apps/v1   # 1.9.0 之前的版本使用 apps/v1beta2,可通过命令 kubectl api-versions 查看
kind: Deployment    #指定创建资源的角色/类型
metadata:    #资源的元数据/属性name: nginx-deployment    #资源的名字,在同一个namespace中必须唯一
spec:replicas: 2    #副本数量2selector:      #定义标签选择器matchLabels:app: web-servertemplate:      #这里Pod的定义metadata:labels:    #Pod的labelapp: web-serverspec:        # 指定该资源的内容  containers:  - name: nginx      #容器的名字  image: nginx:1.12.1  #容器的镜像地址    ports:  - containerPort: 80  #容器对外的端口

执行以下命令创建 deployment 资源

$ kubectl create -f nginx.yaml

2)pod

apiVersion: v1
kind: Pod
metadata:  name: pod-redislabels:name: redis
spec: containers:- name: pod-redisimage: docker.io/redis  ports:- containerPort: 80 #容器对外的端口

执行以下命令创建 pod 资源

$ kubectl create -f pod-redis.yaml

3)service

apiVersion: v1
kind: Service  # 指明资源类型是 service
metadata:  name: httpd-svc # service 的名字是 httpd-svclabels:  name: httpd-svc
spec:  ports:  # 将 service 8080 端口映射到 pod 的 80 端口,使用 TCP 协议- port: 8080targetPort: 80  protocol: TCP  selector:  run: httpd # 指明哪些 label 的 pod 作为 service 的后端

执行以下命令创建 service 资源

$ kubectl create -f httpd-svc.yaml

五、Label与Selector

1)Label

Label是Kubernetes系列中另外一个核心概念。是一组绑定到K8s资源对象上的key/value对。同一个对象的labels属性的key必须唯一。label可以附加到各种资源对象上,如Node,Pod,Service,RC等。

通过给指定的资源对象捆绑一个或多个不用的label来实现多维度的资源分组管理功能,以便于灵活,方便地进行资源分配,调度,配置,部署等管理工作。

示例如下:

  • 版本标签:“release” : “stable” , “release” : “canary”…
  • 环境标签:“environment” : “dev” , “environment” : “production”
  • 架构标签:“tier” : “frontend” , “tier” : “backend” , “tier” : “middleware”
  • 分区标签:“partition” : “customerA” , “partition” : “customerB”…
  • 质量管控标签:“track” : “daily” , “track” : “weekly”

2)Selector

Label selector是Kubernetes核心的分组机制,通过label selector客户端/用户能够识别一组有共同特征或属性的资源对象。符合这个标签的 Pod 会作为这个 Service 的 backend。

apiVersion: v1
kind: Service
metadata:name: hellolabels:app: hello
spec:ports:- port: 80targetPort: 80selector:app: hello

六、kubectl create还是 kubectl replace二者区别

kubectl create -f 还是 kubectl replace -f 都可以创建资源,但是有什么区别呢,请细品下面讲解。

kubectl create:

  • kubectl create命令可创建新资源。 因此,如果再次运行该命令,则会抛出错误,因为资源名称在名称空间中应该是唯一的。

kubectl apply:

  • kubectl apply命令将配置应用于资源。 如果资源不在那里,那么它将被创建。 kubectl apply命令可以多次运行,因为它只是应用如下所示的配置。 在这种情况下,配置没有改变。 所以,pod没有改变。
  • 简单来说,如果在单个文件上运行操作以创建资源,则create和apply基本相同。 但是, apply允许您在目录下的多个文件上同时创建和修补。

Kubernetes(k8s) YAML文件详解相关推荐

  1. Kubernetes之yaml文件详解(汇总-详细)

    一.YAML基础 YAML是专门用来写配置文件的语言,非常简洁和强大,使用比json更方便.它实质上是一种通用的数据串行化格式. YAML语法规则: 大小写敏感 使用缩进表示层级关系 缩进时不允许使用 ...

  2. Kubernetes二进制集群部署+Web管理界面+kubectl 命令管理+YAML文件详解(集合)

    Kubernetes---- 二进制集群部署(ETCD集群+Flannel网络) Kubernetes----单节点部署 Kubernetes----双master节点二进制部署 Kubernetes ...

  3. K8s创建pod yaml文件详解

    kubernetes创建pod的yaml文件,参数说明 apiVersion: v1 #指定api版本,此值必须在kubectl apiversion中 kind: Pod #指定创建资源的角色/类型 ...

  4. 三、kubernetes 集群 YAML 文件详解

    1. 简单说明 是一个可读性高,用来表大数据列的格式.Yaml的意思其实是:仍是一种标记语言,但是为了强调这种语言以数据为中心.而不是以标记语言为重点. 2. 基本语法 缩进时不允许使用Tab键,只允 ...

  5. 5、kubernetes 集群 YAML 文件详解

    文章目录 一.概述 二.YAML文件介绍 2.1 YAML概述 2.2 YAML 基本语法 2.3 YAML 支持的数据结构 2.3.1 对象 2.3.2 数组 2.3.3 纯量(scalars) 三 ...

  6. 【删】【Kubernetes视频学习笔记】Kubernetes集群YAML文件详解

    文章目录 概述 YAML文件介绍 YAML概述 YAML 基本语法 YAML 支持的数据结构 对象 数组 YAML文件组成部分 控制器的定义 被控制的对象 属性说明 如何快速编写YAML文件 使用ku ...

  7. dart系列之:元世界pubspec.yaml文件详解

    文章目录 简介 pubspec.yaml支持的字段 一个例子 字段详情 总结 简介 pubspec.yaml是所有dart项目的灵魂,它包含了所有dart项目的依赖信息和其他元信息,所以pubspec ...

  8. 【OpenCV】OpenCV实战从入门到精通之 -- 输入输出XML和YAML文件详解

    1.XML和YAML文件简介 XML文件是一种元标记语言,即开发者可以根据自身需要定义自己的标记.它是一种语义和结构语言,描述了文档的语义和结构. YAML以数据为中心,是一个可读性高,用来表达资料序 ...

  9. yaml及使用PyYaml操作yaml文件详解

    1.yaml主要用途 YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便. 2.yaml支持的数据结构 数据结构名称 包含的数据类型 描述说明 纯量 字符串.布尔值.整数. ...

最新文章

  1. Linux下用C获取当前系统时间
  2. 不断演进的 Chrome 安全标识
  3. IOS项目之分层MVVM
  4. 一种JavaScript里小数的精确计算方式
  5. 【杭电多校2020】Minimum Index【Lyndon Word】
  6. 简约PHP导航源码个人页介绍
  7. 【万字详解+PPT下载】腾讯广告实时策略数据框架建设
  8. Mac下编译OpenCV for android
  9. js刷新当前页面的5种方式
  10. 物联网传感技术——压电式传感器
  11. 关于AFNetworking上传图片问题
  12. SCCM更新卡住恢复处理方法
  13. 协众信息技术平面海报设计,你知道多少
  14. H.265之三 -帧内预测(3)
  15. RabbitMQ的基础应用
  16. Web技术的发展 网络发展简介(三)
  17. Unity学习笔记--超简单:两个游戏对象直接用线连接(UI和世界坐标下均可)
  18. 电荷泵锁相环(CPPLL)基本结构及相关基本知识
  19. idea驼峰命名快捷方式
  20. 网络安全等级测评师培训教材(初级)-2021版(前三章)

热门文章

  1. 选购家用安防摄像头,考虑室内还是室外,无线还是有线
  2. WEB网站设计用户登录的安全机制
  3. Dynamic CRM 2016 IFD配置(1)证书颁发机构配置
  4. Oracle 语句大全,确实不错,赶紧转走!
  5. 实习总结和大数据BI
  6. 锚点(anchor)的理解
  7. Android工程师的职业规划篇(周末闲扯)
  8. element 给table设置thead和tbody
  9. 怎么免费提取PDF页面?
  10. android studio如何多moudle依赖同一个gradle配置