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