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

【云原生 | Kubernetes 系列】K8s 實戰(zhàn) 如何給應(yīng)用注入數(shù)據(jù) II 將pod數(shù)據(jù)傳遞給容器

這篇具有很好參考價值的文章主要介紹了【云原生 | Kubernetes 系列】K8s 實戰(zhàn) 如何給應(yīng)用注入數(shù)據(jù) II 將pod數(shù)據(jù)傳遞給容器。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


前言

k8s啟動pod傳入?yún)?shù),云原生,kubernetes,云原生,docker

在上一篇文章中,我們學(xué)習(xí)了針對容器設(shè)置啟動時要執(zhí)行的命令和參數(shù)、定義相互依賴的環(huán)境變量、為容器設(shè)置環(huán)境變量,三種設(shè)置方式,本篇文章,我們將繼續(xù)學(xué)習(xí)數(shù)據(jù)的傳遞。

有兩種方式可以將 Pod 和 Container 字段傳遞給運行中的容器:

  • 環(huán)境變量
  • 卷文件

這兩種呈現(xiàn) Pod 和 Container 字段的方式統(tǒng)稱為 Downward API。


一、通過環(huán)境變量將 Pod 信息傳遞給容器

在文章開始之前,我們先在目錄 pods/inject/dapi-envars-pod.yaml 中創(chuàng)建一個包含一個容器的 Pod。這是該 Pod 的配置文件:

apiVersion: v1
kind: Pod
metadata:
  name: dapi-envars-fieldref
spec:
  containers:
    - name: test-container
      image: k8s.gcr.io/busybox
      command: [ "sh", "-c"]
      args:
      - while true; do
          echo -en '\n';
          printenv MY_NODE_NAME MY_POD_NAME MY_POD_NAMESPACE;
          printenv MY_POD_IP MY_POD_SERVICE_ACCOUNT;
          sleep 10;
        done;
      env:
        - name: MY_NODE_NAME
          valueFrom:
            fieldRef:
              fieldPath: spec.nodeName
        - 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
        - name: MY_POD_SERVICE_ACCOUNT
          valueFrom:
            fieldRef:
              fieldPath: spec.serviceAccountName
  restartPolicy: Never

這個配置文件中,你可以看到五個環(huán)境變量。env 字段是一個 EnvVars. 對象的數(shù)組。 數(shù)組中第一個元素指定 MY_NODE_NAME 這個環(huán)境變量從 Pod 的 spec.nodeName 字段獲取變量值。 同樣,其它環(huán)境變量也是從 Pod 的字段獲取它們的變量值。

  1. 創(chuàng)建Pod:
$ kubectl apply -f https://k8s.io/examples/pods/inject/dapi-envars-pod.yaml
  1. 驗證 Pod 中的容器運行正常:
$ kubectl get pods
  1. 查看容器日志:
$ kubectl logs dapi-envars-fieldref
  1. 輸出信息顯示了所選擇的環(huán)境變量的值:

minikube
dapi-envars-fieldref
default
172.17.0.4
default

要了解為什么這些值在日志中,請查看配置文件中的command 和 args字段。 當(dāng)容器啟動時,它將五個環(huán)境變量的值寫入 stdout。每十秒重復(fù)執(zhí)行一次。

接下來,通過打開一個 Shell 進(jìn)入 Pod 中運行的容器:

$ kubectl exec -it dapi-envars-fieldref -- sh

在 Shell 中,查看環(huán)境變量:

/# printenv

輸出信息顯示環(huán)境變量已經(jīng)設(shè)置為 Pod 字段的值。

MY_POD_SERVICE_ACCOUNT=default

MY_POD_NAMESPACE=default
MY_POD_IP=172.17.0.4

MY_NODE_NAME=minikube

MY_POD_NAME=dapi-envars-fieldref

1.1、用 Container 字段作為環(huán)境變量的值

上面我們將 Pod 字段作為環(huán)境變量的值。 現(xiàn)在我們將用 Container 字段作為環(huán)境變量的值。在目錄 pods/inject/dapi-envars-container.yaml 中創(chuàng)建一個包含容器的 Pod 的配置文件:


spec:
  containers:
    - name: test-container
      image: k8s.gcr.io/busybox:1.24
      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 10;
        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

這個配置文件中,你可以看到四個環(huán)境變量。env 字段是一個 EnvVars. 對象的數(shù)組。數(shù)組中第一個元素指定 MY_CPU_REQUEST 這個環(huán)境變量從 Container 的 requests.cpu 字段獲取變量值。同樣,其它環(huán)境變量也是從 Container 的字段獲取它們的變量值。

  1. 創(chuàng)建Pod:
$ kubectl apply -f https://k8s.io/examples/pods/inject/dapi-envars-container.yaml
  1. 驗證 Pod 中的容器運行正常:
$ kubectl get pods
  1. 查看容器日志:
$ kubectl logs dapi-envars-resourcefieldref
  1. 輸出信息顯示了所選擇的環(huán)境變量的值:

1
1
33554432
67108864

二、通過文件將 Pod 信息呈現(xiàn)給容器

前面我們學(xué)習(xí)了使用環(huán)境變量的方式,現(xiàn)在我們學(xué)習(xí)通過文件的方式。
在目錄 pods/inject/dapi-volume.yaml 中創(chuàng)建一個包含一個容器的 Pod,并將 Pod 級別的字段作為文件映射到正在運行的容器中。 Pod 的清單如下:

apiVersion: v1
kind: Pod
metadata:
  name: kubernetes-downwardapi-volume-example
  labels:
    zone: us-est-coast
    cluster: test-cluster1
    rack: rack-22
  annotations:
    build: two
    builder: john-doe
spec:
  containers:
    - name: client-container
      image: k8s.gcr.io/busybox
      command: ["sh", "-c"]
      args:
      - while true; do
          if [[ -e /etc/podinfo/labels ]]; then
            echo -en '\n\n'; cat /etc/podinfo/labels; fi;
          if [[ -e /etc/podinfo/annotations ]]; then
            echo -en '\n\n'; cat /etc/podinfo/annotations; fi;
          sleep 5;
        done;
      volumeMounts:
        - name: podinfo
          mountPath: /etc/podinfo
  volumes:
    - name: podinfo
      downwardAPI:
        items:
          - path: "labels"
            fieldRef:
              fieldPath: metadata.labels
          - path: "annotations"
            fieldRef:
              fieldPath: metadata.annotations

在 Pod 清單中,你可以看到 Pod 有一個 downwardAPI 類型的卷,并且掛載到容器中的 /etc/podinfo 目錄。

查看 downwardAPI 下面的 items 數(shù)組。 數(shù)組的每個元素定義一個 downwardAPI 卷。 第一個元素指示 Pod 的 metadata.labels 字段的值保存在名為 labels 的文件中。 第二個元素指示 Pod 的 annotations 字段的值保存在名為 annotations 的文件中。

  1. 創(chuàng)建 Pod:
$ kubectl apply -f https://k8s.io/examples/pods/inject/dapi-volume.yaml
  1. 驗證Pod中的容器運行正常:
$ kubectl get pods
  1. 查看容器的日志:
$ kubectl logs kubernetes-downwardapi-volume-example
  1. 輸出顯示 labels 和 annotations 文件的內(nèi)容:

cluster=“test-cluster1”
rack=“rack-22”
zone=“us-est-coast”

build=“two”
builder=“john-doe”

  1. 進(jìn)入 Pod 中運行的容器,打開一個 Shell:
$ kubectl exec -it kubernetes-downwardapi-volume-example -- sh
  1. 在該 Shell中,查看 labels 文件:

/# cat /etc/podinfo/labels

  1. 輸出顯示 Pod 的所有標(biāo)簽都已寫入 labels 文件。

cluster=“test-cluster1”
rack=“rack-22”
zone=“us-est-coast”

  1. 同樣,查看 annotations 文件:

/# cat /etc/podinfo/annotations

  1. 查看 /etc/podinfo 目錄下的文件:

/# ls -laR /etc/podinfo

在輸出中可以看到,labels 和 annotations 文件都在一個臨時子目錄中。 在這個例子,…2982_06_02_21_47_53.299460680。 在 /etc/podinfo 目錄中,…data 是一個指向臨時子目錄 的符號鏈接。/etc/podinfo 目錄中,labels 和 annotations 也是符號鏈接。

drwxr-xr-x … Feb 6 21:47 …2982_06_02_21_47_53.299460680
lrwxrwxrwx … Feb 6 21:47 …data -> …2982_06_02_21_47_53.299460680
lrwxrwxrwx … Feb 6 21:47 annotations -> …data/annotations
lrwxrwxrwx … Feb 6 21:47 labels -> …data/labels

/etc/…2982_06_02_21_47_53.299460680:
total 8
-rw-r–r-- … Feb 6 21:47 annotations
-rw-r–r-- … Feb 6 21:47 labels

用符號鏈接可實現(xiàn)元數(shù)據(jù)的動態(tài)原子性刷新;更新將寫入一個新的臨時目錄, 然后通過使用 rename(2) 完成 …data 符號鏈接的原子性更新。

  1. 退出 Shell:

/# exit

2.1、存儲容器字段

使用 downward API 使 Pod 級別的字段可以被 Pod 內(nèi)正在運行的容器訪問。 接下來我們將只傳遞由 Pod 定義的部分的字段到 Pod 內(nèi)正在運行的容器中,但這些字段取自特定容器而不是整個 Pod。 下面是目錄 pods/inject/dapi-volume-resources.yaml 中一個同樣只有一個容器的 Pod 的清單:

apiVersion: v1
kind: Pod
metadata:
  name: kubernetes-downwardapi-volume-example-2
spec:
  containers:
    - name: client-container
      image: k8s.gcr.io/busybox:1.24
      command: ["sh", "-c"]
      args:
      - while true; do
          echo -en '\n';
          if [[ -e /etc/podinfo/cpu_limit ]]; then
            echo -en '\n'; cat /etc/podinfo/cpu_limit; fi;
          if [[ -e /etc/podinfo/cpu_request ]]; then
            echo -en '\n'; cat /etc/podinfo/cpu_request; fi;
          if [[ -e /etc/podinfo/mem_limit ]]; then
            echo -en '\n'; cat /etc/podinfo/mem_limit; fi;
          if [[ -e /etc/podinfo/mem_request ]]; then
            echo -en '\n'; cat /etc/podinfo/mem_request; fi;
          sleep 5;
        done;
      resources:
        requests:
          memory: "32Mi"
          cpu: "125m"
        limits:
          memory: "64Mi"
          cpu: "250m"
      volumeMounts:
        - name: podinfo
          mountPath: /etc/podinfo
  volumes:
    - name: podinfo
      downwardAPI:
        items:
          - path: "cpu_limit"
            resourceFieldRef:
              containerName: client-container
              resource: limits.cpu
              divisor: 1m
          - path: "cpu_request"
            resourceFieldRef:
              containerName: client-container
              resource: requests.cpu
              divisor: 1m
          - path: "mem_limit"
            resourceFieldRef:
              containerName: client-container
              resource: limits.memory
              divisor: 1Mi
          - path: "mem_request"
            resourceFieldRef:
              containerName: client-container
              resource: requests.memory
              divisor: 1Mi

在這個清單中,你可以看到 Pod 有一個 downwardAPI 卷, 并且這個會掛載到 Pod 內(nèi)的單個容器的 /etc/podinfo 目錄。

查看 downwardAPI 下面的 items 數(shù)組。 數(shù)組的每個元素定義一個 downwardAPI 卷。

第一個元素指定在名為 client-container 的容器中, 以 1m 所指定格式的 limits.cpu 字段的值應(yīng)推送到名為 cpu_limit 的文件中。 divisor 字段是可選的,默認(rèn)值為 1,1 的除數(shù)表示 CPU 資源的核心或內(nèi)存資源的字節(jié)。

  1. 創(chuàng)建Pod:
$ kubectl apply -f https://k8s.io/examples/pods/inject/dapi-volume-resources.yaml
  1. 打開一個 Shell,進(jìn)入 Pod 中運行的容器:
$ kubectl exec -it kubernetes-downwardapi-volume-example-2 -- sh
  1. 在 Shell 中,查看 cpu_limit 文件:
# 在容器內(nèi)的 Shell 中運行
$ cat /etc/podinfo/cpu_limit

你可以使用同樣的命令查看 cpu_request、mem_limit 和 mem_request 文件.

總結(jié)

本篇文章,主要是為了總結(jié)學(xué)習(xí)上一篇的內(nèi)容,在此文章中,我們學(xué)會了如何使用環(huán)境變量的方式、通過文件的方式,來為容器傳遞數(shù)據(jù),那么下一篇,我們將一起學(xué)習(xí)如何使用 Secret 來安全的分發(fā)數(shù)據(jù)內(nèi)容,期待我們的下次再見。文章來源地址http://www.zghlxwxcb.cn/news/detail-823197.html

到了這里,關(guān)于【云原生 | Kubernetes 系列】K8s 實戰(zhàn) 如何給應(yīng)用注入數(shù)據(jù) II 將pod數(shù)據(jù)傳遞給容器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包