kubernetes系列12—二個特色的存儲卷configmap和secret

本文收錄在容器技術學習系列文章總目錄

1、configmap

1.1 認識configmap

  ConfigMap用于保存配置數據的鍵值對,可以用來保存單個屬性,也可以用來保存配置文件。ConfigMapsecret很類似,但它可以更方便地處理不包含敏感信息的字符串。

?

1.2 創建configmap

1.2.1 通過命令行

創建一個名為nginx-configconfigmap,指定端口和server name

[root@master ~]# kubectl create configmap nginx-config --from-literal=nginx_port=80 --from-literal=server_name=myapp.along.com
configmap/nginx-config created
[root@master ~]# kubectl get cm
NAME           DATA      AGE
nginx-config   2         11s
[root@master ~]# kubectl describe cm nginx-config
Name:         nginx-config
Namespace:    default
Labels:       <none>
Annotations:  <none>Data
====
nginx_port:
----
80
server_name:
----
myapp.along.com
Events:  <none>

  

1.2.2 通過文件

1)準備文件

[root@master ~]# mkdir configmap
[root@master ~]# cd configmap
[root@master configmap]# vim www.conf
server {server_name myapp.along.com;listen 80;root /data/web/html/;
}

  

2)創建查詢認證

[root@master configmap]# kubectl create configmap nginx-www --from-file=./www.conf
configmap/nginx-www created
[root@master configmap]# kubectl get cm
NAME           DATA      AGE
nginx-config   2         3m
nginx-www      1         5s
[root@master configmap]# kubectl describe cm nginx-www
Name:         nginx-www
Namespace:    default
Labels:       <none>
Annotations:  <none>Data
====
www.conf:
----
server {server_name myapp.along.com;listen 80;root /data/web/html/;
}Events:  <none>

  

1.3 創建pod使用configmap

1.3.1 pod通過環境變量使用configmap

通過使用環境變量傳入podconfigmap,不能實時更新

1)編寫configmapyaml文件

[root@master configmap]# vim pod-configmap.yaml
apiVersion: v1
kind: Pod
metadata:name: pod-cm-1namespace: defaultlabels:app: myapptier: frontendannotations:along.com/created-by: "cluster admin"
spec:containers:- name: myappimage: ikubernetes/myapp:v1ports:- name: httpcontainerPort: 80env:- name: NGINX_SERVER_PORTvalueFrom:configMapKeyRef:name: nginx-configkey: nginx_port- name: NGINX_SERVER_NAMEvalueFrom:configMapKeyRef:name: nginx-configkey: server_name

  

2)創建pod,查詢認證

[root@master configmap]# kubectl apply -f pod-configmap.yaml
pod/pod-cm-1 created
[root@master configmap]# kubectl get pods
NAME                            READY     STATUS    RESTARTS   AGE
pod-cm-1                        1/1       Running   0          41s
---查詢pod內部變量
[root@master configmap]# kubectl exec -it pod-cm-1 -- printenv |grep NGINX_SERVER
NGINX_SERVER_PORT=80
NGINX_SERVER_NAME=myapp.along.com

  

3)通過環境變量導入configmap,修改configmap后,pod中內容不會更改

使用edit修改configmap,把nginx_port 80改為8080

[root@master configmap]# kubectl edit cm nginx-config
... ...nginx_port: "8080"     #把80改為8080
... ...
configmap/nginx-config edited

查詢,configmap被修改,但是pod中變量并未修改

因為configmap只是在容器啟動時加載生效;現在pod已經創建,再修改,不會生效

------cm已經修改------
[root@master configmap]# kubectl describe cm nginx-config   
Data
====
nginx_port:
----
8080
server_name:
----
myapp.along.com
Events:  <none>
------但是pod實際沒有改變------
[root@master configmap]# kubectl exec -it pod-cm-1 -- printenv |grep NGINX_SERVER   
NGINX_SERVER_PORT=80
NGINX_SERVER_NAME=myapp.along.com

  

1.3.2 pod通過存儲卷使用configmap

通過使用存儲卷傳入podconfigmap,可以實時更新

1)編寫configmapyaml文件,并創建configmap

創建一個volume,使用上邊創建好的名為nginx-configconfigmap

[root@master configmap]# vim pod-configmap-2.yaml
apiVersion: v1
kind: Pod
metadata:name: pod-cm-2namespace: defaultlabels:app: myapptier: frontendannotations:along.com/created-by: "cluster admin"
spec:volumes:- name: nginxconfconfigMap:name: nginx-configcontainers:- name: myappimage: ikubernetes/myapp:v1ports:- name: httpcontainerPort: 80volumeMounts:- name: nginxconfmountPath: /etc/nginx/config.d/readOnly: true
[root@master configmap]# kubectl apply -f pod-configmap-2.yaml
pod/pod-cm-2 created

  

2)登入pod中,查詢驗證

[root@master configmap]# kubectl get pods
NAME       READY     STATUS    RESTARTS   AGE
pod-cm-2   1/1       Running   0          7s
[root@master ~]# kubectl exec -it pod-cm-2 -- /bin/sh
/ # cd /etc/nginx/config.d/
/etc/nginx/config.d # ls
nginx_port   server_name
/etc/nginx/config.d # cat nginx_port
80
/etc/nginx/config.d # cat server_name 
myapp.along.com

  

3)通過環境變量導入configmap,修改configmap后,pod中內容會更改

使用edit修改configmap,把nginx_port 80改為8080

[root@master ~]# kubectl edit cm nginx-config
apiVersion: v1
data:nginx_port: "8080" server_name: myapp.along.com
... ...
configmap/nginx-config edited

再登入pod查看,發現已經改變

[root@master ~]# kubectl exec -it pod-cm-2 -- /bin/sh
/ # cat /etc/nginx/config.d/nginx_port 
8080/

  

1.4 一個完整的configmap的應用實例

1.4.1 編寫創建podyaml文件,使用nginx-wwwconfigmap

[root@master configmap]# vim pod-configmap-3.yaml 
apiVersion: v1
kind: Pod
metadata:name: pod-cm-3namespace: defaultlabels:app: myapptier: frontendannotations:along.com/created-by: "cluster admin"
spec:volumes:- name: nginxconfconfigMap:name: nginx-wwwcontainers:- name: myappimage: ikubernetes/myapp:v1ports:- name: httpcontainerPort: 80volumeMounts:- name: nginxconfmountPath: /etc/nginx/conf.d/readOnly: true

  

1.4.2 創建pod

[root@master configmap]# kubectl apply -f pod-configmap-3.yaml
pod/pod-cm-3 created
[root@master configmap]# kubectl get pods
NAME       READY     STATUS    RESTARTS   AGE
pod-cm-3   1/1       Running   0          24s

  

1.4.3 登入pod,查詢配置是否成功

[root@master configmap]# kubectl exec -it pod-cm-3 -- /bin/sh
/ # cat /etc/nginx/conf.d/www.conf 
server {server_name myapp.along.com;listen 80;root /data/web/html/;
}
/ # nginx -T |tail -7      #-T查詢nginx的配置信息
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# configuration file /etc/nginx/conf.d/www.conf:
server {server_name myapp.along.com;listen 80;root /data/web/html/;
}
---生成nginx的主頁內容
/ # mkdir -p /data/web/html
/ # vi /data/web/html/index.html
<h1>Nginx Server configured by CM</h1>

  

1.4.4 在其他節點訪問,驗證是否成功

1)在master上新開一個窗口,查詢pod對應的IP

[root@master ~]# kubectl get pods -o wide
NAME                            READY     STATUS    RESTARTS   AGE       IP            NODE
pod-cm-3                        1/1       Running   0          7m        10.244.1.124  node2

  

2)在任意節點上配置host,使其能連通此pod

[root@node1 ~]# vim /etc/hosts
10.244.1.124 myapp.along.com

  

3)訪問pod,成功

[root@node1 ~]# curl myapp.along.com    
<h1>Nginx Server configured by CM</h1>	

  

1.4.5 通過修改configmap,修改podnginx服務的端口

1)修改configmap的配置,將nginx的端口由80改為8888

[root@master ~]# kubectl edit cm nginx-www
apiVersion: v1
data:www.conf: "server {\n\tserver_name myapp.along.com;\n\tlisten 8888;\n\troot /data/web/html/;\n}\n"
... ...
configmap/nginx-www edited

  

2)在pod內還需要重載nginx配置(現在是手工操作,后面會使用k8s工具完成)

/ # cat /etc/nginx/conf.d/www.conf     查詢configmap的修改是否生效
server {server_name myapp.along.com;listen 8888;root /data/web/html/;
}
/ # nginx -s reload  重載一下nginx配置
2019/02/25 02:32:00 [notice] 16#16: signal process started

  

3)在node節點上訪問驗證,成功

[root@node1 ~]# curl myapp.along.com:8888
<h1>Nginx Server configured by CM</h1>	

?

2、secret

2.1 認識secret

  • ?Secret?對象類型用來保存敏感信息,例如密碼、OAuth 令牌和 ssh key。將這些信息放在?secret?中比放在?pod?的定義或者 docker 鏡像中來說更加安全和靈活。
  • ?Secret 是一種包含少量敏感信息例如密碼、token key 的對象。這樣的信息可能會被放在 Pod spec 中或者鏡像中;將其放在一個 secret 對象中可以更好地控制它的用途,并降低意外暴露的風險。
  • ?用戶可以創建 secret,同時系統也創建了一些 secret
  • ?要使用 secretpod 需要引用 secretPod 可以用兩種方式使用 secret:作為?volume?中的文件被掛載到 pod 中的一個或者多個容器里,或者當 kubelet pod 拉取鏡像時使用。
  • ?Secret有三種類型:
    • ?Service Account:用來訪問Kubernetes API,由Kubernetes自動創建,并且會自動掛載到Pod/run/secrets/kubernetes.io/serviceaccount目錄中;
    • ?Opaquebase64編碼格式的Secret,用來存儲密碼、密鑰等;
    • ?kubernetes.io/dockerconfigjson:用來存儲私有docker registry的認證信息。

?

2.2 創建一個secret

---創建secret
[root@master ~]# kubectl create secret generic mysql-root-passwd --from-literal=password=MyP@ss123
secret/mysql-root-passwd created
---查詢secret信息
[root@master ~]# kubectl get secret
NAME                  TYPE                                  DATA      AGE
default-token-wjbzf   kubernetes.io/service-account-token   3         35d
mysql-root-passwd     Opaque                                1         11s
---查詢詳細信息
[root@master ~]# kubectl describe secret mysql-root-passwd
Name:         mysql-root-passwd
Namespace:    default
Labels:       <none>
Annotations:  <none>Type:  OpaqueData
====
password:  9 bytes    #已經進行64位加密
---以yaml文件顯示信息
[root@master ~]# kubectl get secret mysql-root-passwd -o yaml
apiVersion: v1
data:password: TXlQQHNzMTIz
kind: Secret
metadata:creationTimestamp: 2018-10-10T03:14:04Zname: mysql-root-passwdnamespace: defaultresourceVersion: "436965"selfLink: /api/v1/namespaces/default/secrets/mysql-root-passwduid: 8adbf6ae-cc3a-11e8-bb48-005056277243
type: Opaque
---解密
[root@master ~]# echo TXlQQHNzMTIz |base64 -d
MyP@ss123

  

2.3 通過secretpod注入環境變量

1)編寫yaml文件,創建pod

[root@master configmap]# vim pod-secret-1.yaml
apiVersion: v1
kind: Pod
metadata:name: pod-secret-1namespace: defaultlabels:app: myapptier: frontendannotations:along.com/created-by: "cluster admin"
spec:containers:- name: myappimage: ikubernetes/myapp:v1ports:- name: httpcontainerPort: 80env:- name: MYSQL_ROOT_PASSWDvalueFrom:secretKeyRef:name: mysql-root-passwdkey: password
[root@master configmap]# kubectl apply -f pod-secret-1.yaml
pod/pod-secret-1 created

  

2)查詢并認證

[root@master configmap]# kubectl get pods
NAME                            READY     STATUS    RESTARTS   AGE
pod-secret-1                    1/1       Running   0          14s
---驗證,查詢pod中的環境變量,篩選出MYSQL_ROOT_PASSWD
[root@master configmap]# kubectl exec pod-secret-1 -- printenv |grep MYSQL
MYSQL_ROOT_PASSWD=MyP@ss123

  

轉載于:https://www.cnblogs.com/along21/p/10435468.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/395057.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/395057.shtml
英文地址,請注明出處:http://en.pswp.cn/news/395057.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

華為完成拉美銅網寬帶G.fast技術部署測試

1/11/2016,英國大東通信巴拿馬分公司日前與華為公司發布消息稱&#xff0c;覆蓋拉丁美洲地區的最快銅纜寬帶服務系統成功完成初次測試。 作為巴拿馬地區領先的移動寬帶服務提供商&#xff0c;大東通信巴拿馬分公司也是當地最大的電信服務提供商&#xff0c;此次與華為合作在現有…

kotlin調用類中的方法_一種輕松的方法來測試Kotlin中令人沮喪的靜態方法調用

kotlin調用類中的方法by Oleksii Fedorov通過Oleksii Fedorov 一種輕松的方法來測試Kotlin中令人沮喪的靜態方法調用 (A stress-free way to test frustrating static method calls in Kotlin) Let me make a wild guess… You have encountered some code in Kotlin that is …

python圖像加密模塊_使用Pycryp的圖像加密和解密

這和加密或解密文本是一樣的。示例首先導入一些模塊&#xff1a;from Crypto.Cipher import AESfrom Crypto import Random然后&#xff0c;讓我們生成一個鍵和一個初始化向量。key Random.new().read(AES.block_size)iv Random.new().read(AES.block_size)加密下面的代碼加載…

遇到attemp to invoke virtual method

這個很大原因是沒有預先初始化sdk&#xff0c;檢查application的配置是否配置了application&#xff1a;name 轉載于:https://www.cnblogs.com/caimuqing/p/5894099.html

app啟動頁自動跳轉源碼_關于移動端App啟動頁的策劃方案

App啟動頁是指app在啟東時需要加載必要的運行環境和配置&#xff0c;在這個過程中提示用戶等待的一個過渡頁面。在產品經理眼里啟動頁是app給予用戶重要的第一印象&#xff1b;也是App最重要的黃金頁面之一&#xff0c;所有用戶100%都會看到的頁面。啟動頁適合用來做以下幾個事…

電信運營商占IDC市場65%:中國電信占行業半數以上

隨著云計算、大數據的快速發展&#xff0c;作為重要基礎設施的IDC數據中心也在高速擴張。 近日&#xff0c;DCA常務理事長何寶宏介紹&#xff0c;我國規劃在建數據中心共計246個&#xff0c;總設計機架數約為103萬個&#xff0c;總設計服務器規模約1326萬臺。在用超大型、大型數…

Python 日期和時間戳的轉換

Python 日期和時間戳的轉換 1. Python中處理時間的模塊 Python中處理時間的模塊有time、datetime和calendar。 在Python中表示時間的方式&#xff1a; 時間戳&#xff1a;10位整數位和若干小數位&#xff0c;例如 1551153156.6358607元組&#xff08;struct_time&#xff09;: …

快應用比賽_我的應用如何在國際學生比賽中獲得第三名

快應用比賽by Rafael Melo通過拉斐爾梅洛 我的應用如何在國際學生比賽中獲得第三名 (How my App won third place in an International Student Competition) I developed an App that won third place at the IEEE Mobile Applications Development Contest 2017 (IEEEmadC 2…

JAVA中String類的intern()方法的作用

一般我們變成很少使用到 intern這個方法&#xff0c;今天我就來解釋一下這個方法是干什么的&#xff0c;做什么用的 首先請大家看一個例子&#xff1a; public static void main(String[] args) throws Exception { String a "b" ; String b "b" ; …

java 如何排查內存溢出_java 內存溢出排查

測試代碼&#xff0c;如下示例&#xff1a;import java.util.ArrayList;import java.util.List;/*** Description 測試內存溢出, 啟動時設置參數&#xff0c;最大堆內存為1m, 內存溢出時dump出內存文件 -Xmx1m -XX:HeapDumpOutOfMemoryError* Author luzy* Date 2018/10/5 11:0…

《企業級ios應用開發實戰》一2.2 iOS框架介紹

2.2 iOS框架介紹 iOS衍生自Mac OS X的成熟內核&#xff0c;但iOS操作系統更緊湊和高效&#xff0c;支持iPhone和iPod Touch的硬件。iOS繼承了Mac OS X的風格&#xff0c;包括&#xff1a;統一的OS X 內核&#xff0c;針對網絡的BSD套接字&#xff0c;以及Objective-C和C/C編譯器…

python的opencv 車牌識別 開源_畢節進出口車牌識別系統怎么樣

畢節進出口車牌識別系統怎么樣 gzheu8il畢節進出口車牌識別系統怎么樣 系統拓撲圖如下&#xff1a;該系統以社區中心機房為樞紐&#xff0c;有機的將智慧家居住戶、社區數字化服務、物業數字化管理、社區智能化管理結合起來&#xff0c;真正的實現&#xff1a;住戶與住戶之間的…

了解使用JavaScript進行面向對象編程的基礎(并增強您的編碼…

by Kris Baillargeon通過克里斯拜倫 學習使用JavaScript進行面向對象編程的基礎知識(并增強您的編碼能力&#xff01;) (Learn the basics of object-oriented programming with JavaScript (and supercharge your coding abilities!)) As a moderator of the freeCodeCamp ch…

postgresql的別名要用雙引號才可以

postgresql的別名要用雙引號""才可以 轉載于:https://www.cnblogs.com/handsome1013/p/10443001.html

imx6 mac地址設置

imx6的mac地址總是固定的值&#xff0c;所以需要更改&#xff0c;采用的方法是在uboot中設置環境變量,之后在kernel中使用uboot中設置的mac地址的值。本文記錄更改的過程。 參考鏈接&#xff1a; http://www.cnblogs.com/zengjfgit/p/5711304.html uboot lib_arm/board.c …

java try catch陷阱_Java異常處理最佳實踐及陷阱防范

原標題&#xff1a;Java異常處理最佳實踐及陷阱防范出自《深夜里的程序猿》作者&#xff1a;wangzenghuang前言不管在我們的工作還是生活中&#xff0c;總會出現各種“錯誤”&#xff0c;各種突發的“異常”。無論我們做了多少準備&#xff0c;多少測試&#xff0c;這些異常總會…

vivo手機怎么投屏到電腦_投屏軟件電腦加手機投屏軟件投屏

優秀的資源工具可以讓你事半功倍&#xff01;本號文內資源已經手工轉存整理&#xff0c;安全起見&#xff0c;回復 “領取資源” 按提示自助領取。今天分享的是一家公司出品的投屏神器。為避免被舉報這里就不說出軟件名了。它可以在局域網內把手機的屏幕投到電腦上&#xff0c;…

How to upload windows Sysprep Files to VMware vCenter Server Appliance 6.5(vC

vCSA5.5中可以登錄到端口5480中去上傳&#xff0c;vCSA 6.0以后就不支持了。但是可以通過Enable “Pi Shell”來做。 首先確保vCSA的ssh可用&#xff1a; 0. Make sure that SSH in enabled on the VCSA. Home > Administration > System configuration (under Deploymen…

開源短地址_如何在短短5分鐘內完成您的第一個開源貢獻

開源短地址by Roshan Jossey羅珊喬西(Roshan Jossey) 如何在短短5分鐘內完成您的第一個開源貢獻 (How to make your first open source contribution in just 5 minutes) The best way to level up your programming skills it to code more. The second best thing is to rea…

【Qt開發】QT對話框去掉幫助和關閉按鈕 攔截QT關閉窗口的CloseEvent

建了一個對話框&#xff0c;我不想把邊框去掉&#xff0c;只想去掉關閉按鈕&#xff0c; setWindowFlags(windowFlags()&~Qt::WindowCloseButtonHint&~Qt::WindowContextHelpButtonHint); 結果那個問號的按鈕去掉了&#xff0c;但是關閉按鈕還在&#xff0c;求助啊 set…