在 Kubernetes (K8s) 中,配置(或资源)主要是指用于定义和管理集群内的各种组件和服务的 YAML 或 JSON 文件。这些配置文件定义了 Kubernetes 资源对象的行为和属性。Kubernetes 中有许多类型的配置对象,每个类型的配置都有不同的功能和目的。
下面是常见的 Kubernetes 配置类型及其作用:
1. Pod
-
定义:Pod 是 Kubernetes 中最小的调度单位,通常包含一个或多个容器,容器共享网络和存储资源。
-
用途:用于运行单个应用或一组紧密相关的应用容器。
示例配置:
yamlapiVersion: v1 kind: Pod metadata: name: mypod spec: containers: - name: mycontainer image: myimage:latest
2. Deployment
-
定义:Deployment 用于管理一组 Pod 的副本,提供声明式的应用部署方式,可以进行滚动更新、扩容、缩容等操作。
-
用途:用来管理 Pod 的生命周期,确保指定数量的 Pod 始终在运行。
示例配置:
yamlapiVersion: 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。
示例配置:
yamlapiVersion: 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 配合使用。
示例配置:
yamlapiVersion: 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 用于存储非敏感的配置信息,可以供应用容器使用。
-
用途:用来保存环境变量、配置文件等配置信息,容器可以通过挂载方式访问这些配置信息。
示例配置:
yamlapiVersion: v1 kind: ConfigMap metadata: name: myapp-config data: MYAPP_ENV: production MYAPP_LOG_LEVEL: debug
6. Secret
-
定义:Secret 用于存储敏感信息,如密码、令牌或证书。
-
用途:用来保护敏感数据,并且可以通过加密的方式存储和管理。
示例配置:
yamlapiVersion: v1 kind: Secret metadata: name: myapp-secret type: Opaque data: password: cGFzc3dvcmQ= # base64 encoded "password"
7. PersistentVolume (PV)
-
定义:PersistentVolume 是集群中的一个存储资源对象,代表集群中的一块持久化存储空间。
-
用途:用于为应用提供持久化存储,可以挂载到 Pod 中。
示例配置:
yamlapiVersion: 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 来请求并使用存储资源。
示例配置:
yamlapiVersion: v1 kind: PersistentVolumeClaim metadata: name: myapp-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi
9. StatefulSet
-
定义:StatefulSet 用于管理有状态应用的部署,提供唯一的网络标识、稳定的存储和有序部署等特性。
-
用途:适用于数据库、缓存等需要持久化状态和顺序启动的应用。
示例配置:
yamlapiVersion: 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 用于管理批处理任务的执行,确保任务成功执行一次。
-
用途:适用于需要执行一次性任务(例如数据库迁移或定时任务)并确保任务完成的场景。
示例配置:
yamlapiVersion: 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。
-
用途:适用于定时执行任务,如备份、日志清理等。
示例配置:
yamlapiVersion: 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 持续运行。
示例配置:
yamlapiVersion: 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 中将资源隔离成不同的命名空间,使得同一集群内的多个团队或项目能够共享资源而不干扰。
-
用途:将集群资源进行隔离,便于组织和管理。
示例配置:
yamlapiVersion: 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 集群中。