k8s的配置文件总结

在 Kubernetes 中,配置文件 是定义集群资源的核心,通常以 YAML 或 JSON 格式编写。以下是 Kubernetes 中关键的配置文件类型及其作用:


1. 核心工作负载配置

(1) Deployment

用途 :定义无状态应用的 Pod 副本管理策略(滚动更新、回滚、扩缩容)。

核心字段

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: app
        image: nginx:1.21
        ports:
        - containerPort: 80
(2) StatefulSet

用途 :管理有状态应用(如数据库),提供稳定的网络标识和持久化存储。

关键字段volumeClaimTemplates(自动创建 PVC)。

yaml 复制代码
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
spec:
  serviceName: mysql
  replicas: 3
  volumeClaimTemplates:
  - metadata:
      name: data
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 10Gi
(3) DaemonSet

用途:在集群每个节点上运行一个 Pod(如日志收集、节点监控)。

yaml 复制代码
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluentd
spec:
  selector:
    matchLabels:
      name: fluentd
  template:
    metadata:
      labels:
        name: fluentd
    spec:
      containers:
      - name: fluentd
        image: fluentd:latest

2. 服务与网络配置

(1) Service

用途 :暴露 Pod 为网络服务,支持负载均衡。

类型ClusterIP(默认)、NodePortLoadBalancer

yaml 复制代码
apiVersion: v1
kind: Service
metadata:
  name: web-service
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 8080
  selector:
    app: web-app
(2) Ingress

用途:定义 HTTP/HTTPS 路由规则(如域名、SSL 证书)。

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

3. 配置与存储

(1) ConfigMap

用途:存储非敏感配置(环境变量、配置文件)。

yaml 复制代码
apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  app.properties: |
    server.port=8080
    logging.level=INFO
(2) Secret

用途:存储敏感数据(密码、Token),需 Base64 编码。

yaml 复制代码
apiVersion: v1
kind: Secret
metadata:
  name: db-secret
type: Opaque
data:
  username: dXNlcm5hbWU=  # "username" 的 Base64
  password: cGFzc3dvcmQ=  # "password" 的 Base64
(3) PersistentVolume (PV) / PersistentVolumeClaim (PVC)

PV :定义集群存储资源(如 NFS、云存储)。

PVC:应用对存储资源的请求。

yaml 复制代码
# PV 示例(NFS)
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  nfs:
    server: 10.0.0.1
    path: /data/nfs

# PVC 示例
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: data-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi

4. 权限与安全

(1) ServiceAccount

用途:为 Pod 分配身份,用于 API 访问权限控制。

yaml 复制代码
apiVersion: v1
kind: ServiceAccount
metadata:
  name: my-serviceaccount
(2) Role / ClusterRole

Role :定义命名空间内的权限。

ClusterRole:定义集群级别的权限。

yaml 复制代码
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list"]
(3) RoleBinding / ClusterRoleBinding

用途:将 Role/ClusterRole 绑定到 ServiceAccount 或用户。

yaml 复制代码
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods
subjects:
- kind: ServiceAccount
  name: my-serviceaccount
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

5. 自动扩缩容与任务调度

(1) HorizontalPodAutoscaler (HPA)

用途:根据 CPU/内存使用率自动扩缩容 Pod。

yaml 复制代码
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: app-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my-app
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50
(2) CronJob

用途:定时执行任务(如备份、批量处理)。

yaml 复制代码
apiVersion: batch/v1
kind: CronJob
metadata:
  name: backup-job
spec:
  schedule: "0 0 * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: backup
            image: busybox
            command: ["/bin/sh", "-c", "tar czf /backup/data.tar.gz /data"]
          restartPolicy: OnFailure

6. 集群级配置

(1) Namespace

用途:逻辑隔离资源(如开发、测试、生产环境)。

yaml 复制代码
apiVersion: v1
kind: Namespace
metadata:
  name: production
(2) CustomResourceDefinition (CRD)

用途:扩展 Kubernetes API,定义自定义资源。

yaml 复制代码
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: myresources.example.com
spec:
  group: example.com
  versions:
    - name: v1
      served: true
      storage: true
      schema: {...}
  scope: Namespaced
  names:
    plural: myresources
    singular: myresource
    kind: MyResource

配置文件管理最佳实践

  1. 版本控制
    • 将 YAML 文件存储在 Git 仓库中,使用分支或目录区分环境(dev/prod)。

  2. 模板化
    • 使用 HelmKustomize 管理多环境配置,避免硬编码。
    • Helm 示例(values.yaml):

    yaml 复制代码
    replicaCount: 3
    image:
      repository: nginx
      tag: 1.21
  3. 安全
    • 使用 SealedSecretVault 加密敏感数据,避免直接存储明文。

  4. 验证配置

    bash 复制代码
    # 检查语法错误
    kubectl apply -f deployment.yaml --dry-run=client
    
    # 查看生成的配置(Kustomize)
    kustomize build overlays/prod

总结

核心配置文件 :Deployment、Service、ConfigMap、Secret、PersistentVolumeClaim。

高级配置 :Ingress、HPA、RBAC、CronJob。

集群管理 :Namespace、CRD。

工具推荐:Helm 用于应用打包,Kustomize 用于多环境配置,Prometheus 用于监控。

相关推荐
bestcxx10 小时前
(二十六)、Kuboard 部署网络问题 &k8s 使用本地镜像 & k8s使用 register本地镜像站 综合应用
网络·容器·kubernetes
Lin_Aries_042115 小时前
容器化 Flask 应用程序
linux·后端·python·docker·容器·flask
Lin_Aries_042116 小时前
通过配置 GitLab 自动触发项目自动化构建与部署
运维·docker·容器·自动化·云计算·gitlab
尘埃不入你眼眸16 小时前
Docker操作命令
运维·docker·容器
霖.2417 小时前
四种常用SVC(service)及其与Ingress协作方式
linux·服务器·云原生·kubernetes·k8s
Coco_淳18 小时前
K8s平台部署Grafana + Loki + Promtail日志收集系统
kubernetes·grafana·日志·loki
liweiweili12621 小时前
K8S中关于容器对外提供服务网络类型
容器·kubernetes
小白不想白a21 小时前
【ansible/K8s】K8s的自动化部署源码分享
kubernetes·自动化·ansible
云游1 天前
Zabbix7.4.8(三):通过Zabbix agent 2监控Docker相关指标
docker·容器·zabbix
Lin_Aries_04211 天前
使用 Jenkins 的流水线项目实施 CI/CD
运维·ci/cd·docker·容器·云计算·jenkins