學習筆記十四:K8S最小調度單元POD概述

K8S最小調度單元POD概述

  • k8s核心資源Pod介紹
    • Pod是什么
      • Pod如何管理多個容器
      • Pod網絡
      • Pod存儲
      • 代碼自動發版更新
      • 收集業務日志
    • Pod工作方式
      • 自主式Pod
      • 控制器管理的Pod(防誤刪除)
  • 如何基于Pod運行應用

k8s核心資源Pod介紹

K8s官方文檔:https://kubernetes.io/
K8s中文官方文檔: https://kubernetes.io/zh/
K8s Github地址:https://github.com/kubernetes/kubernetes
Pod資源對應的官方文檔:https://kubernetes.io/zh-cn/docs/concepts/workloads/pods/

Pod是什么

Pod是Kubernetes中的最小調度單元,k8s是通過定義一個Pod的資源,然后在Pod里面運行容器,容器需要指定一個鏡像,這樣就可以用來運行具體的服務。一個Pod封裝一個容器(也可以封裝多個容器),Pod里的容器共享存儲、網絡等。也就是說,應該把整個pod看作虛擬機,然后每個容器相當于運行在虛擬機的進程。

在這里插入圖片描述

Pod是需要調度到k8s集群的工作節點來運行的,具體調度到哪個節點,是根據scheduler調度器實現的。
pod相當于一個邏輯主機–比方說我們想要部署一個tomcat應用,如果不用容器,我們可能會部署到物理機、虛擬機或者云主機上,那么出現k8s之后,我們就可以定義一個pod資源,在pod里定義一個tomcat容器,所以pod充當的是一個邏輯主機的角色。

Pod如何管理多個容器

Pod中可以同時運行多個容器。同一個Pod中的容器會自動的分配到同一個 node 上。同一個Pod中的容器共享資源、網絡環境,它們總是被同時調度,在一個Pod中同時運行多個容器是一種比較高級的用法,只有當你的容器需要緊密配合協作的時候才考慮用這種模式。例如,你有一個容器作為web服務器運行,需要用到共享的volume,有另一個“sidecar”容器來從遠端獲取資源更新這些文件。

在這里插入圖片描述

一些Pod有init容器和應用容器。 在應用程序容器啟動之前,運行初始化容器。

在這里插入圖片描述

Pod網絡

Pod是有IP地址的,假如pod不是共享物理機ip,由網絡插件(calico、flannel、weave)劃分的ip,每個pod都被分配唯一的IP地址

  • Kubernetes中容器共享的方式
    在k8s中,啟動Pod時,會先啟動?個pause 的容器,然后將后續的所有容器都 "link 到這個pause 的容器,以實現?絡共享。
    在這里插入圖片描述

Pod存儲

創建Pod的時候可以指定掛載的存儲卷。 POD中的所有容器都可以訪問共享卷,允許這些容器共享數據。 Pod只要掛載持久化數據卷,Pod重啟之后數據還是會存在的。
在這里插入圖片描述

代碼自動發版更新

假如生產環境部署了一個go的應用,而且部署了幾百個節點,希望這個應用可以定時的同步最新的代碼,以便自動升級線上環境。這時,我們不希望改動原來的go應用,可以開發一個Git代碼倉庫的自動同步服務,然后通過Pod的方式進行編排,并共享代碼目錄,就可以達到更新java應用代碼的效果。

在這里插入圖片描述

收集業務日志

某服務模塊已經實現了一些核心的業務邏輯,并且穩定運行了一段時間,日志記錄在了某個目錄下,按照不同級別分別為 error.log、access.log、warning.log、info.log,現在希望收集這些日志并發送到統一的日志處理服務器上。
這時我們可以修改原來的服務模塊,在其中添加日志收集、發送的服務,但這樣可能會影響原來服務的配置、部署方式,從而帶來不必要的問題和成本,也會增加業務邏輯和基礎服務的藕合度。
如果使用Pod的方式,通過簡單的編排,既可以保持原有服務邏輯、部署方式不變,又可以增加新的日志收集服務。
而且如果我們對所有服務的日志生成有一個統一的標準,或者僅對日志收集服務稍加修改,就可以將日志收集服務和其他服務進行Pod編排,提供統一、標準的日志收集方式。
這里的“核心業務服務”、“日志收集服務”分別是一個鏡像,運行在隔離的容器環境中。

在這里插入圖片描述

Pod工作方式

在K8s中,所有的資源都可以使用一個yaml文件來創建,創建Pod也可以使用yaml配置文件。或者使用kubectl run在命令行創建Pod(不常用)。

自主式Pod

所謂的自主式Pod,就是直接定義一個Pod資源,如下:

vim pod-tomcat.yaml
apiVersion: v1
kind: Pod
metadata:name: tomcat-testnamespace: defaultlabels:app:  tomcat
spec:containers:- name:  tomcat-javaports:- containerPort: 8080image: tomcat/tomcat-8.5-jre8:v1imagePullPolicy: IfNotPresent

導入鏡像 把tomcat.tar.gz上傳到k8snode1和k8snode2節點,手動解壓:
鏈接:https://pan.baidu.com/s/1BGUFkkwFnZ-OF80weq0pQQ?pwd=r6ri
提取碼:r6ri

ctr -n=k8s.io images import  tomcat.tar.gz

更新資源清單文件

kubectl apply -f pod-tomcat.yaml  

查看pod是否創建成功

kubectl get pods -o wide -l app=tomcat 

但是自主式Pod是存在一個問題的,假如我們不小心刪除了pod:

kubectl delete pods tomcat-test

查看pod是否還在

kubectl get pods -l app=tomcat

結果是空,說明pod已經被刪除了
通過上面可以看到,如果直接定義一個Pod資源,那Pod被刪除,就徹底被刪除了,不會再創建一個新的Pod,這在生產環境還是具有非常大風險的,所以今后我們接觸的Pod,都是控制器管理的。

控制器管理的Pod(防誤刪除)

常見的管理Pod的控制器:Replicaset、Deployment、Job、CronJob、Daemonset、Statefulset。
控制器管理的Pod可以確保Pod始終維持在指定的副本數運行。
如,通過Deployment管理Pod

解壓鏡像:把nginx.tar.gz上傳到k8snode1和k8snode2節點
鏈接:https://pan.baidu.com/s/1EDLQ8Zt9goRFEo9K83Ufwg?pwd=qv3q
提取碼:qv3q

ctr -n=k8s.io images import  nginx.tar.gz
vim nginx-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-testlabels:app: nginx-deploy
spec:selector:matchLabels:app: nginxreplicas: 2template:metadata:labels:app: nginxspec:containers:- name: my-nginximage: nginx/nginx:v1imagePullPolicy: IfNotPresentports:- containerPort: 80

更新資源清單文件

kubectl apply -f nginx-deploy.yaml

查看Deployment

kubectl get deploy -l app=nginx-deploy

查看Replicaset

kubectl get rs -l app=nginx

查看pod

kubectl get pods -o wide -l app=nginxNAME                           READY   STATUS        IP                     
nginx-test-75c685fdb7-6d4lx    1/1     Running       10.244.102.69   
nginx-test-75c685fdb7-9s95h    1/1     Running       10.244.102.68   

刪除nginx-test-75c685fdb7-9s95h這個pod

kubectl delete pods nginx-test-75c685fdb7-9s95h
kubectl get pods -o wide -l app=nginx
NAME                           READY   STATUS              IP                        
nginx-test-75c685fdb7-6d4lx    1/1       Running            10.244.102.69   
nginx-test-75c685fdb7-pr8gh    1/1      Running             10.244.102.70 

發現重新創建一個新的pod是nginx-test-75c685fdb7-pr8gh
通過上面可以發現通過deployment管理的pod,可以確保pod始終維持在指定副本數量

可以通過指定配置文件刪除對應pod

 kubectl delete -f nginx-deploy.yaml

如何基于Pod運行應用

創建pod流程:

在這里插入圖片描述

kubectl apply -f nginx-deploy.yaml->找到config文件,基于config文件指定的用戶訪問指定的集群,這樣就找到了apiserver

  • 通過 kubectl 命令向 apiserver 提交創建pod的請求,apiserver接收到pod創建請求后,會將pod的屬性信息(metadata)寫入etcd。
  • apiserver觸發watch機制準備創建pod,信息轉發給調度器scheduler,調度器使用調度算法選擇node,調度器將node信息給apiserver,apiserver將綁定的node信息寫入etcd
  • apiserver又通過watch機制,調用kubelet,指定pod信息,調用容器運行時創建并啟動pod內的容器。
  • 創建完成之后反饋給kubelet, kubelet又將pod的狀態信息給apiserver,apiserver又將pod的狀態信息寫入etcd。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/39001.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/39001.shtml
英文地址,請注明出處:http://en.pswp.cn/news/39001.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【博客692】grafana如何解決step動態變化時可能出現range duration小于step

grafana如何解決step動態變化時可能出現range duration小于step 1、grafana中的step和resolution grafana中的 “step” grafana本身是沒有提供step參數的,因為儀表盤根據查詢數據區間以及儀表盤線條寬度等,對于不同查詢,相同的step并不能…

校園外賣小程序怎么做

校園外賣小程序是為滿足校園內學生和教職員工的外賣需求而開發的一種應用程序。它涵蓋了從用戶端、商家端、騎手端、電腦管理員到小票打印、多商戶入駐等多個方面的功能,以下將逐一介紹。 1. 用戶端功能:校園外賣小程序為用戶提供了便捷的訂餐和外賣服務…

Zmq適配Win7 SP0 / Win XP/ Win 2k

1.目的 由于發布版本的libzmq使用了較多新的系統特性,導致在低版本windows平臺上無法使用。 因此,需要對zmq源碼進行修改以適配低版本的系統,如Win7 SP0,Win XP,Win2003等等。 2.Win7 SP0 #if defined ZMQ_HAVE_WIN…

深入理解epoll

文章目錄 概述1. epoll_create - 創建一個epoll實例2. epoll_ctl - 控制epoll實例的事件結構體介紹events取值:data: 聯合體(共用體): 3. epoll_wait - 等待事件發生偽代碼總結 概述 在網絡編程中,高效地處…

每天一道leetcode:797. 所有可能的路徑(圖論中等深度優先遍歷)

今日份題目: 給你一個有 n 個節點的 有向無環圖(DAG),請你找出所有從節點 0 到節點 n-1 的路徑并輸出(不要求按特定順序) graph[i] 是一個從節點 i 可以訪問的所有節點的列表(即從節點 i 到節…

c++11 explicit關鍵字的作用

explicit 在C中,explicit關鍵字用來修飾類的構造函數,被修飾的構造函數的類,不能發生相應的隱式類型轉換,只能以顯示的方式進行類型轉換。因為無參構造函數和多參構造函數本身就是顯示調用的。再加上explicit關鍵字也沒有什么意義…

?五金件機器視覺定位?并獲取外觀輪廓軟硬件視覺方案

【檢測目的】 五金件機器視覺定位,視覺檢測五金件輪廓并矯正五金件位置進行涂油 【客戶要求】 FOV:540*400mm 【拍攝與處理效圖一】 【拍攝與處理效圖二】 【實驗原理及說明】 【方案評估】 根據目前的圖像和處理結果來看,可以檢測出產品輪廓并進行位置…

HCIP-OpenStack搭建

1、OpenStack概述 OpenStack是一種云操作系統,OpenStack是虛擬機、裸金屬和容器的云基礎架構。可控制整個數據中心的大型計算、存儲和網絡資源池,所有資源都通過具有通用身份驗證機制的API進行管理和配置。管理員也可通過Web界面控制,同時授…

Qt 之 QPushButton,信號與槽機制

文章目錄 前言一、QPushButton二、信號與槽機制總結 前言 一、QPushButton 當我們開發基于Qt框架的圖形用戶界面(GUI)應用程序時,經常需要在界面上添加按鈕來實現用戶交互。Qt提供了一個名為 QPushButton 的類作為按鈕控件的實現。QPushButt…

基于RoCE的應用程序的MTU注意事項

目錄 基于RoCE的應用程序的MTU注意事項 探測網絡中的MTU設置 概要 原文 MTU測試結果 DOC: CentOS安裝tshark抓包工具 基于RoCE的應用程序的MTU注意事項 原文:https://support.mellanox.com/s/article/MLNX2-117-1682kn InfiniBand協議最大傳輸單元&#xff…

WSL2 Ubuntu子系統安裝OpenCV

文章目錄 前言一、基本概念二、操作步驟1.下載源碼2.安裝依賴3.運行編譯4.配置路徑 前言 OpenCV用C語言編寫,它的主要接口也是C語言,但是依然保留了大量的C語言接口。該庫也有大量的Python, Java and MATLAB/OCTAVE (版本2.5)的接口。這些語…

C#委托事件的區別

在C#中,委托(delegate)和事件(event)經常一起使用,但它們之間確實有一些基本的區別: 委托(Delegate):委托是一個引用類型,它可以引用一個或多個具…

[python] 安裝numpy+scipy+matlotlib+scikit-learn及問題解決

這篇文章主要講述Python如何安裝Numpy、Scipy、Matlotlib、Scikit-learn等庫的過程及遇到的問題解決方法。最近安裝這個真是一把淚啊,各種不兼容問題和報錯,希望文章對你有所幫助吧!你可能遇到的問題包括: ImportError: N…

高并發數據抓取實戰:使用HTTP爬蟲ip提升抓取速度

又到每天一期學習爬蟲的時間了,作為一名專業的爬蟲程序員,今天要跟你們分享一個超實用的技巧,就是利用HTTP爬蟲ip來提升高并發數據抓取的速度。聽起來有點高大上?別擔心,我會用通俗易懂的話來和你們說,讓你…

自定義組件引入使用單標簽還是雙標簽好

在許多前端框架和庫中,自定義組件可以使用單標簽或雙標簽進行引入和使用。讓我為您解釋一下這兩種方式的區別和使用場景。 單標簽(Self-closing Tag):使用單標簽來引入自定義組件意味著您在組件的使用中只需要一個標簽&#xff0…

自動切換HTTP爬蟲ip助力Python數據采集

在Python的爬蟲世界里,你是否也被網站的IP封鎖問題困擾過?別擔心,我來教你一個終極方案,讓你的爬蟲自動切換爬蟲ip,輕松應對各種封鎖和限制!快來跟我學,讓你的Python爬蟲如虎添翼! 首…

如何使用mysql命令行導出csv文件?

首先打開ssh,使用命令行登錄mysql mysql -uroot -p123456 其中-u后面的root是用戶名,-p后面的123456是密碼 ,替換成自己的賬戶和密碼即可 然后切換到自己需要操作的數據庫,例如test數據庫 use test 接下來執行語句來選擇要導…

服務器托管中1U是什么意思?

U的概念 U是一種表示服務器外部尺寸的單位,是unit的縮略語。 1U4.44514.445cm 2U4.44528.89cm 4U4.445*413.335cm 在托管服務器時,服務商經常說的“1U”是外形滿足EIA(美國電子工業協會)規格、厚度為4.445cm的產品,設…

uniapp-微信小程序篇

uniapp-微信小程序篇 一、創建項目(以Vue3TS 項目為示例) 可以通過命令行的方式創建也可以通過HBuilderX進行創建(通過HBuilderX創建的項目建議選擇最簡單的模板),個人建議使用命令行方式。 (1) 命令行方式: npx degit dcloudio…

ABAP 期初庫存批量導入 demo1

&--------------------------------------------------------------------- *& Report ZMMCP005 &--------------------------------------------------------------------- 作者: Liv完成日期:描述: 期初庫存導入需求簡要說明&…