本文将深入探讨 Kubernetes 的三个高级特性:自定义资源定义(CRD)、新一代 Gateway API 和优先级调度(PriorityClass)。这些功能代表了 Kubernetes 的可扩展性和高级调度能力,是构建生产级云原生平台的关键技术。
一、CRD:扩展 Kubernetes API
自定义资源定义(CRD)允许用户扩展 Kubernetes API,定义自己的资源类型,从而将自定义应用逻辑集成到 Kubernetes 生态中。
1. 创建简单的 CRD
# cronjob-crd.yaml
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: cronjobs.stable.example.com
spec:
group: stable.example.com
versions:
- name: v1
served: true
storage: true
schema:
openAPIV3Schema:
type: object
properties:
spec:
type: object
properties:
cronSpec:
type: string
image:
type: string
replicas:
type: integer
scope: Namespaced
names:
plural: cronjobs
singular: cronjob
kind: CronJob
shortNames:
- cj
应用 CRD:
kubectl apply -f cronjob-crd.yaml
2. 创建自定义资源实例
# my-cronjob.yaml
apiVersion: "stable.example.com/v1"
kind: CronJob
metadata:
name: my-custom-cronjob
spec:
cronSpec: "* * * * *"
image: my-app:latest
replicas: 3
扩展内容:CRD 与 Operator 模式
-
控制器集成:CRD 通常与自定义控制器配合使用,实现完整的 Operator 模式
-
验证规则:可以通过 OpenAPI v3 schema 定义资源验证规则
-
版本管理:支持多版本共存和版本转换
-
生态集成:成熟的 Operator 框架如 Kubebuilder、Operator SDK
二、Gateway API:新一代服务网络标准
Gateway API 是 Kubernetes 官方推出的新一代服务网络 API,旨在替代传统的 Ingress,提供更丰富、更面向角色的网络功能。
1. 创建 GatewayClass
# gateway-class.yaml
apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
name: company-gateway-class
spec:
controllerName: example.com/gateway-controller
parametersRef:
name: company-gateway-parameters
group: example.com
kind: GatewayParameters
2. 创建 Gateway 和 HTTPRoute
# gateway-and-route.yaml
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: company-gateway
spec:
gatewayClassName: company-gateway-class
listeners:
- name: web
port: 80
protocol: HTTP
allowedRoutes:
namespaces:
from: Same
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: http-app-route
spec:
parentRefs:
- name: company-gateway
rules:
- matches:
- path:
type: PathPrefix
value: /app
backendRefs:
- name: app-service
port: 8080
- matches:
- path:
type: PathPrefix
value: /api
backendRefs:
- name: api-service
port: 3000
扩展内容:Gateway API 优势
-
面向角色设计:清晰分离基础设施管理员、应用开发者的职责
-
跨命名空间路由:支持跨命名空间的流量管理
-
丰富的路由能力:支持基于 Header、查询参数等复杂路由规则
-
服务网格集成:为服务网格提供标准化的流量管理接口
三、PriorityClass:精细化 Pod 调度优先级
PriorityClass 允许为 Pod 设置优先级,影响调度器在资源紧张时的决策,确保关键业务优先获得资源。
1. 创建 PriorityClass
# priorityclasses.yaml
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: high-priority
value: 1000000
globalDefault: false
description: "用于关键业务 Pod"
---
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: medium-priority
value: 500000
globalDefault: true
description: "默认优先级"
---
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: low-priority
value: 100000
globalDefault: false
description: "用于批处理任务"
2. 在 Pod 中使用 PriorityClass
# high-priority-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: critical-app
spec:
containers:
- name: app
image: critical-app:latest
resources:
requests:
memory: "256Mi"
cpu: "500m"
limits:
memory: "512Mi"
cpu: "1000m"
priorityClassName: high-priority
扩展内容:优先级调度实战策略
-
系统优先级保留:Kubernetes 系统组件使用 2000000000 及以上优先级
-
抢占机制:高优先级 Pod 可以抢占低优先级 Pod 的资源
-
资源配额关联:结合 ResourceQuota 确保优先级策略有效执行
-
多租户场景:为不同业务部门分配不同优先级类别
实战案例:构建完整应用栈
完整部署示例
# complete-stack.yaml
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: production-priority
value: 1000000
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
spec:
replicas: 3
selector:
matchLabels:
app: web-app
template:
metadata:
labels:
app: web-app
spec:
priorityClassName: production-priority
containers:
- name: web
image: nginx:latest
ports:
- containerPort: 80
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: web-app-route
spec:
parentRefs:
- name: company-gateway
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: web-app
port: 80
总结
这三个高级特性代表了 Kubernetes 平台的不同维度的扩展能力:
-
CRD:提供了 API 层面的扩展能力,让 Kubernetes 能够管理任意类型的资源
-
Gateway API:重新定义了服务网络的标准,提供更强大、更规范的流量管理能力
-
PriorityClass:实现了调度层面的精细化控制,确保关键业务的服务质量
掌握这些特性,意味着您不仅能够使用 Kubernetes,更能够根据业务需求定制和优化 Kubernetes 平台。这些技能对于构建企业级云原生平台、实现真正的 GitOps 和自动化运维至关重要。
在实际应用中,建议将这些特性与 CI/CD 流程、监控告警、安全策略等结合,构建完整的云原生技术体系。