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

相关推荐
LKID体3 分钟前
Python操作neo4j库py2neo使用之py2neo 删除及事务相关操作(三)
开发语言·python·neo4j
小屁孩大帅-杨一凡4 分钟前
Python-flet实现个人视频播放器
开发语言·python·音视频
万琛5 分钟前
【java-Neo4j 5开发入门篇】-最新Java开发Neo4j
java·neo4j
算家云7 分钟前
快速识别模型:simple_ocr,部署教程
开发语言·人工智能·python·ocr·数字识别·检测模型·英文符号识别
Thomas_Cai18 分钟前
Python后端flask框架接收zip压缩包方法
开发语言·python·flask
霍先生的虚拟宇宙网络20 分钟前
webp 网页如何录屏?
开发语言·前端·javascript
温吞-ing23 分钟前
第十章JavaScript的应用
开发语言·javascript·ecmascript
Bald Baby23 分钟前
JWT的使用
java·笔记·学习·servlet
刘大浪24 分钟前
后端数据增删改查基于Springboot+mybatis mysql 时间根据当时时间自动填充,数据库连接查询不一致,mysql数据库连接不好用
数据库·spring boot·mybatis