日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

目錄
  • 一、前言
  • 二、再看k8s架構圖
  • 三、pod特點
  • 四、pod分類
  • 五、pod中的容器
  • 六、Pod中的網絡
  • 補充:k8s中的網絡通信模型
  • 七、Pod中的存儲
  • 八、Pod常用操作命令
  • 補充說明:
  • 九、Pod延伸補充說明

一、前言

在之前k8s組件一篇中,我們談到了pod這個組件,了解到pod是k8s中資源管理的最小單位,可以說Pod是整個k8s對外提供服務的最基礎的個體,有必要對Pod做深入的學習和探究。

二、再看k8s架構圖

為了加深對k8s中pod的理解,再來回顧下k8s的完整架構

k8s中pod使用詳解(云原生kubernetes)

三、pod特點

結合上面這張圖,關于pod,可以總結下面幾點:

  • Pod是一組容器, 是K8S中最小的單位,,一個Pod可包含多個容器,但通常情況下每個Pod中僅運行一個容器,可以把Pod理解成豌豆莢, Pod內的每個容器就像是一顆豌豆 ;
  • Pod 的核心是運行容器,必須指定容器引擎,比如 Docker是其中一種技術 ;

四、pod分類

根據pod是否自主創建,可以分為兩種

  • 自主創建:直接創建出來的Pod,這種pod刪除后就沒有了,也不會自動重建 ;
  • 控制器創建:通過控制器創建的pod,這類Pod刪除了之后還會自動重建 ;

五、pod中的容器

從上圖可以發現,容器是運行在pod中的,也可以簡單理解為pod是容器運行的外部容器,所以一個pod理論上可以運行很多個docker容器,關于這一點,做兩點說明:

  • 每個Pod中一個容器,的模式是最常見的用法,Pod是容器的簡單封裝,K8S管理Pod而不是直接管理容器 ;
  • 一個Pod中同時運行多個需要互相協作的容器,它們共享資源,同一個Pod中的容器可以作為service單位 ;

六、Pod中的網絡

對于k8s集群中的某個節點來說,可能部署了多個pod,這些不同的pod之間如果也需要互相通信怎么辦呢?這就需要說到pod中的網絡了;

  • 一個 pod 包含一組容器,一個 pod 不會跨越多個工作節點 ;
  • 每個Pod都會被分配一個唯一的IP地址,Pod中的所 有容器共享網絡空間,包括IP地址和端口 ;
  • Pod內 部的容器可以使用localhost互相通信 ;

補充:k8s中的網絡通信模型

K8S集群的有4種網絡:

        具體如下:同一pod內的容器間通信、各pod彼此之間的通信、pod與service間的通信、以及集群外部的流量同service之間的通信

七、Pod中的存儲

  • Volume 也可以用來持久化Pod中的存儲資源,以防容器重啟后文件丟失 ;
  • Pod中 的所有容器都可以訪問共享的Volume ;

八、Pod常用操作命令

1、查看k8s集群中系統運行的pod

kubectl get pod -n kube-system

k8s中pod使用詳解(云原生kubernetes)

2、查看創自己創建的pod

kubectl get pod
或
kubectl get pod,svc,deploy

k8s中pod使用詳解(云原生kubernetes)

3、刪除pod

直接刪除pod:

kubectl delete pod pod名稱 -n 名稱空間

刪除通過控制器創建的pod:

kubectl delete pod控制器名稱 -n 名稱空間

補充說明:

  • 如果是通過deploy控制器創建的pod, 直接刪除則會自動創建新的;
  • -n 非必須,表示某個具體的命名空間;

4、啟動一個pod【命令方式啟動】

kubectl run pod名稱 –image=鏡像 –port=80 –namespace 命名空間名字

比如在上一篇中,我們創建了一個nginx的pod,可以寫成:

kubectl run test-nignx-pod –image=nginx:1.23.0 –port=80 –namespace test

5、啟動一個pod【yaml方式啟動】

在當前目錄下創建一個yaml的文件

k8s中pod使用詳解(云原生kubernetes)

配置內容如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deploy  
  labels:
    chapter: first-app
spec:
  selector:
     matchLabels:  
       app: nginx
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name : nginx
        image: nginx:1.23.0
        ports:
        - containerPort: 80

然后使用apply的方式啟動

kubectl apply -f ./test-nginx.yaml

k8s中pod使用詳解(云原生kubernetes)

注意點:

通過 apply -f 的方式創建的pod,刪除的時候,也需要通過apply -f 的方式刪除

6、通過deployment控制器導出yaml文件

在當前集群下,我們有下面這個pod

k8s中pod使用詳解(云原生kubernetes)

 使用下面的命令導出這個pod對應的yaml

kubectl create deployment test-nginx3 --image=nginx:1.23.0 --namespace test -o yaml --dry-run=client > ./nginx.yaml

執行之后可以發現在當前目錄下創建了一個yaml的文件

k8s中pod使用詳解(云原生kubernetes)

 文件內容是不是和前面我們自己創建的那個yaml很像,看起來似乎更加完整,需要注意的是,這個里面的有些參數是可以手動修改的,比如:replicas 這個表示生成的nginx的pod個數;

k8s中pod使用詳解(云原生kubernetes)

然后就可以使用apply的命令創建pod了

kubectl apply -f nginx.yaml

k8s中pod使用詳解(云原生kubernetes)

7、查看某個名稱空間下 pod 的詳細信息

kubectl get pod -n ns名稱 -o wide

比如,查看default名稱空間下的pod信息,就能看到上面通過yaml文件創建的pod;

kubectl get pod -n default -o wide

k8s中pod使用詳解(云原生kubernetes)

通過k8s創建出來的pod,會分給當前的pod一個IP地址,可以直接通過curl 進行訪問【同一個集群下的其他節點都可訪問】

k8s中pod使用詳解(云原生kubernetes)

九、Pod延伸補充說明

1、pod鏡像拉取策略 

pod鏡像拉取策略可以通過imagePullPolicy字段配置鏡像拉取策略,如下:

spec:
  containers:
    - name: nginx
      image: nginx:1.23.0
      imagePullPolicy: Always	#可取 Always(默認值)、IfNotPresent、Never

imagePullPolicy可以使用以下3種策略值:

Always: 默認值,每次創建pod都會重新拉取一次鏡像;
IfNotPresent: 鏡像在宿主機上不存在時才拉取;
Never: 永遠不會主動拉取鏡像,使用本地鏡像,需要你手動拉取鏡像下來;

2、pod使用資源限制配置

我們知道,集群中的節點都是有一定的配置的,比如CPU,內存等信息,總不能因為創建的某個pod把節點的資源給打滿了,因此可以在配置文件中進行配置,以使用apply -f 的方式創建一個pod,配置文件中關鍵配置如下:

resources:
	requests:
		memory:"內存大小"
		cpu:"cpu占用大小"
	limits:	
		memory:"內存占用大小"
		cpu:"cpu占用大小"

下面是一段完整的標簽配置和說明

spec:  
  containers: 
  - name: string   #必選,容器名稱
    image: string  #必選,容器的鏡像名稱
  
    resources: #資源限制和請求的設置
      limits:  #資源限制的設置
        cpu: string     #Cpu的限制,單位為core數,將用于docker run --cpu-shares參數
        memory: string  #內存限制,單位可以為Mib/Gib,將用于docker run --memory參數
      requests: #資源請求的設置
        cpu: string    #Cpu請求,容器啟動的初始可用數量
        memory: string #內存請求,容器啟動的初始可用數量

如下為一段實際使用中的配置

k8s中pod使用詳解(云原生kubernetes)

更多配置,請參考文檔:k8s文檔

3、關于pod的創建流程

以通過kubectl apply -f xxx.yaml 這種方式創建的pod進行說明,結合本文開頭的k8s架構圖:

  • kubectl向apiserver發送創建pod的請求;
  • apiserver把pod的創建信息存儲到etcd進行保存;
  • scheduler監聽到未綁定node的pod資源,通過調度算法對該pod資源選定一個合適的node進行綁定,然后響應給apiserver,更新pod狀態并存儲到etcd中;
  • 在綁定的node中,Controller-Manager通知kubelet收到分配到自身節點上的pod,調用容器引擎api創建容器,并把容器狀態響應給apiserver;

4、Pod調度策略

默認情況下,一個Pod在哪個Node節點上運行,是由Scheduler組件采用相應的算法計算出來的,這個過程是不受人工控制的。但是在實際使用中,這并不滿足的需求,因為很多情況下,我們想控制某些Pod到達某些節點上,那么應該怎么做呢?這就要求了解k8s對Pod的調度規則 。

下面列舉幾個影響pod調度的因素:

pod資源限制

scheduler根據requests找到足夠大小的node進行調度

使用節點選擇器標簽(nodeSelector)

節點選擇器可以將節點分開,比如k8s集群中有多個節點,為了區分生產,開發和測試環境,就可以利用節點選擇器標簽進行劃分;

例如,當前需要把pod調度到開發環境中,則可以通過scheduler將pod調度到標簽選擇器中為env_role:dev的node中 ,對應的yaml核心配置如下:

nodeSelector: 
  env_role:dev/prod

關于節點選擇器,后續還會通過一文詳細講解其使用。

分享到:
標簽:K8S Kubernetes Pod 服務器 詳解
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定