在openshift重外置應(yīng)用配置數(shù)據(jù)
應(yīng)用的配置通常是通過環(huán)境變量酣倾,命令行參數(shù)刻诊,配置文件等實(shí)現(xiàn)的。
當(dāng)我們?cè)趏penshift中部署一個(gè)應(yīng)用時(shí)如筛,面對(duì)不可變的container image堡牡,如果做好配置管理是個(gè)難題。不像傳統(tǒng)的非容器化的部署杨刨,我們不建議將容器和配置放在一起打包成一個(gè)不可變的container image
對(duì)容器化的應(yīng)用我們推薦將靜態(tài)的應(yīng)用和動(dòng)態(tài)的配置數(shù)據(jù)分離晤柄,而將配置數(shù)據(jù)外置。這樣就可以保證應(yīng)用支持多環(huán)境妖胀。
例如芥颈,你希望在openshift cluster中構(gòu)建一個(gè)應(yīng)用惠勒,從development env到production env,以及中間的一些測(cè)試環(huán)節(jié)爬坑,例如testing和user acceptance. 你應(yīng)該用在所有stages用同一個(gè)application container image, 然后container image外針對(duì)不同的環(huán)境有不同配置信息纠屋。
Openshift提供了證書和配置的map resouce types去外置和管理應(yīng)用的配置。
利用證書和配置的map resources
證書資源(secret resources)被用于存儲(chǔ)敏感信息盾计,例如passwords, keys, tokens. 你可以創(chuàng)建自己的證書去保存應(yīng)用中的敏感信息售担。
Configuration map resources與secret resources非常相似, 但是存儲(chǔ)的是非敏感數(shù)據(jù)署辉。一個(gè)configuration map resource可以用于存儲(chǔ)更精細(xì)化的數(shù)據(jù)族铆,例如單獨(dú)的properties, 也可以存儲(chǔ)粗化的數(shù)據(jù)例如一整個(gè)configuration files和JSON data.
你可以用Openshift CLI 或者web console去創(chuàng)建configuration map和secret resources,然后在你的pod的specification中使用哭尝。Openshift會(huì)往container中注入resource data作為環(huán)境變量哥攘,例如在應(yīng)用程序中掛載文件系統(tǒng)。
你也可以改變dc(deployment configuration)讓正在運(yùn)行程序去參考configuration map和secret resources材鹦。Openshift會(huì)自動(dòng)的重新部署應(yīng)用并且讓你的數(shù)據(jù)對(duì)container可用逝淹。
secret resource中的數(shù)據(jù)是base64編碼。當(dāng)secret中數(shù)據(jù)被注入到一個(gè)container中侠姑,這個(gè)數(shù)據(jù)會(huì)被解碼或者當(dāng)作一個(gè)file掛載或者在這個(gè)容器中作為一個(gè)環(huán)境變量创橄。
Secrets和Configuration maps的特性
出去安全的考慮,這些resources雖然會(huì)被臨時(shí)掛載在node/pod/container中莽红,但是并不會(huì)這些地方進(jìn)行存儲(chǔ)妥畏。
他們作用于整個(gè)namespace.
創(chuàng)建和管理Secrets以及Configuration Maps
Secrets和Configuration maps必須在創(chuàng)建pod之前創(chuàng)建。
在openshift中我們可以使用oc create configmap/secret generic去創(chuàng)建configmap和secret.
從Secrets和Configuration Maps中配置數(shù)據(jù)
在一個(gè)container內(nèi)部安吁,Configuration maps和secrets可被掛載為data volumes(oc set volume dc/mydcname --add -t configmap -m /path/to/mount/volume --name myvol --configmap-name myconf)醉蚁, 可以被當(dāng)作環(huán)0境變量(例如oc set env dc/mydcname --from configmap/myconf)進(jìn)行導(dǎo)入
更改Configuration Maps 和 Secrets
每次你用oc set env或者oc set volume去更改一個(gè)配置,默認(rèn)都會(huì)出發(fā)新的deployment.
如果你對(duì)同一個(gè)dc做了許多更改鬼店,則建議你可以用oc set triggers去暫時(shí)改變dc trigger的條件网棍。
例如更新config時(shí)不觸發(fā)redeployment(oc set triggers dc/mydcname --from-config --remove), 以及打開redeployment(oc set triggers dc/mydcname --from-config)
只更改configuration map和secret不會(huì)影響到正在運(yùn)行的pods.
如果你的dc更改錯(cuò)了,則可以使用oc rollout latest mydcname去回退到上一個(gè)版本妇智。
用configuration maps用明文保存配置數(shù)據(jù)滥玷。敏感數(shù)據(jù)用secrets保存, 例如passwords, passphrases, TLS keys, authentication tokens 以及其他你應(yīng)用需要的敏感信息。
我們通常建議使用set env的方法去作簡(jiǎn)單配置巍棱。如果你的應(yīng)用很復(fù)雜惑畴,有大量的配置變量,則推薦使用mount的方法航徙。