k8s集群中的yaml文件详解

本文介绍了YAML文件在Kubernetes中的应用,包括YAML的基本语法和创建资源对象的步骤。通过编写YAML文件,可以定义Deployment和Service,实现Pod的管理和对外服务的暴露。此外,还展示了如何通过kubectl命令自动生成和导出YAML文件,以及检查YAML字段帮助信息的方法。
一、yaml文件简介

Kubernetes只支持YAML和JSON格式创建资源对象,JSON格式用于接口之间消息的传递,适用于开发

YAML格式用于配置和管理,适用于云平台管理,YAML是一种简洁的非标记性语言

yaml的语法格式:

缩进标识层级关系
不支持制表符缩进,使用空格缩进
通常开头缩进两个空格
字符后缩进一个空格, 如冒号,逗号,-"—"表示YAML格式,一个文件的开始,用于分隔文件间。
“#”表示注释
二、使用YAML文件创建资源对象

1、查看资源版本标签

[root@master ~]# kubectl api-versions

在这里插入图片描述

2、例如:写一个yaml文件

[root@master ~]# mkdir demo
[root@master ~]# cd demo/
[root@master1 demo]# vim nginx-test.yaml
apiVersion: apps/v1      #指定api版本标签
kind: Deployment	    #定义资源的类型/角色,deployment为控制器
metadata:	           #定义资源的元数据信息
  name: nginx-test	  #定义资源的名称,在同一个namespace空间中必须是唯一的
  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	    #定义容器的对外端口

3、创建资源对象

[root@master1 demo]# kubectl create -f nginx.yaml 
deployment.apps/nginx created

[root@master demo]# kubectl get pod	查看创建的pod资源
NAME                              READY   STATUS    RESTARTS   AGE
nginx-deployment-d55b94fd-df6wp   1/1     Running   0          84s
nginx-deployment-d55b94fd-j9mhz   1/1     Running   0          84s
nginx-deployment-d55b94fd-qzc8r   1/1     Running   0          84s

4、创建service服务对外提供访问并测试

[root@master1 demo]# vi nginx-service.yaml
apiVersion: v1  
kind: Service  
metadata:
  name: nginx-service
  labels:
    app: nginx  
spec:
  type: NodePort  
  ports:
  - port: 80
    targetPort: 80  
  selector:
    app: nginx
[root@master1 demo]# kubectl create -f nginx-service.yaml 
service/nginx-service created

[root@master1 demo]# kubectl get svc
NAME            TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
kubernetes      ClusterIP   10.0.0.1     <none>        443/TCP        5d13h
nginx-service   NodePort    10.0.0.227   <none>        80:38425/TCP   14s

在浏览器输入node节点:端口即可访问。

在这里插入图片描述

使用命令快速生成YAML或者JSON文件

1、自动测试命令的正确性,并不执行创建(类似shell脚本中的sh -n)

[root@master1 demo]# kubectl run nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run
kubectl run --generator=deployment/apps.v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl create instead.
deployment.apps/nginx-deployment created (dry run)

2、自动生成yaml格式的文件不保存

#此命令直接生成yaml文件内容展示出来,并不会保存

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

在这里插入图片描述

3、自动生成json格式的文件

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

在这里插入图片描述

4、将生成YAML格式或者JSON格式文件导出

[root@master ~]# kubectl run nginx-1 --image=nginx --port=80 --replicas=3 --dry-run -o json(yaml) > test.json(yaml)

在这里插入图片描述
5、将现有的资源生成模板并导出

#可以用pod中的nginx来生成模板并导出
[root@master1 demo]# kubectl get pods
NAME                              READY   STATUS    RESTARTS   AGE
nginx-deployment-d55b94fd-df6wp   1/1     Running   0          14m
nginx-deployment-d55b94fd-j9mhz   1/1     Running   0          14m
nginx-deployment-d55b94fd-qzc8r   1/1     Running   0          14m

[root@master1 demo]# kubectl get deployment/nginx-deployment --export -o yaml > nginx-backup.yaml
[root@master1 demo]# ls
nginx-backup.yaml  nginx-service.yaml  nginx.yaml

6、查看yaml文件某一字段的帮助信息

[root@master ~]# kubectl explain pods.spec.containers
### 3.1 PersistentVolume (PV) YAML 配置详解 PersistentVolume 是 Kubernetes 中代表集群中一块存储资源的对象。它通常由管理员预先创建,也可以通过 StorageClass 动态供应。PV 的配置包括存储容量、访问模式、存储类型(如 `hostPath`、`nfs`、`aws-ebs` 等)以及存储类名称(storageClassName)[^2]。 #### 示例:使用 NFS 创建 PersistentVolume ```yaml apiVersion: v1 kind: PersistentVolume metadata: name: pv-nfs spec: capacity: storage: 10Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain storageClassName: nfs-storage nfs: server: 192.168.1.100 path: /data/nfs ``` - `capacity`: 定义 PV 的存储容量,通常以 Gi 为单位。 - `accessModes`: 指定 PV 的访问模式,如 `ReadWriteOnce`(单节点读写)、`ReadWriteMany`(多节点读写)等。 - `persistentVolumeReclaimPolicy`: 定义 PV 被释放后的处理策略,可选 `Retain`(保留)、`Recycle`(回收)或 `Delete`(删除)。 - `storageClassName`: 引用一个 StorageClass 名称,用于动态供应。 - `nfs`: 指定 NFS 服务器地址和共享路径。 --- ### 3.2 PersistentVolumeClaim (PVC) YAML 配置详解 PersistentVolumeClaim 是用户对存储资源的请求。它通过指定访问模式和存储容量来绑定到合适的 PV。如果集群启用了 StorageClass,则 PVC 可以动态触发 PV 的创建。 #### 示例:创建 PVC 并绑定到 StorageClass ```yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-nfs spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi storageClassName: nfs-storage ``` - `accessModes`: 请求的访问模式,必须与 PV 的 `accessModes` 匹配。 - `resources.requests.storage`: 请求的存储容量。 - `storageClassName`: 指定 PVC 所使用的 StorageClass,若不指定则使用默认 StorageClass[^5]。 --- ### 3.3 StorageClass YAML 配置详解 StorageClass 用于定义存储的“类别”或“等级”,并提供动态供应机制。管理员可以定义多个 StorageClass 来区分不同性能或类型的存储(如 SSD、HDD、NFS 等),并由 PVC 指定使用哪个类。 #### 示例:定义一个 NFS 类型的 StorageClass ```yaml apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: nfs-storage annotations: storageclass.kubernetes.io/is-default-class: "true" provisioner: example.com/nfs reclaimPolicy: Delete volumeBindingMode: Immediate allowVolumeExpansion: true ``` - `name`: StorageClass 的唯一标识。 - `annotations`: 可用于标记默认 StorageClass,如 `storageclass.kubernetes.io/is-default-class: "true"` 表示该类为默认类。 - `provisioner`: 指定用于动态供应的插件,如 `example.com/nfs`。 - `reclaimPolicy`: 定义 PVC 被删除后 PV 的处理方式,可选 `Delete` 或 `Retain`。 - `volumeBindingMode`: 控制卷绑定策略,`Immediate` 表示立即绑定,`WaitForFirstConsumer` 表示延迟到 Pod 调度时绑定。 - `allowVolumeExpansion`: 是否允许 PVC 动态扩展存储容量。 --- ### 3.4 完整示例:结合 PV、PVC 和 StorageClass 的 YAML 配置 #### 示例:使用 PVC 动态绑定 StorageClass 并挂载到 Pod ```yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: dynamic-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: managed-nfs-storage --- apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: my-container image: nginx volumeMounts: - name: pvc-volume mountPath: /usr/share/nginx/html volumes: - name: pvc-volume persistentVolumeClaim: claimName: dynamic-pvc ``` - PVC 使用 `storageClassName` 指定 StorageClass,Kubernetes 会自动为其创建 PV。 - Pod 使用 `persistentVolumeClaim` 类型的卷,并指定 PVC 名称进行挂载。 --- ### 3.5 查看 StorageClass 的命令 可以通过以下命令查看集群中已有的 StorageClass: ```bash kubectl get storageclass ``` 输出示例: ``` NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE managed-nfs-storage example.com/nfs Delete Immediate true 5m45s ``` 其中: - `PROVISIONER`:表示动态供应插件。 - `RECLAIMPOLICY`:回收策略。 - `VOLUMEBINDINGMODE`:卷绑定模式。 - `ALLOWVOLUMEEXPANSION`:是否支持扩展。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值