kubernetes資源型別--pod和job
pod
Pod是K8S的最小 操作單元,一個Pod 可以由一個或多個容器組成 ;整個K8S系統都是圍繞著Pod展開的,比如如何部署執行Pod、如何保證Pod的數量、如何訪問Pod等。
特點
Pod是能夠被建立、排程和管理的最小單元;
每個Pod都有一個獨立的IP;
一個Pod由一個或多個容器構成,並共享所有資源,主要包括:PID、Network、IPC、UTS、共享儲存等;Pod所有容器在同一個Node上;
容器生命週期管理;
對資源使用進行限制,resources(requests、limits);
對容器進行探測:livenessProbe;
叢集內的Pod之間都可以任意訪問,這一般是通過一個二層網路來實現的。
Pod與容器
在Docker中,容器是最小的處理單元,增刪改查的物件是容器,容器是一種虛擬化技術,容器之間是隔離的,隔離是基於Linux Namespace實現的。
而在K8S中,Pod包含一個或者多個相關的容器,Pod可以認為是容器的一種延伸擴充套件,一個Pod也是一個隔離體,而Pod內部包含的一組容器又是共享的(包括PID、Network、IPC、UTS)。除此之外,Pod中的容器可以訪問共同的資料捲來實現檔案系統的共享。
Pod生命週期
Pod被分配到一個Node上後,就不會離開這個Node,直到被刪除。當某個Pod失敗,首先會被K8S清理掉,之後將會在其它機器上(或本機)重建Pod,重建後Pod的ID發生變化,那將會是一個新的Pod。所以,K8S中Pod的遷移,實際指的是在新Node上重建Pod。
生命週期回撥函式 :PostStart(容器建立成功後呼叫該回調函式)、PreStop(在容器被終止前呼叫該回調函式)。以下示例中,定義了一個Pod,包含一個JAVA的web應用容器,其中設定了PostStart和PreStop回撥函式。即在容器建立成功後,複製/sample.war到/app資料夾中。而在容器終止之前,傳送HTTP請求到http://monitor.com:8080/waring,即向監控系統傳送警告。
一pod多容器
Pod主要是在容器化環境中建立一個面向應用的“邏輯主機”模型,它可以包含一個或多個相互間緊密聯絡的容器。當其中任一容器消失時,該節點上的Pod也隨之被刪除。
一pod多容器,讓多個同應用的單一容器整合到一個類虛擬機器中,使其所有容器共用一個vm的資源,提高耦合度,從而方便副本的複製,提高整體的可用性。
一pod多容器的優勢:
同個Pod下的容器之間能更方便的共享資料和通訊 ,使用相同的網路名稱空間、IP 地址和埠區間,相互之間能通過localhost 來發現和通訊。
在同個Pod內執行的容器共享儲存空間(如果設定),儲存卷內的資料不會在容器重啟後丟失,同時能被同Pod下別的容器讀取。
相比原生的容器介面,Pod通過提供更高層次的抽象,簡化了應用的部署和管理,不同容器提供不同服務 。Pod就像一個管理橫向部署的單元,主機託管、資源共享、協調複製和依賴管理都可以自動處理。
yaml檔案格式請見ofollow,noindex">http://blog.csdn.net/liyingke112/article/details/76155428
Job
在有些場景下,是想要執行一些容器執行某種特定的任務,任務一旦執行完成,容器也就沒有存在的必要了。在這種場景下,建立pod就顯得不那麼合適。於是就是了Job,Job指的就是那些一次性任務。通過Job執行一個容器,當其任務執行完以後,就自動退出,叢集也不再重新將其喚醒。
從程式的執行形態上來區分,可以將Pod分為兩類:長時執行服務(jboss、mysql等)和一次性任務(資料計算、測試)。RC 建立的Pod 都是長時執行的服務,Job多用於執行一次性任務、批處理工作等,執行完成後便會停止(status.phase變為Succeeded)。
在Job的定義中,restartPolicy(重啟策略)只能是Never和OnFailure。
OnFailure (當容器異常終止退出時重啟): 在出現故障時其內部重啟容器,而不是建立。
Never (從不重啟): 會在出現故障時建立新的,且故障job不會消失。
設定超時:job執行超時時間可以通過spec.activeDeadlineSeconds來設定,超過指定時間未完成的job會以DeadlineExceeded原因停止
apiVersion: v1 kind: Job metadata: labels: name: lykops-job name: lykops-job spec: template: metadata: name: lykops-job spec: containers: - name: lykops-job image: web:apache command: - sleep - 300
在v1.5無法實現,使用pod來代替
apiVersion: v1 kind: Pod metadata: labels: app: container1 version: apache namespace: default name: container1 spec: containers: -args: -"30" command: -sleep image: web:apache name: container1 restartPolicy: OnFailure #或者Never