国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

如何配置應(yīng)用程序

2023-07-16 12:04 作者:阿兵云原生  | 我要投稿

今天我們來分享 ConfigMap 資源,分享之前,我們來看看前面我們跑應(yīng)用程序都是怎么玩的

前面的應(yīng)用程序中,都是沒有寫入配置的,頂多用到了卷,用來存儲數(shù)據(jù)

那么在 應(yīng)用程序中如何傳入配置呢?

在 Dockerfile 中使用 ENTRYPOINT 和 CMD 的方式

寫一個簡單的小案例來模擬一下

image-20220128162418555

大概思路是這樣的:

  • 1 簡單的寫一個腳本 echo.sh,作為 定時 INTER 秒中在頁面上輸出一串信息,可以傳入一個傳參數(shù)作為具體的定時間

#!/bin/bash

INTER=$1

while?:
do
??echo?"echo?info?test??--?"$INTER
??sleep?$INTER

done

  • 2 寫 Dockerfile ,將 ADD echo.sh ,并且將定時時間傳入

FROM?ubuntu:latest
ADD?echo.sh?/bin/echo.sh
ENTRYPOINT?["/bin/echo.sh"]
CMD?["2"]

  • 3 將 Dockerfile build 成 image ,具體 docker hub 的倉庫,請使用自己的賬號

docker?build?-t?xiaomotong888/echoinfotest
docker?push?xiaomotong888/echoinfotest

  • 4 寫 yaml ,并生成 pod

apiVersion:?v1
kind:?Pod
metadata:
??name:?echoinfo
spec:
??containers:
??-?image:?xiaomotong888/echoinfotest
????name:?echoinfo

  • 5 查看效果

通過上述案例,我們可以看出,咱可以通過在 Dockerfile 中 CMD 的方式加入可執(zhí)行程序的參數(shù),能夠達到我們期望的傳參效果

那么接下來我們看看 是否可以在 k8s yaml 清單中也使用類似的方式呢?

使用 k8s 中 yaml 文件中給鏡像傳入?yún)?shù)

做法和上述類型,涉及到的相關(guān)代碼用截圖的形式展示

  • 將上述清單文件修改一下 ,在 yaml 文件中傳入?yún)?shù),這次修改成 傳入 定時 3 秒

此處的 args 如果參數(shù)比較多,我們也可以寫成每一行寫一個參數(shù)的形式:

args:
-?xiaozhu
-?canshu2
-?"100"

  • 查看效果

使用 yaml 清單中傳入我們需要的參數(shù),目前依然能夠滿足我們的要求

使用 環(huán)境變量的方式

現(xiàn)在我們來使用第三種方式,不使用傳參了,咱們在 yaml 清單設(shè)定環(huán)境變量 INTER,讓腳本直接讀取環(huán)境變量的值即可

  • 1 寫一個 echo_env.sh 腳本,讀取環(huán)境變量

#!/bin/bash

while?:
do
??echo?"echo?info?test??--?"$INTER
??sleep?$INTER

done

  • 2 寫 Dockerfile ,將 ADD echo.sh ?,執(zhí)行

FROM?ubuntu:latest
ADD?echo_env.sh?/bin/echo_env.sh
ENTRYPOINT?["/bin/echo_env.sh"]

  • 3 制作成 鏡像

docker?build?-t?xiaomotong888/echoinfotest-env
docker?push?xiaomotong888/echoinfotest-env

  • 4 寫 yaml 清單,設(shè)置 環(huán)境變量,創(chuàng)建 pod

apiVersion:?v1
kind:?Pod
metadata:
??name:?echoinfo-k8s-env
spec:
??containers:
??-?image:?xiaomotong888/echoinfotest-env
????name:?echoinfo-k8s-env
????env:
????-?name:?INTER
??????value:?"5"

  • 查看效果

果然,這三種方式都是 ok 的,朋友們看到這里是不是覺得已經(jīng)滿足自己的需求了?

但是要注意的是,這個可是硬編碼,要么是在生成的鏡像中寫死,要么是在 yaml 清單中寫死,那么如果我現(xiàn)在要調(diào)整一下我的定時時間,是不是又要重新做一個鏡像,或者重新做一個 pod?

使用 ConfigMap 的方式

那么在 k8s 中,肯定有更好的方式來解決這樣的問題,因此 ConfigMap 就開始大展身手了

咱們使用 ConfigMap ?的目的是,可以將服務(wù)的配置解耦出來,服務(wù)部署到哪個環(huán)境,直接去修改 ConfigMap 去做適配即可,不需要修改鏡像和 pod,更不需要修改咱們服務(wù)程序的源碼

想想,這樣用是不是又高效了一些呢?

ConfigMap 具體是個啥?

ConfigMap 就是一個存放鍵值對映射的對象,也是 k8s 中的一種資源,這種映射關(guān)系,可以是 key 映射一個值,也可以是映射一個文件

有一點需要注意:

乍一看,是不是以為容器中的服務(wù)是直接去讀取 ConfigMap 的數(shù)據(jù)的? nonono

實際上是這樣的,畫個圖來形象的表示一下:

對于 ConfigMap 這個資源 ,容器是無感知的,容器實際上還是讀取環(huán)境中的 卷 或者 環(huán)境變量的方式來獲取配置的 , 實際上,容器其實也無需知道 ConfigMap 的存在,單純一點,挺好

如何創(chuàng)建 ConfigMap?

創(chuàng)建一個 ConfigMap 的資源,我們可以用我們熟悉的方式,直接寫一個 yaml 清單,然后使用 kubectl create -f xxx.yaml 的方式來創(chuàng)建一個 cm 資源

此處的 cm 是 ConfigMap 的簡寫

我們也可以使用命令行的方式來創(chuàng)建一個 ConfigMap 來供我們使用,例如我們還是延續(xù)上面的例子,我們在 ConfigMap 中加入一個鍵值的映射關(guān)系 ?INTER=10

kubectl create configmap echo-config --from-literal=INTER=10

此處這里可以看到是使用 kubectl create configmap 來創(chuàng)建 ConfigMap ?,我們創(chuàng)建資源的時候,若需要添加多個鍵值對,我們也可以追加寫上:

--from-literal=xxx=xxx --from-literal=xx=xx

然后可以通過如下命令查看一下 cm 的詳情

kubectl get cm

kubectl describe cm cm-name

上述的信息我們可以看到,echo-config 資源里面的信息包含了我們的鍵值對 INTER=10

可以查看一下該 cm 對應(yīng)的 yaml 資源是怎樣的

kubectl describe cm echo-config -o yaml

如果需要加的鍵值對比較多,那么我們一個一個這么寫,也不是辦法,太戳了

那么我們可以一個鍵對應(yīng)一個文件,例如我們可以這樣

我們可以使用參數(shù) --from-file 來指定 key 和文件,例如使用下面的指令

kubectl create configmap my-config --from-file=key1=config.json

當(dāng)然,我們也可以是 --from-file 后面指定一個目錄,那么 k8s 會去指定目錄下讀取文件,按照 k8s 的命令規(guī)范讀取問題,若沒有指定 key ,那么文件名就是 key

畫一個圖來示意一下

對于一個 ConfigMap 我們可以設(shè)定多個文件,多個直接的 key 和 value

那么如何讀取 ConfigMap 的數(shù)據(jù)呢?

我們可以在創(chuàng)建 pod 的 yaml 清單的時候,從指定的 ConfigMap 中讀取對應(yīng)的鍵值即可,使用的方式可以仿照讀取環(huán)境變量的方式來用用

  • 寫好 yaml 清單,指定 ConfigMap 和 指定對應(yīng)的 key 值

echoinfotest_configmap.yaml

apiVersion:?v1
kind:?Pod
metadata:
??name:?echoinfo-k8s-configmap
spec:
??containers:
??-?image:?xiaomotong888/echoinfotest-env
????name:?echoinfo-k8s-env
????env:
????-?name:?INTER
??????valueFrom:
????????configMapKeyRef:
??????????name:?echo-config
??????????key:?INTER

還記的我們的寫在 echo-config 里面的 INTER 的值是多少嗎?

咱們創(chuàng)建好 pod 之后,查看一下對應(yīng) pod 的日志,我們就可以看到,打印的是

echo?info?test??--?10
echo?info?test??--?10
echo?info?test??--?10

很明顯,打印的是 10 ,數(shù)據(jù)是從我們的 ConfigMap 讀出來的數(shù)據(jù),沒毛病,老鐵

我們現(xiàn)在在 pod 運行的時候,咱們?nèi)バ薷囊幌?cm

kubectl edit cm echo-config

若需要讓我們的 pod 能夠讀取到 這個 8 秒的定時時間,我們可以刪除掉 pod ,然后再創(chuàng)建一個 pod ,我們也可以使用 RC/RS 的方式 ?,通過修改副本數(shù)來使 pod 達到重啟的目的,后續(xù)可以分享重啟 pod 的其他方式

今天就到這里,學(xué)習(xí)所得,若有偏差,還請斧正

歡迎點贊,關(guān)注,收藏

朋友們,你的支持和鼓勵,是我堅持分享,提高質(zhì)量的動力

好了,本次就到這里

技術(shù)是開放的,我們的心態(tài),更應(yīng)是開放的。擁抱變化,向陽而生,努力向前行。

我是阿兵云原生,歡迎點贊關(guān)注收藏,下次見~


如何配置應(yīng)用程序的評論 (共 條)

分享到微博請遵守國家法律
安宁市| 杭锦后旗| 宝鸡市| 鸡泽县| 连城县| 宜阳县| 布拖县| 凤阳县| 吉安市| 桑植县| 昌乐县| 海兴县| 石屏县| 洪泽县| 六盘水市| 廊坊市| 印江| 崇信县| 遂川县| 白城市| 丰顺县| 凤城市| 会同县| 临西县| 讷河市| 饶平县| 社会| 虎林市| 应城市| 桑日县| 东乌珠穆沁旗| 朔州市| 麻江县| 东辽县| 抚宁县| 灵丘县| 甘泉县| 洪湖市| 启东市| 西贡区| 信宜市|