
1. Kubernetes資源清單入門指南剛接觸Kubernetes時最讓我困惑的就是那些YAML文件——它們看起來簡單但實際寫起來總是報錯。資源清單(Manifest)是Kubernetes世界的施工圖紙它用聲明式語法告訴集群你想要什么樣的資源狀態(tài)。經(jīng)過多次實踐后我總結出這套新手也能快速上手的資源清單編寫方法。2. 核心概念解析2.1 什么是資源清單資源清單本質上是YAML或JSON格式的文本文件用于定義Kubernetes對象如Pod、Service等的期望狀態(tài)。與命令式操作不同你不需要告訴Kubernetes如何做只需聲明想要什么。2.2 基礎結構剖析每個資源清單都包含以下必填字段apiVersion: v1 # API版本 kind: Pod # 資源類型 metadata: # 元數(shù)據(jù) name: my-pod spec: # 期望狀態(tài) containers: - name: nginx image: nginx:1.14.2注意縮進必須使用空格而非Tab這是YAML的硬性要求。我建議用2個空格作為縮進單位。3. 完整資源清單編寫實戰(zhàn)3.1 Pod資源示例下面是一個典型的Pod清單包含了我實際項目中積累的實用配置apiVersion: v1 kind: Pod metadata: name: web-server labels: app: nginx env: prod spec: containers: - name: nginx image: nginx:1.19.0 ports: - containerPort: 80 resources: requests: cpu: 500m memory: 512Mi limits: cpu: 1 memory: 1Gi env: - name: NGINX_ENV value: production restartPolicy: Always關鍵參數(shù)說明resources.requests容器啟動的最低資源需求resources.limits容器能使用的資源上限env設置容器環(huán)境變量SpringBoot應用常用3.2 Deployment進階配置對于生產環(huán)境我強烈建議使用Deployment而非直接創(chuàng)建PodapiVersion: apps/v1 kind: Deployment metadata: name: frontend spec: replicas: 3 selector: matchLabels: app: web template: metadata: labels: app: web spec: containers: - name: nginx image: nginx:1.19.0 ports: - containerPort: 80 livenessProbe: httpGet: path: / port: 80 initialDelaySeconds: 15 periodSeconds: 20這個配置包含幾個生產級特性多副本(replicas: 3)保證高可用livenessProbe實現(xiàn)健康檢查selector確保Pod標簽匹配4. 環(huán)境變量管理技巧4.1 基礎環(huán)境變量配置在SpringBoot等應用中環(huán)境變量配置尤為關鍵env: - name: JAVA_OPTS value: -Xmx512m -Xms256m - name: SPRING_PROFILES_ACTIVE value: prod - name: DB_URL valueFrom: secretKeyRef: name: db-secret key: connection-string4.2 安全敏感信息處理永遠不要將密碼等敏感信息直接寫在清單中應該使用Secret# 先創(chuàng)建Secret kubectl create secret generic db-secret \ --from-literalusernameadmin \ --from-literalpasswordS!B\*d$zDsb然后在清單中引用env: - name: DB_USERNAME valueFrom: secretKeyRef: name: db-secret key: username - name: DB_PASSWORD valueFrom: secretKeyRef: name: db-secret key: password5. 常見問題排查指南5.1 格式驗證與調試我常用的診斷命令# 驗證YAML語法 kubectl apply -f pod.yaml --dry-runclient # 查看詳細錯誤 kubectl describe pod/pod-name # 查看容器日志 kubectl logs pod-name -c container-name5.2 典型錯誤案例鏡像拉取失敗錯誤現(xiàn)象ErrImagePull或ImagePullBackOff解決方法檢查鏡像名稱拼寫確保鏡像倉庫可訪問CrashLoopBackOff通常表示容器啟動后立即退出使用kubectl logs查看應用日志Pending狀態(tài)資源不足或節(jié)點選擇器不匹配使用kubectl describe查看事件詳情6. 高級技巧與最佳實踐6.1 資源請求與限制配置CPU單位說明1 1個vCPU/core500m 0.5個vCPU100m 0.1個vCPU內存單位1Gi 1024Mi512Mi 512MB1G≠ 1Gi前者是1000進制后者是1024進制6.2 使用ConfigMap管理配置對于復雜配置推薦使用ConfigMap# 從文件創(chuàng)建ConfigMap kubectl create configmap nginx-config \ --from-filenginx.conf./nginx.conf在Pod中掛載volumes: - name: config-volume configMap: name: nginx-config containers: - name: nginx volumeMounts: - name: config-volume mountPath: /etc/nginx6.3 多容器Pod設計一個Pod內可以運行多個緊密關聯(lián)的容器containers: - name: web image: nginx - name: log-collector image: fluentd volumeMounts: - name: logs mountPath: /var/log/nginx volumes: - name: logs emptyDir: {}這種模式常用于邊車(Sidecar)容器場景如日志收集、服務網(wǎng)格等。7. 工具鏈推薦7.1 編輯器插件VS CodeKubernetes插件 YAML擴展IntelliJ IDEAKubernetes插件7.2 校驗工具kubeval離線驗證YAML文件kubectl neat清理自動生成的字段7.3 模板生成# 快速生成模板 kubectl create deploy nginx --imagenginx --dry-runclient -o yaml deploy.yaml8. 生產環(huán)境注意事項資源限制必須設置requests和limits防止單個Pod耗盡節(jié)點資源標簽規(guī)范制定統(tǒng)一的標簽策略如app/env/version版本控制所有清單文件必須納入Git管理變更流程任何修改都應通過CI/CD流水線我在實際運維中發(fā)現(xiàn)合理的資源限制可以避免80%的穩(wěn)定性問題。比如Java應用建議resources: requests: memory: 1Gi cpu: 500m limits: memory: 2Gi cpu: 2這樣的配置既保證了應用有足夠資源啟動又防止內存泄漏時影響整個節(jié)點。