三、kubernetes 集群 YAML 文件详解

简介: 是一个可读性高,用来表大数据列的格式。Yaml的意思其实是:仍是一种标记语言,但是为了强调这种语言以数据为中心。而不是以标记语言为重点。

1. 简单说明

是一个可读性高,用来表大数据列的格式。Yaml的意思其实是:仍是一种标记语言,但是为了强调这种语言以数据为中心。而不是以标记语言为重点。

**

  1. 基本语法**

缩进时不允许使用Tab键,只允许使用空格
缩进时空格数目不重要,只要相同层级的元素左侧对齐即可

标识注释,从这个字节一直到行尾,都会被解释器忽略

使用—表示新的yaml文件开始
3. YAML支持的数据结构
对象:键值对的集合,又称为映射(mapping)、哈希(hashes)/字典(dictionary)
数组:一组按次序排列的值,又称为序列(sequence)/ 列表 (list)
纯量(scalars):单个的,不可再分的值
4. K8S YAML字段
4.1必须存在的属性

图片.png

4.2 主要对象
图片.png

图片.png

图片.png

图片.png

图片.png

5.如何快速编写yaml文件
5.1 使用kubectl create命令生成yaml文件

kubectl  create deployment web --image=nginx -o yaml --dry-run > my1.yaml

dry-run   #不启动改Pod
-o        #输入yaml文件

5.2 使用kubectl get 命令导出Pod的yaml文件

kubectl get deploy nginx -o yaml > my.yaml

各种实例资源YAML文件手册
1.glusterfsPV.yaml
1.1 endpoint. yaml

apiVersion: v1
kind: Endpoints
metadata: ------------------------------------#元数据
  name: glusterfs ----------------------------#ep名称
  namespace: default -------------------------#命名空间
subsets: -------------------------------------#配置glusterfs连接信息
- addresses: ---------------------------------#添加glusterfs分布式地址
  - ip: 10.0.0.14 
  - ip: 10.0.0.15
  - ip: 10.0.0.16
  ports: -------------------------------------#设定glusterfs服务端口
  - port: 49152
    protocol: TCP

1.2 glusterfs server. yaml

apiVersion: v1
kind: Service
metadata: 
  name: glusterfs
  namespace: default
spec:
  ports:
  - port: 49152
    protocol: TCP
    targetPort: 49152
  sessionAffinity: None ----------------------#是否支持session
  type: ClusterIP

2.PV.yaml

apiVersion: v1
kind: PersistentVolume
metadata: -------------------------------------#元数据
  name: tomcat-mysql --------------------------#pv名称
  labels: -------------------------------------#标签信息
    xxx: xxx 
spec: -----------------------------------------#定义pv模板
  capacity: -----------------------------------#定义pv容量
    storage: 10Gi 
  accessModes: --------------------------------#访问模型;对象列表 
                           #ReadWriteOnce一人读写
                           #ReadOnlyMany 多人只读
                           #ReadWriteMany多人读写
    - ReadWriteMany 
  persistentVolumeReclaimPolicy: Recycle ------#pvc解除绑定后,数据操作
                                               #默认是Retain保留生成的数据、
                                               #recycle回收
                                               #delete,删除
=========================================================================================  
  #nfs: 类型
  nfs:  ---------------------------------------#nfs挂载类型
    path: "/data/tomcat" ----------------------#nfs服务目录
    server: 172.16.20.101 ---------------------#nfs服务地址
    readOnly: false ---------------------------#关闭只读
=========================================================================================
   #glusterfs:分布式类型 注意:使用glusterfs 需要提交部署endpoint服务
   glusterfs: -------------------------------#glusterfs挂载类型
    endpoints: "glusterfs" --------------------#端点类型 请保持与glusterfs ep服务名称一致。
    path: "qiangge" ---------------------------#挂载目录 glusterfs文件名称
    readOnly: false ---------------------------#关闭只读

3.PVC.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata: -------------------------------------#元数据
  name: html ----------------------------------#pvc名称
  namespace: xxxx -----------------------------#命名空间
spec: -----------------------------------------#pvc模板
  selector: -----------------------------------#标签选择器
    matchLabels:  -----------------------------#必须与pv标签信息一致才可关联 如果不指定则随机匹配pv
    xxx: xxx
  accessModes: --------------------------------#访问模型;对象列表 
                           #ReadWriteOnce一人读写
                           #ReadOnlyMany 多人只读
                           #ReadWriteMany多人读写
    - ReadWriteMany
  resources: ----------------------------------#资源信息
    requests: ---------------------------------#请求容量
      storage: 99Gi
  storageClassName: xxxx -----------------#存储类名称 注意1.5.2版本不可用
  volumeMode: Filesystem ----------------------#卷模式为文件系统 注意1.5.2版本不可用
  volumeName: pvc-ff926bb2-3029-4a08-b123-31a2ad1b6a19 --#卷名称

4.Deployment.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata: ----------------------------------------#元数据
  annotations: -------------------------------------#注释信息
    deployment.kubernetes.io/revision: '1'
    k8s.kuboard.cn/ingress: 'false'
    k8s.kuboard.cn/service: NodePort
    k8s.kuboard.cn/workload: nextcloud
  labels:-------------------------------------------#标签信息
    k8s.kuboard.cn/layer: ''            
    k8s.kuboard.cn/name: nextcloud
  name: nextcloud-----------------------------------#名称
  namespace: nextcloud------------------------------#命名空间 
spec:-----------------------------------------------#定义容器模板,该模板可以包含多个容器 
  replicas: 3---------------------------------------#副本数量
  selector:-----------------------------------------#标签选择器
    matchLabels:
      k8s.kuboard.cn/layer: ''
      k8s.kuboard.cn/name: nextcloud
  strategy:-----------------------------------------#滚动升级策略
    type: RollingUpdate-----------------------------#类型
    rollingUpdate:----------------------------------#由于replicas为3,则整个升级,pod个数在2-4个之间    
      maxSurge: 25%---------------------------------#滚动升级时会先启动25%pod  
      maxUnavailable: 25%---------------------------#滚动升级时允许的最大Unavailable的pod个数
  template:                     #镜像模板                   
    metadata: ------------------------------------#元数据
      labels:---------------------------------------#标签
        k8s.kuboard.cn/layer: ''
        k8s.kuboard.cn/name: nextcloud
    spec: ------------------------------------------#定义容器模板,该模板可以包含多个容器
      containers: ----------------------------------#容器信息
    - name: nextcloud --------------------------#容器名称
          image: '172.16.20.100/library/nextcloud:yan' #镜像名称
          imagePullPolicy: Always ------------------#镜像下载策略 
          ports:
            - name: http
              containerPort: 80
              protocol: TCP
          env
          resources: -------------------------------#CPU内存限制
        limits: --------------------------------#限制cpu内存                      
              cpu: 200m
              memory: 200m
            requests: ------------------------------#请求cpu内存
              cpu: 100m
              memory: 100m
          securityContext: -------------------------#安全设定
            privileged: true -----------------------#开启享有特权
          volumeMounts: ----------------------------#挂载volumes中定义的磁盘
        - name: html ---------------------------#挂载容器1
              mountPath: /var/www/html 
            - name: session ------------------------#挂载容器1
              mountPath: /var/lib/php/session       
      volumes:  ------------------------------------#在该pod上定义共享存储卷列表
        - name: html -------------------------------#共享存储卷名称 (volumes类型有很多种)
          persistentVolumeClaim: -------------------#volumes类型为pvc
            claimName: html  -----------------------#关联pvc名称
        - name: session
          persistentVolumeClaim:
            claimName: session        
      restartPolicy: Always ------------------------#Pod的重启策略 
                              #Always表示一旦不管以何种方式终止运行,
                              #kubelet都将重启,
                              #OnFailure表示只有Pod以非0退出码退出才重启,
                              #Nerver表示不再重启该Pod
      schedulerName: default-scheduler -------------#指定pod调度到节点

5.Pod.yaml

apiVersion: v1             #指定api版本,此值必须在kubectl apiversion中  
  kind: Pod                  #指定创建资源的角色/类型  
  metadata:                  #资源的元数据/属性  
    name: django-pod         #资源的名字,在同一个namespace中必须唯一  
    labels:                  #设定资源的标签,使这个标签在service网络中备案,以便被获知
      k8s-app: django
      version: v1  
      kubernetes.io/cluster-service: "true"  
    annotations:             #设置自定义注解列表  
       - name: String         #设置自定义注解名字  
  spec:                      #设置该资源的内容  
    restartPolicy: Always    #表示自动重启,一直都会有这个容器运行
    nodeSelector:            #选择node节点14     zone: node1  
    containers:  
    - name: django-pod        #容器的名字  
      image: django:v1.1      #容器使用的镜像地址  
      imagePullPolicy: Never #三个选择Always、Never、IfNotPresent,每次启动时检查和更新(从registery)images的策略,
                             # Always,每次都检查
                             # Never,每次都不检查(不管本地是否有)
                             # IfNotPresent,如果本地有就不检查,如果没有就拉取
      command: ['sh']        #启动容器的运行命令,将覆盖容器中的Entrypoint,对应Dockefile中的ENTRYPOINT  
      args: ["$(str)"]       #启动容器的命令参数,对应Dockerfile中CMD参数  
      env:                   #指定容器中的环境变量  
      - name: str            #变量的名字  
        value: "/etc/run.sh" #变量的值  
      resources:             #资源管理
        requests:            #容器运行时,最低资源需求,也就是说最少需要多少资源容器才能正常运行  
        cpu: 0.1           #CPU资源(核数),两种方式,浮点数或者是整数+m,0.1=100m,最少值为0.001核(1m)
          memory: 32Mi       #内存使用量  
        limits:              #资源限制  
          cpu: 0.5  
          memory: 32Mi  
      ports:  
      - containerPort: 8080    #容器开发对外的端口
        name: uwsgi          #名称
        protocol: TCP  
      livenessProbe:         #pod内容器健康检查的设置
        httpGet:             #通过httpget检查健康,返回200-399之间,则认为容器正常  
          path: /            #URI地址  
          port: 8080  
          #host: 127.0.0.1   #主机地址  
          scheme: HTTP  
        initialDelaySeconds: 180 #表明第一次检测在容器启动后多长时间后开始  
        timeoutSeconds: 5    #检测的超时时间  
        periodSeconds: 15    #检查间隔时间  
        #也可以用这种方法  
        #exec: 执行命令的方法进行监测,如果其退出码不为0,则认为容器正常  
        #  command:  
        #    - cat  
        #    - /tmp/health  
        #也可以用这种方法  
        #tcpSocket: //通过tcpSocket检查健康   
        #  port: number   
      lifecycle:             #生命周期管理(钩子)  
        postStart:           #容器运行之前运行的任务  
          exec:  
            command:  
              - 'sh'  
              - 'yum upgrade -y'  
        preStop:             #容器关闭之前运行的任务  
          exec:  
            command: ['service httpd stop']  
      volumeMounts:          #挂载设置
      - name: volume         #挂载设备的名字,与volumes[*].name 需要对应    
        mountPath: /data     #挂载到容器的某个路径下  
        readOnly: True  
    volumes:                 #定义一组挂载设备  
    - name: volume           #定义一个挂载设备的名字  
      #meptyDir: {}  
      hostPath:  
        path: /opt           #挂载设备类型为hostPath,路径为宿主机下的/opt

6.Service.yaml

apiVersion: v1
kind: Service
metadata:  ---------------------------------#元数据
  annotations: -----------------------------#注释信息
    k8s.kuboard.cn/workload: nextcloud
  labels: ----------------------------------#标签信息
    k8s.kuboard.cn/layer: ''
    k8s.kuboard.cn/name: nextcloud
  name: nextcloud --------------------------#名称
  namespace: nextcloud ---------------------#命名空间
spec: --------------------------------------#定义Service模板
  clusterIP: 10.0.181.206 ------------------#指定svcip地址 不指定则随机 
  
 =================================================================================================
  #NodePort类型:集群外网络
  type: NodePort ---------------------------#类型为NodePort  
  ports:
    - name: mnwwwp
      nodePort: 30001 ----------------------#当type = NodePort时,指定映射到物理机的端口号
      port: 80 -----------------------------#服务监听的端口号
      protocol: TCP ------------------------#端口协议,支持TCP和UDP,默认TCP
      targetPort: 80 -----------------------#需要转发到后端Pod的端口号
  
  ==================================================================================================
  #ClusterIP类型: 集群内网络
  type: ClusterIP --------------------------#
  ports:
    - name: mnwwwp
      port: 80
      protocol: TCP
      targetPort: 80
    - name: j5smwx
      port: 22
      protocol: TCP
      targetPort: 22
      
  selector:  -------------------------------#label selector配置,将选择具有label标签的Pod作为管理 
    k8s.kuboard.cn/layer: ''
    k8s.kuboard.cn/name: nextcloud
  sessionAffinity: None --------------------#是否支持session
相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
4月前
|
存储 IDE 测试技术
玩转数据处理利器:学会使用 YAML 文件轻松处理数据
玩转数据处理利器:学会使用 YAML 文件轻松处理数据
61 0
|
5月前
|
Kubernetes Cloud Native Docker
云原生|kubernetes|网络插件flannel二进制部署和calico的yaml清单部署总结版
云原生|kubernetes|网络插件flannel二进制部署和calico的yaml清单部署总结版
154 0
|
3月前
|
机器学习/深度学习 数据可视化 计算机视觉
YOLOv5改进 | 2023Neck篇 | 轻量级跨尺度特征融合模块CCFM(附yaml文件+添加教程)
YOLOv5改进 | 2023Neck篇 | 轻量级跨尺度特征融合模块CCFM(附yaml文件+添加教程)
174 1
|
15天前
|
XML 存储 Java
【OpenCV】—输入输出XML和YAML文件
【OpenCV】—输入输出XML和YAML文件
|
1月前
|
JSON Kubernetes Go
IDEA使用Kubernetes插件编写YAML
IDEA使用Kubernetes插件编写YAML
42 0
IDEA使用Kubernetes插件编写YAML
|
3月前
|
Shell Go
go 编辑yaml 文件
在Go语言中编辑YAML文件通常涉及以下步骤: 1. 读取YAML文件内容到字符串。 2. 使用YAML解析库(如`gopkg.in/yaml.v2`)将字符串解析为Go数据结构(如`map[string]interface{}`或自定义的结构体)。 3. 修改数据结构中的值以更新YAML内容。 4. 将修改后的数据结构编码回YAML格式的字符串。 5. 将字符串写回到YAML文件。 以下是一个简单的例子,展示了如何使用`gopkg.in/yaml.v2`库来编辑YAML文件: 首先,确保你已经安装了`gopkg.in/yaml.v2`包: ```bash go get gopkg.i
|
3月前
|
编解码 文件存储 计算机视觉
YOLOv5改进 | 2023Neck篇 | BiFPN双向特征金字塔网络(附yaml文件+代码)
YOLOv5改进 | 2023Neck篇 | BiFPN双向特征金字塔网络(附yaml文件+代码)
260 0
|
4月前
|
移动开发 开发框架 JavaScript
什么是 SAP UI5 项目 ui5.yaml 文件中的 specVersion 字段
什么是 SAP UI5 项目 ui5.yaml 文件中的 specVersion 字段
18 0
|
5月前
|
Java
Java【代码分享 11】yaml配置List和Map参数对象的配置信息及类文件实例分享(效仿GatewayDynamic+DynamicDataSource的注入方法)
Java【代码分享 11】yaml配置List和Map参数对象的配置信息及类文件实例分享(效仿GatewayDynamic+DynamicDataSource的注入方法)
54 0
|
2天前
|
存储 运维 监控
Kubernetes 集群的持续监控与性能优化策略
【5月更文挑战第11天】在微服务架构日益普及的当下,Kubernetes 已成为容器编排的事实标准。随着其在不同规模企业的广泛采用,如何确保 Kubernetes 集群的高效稳定运行变得至关重要。本文将探讨一套系统的 Kubernetes 集群监控方法,并结合实践经验分享针对性能瓶颈的优化策略。通过实时监控、日志分析与定期审计的结合,旨在帮助运维人员快速定位问题并提出解决方案,从而提升系统的整体表现。