pod和容器(容易混淆的地方)


     在Kubenetes中,所有的容器均在 pod 中運行,一個pod可以承載一個或者多個相關的docker容器(或rkt,以及用戶自定義容器),同一個Pod中的容器可以部署在同一個物理機器(可以叫宿主機)上並且能夠共享資源。一個Pod也可以包含多個磁盤卷組(volumes),這些卷組將會以目錄的形式提供給一個容器,或者被所有Pod中的容器共享,對於用戶創建的每個Pod,系統會自動選擇那個健康並且有足夠容量的機器,然后創建類似容器的容器,當容器創建失敗的時候,容器會被node agent自動的重啟,這個node agent叫kubelet,但是,如果是Pod失敗或者機器,它不會自動的轉移並且啟動,除非用戶定義了 replication controller。
   
     pod是k8s集群管理的最小單元,但是容器包含在pod中,一個pod中有一個pause容器和若干個業務容器,而容器就是單獨的一個容器,簡而言之,pod是一組容器+pause容器構成,而容器單指一個容器。 所以我們在說pod的時候不能說pod容器怎么怎么樣之類的說法。

    k8s是管理整個集群中的所有pod,包括調度pod,刪除pod,更新pod等。

    一、POD(是k8s的核心,各種應用都基本以pod和yaml來進行管理)

      Kubernetes 使用 Pod 來管理容器,即用master來進行管理, 每個 Pod 可以包含一個或多個緊密關聯的業務容器。一對多的關系。
而pod是部署到node節點上的或者master也可以設置可以部署pod, 假設部署到了node節點上, node節點上必然有docker, 我們可以通過docker命令進入容器
也可以在 master上通過執行   kubectl exec -it mdp-cc-85fd974f8c-slcwk  -n default  -- /bin/bash 這樣的命令進入pod 查看內部情況。

       容器是一種便攜式、輕量級的操作系統級虛擬化技術,容器化不定是采用docker,但是這里我說的都是docker方式。它使用 NameSpace 隔離不同的軟件運行環境,並通過鏡像自包含軟件的運行環境,從而使得容器可以很方便的在任何地方運行。由於容器體積小且啟動快,因此可以在每個容器鏡像中打包一個應用程序。是一對一關系。

     二、Node(pod載體)
      Node節點是 Pod 真正運行的宿主機,可以是物理機,也可以是虛擬機
為了管理 Pod,每個 Node 節點上至少要安裝docker 、安裝kubelet(二進制是hyperkube) ,同時需要操作系統支持,centos6就對docker支持不好

     三、Namespace(可以理解為隔離資源或者應用)
      Namespace 是對一組資源和對象的抽象集合,比如可以用來將系統內部的對象划分為不同的項目組或用戶組。常見的 pods, services, replication controllers 和 deployments 等都是屬於某一個 namespace 的(默認是 default),我們開發的時候不同項目可以設置不同的 namespace,同時用k8s dashboard 令牌方式管理,而 node, persistentVolumes 等則不屬於任何 namespace

      四、Service(對外提供服務)
 Service 是應用服務的抽象,說白點就是nginx配置域名,指向集群master中暴露出來的端口,這個端口實際就是我們暴露的服務, labels 為應用提供負載均衡和服務發現機制。
匹配 labels 的 Pod IP 和端口列表組成 endpoints,由 kube-proxy 負責將服務 IP 負載均衡到這些 endpoints 上。

     五、網絡通訊方式

     我們考慮一下K8s集群中docker容器之間是如何通訊的?

我們這里我們有幾種pod的情況

1)在同一個POD上容器通信.

2)同一個Node,不同POD.

3)不同Node,不同POD.

1) 同一個POD上Container通信

在k8s中每個Pod中管理着一組Docker容器,既然是一組就是多個,每個docker容器,通過docker ps  查看都有一個容器id,

例如在node上

[root@ht5 calico]# docker ps -a
CONTAINER ID       IMAGE COMMAND CREATED STATUS PORTS NAMES
8da13e0e551d      e76b1866726d "/bin/sh -c 'java ${…" 16 hours ago Up 16 hours k8s_config-server-node_config-server-node-0_default_b0978e90-8f36-11ec-b44a-060eb4000e9d_0  370e764c4422 k8s.gcr.io/pause-amd64:3.0 "/pause" 16 hours ago Up 16 hours


這組Docker容器共享同一個網絡命名空間,Pod中的每個Docker容器擁有與Pod相同的IP和port地址空間,並且由於他們在同一個網絡命名空間,他們之間可以通過localhost相互訪問。

如果我們想看某個pod里面部署了幾個容器,我們可以通過  kubectl get pods mypodname -o jsonpath={.spec.containers[*].name}   命令查看。

在master上執行:
[root@fpNet-web-38 ~]# kubectl get pods stp-node-0 -o jsonpath={.spec.containers[*].name}

stp-node

 


免責聲明!

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



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