一、Pod對象
1. 資源共享實現機制
1)共享網絡
- 基本概念
- 實現方式:通過將業務容器網絡加入到負責網絡的容器(infra container)實現網絡共享
- 核心特點:共享網絡協議棧(包括TCP/IP、MAC地址、端口等),打破網絡命名空間隔離
- 典型示例:Nginx主容器與busybox邊車容器共享infra container網絡,可通過localhost互相訪問
- 實現機制
- 基礎鏡像:使用pause:3.4.1鏡像創建infra container
- 容器關系:所有業務容器(如Nginx、busybox)都會關聯到同一個infra container
- 隱藏特性:在k8s層面不可見,需通過節點docker ps命令查看
- 實踐驗證
- 驗證方法:
- 通過docker ps | grep pod-web查看實際運行的三個容器(含隱藏的infra container)
- infra container命名規則:k8s_POD_<pod名稱>_<命名空間>_<ID>
- 鏡像特征:
- 體積僅幾MB大小
- 運行簡單程序保持容器不退出
- 所有Pod都會自動創建對應的infra container
- 驗證方法:
- 關鍵要點
- 識別特征:鏡像名稱為registry.aliyuncs.com/google_containers/pause:3.4.1
- 核心作用:專門負責維護Pod的網絡棧
- 部署特點:每個Pod對應一個獨立的infra container實例
2)共享存儲
- Pod共享網絡與存儲示例
- 共享網絡機制
- 實現方式:將業務容器網絡加入到"負責網絡的容器"中實現網絡共享
- 訪問驗證:通過127.0.0.1可以訪問另一個容器,證明網絡命名空間已共享
- 典型應用:nginx+php架構中,php可以通過127.0.0.1:9000被nginx訪問
- 共享存儲機制
- 數據卷類型:使用emptyDir實現容器間共享存儲
- 掛載配置:
- 主容器nginx掛載到/usr/share/nginx/html
- 邊車容器busybox掛載到/data
- 驗證方法:在邊車容器/data目錄創建文件,主容器能立即讀取
- 配置示例解析
- 容器順序:容器定義順序不影響角色,完全由業務功能決定
- volumeMounts:通過相同名稱的volume實現目錄共享
- emptyDir特性:臨時存儲空間,Pod刪除后數據丟失
- 實際操作演示
- 驗證步驟:
- 在busybox容器的/data目錄創建index.html
- 通過wget 127.0.0.1驗證nginx能訪問該文件
- 在nginx容器修改文件內容,busybox容器同步可見
- 應用場景:日志采集場景中,主容器寫日志到共享目錄,邊車容器負責日志收集
- 驗證步驟:
- 常見問題解答
- 網絡隔離:默認每個容器有獨立網絡命名空間,共享網絡打破這種隔離
- 多端口暴露:一個Pod可以暴露多個端口,通過Service配置多個targetPort
- 權限問題:共享目錄的讀寫權限由掛載配置決定,不受容器角色限制
- 與Docker區別:原理類似Docker的volume共享,但由K8s統一管理
- 共享網絡機制
2. 管理命令
1)Pod創建
- YAML方式:通過kubectl apply -f pod.yaml命令創建Pod,其中YAML文件需包含apiVersion、kind、metadata和spec等必要字段
- 命令行方式:使用kubectl run nginx --image=nginx直接創建運行nginx鏡像的Pod
2)Pod查看
- 列表查看:kubectl get pods命令可列出當前所有Pod的基本信息
- 詳情查看:kubectl describe pod <Pod名稱>可查看指定Pod的詳細配置和狀態信息
3)日志管理
- 基礎日志:kubectl logs <Pod名稱>查看Pod的標準輸出日志
- 容器指定:添加-c CONTAINER參數可查看多容器Pod中特定容器的日志
- 實時跟蹤:使用-f參數可以實時跟蹤日志輸出(類似tail -f功能)
4)容器交互
- 終端接入:kubectl exec <Pod名稱> [-c CONTAINER] -- bash命令可進入Pod容器的bash終端
- 多容器選擇:對于多容器Pod,需要通過-c參數指定要進入的容器名稱
5)Pod刪除
- 刪除操作:使用kubectl delete pod <Pod名稱>命令可刪除指定的Pod資源
- 注意事項:刪除后Kubernetes可能會根據控制器配置自動重建Pod
二、知識小結
知識點 | 核心內容 | 考試重點/易混淆點 | 難度系數 |
Pod網絡共享機制 | 通過infra container實現網絡協議棧共享(TCP/IP/MAC/端口等),打破網絡命名空間隔離 | 共享原理:所有容器加入同一個infra container網絡 | ??? |
Pod數據卷共享 | 使用emptyDir卷實現多容器目錄共享(如Nginx日志目錄與邊車容器采集目錄) | 驗證方法:在邊車容器修改文件后主容器可實時讀取 | ?? |
邊車容器(Sidecar)模式 | 主容器(如Nginx)與輔助容器(如日志采集器)通過共享網絡/存儲協同工作 | 典型場景:Nginx+PHP分離部署時通過127.0.0.1:9000通信 | ???? |
infra container | 每個Pod隱藏的基礎容器,使用k8s.gcr.io/pause鏡像維護共享網絡 | 關鍵特征:鏡像體積小(僅幾MB),保持常駐不退出 | ?? |
Service多端口暴露 | 一個Pod內多個容器端口可通過Service同時暴露(如Nginx 80和輔助服務8080) | 配置要點:在YAML中定義多個targetPort | ??? |
網絡驗證方法 | 在邊車容器通過127.0.0.1訪問主容器服務(如wget 127.0.0.1:80) | 易錯點:誤認為需配置獨立IP | ?? |