自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

五分鐘K8S入門(mén)到實(shí)戰(zhàn)-應(yīng)用配置

開(kāi)發(fā) 前端
不管我們之前是做 Java、Go? 還是 Python? 開(kāi)發(fā)都會(huì)使用到配置文件,而 ConfigMap? 的作用可以將我們?cè)緦?xiě)在配置文件里的內(nèi)容轉(zhuǎn)存到 k8s? 中,然后和我們的 Container 進(jìn)行綁定。

背景

在前面三節(jié)中已經(jīng)講到如何將我們的應(yīng)用部署到 k8s 集群并提供對(duì)外訪問(wèn)的能力,x現(xiàn)在可以滿足基本的應(yīng)用開(kāi)發(fā)需求了。

現(xiàn)在我們需要更進(jìn)一步,使用 k8s 提供的一些其他對(duì)象來(lái)標(biāo)準(zhǔn)化我的應(yīng)用開(kāi)發(fā)。首先就是 ConfigMap,從它的名字也可以看出這是用于管理配置的對(duì)象。

ConfigMap

不管我們之前是做 Java、Go 還是 Python 開(kāi)發(fā)都會(huì)使用到配置文件,而 ConfigMap 的作用可以將我們?cè)緦?xiě)在配置文件里的內(nèi)容轉(zhuǎn)存到 k8s 中,然后和我們的 Container 進(jìn)行綁定。

存儲(chǔ)到環(huán)境變量

綁定的第一種方式就是將配置直接寫(xiě)入到環(huán)境變量,這里我先定義一個(gè) ConfigMap:

apiVersion: v1  
kind: ConfigMap  
metadata:  
  name: k8s-combat-configmap  
data:  
  PG_URL: "postgres://postgres:postgres@localhost:5432/postgres?sslmode=disable"

重點(diǎn)是 data 部分,存儲(chǔ)的是一個(gè) KV 結(jié)構(gòu)的數(shù)據(jù),這里存儲(chǔ)的是一個(gè)數(shù)據(jù)庫(kù)連接。

需要注意,KV 的大小不能超過(guò) 1MB

接著可以在容器定義中綁定這個(gè) ConfigMap 的所有 KV 到容器的環(huán)境變量:

# Define all the ConfigMap's data as container environment variables 
envFrom:  
  - configMapRef:  
      name: k8s-combat-configmap

我將 ConfigMap 的定義也放在了同一個(gè) deployment 中,直接 apply:

? k apply -f deployment/deployment.yaml
deployment.apps/k8s-combat created
configmap/k8s-combat-configmap created

此時(shí) ConfigMap 也會(huì)被創(chuàng)建,我們可以使用

? k get configmap
NAME                   DATA   AGE
k8s-combat-configmap   1      3m17s

? k describe configmap k8s-combat-configmap
Data
====
PG_URL:
----
postgres://postgres:postgres@localhost:5432/postgres?sslmode=disable

拿到剛才聲明的配置信息。


同時(shí)我在代碼中也讀取了這個(gè)環(huán)境變量:

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {  
   name, _ := os.Hostname()  
   url := os.Getenv("PG_URL")   
   fmt.Fprint(w, fmt.Sprintf("%s-%s", name, url))  
})

訪問(wèn)這個(gè)接口便能拿到這個(gè)環(huán)境變量:

root@k8s-combat-7b987bb496-pqt9s:/# curl http://127.0.0.1:8081
k8s-combat-7b987bb496-pqt9s-postgres://postgres:postgres@localhost:5432/postgres?sslmode=disable

root@k8s-combat-7b987bb496-pqt9s:/# echo $PG_URL
postgres://postgres:postgres@localhost:5432/postgres?sslmode=disable

存儲(chǔ)到文件

有些時(shí)候我們也需要將這些配置存儲(chǔ)到一個(gè)文件中,比如在 Java 中可以使用 spring 讀取,Go 也可以使用 configor 這些第三方庫(kù)來(lái)讀取,所有配置都在一個(gè)文件中也更方便維護(hù)。

圖片在 ConfigMap 中新增了一個(gè) key:APP 存放了一個(gè) yaml 格式的數(shù)據(jù),然后在容器中使用 volumes 和 volumeMounts 將數(shù)據(jù)掛載到容器中的指定路徑/go/bin/app.yaml

apply 之后我們可以在容器中查看這個(gè)文件是否存在:

root@k8s-combat-7b987bb496-pqt9s:/# cat /go/bin/app.yaml
name: k8s-combat
pulsar:
  url: "pulsar://localhost:6650"
  token: "abc"

配置已經(jīng)成功掛載到了這個(gè)路徑,我們便可以在代碼中讀取這些數(shù)據(jù)。

Secret

可以看到 ConfigMap 中是明文存儲(chǔ)數(shù)據(jù)的;

k describe configmap k8s-combat-configmap

可以直接查看。

對(duì)一些敏感數(shù)據(jù)就不夠用了,這時(shí)我們可以使用 Secret:

apiVersion: v1  
kind: Secret  
metadata:  
  name: k8s-combat-secret  
type: Opaque  
data:  
  PWD: YWJjCg==

---
env:  
  - name: PG_PWD  
    valueFrom:  
      secretKeyRef:  
        name: k8s-combat-secret  
        key: PWD

這里我新增了一個(gè) Secret 用于存儲(chǔ)密碼,并在 container 中也將這個(gè) key 寫(xiě)入到環(huán)境變量中。

? echo 'abc' | base64
YWJjCg==

Secret 中的數(shù)據(jù)需要使用 base64 進(jìn)行編碼,所以我這里存儲(chǔ)的是 abc.

apply 之后我們?cè)俨榭催@個(gè) Secret 是不能直接查看原始數(shù)據(jù)的。

? k describe secret k8s-combat-secret
Name:         k8s-combat-secret
Type:  Opaque

Data
====
PWD:  4 bytes

Secret 相比 ConfigMap 多了一個(gè) Type 選項(xiàng)。圖片

我們現(xiàn)階段在應(yīng)用中用的最多的就是這里的 Opaque,其他的暫時(shí)還用不上。

總結(jié)

在實(shí)際開(kāi)發(fā)過(guò)程中研發(fā)人員基本上是不會(huì)直接接觸 ConfigMap,一般會(huì)給開(kāi)發(fā)者在管理臺(tái)提供維護(hù)配置的頁(yè)面進(jìn)行 CRUD。

由于 ConfigMap 依賴于 k8s 與我們應(yīng)用的語(yǔ)言無(wú)關(guān),所以一些高級(jí)特性,比如實(shí)時(shí)更新就無(wú)法實(shí)現(xiàn),每次修改后都得重啟應(yīng)用才能生效。

類似于 Java 中常見(jiàn)的配置中心:Apollo,Nacos 使用上會(huì)有不小的區(qū)別,但這些是應(yīng)用語(yǔ)言強(qiáng)綁定的,如果業(yè)務(wù)對(duì)這些配置中心特性有強(qiáng)烈需求的話也是可以使用的。

但如果團(tuán)隊(duì)本身就是多語(yǔ)言研發(fā),想要降低運(yùn)維復(fù)雜度 ConfigMap 還是不二的選擇。

下一章節(jié)會(huì)更新大家都很感興趣的服務(wù)網(wǎng)格 Istio,感興趣的朋友多多點(diǎn)贊轉(zhuǎn)發(fā)????。

本文的所有源碼和資源文件在這里可以訪問(wèn):https://github.com/crossoverJie/k8s-combat

責(zé)任編輯:武曉燕 來(lái)源: crossoverJie
相關(guān)推薦

2023-11-27 13:54:00

kubernetes高可用

2023-11-15 13:44:00

k8s-域名日志

2023-09-15 08:00:20

Ingress網(wǎng)關(guān)Istio

2020-02-19 19:26:27

K8S開(kāi)源平臺(tái)容器技術(shù)

2023-11-30 08:08:30

k8s優(yōu)雅停機(jī)

2023-09-06 08:12:04

k8s云原生

2023-09-21 11:28:28

Kubernetes云原生

2023-09-08 08:09:12

k8sservice服務(wù)

2022-09-30 15:46:26

Babel編譯器插件

2023-08-04 08:19:02

2021-03-12 08:20:24

架構(gòu)網(wǎng)絡(luò)模型

2023-09-27 22:33:40

KubernetesK8S

2023-12-25 08:05:35

2024-01-12 08:03:29

k8s配置持久化

2023-09-24 22:47:42

Kubernetes親和性

2020-05-12 10:20:39

K8s kubernetes中間件

2024-01-29 13:03:02

2016-08-03 16:01:47

GitLinux開(kāi)源

2009-11-17 12:47:05

PHP配置

2009-11-16 10:53:30

Oracle Hint
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)