当前位置: 首页 > news >正文

k8s的配置文件总结

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


1. 核心工作负载配置

(1) Deployment

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

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)。

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(如日志收集、节点监控)。

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

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 证书)。

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

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

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

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

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:应用对存储资源的请求。

# 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 访问权限控制。

apiVersion: v1
kind: ServiceAccount
metadata:
  name: my-serviceaccount
(2) Role / ClusterRole

Role:定义命名空间内的权限。
ClusterRole:定义集群级别的权限。

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 或用户。

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。

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

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

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

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

apiVersion: v1
kind: Namespace
metadata:
  name: production
(2) CustomResourceDefinition (CRD)

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

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):
    replicaCount: 3
    image:
      repository: nginx
      tag: 1.21
    
  3. 安全
    • 使用 SealedSecretVault 加密敏感数据,避免直接存储明文。
  4. 验证配置
    # 检查语法错误
    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 用于监控。

相关文章:

  • Go学习路线指南
  • springboot框架集成websocket依赖实现物联网设备、前端网页实时通信!
  • MySQL——MVCC(多版本并发控制)
  • 免费在线文档工具,在线PDF添加空白页,免费在任意位置插入空白页,多样化的文件处理
  • 【AI论文】MM-IFEngine:迈向多模态指令遵循
  • Magnet Pro Macbook窗口分屏管理软件【提高效率工具】
  • 从零训练LLM-1.训练BPE
  • 猫咪如厕检测与分类识别系统系列【五】信息存储数据库改进+添加猫咪页面制作+猫咪躯体匹配算法架构更新
  • SQL 解析 with as
  • C++ 入门六:多态 —— 同一接口的多种实现之道
  • Java 8中的Lambda 和 Stream (from Effective Java 第三版)
  • 【模态分解】EEMD-集合经验模态分解
  • CSI-PVController-volumeWorker
  • 【家政平台开发(40)】功能测试全解析:从执行到报告撰写
  • 应急响应靶机-Linux(2)
  • Qwen2.5-VL Technical Report 论文翻译和理解
  • KaiwuDB:面向AIoT场景的多模融合数据库,赋能企业数字化转型
  • 【HD-RK3576-PI】Docker搭建与使用
  • 【工具开发教程】通过批量OCR识别PDF扫描件中的文本,给PDF批量重命名,基于WPF和阿里云的实现方案,超详细
  • 【面试经典150题】LeetcCode238·除自身以外数组的乘积
  • 上海证监局规范辖区私募经营运作,6月15日前完成自评自纠
  • 1450亿元!财政部拟发行2025年中央金融机构注资特别国债(二期)
  • 阿里CEO:将以饱和式投入打法,聚焦几大核心战役
  • 晶圆销量上升,中芯国际一季度营收增长近三成,净利增超1.6倍
  • 巴基斯坦称约50名印度士兵在克什米尔实控线丧生
  • 调节负面情绪可以缓解慢性疼痛