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

Kubernetes在容器內(nèi)獲取Pod信息

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

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)境變量:用于單個變量,可以將 Pod 信息和 Container 信息注入容器內(nèi)部。

(2)Volume 掛載:將數(shù)組類信息生成為文件并掛載到容器內(nèi)部。

下面通過幾個例子對 Downward API 的用法進(jìn)行說明。

1、環(huán)境變量方式將Pod信息注入為環(huán)境變量

下面的例子通過 Downward API 將 Pod 的 IP、名稱和所在 Namespace 注入容器的環(huán)境變量中,容器應(yīng)用使用

env 命令將全部環(huán)境變量打印到標(biāo)準(zhǔn)輸出中。

配置文件 010-dapi-test-pod.yaml 的內(nèi)容為:

apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod
spec:
  containers:
  - name: test-container
    image: busybox
    command: [ "/bin/sh", "-c", "env" ]
    env:
    - name: MY_POD_NAME
      valueFrom:
        fieldRef:
          fieldPath: metadata.name
    - name: MY_POD_NAMESPACE
      valueFrom:
        fieldRef:
          fieldPath: metadata.namespace
    - name: MY_POD_IP
      valueFrom:
        fieldRef:
          fieldPath: status.podIP
  restartPolicy: Never

注意到上面 valueFrom 這種特殊的語法是 Downward API 的寫法,目前 Downward API 提供了以下變量。

  • metadata.name:Pod 的名稱,當(dāng) Pod 通過 RC 生成時,其名稱是 RC 隨機(jī)產(chǎn)生的唯一名稱。

  • status.podIP:Pod 的 IP 地址,之所以叫作 status.podIP 而非 metadata.IP,是因為 Pod 的 IP 屬于狀態(tài)

    數(shù)據(jù),而非元數(shù)據(jù)。

  • metadata.namespace:Pod 所在的 Namespace。

運(yùn)行 kubectl create 命令創(chuàng)建 Pod:

[root@master cha3]# kubectl create -f 010-dapi-test-pod.yaml
pod/dapi-test-pod created
[root@master cha3]# kubectl get pods dapi-test-pod
NAME            READY   STATUS      RESTARTS   AGE
dapi-test-pod   0/1     Completed   0          67s

查看 dapi-test-pod 的日志:

[root@master cha3]# kubectl logs dapi-test-pod
KUBERNETES_SERVICE_PORT=443
KUBERNETES_PORT=tcp://10.96.0.1:443
HOSTNAME=dapi-test-pod
SHLVL=1
HOME=/root
MY_POD_NAMESPACE=default
MY_POD_IP=10.244.140.197
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_SERVICE_HOST=10.96.0.1
PWD=/
MY_POD_NAME=dapi-test-pod

從日志中我們可以看到 Pod 的 IP、Name 及 Namespace 等信息都被正確保存到了 Pod 的環(huán)境變量中。

2、環(huán)境變量方式將容器資源信息注入為環(huán)境變量

下面的例子通過 Downward API 將 Container 的資源請求和限制信息注入容器的環(huán)境變量中,容器應(yīng)用使用

printenv 命令將設(shè)置的資源請求和資源限制環(huán)境變量打印到標(biāo)準(zhǔn)輸出中。

配置文件 011-dapi-test-pod-container-vars.yaml 的內(nèi)容為:

apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod-container-vars 
spec:
  containers:
    - name: test-container
      image: busybox
      imagePullPolicy: Never
      command: [ "sh", "-c"]
      args:
      - while true; do
          echo -en '\n';
          printenv MY_CPU_REQUEST MY_CPU_LIMIT;
          printenv MY_MEM_REQUEST MY_MEM_LIMIT;
          sleep 3600;
        done;
      resources:
        requests:
          memory: "32Mi"
          cpu: "125m"
        limits:
          memory: "64Mi"
          cpu: "250m"
      env:
        - name: MY_CPU_REQUEST
          valueFrom:
            resourceFieldRef:
              containerName: test-container
              resource: requests.cpu
        - name: MY_CPU_LIMIT
          valueFrom:
            resourceFieldRef:
              containerName: test-container
              resource: limits.cpu
        - name: MY_MEM_REQUEST
          valueFrom:
            resourceFieldRef:
              containerName: test-container
              resource: requests.memory
        - name: MY_MEM_LIMIT
          valueFrom:
            resourceFieldRef:
              containerName: test-container
              resource: limits.memory
  restartPolicy: Never

注意 valueFrom 這種特殊的 Downward API 語法,目前 resourceFieldRef 可以將容器的資源請求和資源限制等

配置設(shè)置為容器內(nèi)部的環(huán)境變量。

  • requests.cpu:容器的 CPU 請求值。

  • limits.cpu:容器的 CPU 限制值。

  • requests.memory:容器的內(nèi)存請求值。

  • limits.memory:容器的內(nèi)存限制值。

運(yùn)行 kubectl create 命令來創(chuàng)建 Pod:

[root@master cha3]# kubectl create -f 011-dapi-test-pod-container-vars.yaml
pod/dapi-test-pod-container-vars created
[root@master cha3]# kubectl get pods dapi-test-pod-container-vars
NAME                           READY   STATUS    RESTARTS   AGE
dapi-test-pod-container-vars   1/1     Running   0          14s

查看 dapi-test-pod-container-vars 的日志:

[root@master cha3]# kubectl logs dapi-test-pod-container-vars

1
1
33554432
67108864

從日志中我們可以看到Containerrequests.cpulimits.cpu、requests.memory、limits.memory

信息都被正確保存到了 Pod 的環(huán)境變量中。

3、Volume掛載方式

下面的例子通過 Downward API 將 Pod 的 Label、Annotation 列表通過 Volume 掛載為容器中的一個文件,容器

應(yīng)用使用 echo 命令將文件的內(nèi)容打印到標(biāo)準(zhǔn)輸出中。

配置文件 012-dapi-test-pod-volume.yaml 的內(nèi)容為:

apiVersion: v1 
kind: Pod 
metadata:
  name: dapi-test-pod-volume
  labels:
    zone: us-est-coast
    cluster: test-cluster1
    rack: rack-22
  annotations:
    build: two
    builder: john-doe
spec:
  containers:
    - name: test-container
      image: busybox
      imagePullPolicy: Never
      command: ["sh", "-c"]
      args:
      - while true; do
          if [[ -e /opt/labels ]]; then
            echo -en '\n\n'; cat /opt/labels; fi;
          if [[ -e /opt/annotations ]]; then
            echo -en '\n\n'; cat /opt/annotations; fi;
          sleep 3600;
        done;
      volumeMounts:
        - name: podinfo
          mountPath: /opt
          readOnly: false
  volumes:
    - name: podinfo
      downwardAPI:
        items:
          - path: "labels"
            fieldRef:
              fieldPath: metadata.labels
          - path: "annotations"
            fieldRef:
              fieldPath: metadata.annotations 

這里要注意 volumes 字段中 downwardAPI 的特殊語法,通過 items 的設(shè)置,系統(tǒng)會根據(jù) path 的名稱生成文

件。根據(jù)上例的設(shè)置,系統(tǒng)將在容器內(nèi)生成 /opt/labels/opt/annotations 兩個文件。在 /opt/labels

文件中將包含 metadata.labels 的全部 Label 列表,在 /opt/annotations 文件中將包含

metadata.annotations的全部 Label 列表。

運(yùn)行 kubectl create 命令創(chuàng)建 Pod:

[root@master cha3]# kubectl create -f 012-dapi-test-pod-volume.yaml
pod/dapi-test-pod-volume created
[root@master cha3]# kubectl get pods dapi-test-pod-volume
NAME                   READY   STATUS    RESTARTS   AGE
dapi-test-pod-volume   1/1     Running   0          16s

查看 dapi-test-pod-volume 的日志:

[root@master cha3]# kubectl logs dapi-test-pod-volume


cluster="test-cluster1"
rack="rack-22"
zone="us-est-coast"

build="two"
builder="john-doe"
kubernetes.io/config.seen="2023-07-02T17:02:42.357753840+08:00"

從日志中我們看到 Pod 的 Label 和 Annotation 信息都被保存到了容器內(nèi)的 /opt/labels/opt/annotations

文件中。

[root@master cha3]# kubectl exec -it dapi-test-pod-volume --  ls /opt
annotations  labels
[root@master cha3]# kubectl exec -it dapi-test-pod-volume --  cat /opt/annotations
build="two"
builder="john-doe"
kubernetes.io/config.seen="2023-07-02T17:02:42.357753840+08:00"
kubernetes.io/config.source="api"
[root@master cha3]# kubectl exec -it dapi-test-pod-volume --  cat /opt/labels
cluster="test-cluster1"
rack="rack-22"
zone="us-est-coast"

那么,Downward API有什么價值呢?

在某些集群中,集群中的每個節(jié)點(diǎn)都需要將自身的標(biāo)識(ID)及進(jìn)程綁定的 IP 地址等信息事先寫入配置文件中,進(jìn)程

在啟動時會讀取這些信息,然后將這些信息發(fā)布到某個類似服務(wù)注冊中心的地方,以實現(xiàn)集群節(jié)點(diǎn)的自動發(fā)現(xiàn)功

能。此時 Downward API 就可以派上用場了,具體做法是先編寫一個預(yù)啟動腳本或 Init Container,通過環(huán)境變量

或文件方式獲取 Pod 自身的名稱、IP地址等信息,然后將這些信息寫入主程序的配置文件中,最后啟動主程序。文章來源地址http://www.zghlxwxcb.cn/news/detail-688450.html

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

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

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Kubernetes】K8s 查看 Pod 的狀態(tài)

    NAME :Pod 的名稱。 READY :代表 Pod 里面有幾個容器,前面是啟動的,后面是總數(shù), 1 / 1 1/1 1/1 。 STATUS :就是當(dāng)前 Pod 狀態(tài),最常見的就是 Running 正在運(yùn)行,最期望的狀態(tài),只要不是 Running 的就說明有問題,就算是 Running 的就不一定沒有問題。 狀態(tài) 說明 Pending 掛起 在執(zhí)行創(chuàng)建

    2024年01月15日
    瀏覽(138)
  • kubernetes(k8s) pod(資源限制、基礎(chǔ)概念)

    kubernetes(k8s) pod(資源限制、基礎(chǔ)概念)

    目錄 ?一、資源限制 1、概念 1.2、Pod和容器的資源請求和限制 1.3、CPU資源單位 1.4、內(nèi)存資源單位 1.5、CPU和內(nèi)存的Requests和Limits的特點(diǎn) 1.6、案例 二、pod 的兩種使用方式 三、pod 資源共享 四、底層容器Pause 1、pause 共享資源 1.1、網(wǎng)絡(luò) 1.2、存儲 1.3、小結(jié) 2、Pause主要功能 3、Pod

    2024年02月05日
    瀏覽(102)
  • Kubernetes(k8s)核心資源解析:Pod詳解

    Kubernetes(k8s)核心資源解析:Pod詳解

    ??The Begin??點(diǎn)點(diǎn)關(guān)注,收藏不迷路?? Pod是Kubernetes中最小的調(diào)度單元,它可以包含一個或多個容器。Pod中的所有容器共享網(wǎng)絡(luò)和存儲卷,它們一起運(yùn)行在同一個節(jié)點(diǎn)上。Pod提供了一種抽象層,使得容器可以作為一個邏輯單元來管理。 Pod中的容器共享IP地址、端口空間和存儲

    2024年04月11日
    瀏覽(102)
  • K8S第四講 Kubernetes刪除pod阻塞問題

    在Kubernetes中,當(dāng)您嘗試刪除一個Pod時,可能會遇到Pod一直阻塞的情況。這通常是由于Pod正在運(yùn)行或被其他資源(例如ReplicaSet或Deployment)控制而導(dǎo)致的。以下是一些可能的解決方案: 1: 確認(rèn)Pod是否正在運(yùn)行:在執(zhí)行刪除Pod命令之前,請先檢查Pod的狀態(tài),確保它沒有在運(yùn)行中

    2024年02月05日
    瀏覽(118)
  • Kubernetes(k8s):精通 Pod 操作的關(guān)鍵命令

    Kubernetes(k8s):精通 Pod 操作的關(guān)鍵命令

    ??The Begin??點(diǎn)點(diǎn)關(guān)注,收藏不迷路?? Kubernetes 是一個強(qiáng)大的容器編排平臺,其中的核心概念之一就是 Pod。Pod 是 Kubernetes 中最小的可部署單元,它由一個或多個容器組成,共享網(wǎng)絡(luò)和存儲資源。 在本篇博客中,我們將深入探討 Kubernetes 集群中與 Pod 相關(guān)的一些重要命令,幫

    2024年04月14日
    瀏覽(1129)
  • K8s(Kubernetes)學(xué)習(xí)(三):pod概念及相關(guān)操作

    K8s(Kubernetes)學(xué)習(xí)(三):pod概念及相關(guān)操作

    摘取官網(wǎng): https://kubernetes.io/zh-cn/docs/concepts/workloads/pods/#working-with-pods 1.1 簡介 Pod 是可以在 Kubernetes 中 創(chuàng)建和管理的、最小的可部署的計算單元 。 Pod (就像在鯨魚莢或者豌豆莢中) 是一組(一個或多個)容器 ; 這些容器共享存儲、網(wǎng)絡(luò)、以及怎樣運(yùn)行這些容器的聲明。 P

    2024年02月13日
    瀏覽(89)
  • Kubernetes(k8s):Pod 的 Node Selector詳解

    Kubernetes(k8s):Pod 的 Node Selector詳解

    ??The Begin??點(diǎn)點(diǎn)關(guān)注,收藏不迷路?? Node Selector是Kubernetes中一個用于指定Pod部署位置的重要概念。通過Node Selector,用戶可以將Pod調(diào)度到具有特定標(biāo)簽的節(jié)點(diǎn)上。 這種標(biāo)簽通常用于區(qū)分節(jié)點(diǎn)的硬件配置、地理位置、網(wǎng)絡(luò)特性等。通過合理地設(shè)置Node Selector,用戶可以優(yōu)化應(yīng)用

    2024年04月08日
    瀏覽(94)
  • 【Kubernetes】 從基礎(chǔ)認(rèn)識 k8s核心pod相關(guān)概念

    【Kubernetes】 從基礎(chǔ)認(rèn)識 k8s核心pod相關(guān)概念

    提示:此篇幫助朋友們,養(yǎng)成從0到1不斷延伸知識的一種方法 最簡單的創(chuàng)建pod入手 訪問官方文檔,直接使用案例,進(jìn)行修改即可! 官網(wǎng)地址:https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/assign-pods-nodes/ 刪除不需要的部分,根據(jù)規(guī)則添加需要的參數(shù)即可得到需要的,代碼如

    2024年01月25日
    瀏覽(126)
  • 【Kubernetes 系列】一文帶你吃透 K8S 應(yīng)用pod結(jié)點(diǎn)

    【Kubernetes 系列】一文帶你吃透 K8S 應(yīng)用pod結(jié)點(diǎn)

    作者:半身風(fēng)雪 上一節(jié):創(chuàng)建K8s集群項目 簡介:上一節(jié)我們一起學(xué)習(xí)了,如何去部署一個K8S 的應(yīng)用程序,這一節(jié),我們主要講解一下,K8S 應(yīng)用的框架結(jié)構(gòu)。 本節(jié)我將和大家一起學(xué)習(xí)Kubernetes 應(yīng)用中的pod結(jié)點(diǎn) 了解 Kubernetes Pod。 了解 Kubernetes 工作節(jié)點(diǎn)。 對已部署的應(yīng)用故障排

    2023年04月08日
    瀏覽(709)
  • 【精品】kubernetes(K8S)集群top命令監(jiān)控 Pod 度量指標(biāo)

    【精品】kubernetes(K8S)集群top命令監(jiān)控 Pod 度量指標(biāo)

    提示:做到舉一反三就要學(xué)會使用help信息 找出標(biāo)簽是name=cpu-user的Pod,并過濾出使用CPU最高的Pod,然后把它的名字寫在已經(jīng)存在的/opt/cordon.txt文件里 了解pod指標(biāo),主要需要關(guān)注,CPU與內(nèi)存占用率;生產(chǎn)環(huán)境,可能有幾十個pod,我們?yōu)榱耸蛊浔阌诳焖贆z索到需要的pod,可以學(xué)會

    2024年02月16日
    瀏覽(92)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包