主頁 > 軟體工程 > Kubernetes筆記(8) - ConfigMap和Secret

Kubernetes筆記(8) - ConfigMap和Secret

2021-06-13 06:27:00 軟體工程

  • ConfigMap
    • 創建ConfigMap物件
      • 基于字面值創建
      • 基于檔案創建
      • 基于目錄創建
      • 使用配置清單創建
    • 通過環境變數傳遞ConfigMap資料
      • envFrom
    • 通過ConfigMap存盤卷傳遞資料
      • 掛載整個存盤卷
      • 掛載存盤卷中的部分鍵值
  • Secret
    • 創建Secret資源
      • 命令式創建
      • 基于配置清單創建
    • Secret存盤卷
    • imagePullSecret資源物件

ConfigMap和Secret是Kubernetes系統上兩種特殊型別的存盤卷,ConfigMap物件用于為容器中的應用提供配置資料,Secret物件則用于提供密鑰、證書等敏感的配置資訊,它們將相應的配置資訊保存于物件中,而后在Pod資源上以存盤卷的形式將其掛載并獲取相關的配置,以實作配置與鏡像檔案的解耦,

ConfigMap

配置本身源于代碼,是為了提高代碼的靈活性而提取出來的一些經常變化的或需要定制的內容,已有一些開源的分布式系統配置管理系統如Apollo、Diamond、Disconf等,ConfigMap則是Kubernetes提供的統一配置管理方案,一個ConfigMap物件就是一系列配置資料的集合,這些資料可“注入”到Pod物件中,并為容器應用所使用,注入方式有兩種

  • 掛載為存盤卷
  • 傳遞為環境變數

創建ConfigMap物件

ConfigMap物件將配置資料以鍵值對的形式進行存盤,可以使用kubectl create命令創建

kubectl create configmap <map-name> <data-source>

map-name為ConfigMap物件的名稱,而data-source是資料源,它可以通過這幾種方式來獲取

  • 字面值
  • 檔案
  • 目錄
  • 配置清單

無論采用哪一種方式,都要被轉換為ConfigMap物件中的Key-Value資料,

基于字面值創建

使用--from-literal選項可在命令列直接提供鍵值對:

kubectl create configmap literal-config --from-literal=key1=value1

創建后可以使用kubectl get configmaps dir-config -o yaml命令查看,

基于檔案創建

基于檔案創建時要使用--from-file選項:

kubectl create configmap file-config --from-file=8_config_file.txt

這種方式創建的ConfigMap物件,其資料存盤的鍵為檔案名,值為檔案內容

apiVersion: v1
data:
  8_config_file.txt: |-
    test
    config
    from
    file
kind: ConfigMap

自定義鍵名的方式:

kubectl create configmap file-config --from-file=file-key1=8_config_file.txt

基于目錄創建

使用--from-file選項時,如果指定的是檔案目錄,kubectl會將目錄下的檔案分別創建為鍵值資料,

kubectl create configmap dir-config --from-file=.

使用配置清單創建

配置清單需要指定apiVersion、kind、metadata、data欄位,data欄位用于存盤鍵值資料:

apiVersion: v1
kind: ConfigMap
metadata:
  name: yaml-config
data:
  key1: value1
  key2: value2

通過環境變數傳遞ConfigMap資料

ConfigMap是名稱空間級別的資源,它必須與參考它的Pod資源在同一空間中;
通過環境變數傳遞ConfigMap的格式為:

env:
- name: <env-name>
  valueFrom:
    configMapKeyRef: 
      name: <configmap-name>
      key: <key-name>
      optional: <bool>

如果optional指定為false,則創建參考了ConfigMap資源的Pod物件時,被參考的資源必須事先存在,否則將無法啟動容器,直到被依賴的資源創建完成為止,
示例:

apiVersion: v1
kind: Pod
metadata:
  name: env-test-pod
  labels:
    app: label-env-test-pod
spec:
  containers:
  - name: env-test-container
    image: busybox
    command: ["/bin/sh", "-c", "env"]
    env:
    - name: MY_KEY1
      valueFrom:
        configMapKeyRef: 
          name: yaml-config
          key: key3
          optional: true
    - name: MY_KEY2
      valueFrom:
        configMapKeyRef: 
          name: yaml-config
          key: key4
          optional: true

envFrom

有時容器需要參考很多ConfigMap資源中的鍵值資料,這種情況下如果為容器逐一配置環境變數會非常繁瑣,而且不好維護,使用envFrom欄位可以直接將ConfigMap資源中的所有鍵值一次性匯入,格式為:

envFrom:
- prefix: <prefix>
  configMapRef:
    name: <configmap-name>
    optional: <bool>

通過ConfigMap存盤卷傳遞資料

如果在ConfigMap中的值體積較大,比如存放的是給容器應用提供的組態檔,那么使用環境變數將其匯入會使得變數值占據過多的記憶體空間而且不易處理,這時建議通過ConfigMap存盤卷的方式可以將內容直接作為檔案進行參考,

掛載整個存盤卷

關聯為Pod資源的存盤卷時,ConfigMap物件中的每個鍵都對應地表現為一個檔案,鍵名為檔案名

apiVersion: v1
kind: Pod
metadata:
  name: configmap-vol
  labels:
    app: configmap-vol
spec:
  containers:
  - name: configmap-vol
    image: busybox
    command: ["/bin/sh", "-c", "sleep 3600"]
    volumeMounts:
    - name: config-vol
      mountPath: /etc/test
      readOnly: true
  volumes:
  - name: config-vol
    configMap:
      name: file-config

掛載后可以將鍵名作為檔案名來查看內容:

kubectl exec configmap-vol -- cat /etc/test/file-key1

掛載存盤卷中的部分鍵值

有時并不希望掛載ConfigMap中的所有內容,可以只掛載存盤卷中的部分鍵值,
格式為:

volumes:
- name: config-vol
  configMap:
    name: file-config
    items:
    - key: file-key1
      path: file-key1

Secret

Secret資源的功能類似于ConfigMap,但它專用于存放敏感資料,例如密碼、數字證書、私鑰、令牌和SSH key等,
與ConfigMap類似,Secret以鍵值方式存盤資料,在Pod資源中通過環境變數或存盤卷進行資料訪問,
Secret物件的資料的存盤及列印格式為Base64編碼的字串,在容器中以環境變數或存盤卷的方式訪問時,它們會被自動解碼為明文格式,
Secret物件主要有兩種用途:

  • 作為存盤卷注入到Pod上由容器應用程式所使用
  • 用于kubelet為Pod里的容器拉取鏡像時向私有倉庫提供認證資訊

Secret資源分為四種型別:

  • Opaque:自定義資料內容;base64編碼,用來存盤密碼、密鑰、資訊、證書等資料,型別識別符號為generic,?
  • kubernetes.io/service-account-token:Service Account的認證資訊,可在創建Service Accout時由Kubernetes自動創建,?
  • kubernetes.io/dockerconfigjson:用來存盤Docker鏡像倉庫的認證資訊,型別標識為docker-registry,?
  • kubernetes.io/tls:用于為SSL通信模式存盤證書和私鑰檔案,命令式創建時型別標識為tls,

創建Secret資源

命令式創建

直接使用字面值創建:

kubectl create secret generic mysql-auth --from-literal=username=root --from-literal=password=password1

查看base64編碼后的內容:

? kubectl get secret mysql-auth -o yaml
apiVersion: v1
data:
  password: cGFzc3dvcmQx
  username: cm9vdA==

使用generic標識創建的Secret為Opaque型別,下面的示例使用了tls標識來創建tls型別的Secret:

kubectl create secret tls nginx-ssl --key=./nginx.key --cert=./nginx.crt

創建成功后名稱固定為tls.key和tls.crt,不受證書和私鑰檔案的名稱的影響,

基于配置清單創建

基于配置清單創建的示例:

apiVersion: v1
kind: Secret
metadata:
  name: yaml-secret
stringData:
  username: redis
  password: password1
type: Opaqu

這里使用了stringData,可以用明文的形式設定secret資料,然后在創建為Secret物件時會自動進行Base64編碼并保存于data欄位中;stringData欄位中的明文不會被API Server輸出,但如果使用“kubectl apply”命令進行的創建,那么注解資訊中還是可以看到明文資訊的,如果用data欄位,則必須直接提供Base64編碼后的資料,

Secret存盤卷

雖然Secret資料也可以痛毆環境變數注入,但并不推薦這樣做,因為容器應用通常會在發生錯誤時將所有環境變數保存于日志資訊中,甚至有些應用在啟動時即會將運行環境列印到日志中;另外,容器應用呼叫第三方程式為子行程時,這些子行程能夠繼承并使用父行程的所有環境變數,
所以建議使用Secret存盤卷來傳遞資料,使用方式與configMap基本相同,但欄位為secret和secretName:

volumes:
- name: secret-vol
  secret:
    secretName: yaml-secret
    items:
    - key: username
      path: username
    - key: password
      path: password

imagePullSecret資源物件

imagePullSecret資源可用于將Secret提供的密碼傳遞給kubelet從而在拉取鏡像前完成認證,
創建imagePullSecret的標識為docker-registry,有兩種使用方式:

  • 在定義Pod資源時通過“imagePullSecrets”欄位指定
  • 將其添加到某特定的ServiceAccount物件中

采用第一張方式,創建docker-registry:

kubectl create secret docker-registry local-registry --docker-username=user1 --docker-password=password1

然后在創建Pod的配置清單中,通過spec.imagePullSecrets欄位為kubelet提供Secret資訊:

spec:
  imagePullSecrets:
  - name: local-registry

但這種方式需要為每個Pod資源顯式定義imagePullSecrets,基于ServiceAccount的的方式可以避免這個問題,后續再做詳細了解,

學習資料

《Kubernetes實戰進階》 馬永亮著

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/286875.html

標籤:其他

上一篇:工程師應該如何對待自己的錯誤

下一篇:Centos7安裝Jenkins

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more