三、kubernetes 集群 YAML 文件详解

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 是一个可读性高,用来表大数据列的格式。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
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
5天前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景
|
6天前
|
Kubernetes 持续交付 开发工具
ACK One GitOps:ApplicationSet UI简化多集群GitOps应用管理
ACK One GitOps新发布了多集群应用控制台,支持管理Argo CD ApplicationSet,提升大规模应用和集群的多集群GitOps应用分发管理体验。
|
28天前
|
Kubernetes 应用服务中间件 nginx
k8s学习--YAML资源清单文件托管服务nginx
k8s学习--YAML资源清单文件托管服务nginx
k8s学习--YAML资源清单文件托管服务nginx
|
21天前
|
Kubernetes 应用服务中间件 nginx
搭建Kubernetes v1.31.1服务器集群,采用Calico网络技术
在阿里云服务器上部署k8s集群,一、3台k8s服务器,1个Master节点,2个工作节点,采用Calico网络技术。二、部署nginx服务到k8s集群,并验证nginx服务运行状态。
240 1
|
26天前
|
Kubernetes Cloud Native 微服务
微服务实践之使用 kube-vip 搭建高可用 Kubernetes 集群
微服务实践之使用 kube-vip 搭建高可用 Kubernetes 集群
78 1
|
26天前
|
负载均衡 应用服务中间件 nginx
基于Ubuntu-22.04安装K8s-v1.28.2实验(二)使用kube-vip实现集群VIP访问
基于Ubuntu-22.04安装K8s-v1.28.2实验(二)使用kube-vip实现集群VIP访问
44 1
|
28天前
|
Kubernetes Linux 容器
1.xshell传不了文件输出0000如何解决.....2.k8s中metalLB文件内容
1.xshell传不了文件输出0000如何解决.....2.k8s中metalLB文件内容
|
28天前
ingress相关yaml文件报错且相关资源一切正常解决方法
ingress相关yaml文件报错且相关资源一切正常解决方法
ingress相关yaml文件报错且相关资源一切正常解决方法
|
17天前
|
Kubernetes Ubuntu Linux
Centos7 搭建 kubernetes集群
本文介绍了如何搭建一个三节点的Kubernetes集群,包括一个主节点和两个工作节点。各节点运行CentOS 7系统,最低配置为2核CPU、2GB内存和15GB硬盘。详细步骤包括环境配置、安装Docker、关闭防火墙和SELinux、禁用交换分区、安装kubeadm、kubelet、kubectl,以及初始化Kubernetes集群和安装网络插件Calico或Flannel。
|
23天前
|
Kubernetes Cloud Native 流计算
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
61 0

热门文章

最新文章

推荐镜像

更多