kubernetes(k8s)configmap使用

在企業(yè)中,一般都有2-4種環(huán)境即寡,開發(fā)徊哑,測試,交付聪富,生產(chǎn)這四種莺丑。這幾種環(huán)境的配置也有所變化,我們在部署的時候通常不能一個配置文件部署四個環(huán)境。不通用梢莽。特別是容器化環(huán)境萧豆。在容器化應(yīng)用中,每個環(huán)境都要獨立的打一個鏡像再給鏡像一個特有的tag昏名,這很麻煩涮雷,這就要用到k8s原生的配置中心configMap就是用解決這個問題的。下面看示例轻局。

使用configMap部署應(yīng)用份殿。
這里使用nginx來做示例,簡單粗暴嗽交。
默認的nginx數(shù)據(jù)目錄是在:/usr/share/nginx/html 目錄,下面寫一個配置指定端口和數(shù)據(jù)目錄

示例:

1颂斜、先將配置文件加載到configMap中
編寫nginx配置

$ vim nginx.conf 
server {
   listen       8081;         ##端口為8081
   server_name  _;
   root         /html;         ##改數(shù)據(jù)目錄為/html

   location / {
   }

}

將上面寫的nginx.conf加載到configMap中
創(chuàng)建configMap有四個方法
1)單個key
命令格式:
例:

kubectl create configmap special-config --from-literal=special.how=very --from-literal=special.type=charm

查看:

kubectl get configmaps special-config -o yaml

2)基于目錄夫壁,將目錄下的所有文件加載到configMap中
命令格式:
例:

kubectl create configmap tomcat-conf --from-file=configmap/conf

查看:

kubectl get configmaps tomcat-conf -o yaml

3)基于單個file
命令格式:
例:

kubectl create configmap game-conf --from-file=configmap/conf/game.properties 

查看:

kubectl get configmaps tomcat-conf -o yaml

4)基于configMap配置文件

kind: ConfigMap
apiVersion: v1
metadata:
  name: cm-demo
  namespace: default
data:
  nginx-c: "server {
   listen       8081;         ##端口為8081
   server_name  _;
   root         /html;         ##改數(shù)據(jù)目錄為/html

   location / {
   }

}"

注意:nginx-c是configmap里的key,里面的配置需要用雙引號引起來沃疮。

注意事項:

使用configmap的pod必須要和configmap配置在同一個namespaces盒让,否則識別不了。在創(chuàng)建configmap時在后面加上 -n namespaces名稱

例:kubectl create configmap tomcat-conf --from-file=configmap/conf -n tomcat

這里使用第3種:基于單個file的方法司蔬,其它方法也很簡單邑茄。
格式:
命令 動作 模塊 自定義名稱 加載的文件
kubectl create configmap nginx-config --from-file=./nginx.conf

[root@server yaml]# kubectl create configmap nginx-config --from-file=./nginx.conf 
configmap/nginx-config created                            ##提示創(chuàng)建成功
[root@server yaml]# 
[root@server yaml]# kubectl get configmaps       ##查看創(chuàng)建的nginx-config配置是否成功
NAME           DATA   AGE
nginx-config   1      5s

驗證configMap中的nginx-config配置是否和先前vi的nginx.conf一樣

[root@server yaml]# kubectl get configmaps/nginx-config -o yaml
apiVersion: v1
data:
  nginx.conf: |+                      ##這一段就是內(nèi)容,nginx.conf是該文件的鍵
    server {
       listen       8081;
       server_name  _;
       root         /html;

       location / {
       }

    }

kind: ConfigMap
metadata:
  creationTimestamp: "2019-01-31T09:20:08Z"
  name: nginx-config
  namespace: default
  resourceVersion: "416047"
  selfLink: /api/v1/namespaces/default/configmaps/nginx-config
  uid: 67199b66-2539-11e9-821c-000c2963b9a7
[root@server yaml]# 

可以看到data:下面的nginx.conf里面的內(nèi)容和我們上面vi的內(nèi)容一致
接下來在部署應(yīng)用的時候使用該配置

編寫部署應(yīng)用的yaml文件

基于volume方式
[root@server yaml]# vim  nginx.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: my-nginx
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: my-nginx
    spec:
      containers:
      - name: my-nginx
        image: nginx:1.9
        ports:
        - containerPort: 8081
        volumeMounts:                         --就是這一段使用configMap配置
        - mountPath: /etc/nginx/conf.d  --將配置文件掛載到哪里
          name: config
      volumes:
        - name: config                           --指定config使用configMap
          configMap:
            name: nginx-config                --指定使用configMap中的nginx-config配置
            items:                                     --注:也可不指定items,那默認是nginx-config里的所有值都掛載
            - key: nginx.conf                    --使用nginx-config配置的nginx.conf鍵里的內(nèi)容
              path: nginx.conf

---
apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
spec:
  type: NodePort
  selector:
    app: my-nginx
  ports:
    - protocol: TCP
      port: 8081
      targetPort: 8081
      nodePort: 28081

部署應(yīng)用

[root@server yaml]# kubectl create -f nginx.yaml 
deployment.extensions/my-nginx created
service/nginx-svc created
[root@server yaml]# 
[root@server yaml]# 
[root@server yaml]# kubectl get pod 
NAME                        READY   STATUS    RESTARTS   AGE
my-nginx-55fd7587b7-7fscq   1/1     Running   0          9s
[root@server yaml]# 
[root@server yaml]# kubectl get svc |grep nginx
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
nginx-svc    NodePort    10.68.230.130   <none>        8081:28081/TCP   15s

部署成功俊啼,pod已經(jīng)成功運行肺缕,服務(wù)發(fā)現(xiàn)已經(jīng)做好了28081外部訪問入口

基于環(huán)境變量方式
[root@server yaml]# vim  nginx.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: my-nginx
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: my-nginx
    spec:
      containers:
      - name: my-nginx
        image: nginx:1.9
        ports:
        - containerPort: 8081
        env:
        - name: test-env
          valueFrom:
            configMapKeyRef:
              name: cm-demo
              key: nginx-c

2、驗證nginx應(yīng)用是否使用了configMap中的nginx-config
登陸部署的應(yīng)用pod里去查看一下

[root@server yaml]# kubectl exec -it my-nginx-55fd7587b7-7fscq bash     --登陸容器
root@my-nginx-55fd7587b7-7fscq:/# 
root@my-nginx-55fd7587b7-7fscq:/# cat /etc/nginx/conf.d/nginx.conf        --查看配置確實是上面vi的內(nèi)容
server {
   listen       8081;
   server_name  _;
   root         /html;

   location / {
   }

}

root@my-nginx-55fd7587b7-7fscq:/# 
root@my-nginx-55fd7587b7-7fscq:/# ls -d /html/               --數(shù)據(jù)目錄也已經(jīng)創(chuàng)建好了
/html/
root@my-nginx-55fd7587b7-7fscq:/#
root@my-nginx-55fd7587b7-7fscq:/# ls -l /etc/nginx/conf.d/
total 0
lrwxrwxrwx 1 root root 17 Jan 31 09:31 nginx.conf -> ..data/nginx.conf 
--可以看到這個配置文件是一個相對路徑不是實體文件

上面已經(jīng)驗證了應(yīng)用確實使用了configMap的配置

這樣我們就可以把不同的環(huán)境配置文件都在k8s里建一份授帕,在部署的時候指定對應(yīng)環(huán)境的配置文件即可同木。
這就解決了不同環(huán)境,在部署應(yīng)用時要重新打包鏡像的問題跛十。

到此結(jié)束彤路。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市芥映,隨后出現(xiàn)的幾起案子洲尊,更是在濱河造成了極大的恐慌,老刑警劉巖奈偏,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坞嘀,死亡現(xiàn)場離奇詭異,居然都是意外死亡惊来,警方通過查閱死者的電腦和手機姆吭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來唁盏,“玉大人内狸,你說我怎么就攤上這事检眯。” “怎么了昆淡?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵锰瘸,是天一觀的道長。 經(jīng)常有香客問我昂灵,道長避凝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任眨补,我火速辦了婚禮管削,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘撑螺。我一直安慰自己含思,他們只是感情好,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布甘晤。 她就那樣靜靜地躺著含潘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪线婚。 梳的紋絲不亂的頭發(fā)上遏弱,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機與錄音塞弊,去河邊找鬼漱逸。 笑死,一個胖子當著我的面吹牛游沿,可吹牛的內(nèi)容都是我干的虹脯。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼奏候,長吁一口氣:“原來是場噩夢啊……” “哼循集!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蔗草,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤咒彤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后咒精,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體镶柱,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年模叙,在試婚紗的時候發(fā)現(xiàn)自己被綠了歇拆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖故觅,靈堂內(nèi)的尸體忽然破棺而出厂庇,到底是詐尸還是另有隱情,我是刑警寧澤输吏,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布权旷,位于F島的核電站,受9級特大地震影響贯溅,放射性物質(zhì)發(fā)生泄漏拄氯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一它浅、第九天 我趴在偏房一處隱蔽的房頂上張望译柏。 院中可真熱鬧,春花似錦姐霍、人聲如沸鄙麦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蚓聘,卻和暖如春腌乡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背夜牡。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工与纽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人塘装。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓急迂,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蹦肴。 傳聞我的和親對象是個殘疾皇子僚碎,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容