Files
docker_practice/13_kubernetes_concepts/13.4_advanced.md
T
yeasy 8f13ff9dfa 更新 Namespace/Gateway API/nftables/DCT 退役时间线
- ch12: 添加 TIME namespace (Linux 5.6+),内核 namespace 类型从 7 更新为 8
- ch12: 补充 Docker Engine v29.x 实���性 nftables 支持
- ch13: Ingress-NGINX 退役通知,添加 Gateway API 推荐方案和示例
- ch13: 添加 Pod Security Standards 章节(替代已移除的 PSP)
- ch18: 补充 DCT 退役时间线(2028-03-31 完全移除)和迁移建议
2026-04-26 00:12:59 +00:00

3.9 KiB
Raw Blame History

13.4 高级特性

掌握了 Kubernetes 的核心概念 (PodServiceDeployment) 后,我们需要了解更多高级特性以构建生产级应用。

13.4.1 Helm - 包管理工具

Helm 被称为 Kubernetes 的包管理器 (类似于 Linux 的 apt/yum)。它将一组 Kubernetes 资源定义文件打包为一个 Chart

  • 安装应用helm install my-release bitnami/mysql
  • 版本管理:轻松回滚应用的发布版本。
  • 模板化:支持复杂的应用部署逻辑配置。

13.4.2 Gateway API 与 Ingress

Service 虽然提供了负载均衡,但通常是 4 层 (TCP/UDP)。集群需要 7 层 (HTTP/HTTPS) 路由能力来充当网关。

Gateway API(推荐)

重要Kubernetes 社区推荐使用 Gateway API 作为新一代流量管理标准。原 kubernetes/ingress-nginx 项目已于 2026 年 3 月退役停止维护,不再接收安全更新。

Gateway API 基于 CRD 实现,提供了比 Ingress 更强大和标准化的流量管理能力:

  • GatewayClass:定义网关实现(类似 IngressClass)。
  • Gateway:定义监听端口和协议(由基础设施团队管理)。
  • HTTPRoute:定义 HTTP 路由规则(由应用团队管理)。
  • 职责分离:基础设施、集群运维和应用开发者各管各的资源。
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: my-route
spec:
  parentRefs:
  - name: my-gateway
  hostnames:
  - "api.example.com"
  rules:
  - matches:
    - path:
        type: PathPrefix
        value: /api
    backendRefs:
    - name: api-svc
      port: 80

常见的 Gateway API 实现有 Envoy Gateway、Istio、Cilium、Traefik、Kong 等。

Ingress(传统方案)

Ingress 资源仍可正常使用,但建议新项目直接采用 Gateway API。已有 Ingress 配置可按需逐步迁移。

  • 域名路由:基于 Host 将请求转发不同服务。
  • 路径路由:基于 Path 将请求转发。
  • SSL/TLS:集中管理证书。

13.4.3 Persistent Volume 与 StorageClass

容器内的文件是临时的。对于有状态应用 (如数据库),需要持久化存储。

  • PVC (Persistent Volume Claim):用户申请存储的声明。
  • PV (Persistent Volume):实际的存储资源 (NFSAWS EBSCeph 等)。
  • StorageClass:定义存储类,支持动态创建 PV。

13.4.4 Horizontal Pod Autoscaling

HPA 根据 CPU 利用率或其他指标 (如内存、自定义指标) 自动扩缩 Deployment 或 ReplicaSet 中的 Pod 数量。

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: php-apache
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50

13.4.5 ConfigMap 与 Secret

  • ConfigMap:存储非机密的配置数据 (配置文件、环境变量)。
  • Secret:存储机密数据 (密码、Token、证书),在 Etcd 中加密存储。

通过将配置与镜像分离,保证了容器的可移植性。

13.4.6 Pod Security Standards

注意PodSecurityPolicy (PSP) 已在 Kubernetes 1.25 中完全移除。

Kubernetes 使用 Pod Security Standards 定义三个安全级别,通过内置的 Pod Security Admission 控制器在命名空间级别执行:

  • Privileged:不受限制,适用于系统级和基础设施工作负载。
  • Baseline:防止已知的权限提升,适用于大多数工作负载。
  • Restricted:严格限制,遵循 Pod 安全加固最佳实践。
apiVersion: v1
kind: Namespace
metadata:
  name: my-app
  labels:
    pod-security.kubernetes.io/enforce: baseline
    pod-security.kubernetes.io/warn: restricted