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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

kubernetes系列12—二个特色的存储卷configmap和secret

發布時間:2023/11/29 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

總結

以上是生活随笔為你收集整理的kubernetes系列12—二个特色的存储卷configmap和secret的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。