使用Kustomize可声明式管理.NET应用的多环境Kubernetes部署,通过base定义通用配置,overlays叠加环境特有补丁,实现配置分离与复用。

使用 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 注入。
网奇.NET网络商城系统是基于.Net平台开发的免费商城系统。功能强大,操作方便,设置简便。无需任何设置,上传到支持asp.net的主机空间即可使用。系统特色功能:1、同时支持Access和SqlServer数据库;2、支持多语言、多模板3、可定制缺货处理功能4、支持附件销售功能5、支持会员组批发功能6、提供页面设计API函数7、支持预付款功能8、配送价格分地区按数学公式计算9、商品支持多类别,可
在 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 补丁实现,结构清晰又易于维护。









