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 集群中。

相关推荐
科兴第一吴彦祖几秒前
基于Spring Boot + Vue 3的乡村振兴综合服务平台
java·vue.js·人工智能·spring boot·推荐算法
ajassi20002 分钟前
开源 java android app 开发(十八)最新编译器Android Studio 2025.1.3.7
android·java·开源
纤瘦的鲸鱼6 分钟前
Spring Gateway 全面解析:从入门到进阶实践
java·spring·gateway
缘的猿8 分钟前
云计算划分标准与Kubernetes NetworkPolicy深度解析
容器·kubernetes·云计算
用户32941900421620 分钟前
Java接入DeepSeek实现流式、联网、知识库以及多轮问答
java
Knight_AL24 分钟前
浅拷贝与深拷贝详解:概念、代码示例与后端应用场景
android·java·开发语言
DolphinScheduler社区26 分钟前
# 3.1.8<3.2.0<3.3.1,Apache DolphinScheduler集群升级避坑指南
java·大数据·开源·apache·任务调度·海豚调度
枫叶丹426 分钟前
【Qt开发】输入类控件(六)-> QDial
开发语言·qt
兜兜风d'28 分钟前
redis字符串命令
数据库·redis·缓存
思考的笛卡尔1 小时前
Go语言实战:高并发服务器设计与实现
服务器·开发语言·golang