如何用 Kustomize 定制 .NET 应用的 Kubernetes 配置?

来源:这里教程网 时间:2026-02-21 17:26:55 作者:

使用 Kustomize 定制 .NET 应用的 Kubernetes 配置是一种声明式、无侵入的方式,能有效管理不同环境(如开发、测试、生产)下的部署差异。你不需要修改原始 YAML 文件,而是通过叠加补丁来调整配置。以下是具体操作步骤和最佳实践。

准备基础资源配置

在项目根目录创建 k8s/base 目录,存放通用的 Kubernetes 资源定义:

deployment.yaml:定义 .NET 应用的 Deployment service.yaml:暴露应用服务 kustomization.yaml:声明基础资源

示例 deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: dotnet-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: dotnet-app
  template:
    metadata:
      labels:
        app: dotnet-app
    spec:
      containers:
      - name: app
        image: myregistry/dotnet-app:latest
        ports:
        - containerPort: 80
        env:
        - name: ASPNETCORE_ENVIRONMENT
          value: Production

kustomization.yaml 声明资源:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
- service.yaml

为不同环境创建定制配置

k8s/overlays 下建立环境子目录,例如 dev、staging、prod。

k8s/overlays/dev 为例:

创建 patch.yaml 修改副本数或镜像标签 添加环境变量或资源配置限制 引用基础配置并应用补丁

patch.yaml 示例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: dotnet-app
spec:
  replicas: 1
  template:
    spec:
      containers:
      - name: app
        image: myregistry/dotnet-app:dev
        env:
        - name: ASPNETCORE_ENVIRONMENT
          value: Development
        resources:
          requests:
            memory: "512Mi"
            cpu: "200m"

overlays/dev/kustomization.yaml:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
bases:
- ../../base
patches:
- patch.yaml

注入配置文件和 Secrets

.NET 应用常依赖 appsettings.json 或环境变量。Kustomize 支持 ConfigMap 和 Secret 注入。

在 overlays/prod 中添加自定义配置:

# configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: dotnet-app-config
data:
  appsettings.json: |
    {
      "ConnectionStrings": {
        "Default": "Server=prod-db;Database=AppDb;"
      }
    }
# secret.yaml(建议从文件生成)
apiVersion: v1
kind: Secret
metadata:
  name: dotnet-app-secret
type: Opaque
stringData:
  appsettings.Production.json: |
    { "Logging": { "LogLevel": { "Default": "Warning" } } }

更新 kustomization.yaml 引入它们:

resources:
- configmap.yaml
- secret.yaml

然后在补丁中挂载:

patches:
- |-
  apiVersion: apps/v1
  kind: Deployment
  metadata:
    name: dotnet-app
  spec:
    template:
      spec:
        containers:
        - name: app
          volumeMounts:
          - name: config-volume
            mountPath: /app/appsettings.json
            subPath: appsettings.json
          - name: secret-volume
            mountPath: /app/appsettings.Production.json
            subPath: appsettings.Production.json
        volumes:
        - name: config-volume
          configMap:
            name: dotnet-app-config
        - name: secret-volume
          secret:
            secretName: dotnet-app-secret

构建与部署

使用 kubectl 直接应用定制化配置:

kubectl apply -k k8s/overlays/dev

或先查看生成的 YAML:

kustomize build k8s/overlays/dev

可将其输出用于 CI/CD 流水线:

kustomize build k8s/overlays/prod | kubectl apply -f -

基本上就这些。Kustomize 让你用一套模板管理多环境部署,特别适合 .NET 这类需要环境差异化配置的应用。关键是把公共部分抽到 base,变化的部分用 overlay 补丁实现,结构清晰又易于维护。

相关推荐