在 Kubernetes 中,配置文件 是定義集群資源的核心,通常以 YAML 或 JSON 格式編寫。以下是 Kubernetes 中關鍵的配置文件類型及其作用:
1. 核心工作負載配置
(1) Deployment
? 用途:定義無狀態應用的 Pod 副本管理策略(滾動更新、回滾、擴縮容)。
? 核心字段:
apiVersion: apps/v1
kind: Deployment
metadata:name: my-app
spec:replicas: 3selector:matchLabels:app: my-apptemplate:metadata:labels:app: my-appspec:containers:- name: appimage: nginx:1.21ports:- containerPort: 80
(2) StatefulSet
? 用途:管理有狀態應用(如數據庫),提供穩定的網絡標識和持久化存儲。
? 關鍵字段:volumeClaimTemplates
(自動創建 PVC)。
apiVersion: apps/v1
kind: StatefulSet
metadata:name: mysql
spec:serviceName: mysqlreplicas: 3volumeClaimTemplates:- metadata:name: dataspec:accessModes: [ "ReadWriteOnce" ]resources:requests:storage: 10Gi
(3) DaemonSet
? 用途:在集群每個節點上運行一個 Pod(如日志收集、節點監控)。
apiVersion: apps/v1
kind: DaemonSet
metadata:name: fluentd
spec:selector:matchLabels:name: fluentdtemplate:metadata:labels:name: fluentdspec:containers:- name: fluentdimage: fluentd:latest
2. 服務與網絡配置
(1) Service
? 用途:暴露 Pod 為網絡服務,支持負載均衡。
? 類型:ClusterIP
(默認)、NodePort
、LoadBalancer
。
apiVersion: v1
kind: Service
metadata:name: web-service
spec:type: LoadBalancerports:- port: 80targetPort: 8080selector:app: web-app
(2) Ingress
? 用途:定義 HTTP/HTTPS 路由規則(如域名、SSL 證書)。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: my-ingressannotations:nginx.ingress.kubernetes.io/rewrite-target: /
spec:rules:- host: example.comhttp:paths:- path: /apppathType: Prefixbackend:service:name: app-serviceport:number: 80
3. 配置與存儲
(1) ConfigMap
? 用途:存儲非敏感配置(環境變量、配置文件)。
apiVersion: v1
kind: ConfigMap
metadata:name: app-config
data:app.properties: |server.port=8080logging.level=INFO
(2) Secret
? 用途:存儲敏感數據(密碼、Token),需 Base64 編碼。
apiVersion: v1
kind: Secret
metadata:name: db-secret
type: Opaque
data:username: dXNlcm5hbWU= # "username" 的 Base64password: cGFzc3dvcmQ= # "password" 的 Base64
(3) PersistentVolume (PV) / PersistentVolumeClaim (PVC)
? PV:定義集群存儲資源(如 NFS、云存儲)。
? PVC:應用對存儲資源的請求。
# PV 示例(NFS)
apiVersion: v1
kind: PersistentVolume
metadata:name: nfs-pv
spec:capacity:storage: 10GiaccessModes:- ReadWriteManynfs:server: 10.0.0.1path: /data/nfs# PVC 示例
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: data-pvc
spec:accessModes:- ReadWriteOnceresources:requests:storage: 5Gi
4. 權限與安全
(1) ServiceAccount
? 用途:為 Pod 分配身份,用于 API 訪問權限控制。
apiVersion: v1
kind: ServiceAccount
metadata:name: my-serviceaccount
(2) Role / ClusterRole
? Role:定義命名空間內的權限。
? ClusterRole:定義集群級別的權限。
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:name: pod-reader
rules:
- apiGroups: [""]resources: ["pods"]verbs: ["get", "list"]
(3) RoleBinding / ClusterRoleBinding
? 用途:將 Role/ClusterRole 綁定到 ServiceAccount 或用戶。
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: read-pods
subjects:
- kind: ServiceAccountname: my-serviceaccount
roleRef:kind: Rolename: pod-readerapiGroup: rbac.authorization.k8s.io
5. 自動擴縮容與任務調度
(1) HorizontalPodAutoscaler (HPA)
? 用途:根據 CPU/內存使用率自動擴縮容 Pod。
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:name: app-hpa
spec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: my-appminReplicas: 2maxReplicas: 10metrics:- type: Resourceresource:name: cputarget:type: UtilizationaverageUtilization: 50
(2) CronJob
? 用途:定時執行任務(如備份、批量處理)。
apiVersion: batch/v1
kind: CronJob
metadata:name: backup-job
spec:schedule: "0 0 * * *"jobTemplate:spec:template:spec:containers:- name: backupimage: busyboxcommand: ["/bin/sh", "-c", "tar czf /backup/data.tar.gz /data"]restartPolicy: OnFailure
6. 集群級配置
(1) Namespace
? 用途:邏輯隔離資源(如開發、測試、生產環境)。
apiVersion: v1
kind: Namespace
metadata:name: production
(2) CustomResourceDefinition (CRD)
? 用途:擴展 Kubernetes API,定義自定義資源。
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:name: myresources.example.com
spec:group: example.comversions:- name: v1served: truestorage: trueschema: {...}scope: Namespacednames:plural: myresourcessingular: myresourcekind: MyResource
配置文件管理最佳實踐
- 版本控制:
? 將 YAML 文件存儲在 Git 倉庫中,使用分支或目錄區分環境(dev
/prod
)。 - 模板化:
? 使用 Helm 或 Kustomize 管理多環境配置,避免硬編碼。
? Helm 示例(values.yaml
):replicaCount: 3 image:repository: nginxtag: 1.21
- 安全:
? 使用 SealedSecret 或 Vault 加密敏感數據,避免直接存儲明文。 - 驗證配置:
# 檢查語法錯誤 kubectl apply -f deployment.yaml --dry-run=client# 查看生成的配置(Kustomize) kustomize build overlays/prod
總結
? 核心配置文件:Deployment、Service、ConfigMap、Secret、PersistentVolumeClaim。
? 高級配置:Ingress、HPA、RBAC、CronJob。
? 集群管理:Namespace、CRD。
? 工具推薦:Helm 用于應用打包,Kustomize 用于多環境配置,Prometheus 用于監控。