国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Kubernetes中Pod容器的使用

這篇具有很好參考價值的文章主要介紹了Kubernetes中Pod容器的使用。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1 概述

Pod是K8S系統(tǒng)中可以創(chuàng)建和管理的最小單元,是資源對象模型中由用戶創(chuàng)建或部署的最小資源對象模型

有許多組件圍繞Pod進行擴展和支持,比如控制器對象是用來管控Pod對象的,Service或者Ingress資源對象是用來暴露Pod引用對象的,PersistentVolume資源對象是用來為Pod提供存儲等。

1.1 Pod結(jié)構

Pod是多進程設計,一個Pod里面包含多個容器,而一個容器里面運行一個應用程序。

每個Pod都有一個特殊的被稱為 “根容器”的Pause容器。Pause容器對應的鏡像屬于Kubernetes平臺的一部分,為其他的業(yè)務容器作支撐。一般把業(yè)務相關聯(lián)的容器放到一個pod里,從而方便相關容器之間網(wǎng)絡互通和文件共享。

1.2 實現(xiàn)機制

Pod實現(xiàn)主要依賴于共享網(wǎng)絡共享存儲兩大機制

  • 共享網(wǎng)絡:docker創(chuàng)建的容器由于namespace和group而相互隔離的,在創(chuàng)建業(yè)務容器時會注冊到 pause容器 中從而共享其 ip地址,mac地址,port 等信息,這樣便處于同一個網(wǎng)絡中實現(xiàn)網(wǎng)絡的共享。

  • 共享存儲:如下所示,每個容器會掛載到公共的數(shù)據(jù)卷Volume上,然后其數(shù)據(jù)都持久化存儲到其中,當一個容器掛掉后,新的容器也能從Volume讀取到之前的數(shù)據(jù)

  apiversion: v1
  kind: Pod
  metadata:
    name: my-pod
  spec:
    containers:
    -name: write
      image: centos
      command: ["bash", "-u","for i in {1..100};do echo $i ? /data/hello;sleep 1;done"]
      # 掛載數(shù)據(jù)卷
      volumeMounts:
        -name: data
          mountPath: /data 
          
    -name: read
      image: centos
      command: [“bash",”-c","tail -f /data/hello"]
      # 掛載數(shù)據(jù)卷
      volumeMounts:
      -name: data
        mountPath: /data
    
    # 定義數(shù)據(jù)卷
    volumes:
    -name: data
      emptyDir: {}

2 Pod機制

2.1 鏡像拉取策略

Pod的拉取策略主要分為了以下幾種

  • IfNotPresent:默認值,鏡像在宿主機上不存在才拉取
  • Always:每次創(chuàng)建Pod都會重新拉取一次鏡像
  • Never:Pod永遠不會主動拉取這個鏡像
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
    -name: nginx
    image: nginx:1.14
    # 拉取策略
    imagePullPolicy: Always

2.2 Pod資源限制

Pod在進行調(diào)度時,可以在調(diào)度器對資源的分配進行設置。例如限制使用的資源是 2C4G,那么在調(diào)度到對應的node節(jié)點時,只會占用對應的資源,對于不滿足資源的節(jié)點則會跳過。

有兩種資源配置的方式:

  • request:表示調(diào)度所需最少的資源
  • limits:表示最多允許使用的資源
apiVersion: v1
kind: Pod
metadata:
  name: frontend
spec:
  containers:
  - name: db
    image: mysql
    env:
    - name: MYSQL__ROOT_PASSWORD
      value: "password"
        
    resources:
      # 資源限制
      requests:
        memory: "64Mi"
        cpu: "250m"
        
      limits:
        memory: "128Mi"
        cpu: "500m"

2.3 Pod重啟機制

當Pod中的容器出現(xiàn)問題時就會觸發(fā)重啟機制,重啟策略主要分為以下三種

  • Always:當容器終止退出后,總是重啟容器,默認策略 【nginx等,需要不斷提供服務】
  • OnFailure:當容器異常退出(退出狀態(tài)碼非0)時,才重啟容器。
  • Never:當容器終止退出,從不重啟容器
apiVersion: v1
kind: Pod
metadata:
  name: dns-test
spec:
  containers:
  - name: busybox
    image: busybox:1.28
    args:
    - /bin/sh
    - -c
    - sleep 33000
  # 重啟策略
  restartPolicy: Never

2.4 Pod健康檢查

通過容器檢查來判斷服務是否可用,共有兩種檢查方式:存活檢查livenessProbe,如果檢查失敗,將殺死容器,根據(jù)Pod的restartPolicy來操作;就緒檢查readinessProbe,如果檢查失敗,Kubernetes會把Pod從Service endpoints中剔除

Probe支持以下三種檢查方式

  • http Get:發(fā)送HTTP請求,返回200 - 400 范圍狀態(tài)碼為成功
  • exec:執(zhí)行Shell命令返回狀態(tài)碼是0為成功
  • tcpSocket:發(fā)起TCP Socket建立成功
apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-exec
spec:
  containers:
  - name: liveness
    image: busybox
    args:
    - /bin/sh
    - -c
    - touch /tmp/healthy; sleep 30;
    # 通過exec來執(zhí)行存活檢查
    livenessProbe:
      exec:
        command:
        -cat
        -/tmp/healthy
      initialDelaySeconds: 5
      periodSeconds: 5

3 調(diào)度策略

創(chuàng)建Pod流程如下:

  • 首先創(chuàng)建一個pod,然后創(chuàng)建一個API Server 和 Etcd,把創(chuàng)建出來的信息存儲在etcd中
  • 然后創(chuàng)建 Scheduler,監(jiān)控API Server是否有新的Pod,如果有的話,會通過調(diào)度算法把pod調(diào)度具體node上
  • 在node節(jié)點,會通過 kubelet -- apiserver 讀取etcd 拿到分配在當前node節(jié)點pod信息,然后通過docker創(chuàng)建容器
影響Pod調(diào)度的屬性

在Pod調(diào)度時會有多個條件影響調(diào)度結(jié)果。

首先調(diào)度器會考慮Pod的資源限制,根據(jù)request找到滿足條件的node節(jié)點進行調(diào)度

3.1 節(jié)點選擇器NodeSelector

調(diào)度器會根據(jù)節(jié)點的標簽將任務調(diào)度到符合條件的節(jié)點上,例如下面將任務調(diào)度到標簽為dev的節(jié)點上

apiVersion: v1
kind: Pod
metadata:
  name: pod-example
spec:
  # 根據(jù)節(jié)點選擇器標簽進行調(diào)度
  nodeSelector:
    env role: dev
  containers:
  -name: nginx
    image: nginx:1.15

可以通過以下命令為節(jié)點新增標簽,然后節(jié)點選擇器就會進行調(diào)度了

kubectl label node node1 env_role=prod

3.2 節(jié)點親和性NodeAffinity

節(jié)點親和性和之前nodeSelector 基本一樣的,根據(jù)節(jié)約束條件來決定Pod調(diào)度到哪些節(jié)點上

  • 硬親和性:約束條件必須滿足,不滿足則不分配
  • 軟親和性:嘗試滿足,不保證
apiVersion: v1                                              
kind: Pod                                                    
metadata:                                                    
   name: with-node-affinity                                    
spec:                                                             
   affinity:                                                   
     nodeAffinitv:
       # 硬親和性
       requiredDuringSchedulinglgnoredDuringExecution:
         nodeSelectorTerms:
         - matuhExpEessions:
           - key: env sle
             operator: In
             values:
               - dev
               - test
       # 軟親和性
       preferredDuringSchedulinglgnoredDuringExecution:
       - weight: 1
         preference:
           matchExpressions:
           - key: group
             operator: In
             values:
             - otherprod

支持常用操作符:in、NotIn、Exists、Gt、Lt、DoesNotExists

反親和性:就是和親和性剛剛相反,如 NotIn、DoesNotExists等

3.3 污點Taint

通過Taint 將節(jié)點添加污點,從而使本節(jié)點不做普通分配調(diào)度。nodeSelector 和 NodeAffinity,都是Pod的屬性,而污點是節(jié)點的屬性。

可以通過污點

  • 專用節(jié)點【限制ip】
  • 配置特定硬件的節(jié)點【固態(tài)硬盤】
  • 基于Taint驅(qū)逐【在node1不放,在node2放】

通過如下命令查看污點情況

kubectl describe node k8smaster | grep Taint

污點值有三個

  • NoSchedule:一定不被調(diào)度
  • PreferNoSchedule:盡量不被調(diào)度【也有被調(diào)度的幾率】
  • NoExecute:不會調(diào)度,并且還會驅(qū)逐Node已有Pod

通過如下命令為節(jié)點添加污點

kubectl taint node [node] key=value:污點的三個值

舉例:文章來源地址http://www.zghlxwxcb.cn/news/detail-609671.html

kubectl taint node k8snode1 env_role=yes:NoSchedule

# 刪除污點
kubectl taint node k8snode1 env_role:NoSchedule-

到了這里,關于Kubernetes中Pod容器的使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Kubernetes系列-通過kubectl實現(xiàn)重啟pod的方法

    kubectl 沒有 restart pod 這個命令,主要是由于在 k8s 中pod 的管理屬于rs 等控制器,并不需要手動維護,但有時更新了yaml文件后,期望破都能夠\\\"重啟\\\"重新加載yaml文件,比如修改了configmap 的配置文件后,希望重啟pod 加載配置,此時就需要 “重啟” Pod。而\\\"重啟\\\"準確地來說是重建

    2024年02月12日
    瀏覽(21)
  • 云原生Kubernetes:kubectl管理命令

    云原生Kubernetes:kubectl管理命令

    目錄 一、理論 1.K8S資源管理方法 2.kubectl 管理命令 3.項目的生命周期 4.Kubernetes 服務發(fā)布方式 5.金絲雀發(fā)布(Canary Release)部署 6.聲明式管理方法 二、實驗 ?1.kubectl 管理命令 2.項目的生命周期 3.金絲雀發(fā)布(Canary Release)部署 4.聲明式管理方法 三、問題 1.為何每個pod有兩個標簽 四

    2024年02月09日
    瀏覽(16)
  • Kubernetes(k8s)容器編排Pod介紹和使用

    Kubernetes(k8s)容器編排Pod介紹和使用

    Pod是kubernetes中你可以創(chuàng)建和部署的最小也是最簡的單位,一個Pod代表著集群中運行的一個進程。 Pod有兩個必須知道的特點 通過yaml文件或者json描述Pod和其內(nèi)容器的運行環(huán)境和期望狀態(tài),例如一個最簡單的運行nginx應用的pod,定義如下 3.1.1 參數(shù)描述 下面簡要分析一下上面的

    2024年02月08日
    瀏覽(114)
  • 容器和云原生(三):kubernetes搭建與使用

    容器和云原生(三):kubernetes搭建與使用

    ? ? ? ? 目錄 單機K8S docker containerd image依賴 kubeadm初始化 驗證 crictl工具 K8S核心組件 上文安裝單機docker是很簡單docker,但是生產(chǎn)環(huán)境需要多個主機,主機上啟動多個docker容器,相同容器會綁定形成1個服務service,微服務場景中多個service會互相調(diào)用,那么就需要保證多個servi

    2024年02月11日
    瀏覽(27)
  • 云原生Kubernetes:pod基礎

    云原生Kubernetes:pod基礎

    目錄 一、理論 1.pod 2.pod容器分類 3.鏡像拉取策略 4.pod 的重啟策略 二、實驗 1.Pod容器的分類 2.鏡像拉取策略 三、問題 1.apiVersion 報錯 2.pod v1版本資源未注冊 3.格式錯誤 4.取行顯示指定pod信息 四、總結(jié) (1)? 概念 ?Pod是kubernetes中最小的資源管理組件,Pod也是最小化運行容器化應

    2024年02月09日
    瀏覽(19)
  • 云原生之深入解析Kubernetes中Kubectl Top如何進行資源監(jiān)控

    云原生之深入解析Kubernetes中Kubectl Top如何進行資源監(jiān)控

    kubectl top 是基礎命令,但是需要部署配套的組件才能獲取到監(jiān)控值: 1.8 以下:部署 heapter; 1.8 以上:部署 metric-server; kubectl top node:查看 node 的使用情況: kubectl top pod:查看 pod 的使用情況: 不指定 pod 名稱,則顯示命名空間下所有 pod,–containers 可以顯示 pod 內(nèi)所有的

    2024年02月10日
    瀏覽(20)
  • Kubernetes —Pod 和容器日志

    Kubernetes —Pod 和容器日志

    應用日志可以讓你了解應用內(nèi)部的運行狀況。日志對調(diào)試問題和監(jiān)控集群活動非常有用。 大部分現(xiàn)代化應用都有某種日志記錄機制。同樣地,容器引擎也被設計成支持日志記錄。 針對容器化應用,最簡單且最廣泛采用的日志記錄方式就是寫入標準輸出和標準錯誤流。 但是,

    2024年02月13日
    瀏覽(24)
  • 【云原生】Kubernetes之 Pod hook(鉤子)

    Pod hook(鉤子)是由 Kubernetes 管理的 kubelet 發(fā)起的,當容器中的進程啟動前或者容器中的進程終止之前運行,這是包含在容器的生命周期之中??梢酝瑫r為 Pod 中的所有容器都配置 hook。 Hook 的類型包括兩種: exec:執(zhí)行一段命令 HTTP:發(fā)送 HTTP 請求 示例如下: 說明: postStar

    2024年02月15日
    瀏覽(19)
  • 云原生之深入解析Kubernetes中如何使用臨時容器進行故障排查

    容器及其周圍的生態(tài)系統(tǒng)改變了工程師部署、維護和排查工作負載故障的方式。但是,在 Kubernetes 集群上調(diào)試應用程序有時可能會很困難,因為可能在容器中找不到所需的調(diào)試工具。許多工程師使用基于精簡、發(fā)行版構建無發(fā)行版的基礎鏡像,其中甚至沒有包管理器或shell,

    2024年02月05日
    瀏覽(26)
  • Kubernetes在容器內(nèi)獲取Pod信息

    我們知道,每個 Pod 在被成功創(chuàng)建出來之后,都會被系統(tǒng)分配唯一的名字、IP 地址,并且處于某個 Namespace 中,那么我們?nèi)绾卧?Pod 的容器內(nèi)獲取 Pod 的這些重要信息呢?答案就是使用 Downward API。 Downward API 可以通過以下兩種方式將 Pod 信息注入容器內(nèi)部。 (1)環(huán)境變量:用于單

    2024年02月10日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包