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

来源:https://www.cnblogs.com/along21/archive/2019/02/26/10435468.html
-Advertisement-
Play Games

本文收錄在容器技術學習系列文章總目錄 1、configmap 1.1 認識configmap ConfigMap用於保存配置數據的鍵值對,可以用來保存單個屬性,也可以用來保存配置文件。ConfigMap跟secret很類似,但它可以更方便地處理不包含敏感信息的字元串。 1.2 創建configmap ...


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

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-1
  namespace: default
  labels:
    app: myapp
    tier: frontend
  annotations:
    along.com/created-by: "cluster admin"
spec:
  containers:
  - name: myapp
    image: ikubernetes/myapp:v1
    ports:
    - name: http
      containerPort: 80
    env:
    - name: NGINX_SERVER_PORT
      valueFrom:
        configMapKeyRef:
          name: nginx-config
          key: nginx_port
    - name: NGINX_SERVER_NAME
      valueFrom:
        configMapKeyRef:
          name: nginx-config
          key: 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-2
  namespace: default
  labels:
    app: myapp
    tier: frontend
  annotations:
    along.com/created-by: "cluster admin"
spec:
  volumes:
  - name: nginxconf
    configMap:
      name: nginx-config
  containers:
  - name: myapp
    image: ikubernetes/myapp:v1
    ports:
    - name: http
      containerPort: 80
    volumeMounts:
    - name: nginxconf
      mountPath: /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-3
  namespace: default
  labels:
    app: myapp
    tier: frontend
  annotations:
    along.com/created-by: "cluster admin"
spec:
  volumes:
  - name: nginxconf
    configMap:
      name: nginx-www
  containers:
  - name: myapp
    image: ikubernetes/myapp:v1
    ports:
    - name: http
      containerPort: 80
    volumeMounts:
    - name: nginxconf
      mountPath: /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:  Opaque

Data
====
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:04Z
  name: mysql-root-passwd
  namespace: default
  resourceVersion: "436965"
  selfLink: /api/v1/namespaces/default/secrets/mysql-root-passwd
  uid: 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-1
  namespace: default
  labels:
    app: myapp
    tier: frontend
  annotations:
    along.com/created-by: "cluster admin"
spec:
  containers:
  - name: myapp
    image: ikubernetes/myapp:v1
    ports:
    - name: http
      containerPort: 80
    env:
    - name: MYSQL_ROOT_PASSWD
      valueFrom:
        secretKeyRef:
          name: mysql-root-passwd
          key: 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

  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前提條件,確保兩個ip可以正常通信 確認服務端是否安裝nfs-utils和rpcbind[root@localhost /]# rpm -qa|grep "nfs"nfs4-acl-tools-0.3.3-17.el7.x86_64libnfsidmap-0.25-19.el7.x86_64nfs- ...
  • 最低有效位(the least significant bit,lsb)是指一個二進位數字中的第0位(即最低位),具有權值為2^0,可以用它來檢測數的奇偶性。與之相反的稱之為最高有效位。在大端序中,lsb指最右邊的位。 圖1 無符號數149的二進位形式,藍色為最高有效位 最低有效位代表二進位數中的最 ...
  • 查看依賴性方法:# rpmrepater會向用戶顯示已安裝包的列表,你可以使用上/下箭頭來滾動屏幕# 可以在指定包上使用"r"鍵來顯示其依賴關係,迴圈在指定包上按下"r"鍵可以展示出餘下的信息。# "L"標誌的意思是說這個包是一片“孤葉”,意思說說沒有任何包依賴它。# "o"標誌是說這個包是整個依賴 ...
  • 摘要 本章介紹Jenkins的簡單使用,關於Jenkins的安裝,參照【Linux】Jenkins安裝(一) 事例說明:在linux環境下,安裝的jenkins,集成svn,tomcat的環境,項目是maven項目 Jenkins配置 在Jenkins首頁,點擊Manage Jenkins,然後點擊 ...
  • 運行環境:centos7.5 linux 打開文件數 too many open files 解決方法fs.inotify.max_user_watches預設值太小,導致too many open files執行:sysctl -w fs.inotify.max_user_watches="999 ...
  • 一、VIM 1、VIM編輯器 1.1、VIM工作模式 1.1.1、命令模式:複製、剪切、粘貼、搜索等等 1.1.2、輸入模式:隨意對文件進行內容編輯 1.1.3、末行模式(:):保存退出,編輯環境設置 1.2、常用快捷鍵 1.2.1、增、改命令:a(游標後一個字元)、i(游標字元)、o(游標下一行) ...
  • (一)通過vi編輯器來替換。vi/vim 中可以使用 :s 命令來替換字元串。:s/well/good/ 替換當前行第一個 well 為 good:s/well/good/g 替換當前行所有 well 為 good:n,$s/well/good/ 替換第 n 行開始到最後一行中每一行的第一個 wel ...
  • 上章節提到通過netdom join加域並指定對應OU,本章再補充一例現成powershell加域並指定對應OU的腳本,便於大家工作中使用。$PlainPassword = P@ssw0rd$UserName="Administrator"$DomainName="azureyun.com"$Dom... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...