k8s核心概念

Kubernetes (K8s) 中,配置(或资源)主要是指用于定义和管理集群内的各种组件和服务的 YAML 或 JSON 文件。这些配置文件定义了 Kubernetes 资源对象的行为和属性。Kubernetes 中有许多类型的配置对象,每个类型的配置都有不同的功能和目的。

下面是常见的 Kubernetes 配置类型及其作用:

1. Pod

  • 定义:Pod 是 Kubernetes 中最小的调度单位,通常包含一个或多个容器,容器共享网络和存储资源。

  • 用途:用于运行单个应用或一组紧密相关的应用容器。

    示例配置:

    yaml 复制代码
    apiVersion: v1
    kind: Pod
    metadata:
      name: mypod
    spec:
      containers:
        - name: mycontainer
          image: myimage:latest

2. Deployment

  • 定义:Deployment 用于管理一组 Pod 的副本,提供声明式的应用部署方式,可以进行滚动更新、扩容、缩容等操作。

  • 用途:用来管理 Pod 的生命周期,确保指定数量的 Pod 始终在运行。

    示例配置:

    yaml 复制代码
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: myapp-deployment
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: myapp
      template:
        metadata:
          labels:
            app: myapp
        spec:
          containers:
            - name: myapp
              image: myapp-image:latest

3. Service

  • 定义:Service 是一个稳定的访问入口,用于暴露一组 Pod 的应用服务,提供负载均衡和发现机制。

  • 用途:用于外部访问或集群内部服务发现,将请求流量路由到正确的 Pod。

    示例配置:

    yaml 复制代码
    apiVersion: v1
    kind: Service
    metadata:
      name: myapp-service
    spec:
      selector:
        app: myapp
      ports:
        - protocol: TCP
          port: 80
          targetPort: 8080

4. Ingress

  • 定义:Ingress 是用于管理外部 HTTP/HTTPS 访问到集群服务的 API 资源,提供 HTTP 路由和负载均衡。

  • 用途 :用于配置外部访问流量的路由规则,通常与 Ingress Controller 配合使用。

    示例配置:

    yaml 复制代码
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: myapp-ingress
    spec:
      rules:
        - host: myapp.example.com
          http:
            paths:
              - path: /
                pathType: Prefix
                backend:
                  service:
                    name: myapp-service
                    port:
                      number: 80

5. ConfigMap

  • 定义:ConfigMap 用于存储非敏感的配置信息,可以供应用容器使用。

  • 用途:用来保存环境变量、配置文件等配置信息,容器可以通过挂载方式访问这些配置信息。

    示例配置:

    yaml 复制代码
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: myapp-config
    data:
      MYAPP_ENV: production
      MYAPP_LOG_LEVEL: debug

6. Secret

  • 定义:Secret 用于存储敏感信息,如密码、令牌或证书。

  • 用途:用来保护敏感数据,并且可以通过加密的方式存储和管理。

    示例配置:

    yaml 复制代码
    apiVersion: v1
    kind: Secret
    metadata:
      name: myapp-secret
    type: Opaque
    data:
      password: cGFzc3dvcmQ=  # base64 encoded "password"

7. PersistentVolume (PV)

  • 定义:PersistentVolume 是集群中的一个存储资源对象,代表集群中的一块持久化存储空间。

  • 用途:用于为应用提供持久化存储,可以挂载到 Pod 中。

    示例配置:

    yaml 复制代码
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: myapp-pv
    spec:
      capacity:
        storage: 10Gi
      accessModes:
        - ReadWriteOnce
      hostPath:
        path: /mnt/data/myapp

8. PersistentVolumeClaim (PVC)

  • 定义:PersistentVolumeClaim 是对 PersistentVolume 的请求,用户通过 PVC 来申请特定容量和访问模式的存储。

  • 用途:应用通过 PVC 来请求并使用存储资源。

    示例配置:

    yaml 复制代码
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: myapp-pvc
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi

9. StatefulSet

  • 定义:StatefulSet 用于管理有状态应用的部署,提供唯一的网络标识、稳定的存储和有序部署等特性。

  • 用途:适用于数据库、缓存等需要持久化状态和顺序启动的应用。

    示例配置:

    yaml 复制代码
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: mydb-statefulset
    spec:
      serviceName: "mydb"
      replicas: 3
      selector:
        matchLabels:
          app: mydb
      template:
        metadata:
          labels:
            app: mydb
        spec:
          containers:
            - name: mydb
              image: mydb-image:latest
              volumeMounts:
                - name: mydb-storage
                  mountPath: /data/db
      volumeClaimTemplates:
        - metadata:
            name: mydb-storage
          spec:
            accessModes:
              - ReadWriteOnce
            resources:
              requests:
                storage: 10Gi

10. Job

  • 定义:Job 用于管理批处理任务的执行,确保任务成功执行一次。

  • 用途:适用于需要执行一次性任务(例如数据库迁移或定时任务)并确保任务完成的场景。

    示例配置:

    yaml 复制代码
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: myapp-job
    spec:
      template:
        spec:
          containers:
            - name: myapp-job
              image: myapp-job-image:latest
          restartPolicy: Never

11. CronJob

  • 定义:CronJob 用于定期调度执行 Job,类似于 Linux 系统中的 cron。

  • 用途:适用于定时执行任务,如备份、日志清理等。

    示例配置:

    yaml 复制代码
    apiVersion: batch/v1
    kind: CronJob
    metadata:
      name: myapp-cronjob
    spec:
      schedule: "0 0 * * *"  # 每天午夜执行
      jobTemplate:
        spec:
          template:
            spec:
              containers:
                - name: myapp-cronjob
                  image: myapp-cronjob-image:latest
              restartPolicy: OnFailure

12. ReplicaSet

  • 定义:ReplicaSet 确保指定数量的 Pod 实例在集群中始终运行。

  • 用途:通常与 Deployment 一起使用,来保证有指定数量的副本 Pod 持续运行。

    示例配置:

    yaml 复制代码
    apiVersion: apps/v1
    kind: ReplicaSet
    metadata:
      name: myapp-replicaset
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: myapp
      template:
        metadata:
          labels:
            app: myapp
        spec:
          containers:
            - name: myapp
              image: myapp-image:latest

13. Namespace

  • 定义:Namespace 用于在 Kubernetes 中将资源隔离成不同的命名空间,使得同一集群内的多个团队或项目能够共享资源而不干扰。

  • 用途:将集群资源进行隔离,便于组织和管理。

    示例配置:

    yaml 复制代码
    apiVersion: v1
    kind: Namespace
    metadata:
      name: myapp-namespace

总结

Kubernetes 提供了丰富的资源对象来支持应用的部署、管理、扩展、监控和存储等需求。每种资源对象都有其独特的功能,帮助你在集群中实现不同的场景。常见的配置类型包括:

  • Pod、Deployment、ReplicaSet:用于管理应用的容器和副本。
  • Service、Ingress:用于暴露应用和服务发现。
  • ConfigMap、Secret:用于配置和管理敏感信息。
  • **Persistent

Volume、PersistentVolumeClaim、StatefulSet**:用于持久化存储和有状态应用。

  • Job、CronJob:用于执行批处理任务或定时任务。
  • Namespace:用于资源隔离和组织。

这些配置文件通常使用 YAML 格式定义,并通过 kubectl 命令行工具应用到 Kubernetes 集群中。

相关推荐
脚踏实地皮皮晨14 分钟前
003006001_WrapPanel控件
开发语言·c#·.net·wpf·visual studio
上海安当技术36 分钟前
单点登录 SSO 怎么选协议?SAML 2.0 / OAuth 2.0 / OIDC / CAS 对比与 ERP、OA、CRM 接入实战
java·开发语言
mifengxing37 分钟前
Java集合与泛型
java·算法·复习笔记
不才不才不不才1 小时前
Spring 源码系列(14): JDK 动态代理 vs CGLIB,以及拦截器责任链
java·开发语言·spring
mifengxing1 小时前
计算机组成原理——存储器系统
开发语言·考研·计算机组成原理·复习笔记·计算机408
流云鹤1 小时前
05Java学习day(5)
java·学习
用户3126874877201 小时前
Spring 事件机制到底怎么传播的?ApplicationEvent 源码拆解
java·spring
默辨1 小时前
Spring AI Alibaba 核心知识点
java·ai·spring ai·spring alibaba
乐观的Terry2 小时前
10、发布系统-路由管理与灰度发布
java
唐青枫2 小时前
Java WebLogic 实战指南:从 Domain、数据源到 WAR 部署和集群管理
java