容器基础4-YAML 文件

在 Kubernetes 中,YAML 文件是定义和部署资源的核心方式,不同的kind字段代表不同类型的资源。以下是常见的 YAML 类型及其作用

1. 应用部署类
YAML 类型作用生活类比
Deployment定义应用的多副本部署,自动管理 Pod 生命周期(如扩容、滚动更新)。连锁餐厅:统一管理 10 家分店,保证每家店配置相同,可随时增减分店数量。
StatefulSet部署有状态应用(如数据库),保证 Pod 有固定 ID 和持久化存储。银行账户系统:每个账户必须有唯一 ID,数据永久保存,不能随意替换。
DaemonSet确保每个节点上运行一个 Pod 副本(如监控 Agent)。小区物业:每个楼必须有一个电梯监控器,实时上报运行状态。
Job/CronJob运行一次性或定时任务(如数据备份、定时计算)。快递员:送完今天的包裹就下班(Job),或每天早上 9 点准时送件(CronJob)。
2. 服务发现类
YAML 类型作用生活类比
Service为 Pod 提供固定 IP 和负载均衡,让外部或内部能访问应用。公司总机:客户打 400 电话,自动转接到空闲的客服人员(Pod)。
Ingress基于域名 / 路径的流量路由,实现 HTTP 层负载均衡(类似 Nginx 配置)。商场导视牌:根据 “餐饮区”“服装区” 引导顾客到不同店铺(Service)。
EndpointSlice记录 Service 对应的 Pod IP 列表,替代旧版 Endpoints,提升大规模集群性能。快递分拨中心:记录每个区域的快递员(Pod)联系方式,方便分配任务。
3. 存储类
YAML 类型作用生活类比
PersistentVolume (PV)集群提供的物理存储资源(如硬盘、云盘)。仓库:商场租用的外部仓库,用于存放商品库存。
PersistentVolumeClaim (PVC)应用对存储的请求(类似 “申请仓库空间”)。仓库申请表:店铺向商场申请 100㎡仓库,说明需要存放服装、保质期等要求。
StorageClass动态创建 PV 的模板,简化存储管理(如自动分配 SSD 或普通硬盘)。仓库类型选择:商场提供 “普通仓库”“冷藏仓库” 等模板,店铺按需选择。
4. 配置与密钥类
YAML 类型作用生活类比
ConfigMap存储应用配置(如数据库连接地址、配置文件),与容器解耦。餐厅菜单:把菜品价格、配料写在菜单上,服务员(容器)按菜单上菜,菜单可随时换。
Secret存储敏感信息(如密码、证书),加密存储,避免硬编码在代码中。保险柜:存放餐厅的营业执照、财务章,只有授权人员(特定容器)能访问。
5. 权限与安全类
YAML 类型作用生活类比
Namespace将集群资源隔离成虚拟 “空间”,避免不同团队 / 项目冲突。办公楼:不同公司租用不同楼层(Namespace),互相隔离,共享整栋楼的基础设施。
Role/Binding定义用户或服务账户的权限(如 “只读”“可删除 Pod”)。公司权限系统:给 HR 分配 “查看员工信息” 权限,给 IT 分配 “管理服务器” 权限。
NetworkPolicy定义 Pod 间的网络访问规则(如 “只允许 Web 服务器访问数据库”)。小区门禁:规定 “业主可自由出入,访客需登记,外卖只能到门口”。
6. 高级资源(了解即可)
YAML 类型作用生活类比
HorizontalPodAutoscaler (HPA)根据 CPU / 内存或自定义指标自动调整 Pod 数量。餐厅自动排班:根据客流量自动增减服务员数量,高峰时加人,低谷时减人。
CustomResourceDefinition (CRD)扩展 K8s API,自定义资源类型(如 “数据库集群”“AI 训练任务”)。自定义表单:公司创建 “报销申请” 表单,扩展原有办公系统功能。

二、如何快速区分 YAML 类型?看kind字段!

每个 YAML 文件都有这几个核心字段:

apiVersion: v1        # API版本(不同资源类型版本不同)
kind: Service         # 资源类型!关键看这里
metadata:
  name: my-service    # 资源名称
spec:
  # 具体配置...

例如:

  • kind: Deployment → 部署应用;
  • kind: Service → 暴露应用为服务;
  • kind: PersistentVolumeClaim → 申请存储。

三、实战案例:部署一个带数据库的 Web 应用

1. 部署 Web 应用(Deployment + Service)
# web-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: web-container
        image: nginx:1.23
        ports:
        - containerPort: 80
2. 暴露 Web 服务(Service)
# web-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: web-service
spec:
  type: LoadBalancer  # 外部可访问
  selector:
    app: web
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
3. 部署数据库(StatefulSet + PVC)
# db-statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
spec:
  serviceName: mysql
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: mysql:8.0
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-secret
              key: password
        ports:
        - containerPort: 3306
        volumeMounts:
        - name: mysql-data
          mountPath: /var/lib/mysql
  volumeClaimTemplates:
  - metadata:
      name: mysql-data
    spec:
      accessModes: ["ReadWriteOnce"]
      storageClassName: "standard"
      resources:
        requests:
          storage: 10Gi
  1. 部署应用 → Deployment(无状态)或 StatefulSet(有状态);
  2. 暴露服务 → Service(内部 / 外部访问)或 Ingress(HTTP 路由);
  3. 存储需求 → PersistentVolumeClaim + StorageClass
  4. 配置管理 → ConfigMap(普通配置)或 Secret(敏感信息);
  5. 权限控制 → Role + RoleBinding 或 ClusterRole + ClusterRoleBinding

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旗浩QH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值