跳转到内容

Kubernetes配置

来自代码酷

Kubernetes配置[编辑 | 编辑源代码]

Kubernetes配置是Kubernetes集群中定义和管理资源的核心方式。通过配置文件(通常为YAML或JSON格式),用户可以声明式地描述所需的集群状态,包括Pods、Services、Deployments等对象的属性和行为。本文将详细介绍Kubernetes配置的结构、语法、最佳实践以及实际应用场景。

介绍[编辑 | 编辑源代码]

Kubernetes配置允许用户以声明式的方式定义集群资源,而不是通过命令式操作。这种方法的优势在于:

  • 可重复性:配置文件可以版本控制,便于团队协作和审计。
  • 可预测性:系统会持续协调实际状态与声明状态。
  • 灵活性:支持变量注入、模板化(如Helm)和多环境配置。

配置文件通常包含以下字段:

  • apiVersion:指定Kubernetes API的版本(如apps/v1)。
  • kind:定义资源类型(如DeploymentService)。
  • metadata:包含名称、标签、注解等元数据。
  • spec:描述资源的期望状态。

配置文件结构[编辑 | 编辑源代码]

以下是一个简单的Deployment配置示例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

字段解析

  • replicas: 3 表示需要运行3个Pod副本。
  • selector.matchLabels 确保Deployment管理带有app: nginx标签的Pod。
  • template 定义了Pod的规格,包括容器镜像和端口。

配置管理技巧[编辑 | 编辑源代码]

环境变量注入[编辑 | 编辑源代码]

通过env字段动态配置容器:

env:
- name: LOG_LEVEL
  value: "debug"
- name: DB_HOST
  valueFrom:
    configMapKeyRef:
      name: app-config
      key: database.host

ConfigMap与Secret[编辑 | 编辑源代码]

将配置与容器镜像解耦:

  • ConfigMap:存储非敏感配置(如配置文件)。
  • Secret:存储敏感数据(如密码、密钥)。
# 创建ConfigMap示例
apiVersion: v1
kind: ConfigMap
metadata:
  name: game-config
data:
  game.properties: |
    enemy.types=aliens,monsters
    player.maxLives=5

高级配置模式[编辑 | 编辑源代码]

多环境配置[编辑 | 编辑源代码]

使用Kustomize或Helm管理不同环境(开发/生产)的配置差异。例如Kustomize的overlays结构:

graph LR base/ -->|通用配置| dev/ base/ -->|通用配置| prod/ dev/ -->|补丁| deployment-dev.yaml prod/ -->|补丁| deployment-prod.yaml

资源配额与限制[编辑 | 编辑源代码]

通过ResourceQuota限制命名空间的资源使用:

apiVersion: v1
kind: ResourceQuota
metadata:
  name: mem-cpu-demo
spec:
  hard:
    requests.cpu: "1"
    requests.memory: 1Gi
    limits.cpu: "2"
    limits.memory: 2Gi

实际案例[编辑 | 编辑源代码]

场景:一个微服务需要连接数据库,且日志级别需根据环境调整。

1. 定义ConfigMap:

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  DB_URL: "jdbc:mysql://prod-db:3306"
  LOG_LEVEL: "INFO"

2. 在Deployment中引用:

env:
- name: DB_URL
  valueFrom:
    configMapKeyRef:
      name: app-config
      key: DB_URL
- name: LOG_LEVEL
  valueFrom:
    configMapKeyRef:
      name: app-config
      key: LOG_LEVEL

最佳实践[编辑 | 编辑源代码]

  • 使用kubectl diff预览配置变更效果。
  • 通过helm lintkubeval验证配置语法。
  • 为资源配置livenessProbereadinessProbe
  • 限制容器权限(如设置securityContext.runAsNonRoot: true)。

数学表达(可选)[编辑 | 编辑源代码]

在资源限制中,CPU单位的换算关系: 1 CPU核心=1000m(毫核)

总结[编辑 | 编辑源代码]

Kubernetes配置是集群管理的基石,通过本文的学习,您应掌握:

  • 基础YAML配置结构与字段含义。
  • 动态配置注入(ConfigMap/Secret)。
  • 多环境管理工具(Kustomize/Helm)。
  • 生产级配置的最佳实践。