日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

适合 Kubernetes 初学者的一些实战练习 (五)

發(fā)布時(shí)間:2023/12/19 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 适合 Kubernetes 初学者的一些实战练习 (五) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本實(shí)戰(zhàn)練習(xí)系列的前四篇文章:

  • 適合 Kubernetes 初學(xué)者的一些實(shí)戰(zhàn)練習(xí) (一)

  • 適合 Kubernetes 初學(xué)者的一些實(shí)戰(zhàn)練習(xí) (二)

  • 適合 Kubernetes 初學(xué)者的一些實(shí)戰(zhàn)練習(xí) (三)

  • 適合 Kubernetes 初學(xué)者的一些實(shí)戰(zhàn)練習(xí) (四)

本文繼續(xù)我們的 Kubernetes 實(shí)戰(zhàn)練習(xí)之旅。

練習(xí)1 - 將 configmap 通過環(huán)境變量注入到 pod 里

在 Kubernetes 官網(wǎng)里,曾經(jīng)提到 Kubernetes 里的一個(gè)最佳實(shí)踐(Best Practice)就是把應(yīng)用代碼同配置信息分開,一種方式就是使用 Kubernetes 1.2 里引入的 configmap 概念。

configmap 實(shí)際上就是一系列鍵值對,存儲(chǔ)于 etcd 里。etcd 的官網(wǎng)有這樣一句話:

etcd is a distributed key-value store designed to reliably and quickly preserve and provide access to critical data.

etcd 是一個(gè)高性能的分布式鍵值對存儲(chǔ)庫,用于存儲(chǔ)和訪問關(guān)鍵數(shù)據(jù)。

使用下面的命令行創(chuàng)建一個(gè) Kubernetes config map:

kubectl create configmap test-config --from-literal=test.type=unit --from-literal=test.exec=always

創(chuàng)建一個(gè)名為 test-config的鍵值對,key 為 test.type,值為 unit,key 為test.exec, 值為 always.

下面我打算創(chuàng)建一個(gè) pod,消費(fèi)這個(gè)名為 test-config 的 configmap.

創(chuàng)建一個(gè)內(nèi)容如下的 yaml 文件:

apiVersion: v1kind: Podmetadata:name: test-configmapspec:containers:- name: test-containerimage: alpine:3.8command: [ "/bin/sh", "-c", "env" ]env:- name: TEST_TYPEvalueFrom:configMapKeyRef:name: test-configkey: test.type- name: TEST_EXECvalueFrom:configMapKeyRef:name: test-configkey: test.execrestartPolicy: Never

這個(gè) yaml 文件定義的 pod 基于 docker 鏡像 alpine,執(zhí)行 shell 命令 /bin/sh -c env 查看環(huán)境變量。
在 env 區(qū)域,我給該 pod 注入一個(gè)名為 TEST_TYPE 的環(huán)境變量,值從 configMap 鍵值對的鍵名稱為 test.type 的值中取。

kubectl create -f 創(chuàng)建這個(gè) pod:

使用命令 kubectl logs test-configmap 查看這個(gè) pod 運(yùn)行生成的日志,發(fā)現(xiàn)輸出的環(huán)境變量列表中,出現(xiàn)了 TEST_TYPE=unit,這個(gè) TEST_TYPE 是我在 yaml 文件里注入的環(huán)境變量名稱,而 unit 就來自 configmap 里 test-config 的值 unit.

練習(xí)2 - 通過一個(gè)基于 PostgreSQL 的具體例子學(xué)習(xí) Kubernetes Stateful Set

Stateful Set 是 Kubernetes 1.9 版本新引入的一個(gè)概念,用于管理有狀態(tài)的應(yīng)用。

Kubernetes StatefulSet 由以下幾個(gè)部分組成:

  • 用于定義網(wǎng)絡(luò)標(biāo)志(DNS domain)的 Headless Service
  • 用于創(chuàng)建 PersistentVolumes 的 volumeClaimTemplates
  • 定義具體應(yīng)用的 StatefulSet
  • 下面是一個(gè)實(shí)際應(yīng)用中的 StatefulSet 的 yaml 文件:

    apiVersion: apps/v1kind: StatefulSetmetadata:name: ads-db-statefulsetlabels:component: adsmodule: dbspec:serviceName: ads-db-servicereplicas: 1selector:matchLabels:component: adsmodule: dbtemplate:metadata:labels:component: adsmodule: dbspec:volumes:- name: initsecret:secretName: ads-db-secretitems:- key: initdb.sqlpath: initdb.sqlcontainers:- name: ads-db-podimage: postgres:9.6ports:- containerPort: 5432name: ads-db-portvolumeMounts:- name: ads-db-volumemountPath: /var/lib/postgresql/data/- name: initmountPath: /docker-entrypoint-initdb.d/env:- name: PGDATAvalueFrom:configMapKeyRef:name: ads-db-configmapkey: pgdata_value- name: POSTGRES_PASSWORDvalueFrom:secretKeyRef:name: ads-db-secretkey: postgres_password_valuevolumeClaimTemplates:- metadata:name: ads-db-volumelabels:component: adsmodule: dbspec:accessModes: [ "ReadWriteOnce" ]resources:requests:storage: 1Gi



    使用 kubectl get statefulset 查看生成的 statefulset:

    生成的 headless service:

    生成的 pod:

    當(dāng)我把 statefulset yaml 文件里的 replicas 從 1 改成 3 之后,果然觀察到有兩個(gè)新的 pod 正在啟動(dòng),并且名稱滿足命名規(guī)范<stateful set name >-X.

    使用 kubectl describe 查看創(chuàng)建的 statefulset 明細(xì):


    statefulSet 自動(dòng)創(chuàng)建的 persistentVolumeClaim:


    使用下面的命令登錄到 statefulset 提供的 PostgreSQL 服務(wù)器上:

    kubectl run tester -it --rm --image=postgres:9.6 --env=“PGCONNECT_TIMEOUT=5” --command – bash

    看到 root$ 之后,說明我們已經(jīng)連接上 pod 了。
    使用如下命令行連接 PostgreSQL 服務(wù)器:

    psql -h ads-db-statefulset-0.ads-db-service -p 5432 -U adsuser -W ads

    當(dāng)然如果不用命令行,也可以使用 pgadmin,以圖形化界面連接 statefulSet 里的 postgreSQL 服務(wù)器:

    sudo apt install pgadmin3

    進(jìn)行端口轉(zhuǎn)發(fā),這樣我們可以使用 localhost:5432 進(jìn)行連接:

    kubectl port-forward ads-db-statefulset-0 5432:5432


    也能成功連接:


    總結(jié)

    本文介紹了如何將 ConfigMap 通過環(huán)境變量的方式注入到 Kubernetes Pod 之中,這也是 Kubernetes 官方推薦的應(yīng)用代碼同配置信息分離的最佳實(shí)踐思路,在實(shí)際項(xiàng)目中的體現(xiàn)。本文第二部分通過將 PostgreSQL 服務(wù)器實(shí)例運(yùn)行在 Stateful Set 上的例子,介紹了 Kubernetes Stateful Set 在實(shí)際項(xiàng)目中的一個(gè)應(yīng)用場景。

    本系列前四篇文章可以通過下面的鏈接獲得:

    本實(shí)戰(zhàn)練習(xí)系列的前四篇文章:

    • 適合 Kubernetes 初學(xué)者的一些實(shí)戰(zhàn)練習(xí) (一)

    • 適合 Kubernetes 初學(xué)者的一些實(shí)戰(zhàn)練習(xí) (二)

    • 適合 Kubernetes 初學(xué)者的一些實(shí)戰(zhàn)練習(xí) (三)

    • 適合 Kubernetes 初學(xué)者的一些實(shí)戰(zhàn)練習(xí) (四)

    總結(jié)

    以上是生活随笔為你收集整理的适合 Kubernetes 初学者的一些实战练习 (五)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。