k8s--pod 介紹


pod 概述

Pod 是 K8S 系統中可以創建和管理的最小單元,是資源對象模型中由用戶創建或部署的最小資源對象模型,也是在 K8S 上運行容器化應用的資源對象,其它的資源對象都是用來支撐或者擴展 Pod 對象功能的,比如控制器對象是用來管控 Pod 對象的,Service 或者 Ingress 資源對象是用來暴露 Pod 引用對象的,PersistentVolume 資源對象是用來為 Pod 提供存儲等等,K8S 不會直接處理容器,而是 Pod,Pod 是由一個或多個 container 組成。

Pod 是 Kubernetes 的最重要概念,每一個 Pod 都有一個特殊的被稱為 “根容器”的 Pause 容器。Pause 容器對應的鏡像屬於 Kubernetes 平台的一部分,除了 Pause 容器,每個 Pod 還包含一個或多個緊密相關的用戶業務容器

Pod基本概念

  • 最小部署的單元
  • Pod 里面是由一個或多個容器組成【一組容器的集合】
  • 一個 pod 中的容器是共享網絡命名空間
  • Pod 生命周期是短暫的
  • 每個 Pod 包含一個或多個緊密相關的用戶業務容器

Pod存在的意義

  • 創建容器使用 docker,一個 docker 對應一個容器,一個容器運行一個應用進程
  • Pod 是多進程設計,運用多個應用程序,也就是一個 Pod 里面有多個容器,而一個容器里面運行一個應用程序

Pod 是在 K8S 集群中運行部署應用或服務的最小單元,它是可以支持多容器的。Pod 的設計理念是支持多個容器在一個 Pod 中共享網絡地址和文件系統,可以通過進程間通信和文件共享這種簡單高效的方式組合完成服務。同時 Pod 對多容器的支持是 K8S 中最基礎的設計理念。在生產環境中,通常是由不同的團隊各自開發構建自己的容器鏡像,在部署的時候組合成一個微服務對外提供服務。

Pod 是 K8S 集群中所有業務類型的基礎,可以把 Pod 看作運行在 K8S 集群上的小機器人,不同類型的業務就需要不同類型的小機器人去執行。目前 K8S 的業務主要可以分為以下幾種

  • 長期伺服型:long-running
  • 批處理型:batch
  • 節點后台支撐型:node-daemon
  • 有狀態應用型:stateful application

Pod實現機制

主要有以下兩大機制

  • 共享網絡
  • 共享存儲

共享網絡

容器本身之間相互隔離的,一般是通過 namespace 和 group 進行隔離,那么Pod里面的容器如何實現通信?

  • 首先需要滿足前提條件,也就是容器都在同一個namespace之間

關於Pod實現原理,首先會在Pod會創建一個根容器: pause容器,然后我們在創建業務容器 【nginx,redis 等】,在我們創建業務容器的時候,會把它添加到 info容器 中

而在 info容器 中會獨立出 ip地址,mac地址,port 等信息,然后實現網絡的共享

共享存儲

Pod 持久化數據,專門存儲到某個地方中

常用命令

# 查看所有的 pod 列表,-n 后面跟 namespace,查看指定的命名空間,-o wide 查看詳細信息
kubectl get pod
kubectl get pod -n kube-system  # 查看 kube-system 命名空間下的 pod
kubectl get pod -o wide # 查看 pod 的詳細信息,有 ip、node 節點等信息

kubectl get pod -o wide 的參數含義如下

  • name:自定義的名稱,后面會加些數據
  • READY:當前 pod 里的容器,pause 容器不算在里面,/ 前面的表示運行了幾個,后面的數字表示一共有幾個
  • STATUS:當前的狀態
  • AGE:pod 存在的時長
  • IP:pod 的 ip,這個只能在當前部署的機器上訪問,外網是訪問不了的 
  • NODE:當前 pod 在哪個 node 上運行

# 顯示 Node 的詳細信息
kubectl describe node dce-10-6-215-190 # node 后面的是 node名稱

# 顯示 Pod 的詳細信息, 特別是查看 pod 無法創建的時候的日志
kubectl describe pod web # web 是你創建 pod 時起的名稱

# 根據 yaml 創建資源, apply 可以重復執行,create 不行
kubectl create -f pod.yaml
kubectl apply -f pod.yaml
# 刪除所有 Pod
kubectl delete pod --all

# 強制刪除某個文件名命名節點 ,基於 pod.yaml 定義的名稱刪除 pod 
kubectl delete -f <文件名>

# 刪除某個Pod命令節點 
kubectl delete pod <pod名>
# 刪除某個Replication Controller命名節點 
kubectl delete rc <rc名>
kubectl delete deployment 名稱

# 刪除某個服務命名節點 
kubectl delete service <service名>

# 刪除所有Pod節點 
kubectl delete pod --all

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM