Kubernetes 配置管理

這里寫目錄標題

  • 什么是 ConfigMap
  • 創建 ConfigMap
    • 基于目錄創建 ConfigMap
        • 創建 conf 目錄,里面放置兩個文件
        • 基于目錄下的所有文件創建 ConfigMap
        • 查看當前創建的 ConfigMap
    • 基于文件創建 ConfigMap
        • 創建測試文件 game-cfg
        • 基于單個文件創建 ConfigMap
        • 查看當前創建的 ConfigMap
        • 使用帶有 key 的命令創建 ConfigMap
        • 查看當前創建的 ConfigMap
        • 多次使用使用 --from-file 傳入參數,用以從多個文件創建 ConfigMap
        • 查看當前創建的 ConfigMap
    • 基于 ENV 文件創建 ConfigMap
        • 創建測試用的 key-value 文件
        • 創建 ConfigMap
        • 查看當前創建的 ConfigMap
    • 基于字符值創建 ConfigMap
        • 利用字符值創建 ConfigMap
        • 刪除已創建的 ConfigMap
    • ConfigMap 實踐
        • 使用 valueFrom 定義容器的環境變量
            • 先以字符值的形式創建 ConfigMap
            • 查看當前創建的 ConfigMap
            • 使用 valueFrom 從 ConfigMap 中定義變量
            • 創建 pod
            • 查看 pod 日志
        • 使用 envFrom 定義容器的環境變量
            • 使用 envFrom 從 ConfigMap 由定義變量
            • 創建 Pod
            • 查看 Pod 日志
        • 以文件的形式掛載 Configmap
            • 創建測試文件
            • 使用帶有 key 的命令創建 ConfigMap
            • 查看 ConfigMap
            • 編寫文件,將名為 spec-config 的 configMap 掛載到容器的/etc/config 目錄下
            • 創建 Pod
            • 查看創建結果
            • 登錄容器,查看掛載情況
            • 刪除 Pod
        • 自定義文件名掛載 ConfigMap
            • 編寫 Pod 文件
            • 登錄容器,查看掛載情況
        • 指定掛載的文件權限
            • 編寫 Pod 文件,指定文件權限
            • 登錄容器,查看掛載情況
        • 利用 SubPath 解決掛載覆蓋的問題
            • 創建測試用的配置文件
            • 使用帶有 key 的命令創建 configMap
            • 查看 configMap
            • 創建 Pod 文件,掛載文件

什么是 ConfigMap

在傳統架構中,配置文件往往被保存在宿主機上,程序啟動是可以指定某個配置文件,但是使用容器部署時,容器所在的節點并不固定,所以不能使用這種方式,此處在構建鏡像時,如果把配置文件也放在容器里面,那么配置文件一旦有更改的話,也是一件非常麻煩的事情。所以k8s 抽象了一個 configMap的概念,將配置與 pod 和組件分開,這有助于保持工作負載的可移植性,使配置更易于更改和管理。比如在生產環境中,可以將 Nginx、Redis 等應用的配置文件存儲在 ConfigMap 上,然后將其掛載即可使用

相對于 secret,configMap 更傾向于存儲和共享非敏感、未加密的配置信息,假如是集群中使用敏感信息,最好使用 secret

  • ConfigMap 用來在鍵值對數據庫(etcd)中保存非加密數據。一般用來保存配置文件
  • ConfigMap 可以用作環境變量、命令行參數或者存儲卷
  • ConfigMap 將環境配置信息與 容器鏡像 解耦,便于配置的修改
  • ConfigMap 在設計上不是用來保存大量數據的
  • ConfigMap 中保存的數據不可超過 1 MiB

創建 ConfigMap

ConfigMap 可以用目錄(目錄下有多個文件)、單個文件或字符值的方式創建,使用 kubectl 創建一個 ConfigMap 的命令格式如下:

kubectl create configmap < map-name >< data-source >
命令字含義
map-nameconfigMap 的名稱
data-source數據源,可以使數據的目錄、文件或字符值
key文件名或秘鑰
value文件內容或字符值

基于目錄創建 ConfigMap

創建 conf 目錄,里面放置兩個文件
[root@k8s-master ~]# mkdir /conf
[root@k8s-master ~]# echo "This is file01" > /conf/file01.conf
[root@k8s-master ~]# echo "This is file02" > /conf/file02.conf

請添加圖片描述

基于目錄下的所有文件創建 ConfigMap
[root@k8s-master ~]# ku create configmap game-config-1 --from-file=/conf/

請添加圖片描述
注意:

ConfigMap 是按namespace 隔離的,不同的namespace 之間的configMap 的名稱可以相同,但是不能跨namespace 進行訪問,創建ConfigMap 時,可以使用-n 選項指定資源所在的namespace

查看當前創建的 ConfigMap
[root@k8s-master ~]# ku get cm game-config-1 -oyaml

注意:

由于該 ConfigMap 是直接基于目錄創建的,沒有指定 ConfigMap 中的 key 名,因此默認是按照目錄下的文件名作為 configMap 數據中的 key 名

基于文件創建 ConfigMap

創建測試文件 game-cfg
[root@k8s-master ~]# echo "This is game-cfg file" > /conf/game.cfg

請添加圖片描述

基于單個文件創建 ConfigMap
[root@k8s-master ~]# ku create cm game-config-2 --from-file=/conf/game.cfg 

請添加圖片描述

查看當前創建的 ConfigMap
[root@k8s-master ~]# ku get cm game-config-2 -o yaml

注意:

由于沒有指定 ConfigMap 的 key,因此使用文件名作為 key

使用帶有 key 的命令創建 ConfigMap
[root@k8s-master ~]# ku create cm game-config-3 --from-file=self-key=/conf/game.cfg

請添加圖片描述

查看當前創建的 ConfigMap
[root@k8s-master ~]# ku get cm game-config-3 -o yaml
多次使用使用 --from-file 傳入參數,用以從多個文件創建 ConfigMap
[root@k8s-master ~]# ku create cm game-config-4 --from-file=self01-key=/conf/file01.conf --from-file=self02-key=/conf/file02.conf 

請添加圖片描述

查看當前創建的 ConfigMap
[root@k8s-master ~]# ku get cm game-config-4 -o yaml

基于 ENV 文件創建 ConfigMap

假如有一個文件 game-env-file.cfg,里面存儲的 key=value 形式的數據,此類文件可以當做某個應用的環境變量配置,此時可以使用–from-env-file 從 ENV 文件創建 configMap

創建測試用的 key-value 文件
[root@k8s-master ~]# vim /conf/game.env-file.cfg
name01=zhangsan
name02=lisi
name03=wangwu
創建 ConfigMap
[root@k8s-master ~]# ku create cm game-config-env-file --from-env-file=/conf/game.env-file.cfg

請添加圖片描述

查看當前創建的 ConfigMap
[root@k8s-master ~]# ku get cm game-config-env-file -o yaml

基于字符值創建 ConfigMap

有時候配置的并不是很多,只有幾個 key=value 的參數,可以直接使用 kubectl create configmap--from-lietal 參數來定義命令行的字符值

備注:

lietal:文字的;逐字的

利用字符值創建 ConfigMap
[root@k8s-master ~]# ku create configmap spec-config-1 --from-literal=spec.user01=zhangsan --from-literal=spec.user02=lisi

請添加圖片描述

刪除已創建的 ConfigMap
[root@k8s-master ~]# ku delete configmap sepc-config-1

ConfigMap 實踐

在 kubernetes 中,用戶可以使用環境變量引用 configMap 中的數據,當容器啟動時,kubernetes會將 ConfigMap 數據作為環境變量注入到容器的進程中。為了使用 ConfigMap 中的數據,用戶需要在 pod的規范(spec)中定義一個env 字段,并指定 ConfigMap 中的“鍵值對

使用 valueFrom 定義容器的環境變量

大部分情況下,ConfigMap 定義的都是配置文件,而不是環境變量,因此需要將 ConfigMap 的文件掛載到 Pod 中,然后 Pod 中的容器就可以引用,此時可以通過 Pod 的 volume 字段進行掛載

先以字符值的形式創建 ConfigMap
[root@k8s-master ~]# ku create configmap spec-config-2 --from-literal=name01=zhangsan --from-literal=name02=lisi

請添加圖片描述

查看當前創建的 ConfigMap
[root@k8s-master ~]# ku get cm spec-config-2 -o yaml
使用 valueFrom 從 ConfigMap 中定義變量
[root@k8s-master ~]# vim env-valuefrom.yamlapiVersion: v1
kind: Pod
metadata:name: env-valuefrom
spec:containers:- name: env-valuefromimage: busybox:v1command: [ "/bin/sh","-c","env" ]env:- name: my-name01valueFrom:configMapKeyRef:key: name01name: spec-config-2- name: my-name02valueFrom:configMapKeyRef:key: name02name: spec-config-2restartPolicy: Never
創建 pod
[root@k8s-master ~]# ku create -f env-valuefrom.yaml

請添加圖片描述

查看 pod 日志
[root@k8s-master ~]# ku logs env-valuefrom
使用 envFrom 定義容器的環境變量

k8s 從 1.6 的版本開始,引入了一個新的字段 envFrom,實現了在 Pod 中將 configMap 中所有定義的key=value 自動生成為環境變量
使用 envFrom 時,環境變量的名字是 ConfigMap 中數據的 key 名

備注:valueFrom和envfrom的區別

  • 通過 valueFrom 來配置環境變量,Pod 的環境變量名與 configMap 中定義的變量名不必相同valueFrom 是指定變量進行映射
  • 通過 envFrom 會把 ConfigMap 的所有鍵值對都映射到 Pod 的環境變量中去envFrom 配置的環境變量和 Pod 的環境變量名是相同的
使用 envFrom 從 ConfigMap 由定義變量
[root@k8s-master ~]# vim env-envfrom.yamlapiVersion: v1
kind: Pod
metadata:name: env-envfrom
spec:containers:- name: env-envfromimage: busybox:v1command: [ "/bin/sh","-c","env" ]envFrom:- configMapRef:name: spec-config-2restartPolicy: Never
[root@k8s-master ~]# ku describe cm spec-config
創建 Pod
[root@k8s-master ~]# ku create -f env-envfrom.yaml

請添加圖片描述

查看 Pod 日志
[root@k8s-master ~]# ku logs env-envfrom
以文件的形式掛載 Configmap

大部分情況下,ConfigMap 定義的都是配置文件,而不是環境變量,因此需要將 ConfigMap 的文件掛載到 Pod 中,然后 Pod 中的容器就可以引用,此時可以通過 Pod 的 volume 字段進行掛載

創建測試文件
[root@k8s-master ~]# mkdir /etc/conf
[root@k8s-master ~]# echo "This is game-cfg file" > /etc/conf/game.cfg
[root@k8s-master ~]# echo "This is info-cfg file" > /etc/conf/info.cfg

請添加圖片描述

使用帶有 key 的命令創建 ConfigMap
[root@k8s-master ~]# ku create cm spec-config02 --from-file=app01.conf=/etc/conf/game.cfg  --from-file=app02.conf=/etc/conf/info.cfg

請添加圖片描述

查看 ConfigMap
[root@k8s-master ~]# ku get cm spec-config02 -o yaml
編寫文件,將名為 spec-config 的 configMap 掛載到容器的/etc/config 目錄下
[root@k8s-master ~]# vim dapi-test1-pod.yaml apiVersion: v1
kind: Pod
metadata:name: dapi-test1-pod
spec:containers:- name: dapi-test1-podimage: nginx:1.7.9ports:- containerPort: 80volumeMounts:- name: config-volumemountPath: /etc/confvolumes:- name: config-volumeconfigMap:name: spec-config02items:
創建 Pod
[root@k8s-master ~]# ku create -f dapi-test1-pod.yaml

請添加圖片描述
注意:

容器的/etc/config 目錄會被覆蓋掉

查看創建結果
[root@k8s-master ~]# ku get pods
登錄容器,查看掛載情況
[root@k8s-master ~]# ku exec -it dapi-test1-pod -- bash
root@dapi-test1-pod:/# ls /etc/conf/
root@dapi-test1-pod:/# ls -l /etc/conf/
刪除 Pod
[root@k8s-master ~]# ku delete -f dapi-test1-pod.yaml
自定義文件名掛載 ConfigMap

很多情況下,需要更改掛載的文件名,可以使用 path 字段指定 ConfigMap 掛載的文件名,比如將文件 app2.conf 掛載到/etc/conf 下,并重命名為 app2.cfg

編寫 Pod 文件
[root@k8s-master ~]# vim dapi-test2-pod.yamlkind: Pod
metadata:name: dapi-test2-pod
spec:containers:- name: dapi-test2-podimage: nginx:1.7.9ports:- containerPort: 80volumeMounts:- name: config-volumemountPath: /etc/confvolumes:- name: config-volumeconfigMap:name: spec-config02items:- key: app01.confpath: app01.cfg- key: app02.confpath: app02.cfg
登錄容器,查看掛載情況
[root@k8s-master ~]# ku exec -it dapi-test2-pod -- bash
root@dapi-test2-pod:/# ls -l /etc/conf/
指定掛載的文件權限
編寫 Pod 文件,指定文件權限
[root@k8s-master ~]# vim dapi-test3-pod.yamlapiVersion: v1
kind: Pod
metadata:
apiVersion: v1
kind: Pod
metadata:name: dapi-test3-pod
spec:containers:- name: dapi-test3-podimage: nginx:1.7.9ports:- containerPort: 80volumeMounts:- name: config-volumemountPath: /etc/confvolumes:- name: config-volumeconfigMap:name: spec-config02items:- key: app01.confpath: app01.cfgmode: 0644- key: app02.confpath: app02.cfgdefaultMode: 0666
登錄容器,查看掛載情況
[root@k8s-master ~]# ku exec -it dapi-test3-pod -- bash
root@dapi-test3-pod:/# ls -l /etc/conf/
root@dapi-test3-pod:/# ls -l /etc/conf/..data/
利用 SubPath 解決掛載覆蓋的問題

當掛載 ConfigMap 或 Secret 到容器內部時,會覆蓋容器中的目錄,也就是是說,在容器中的對應的錄中,就只剩下我們掛載進去的文件,此目錄中其他的文件都會丟失。從而導致容器無法正常運行。為解決掛載覆蓋的問題,需要使用 SubPath 的方式進行掛載

創建測試用的配置文件
[root@k8s-master ~]# mkdir /etc/conf
[root@k8s-master ~]# vim /etc/conf/nginx.conf
user  nginx;
#This is my ngin-config
worker_processes  1;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {worker_connections  1024;
}
http {include       /etc/nginx/mime.types;default_type  application/octet-stream;log_format  main  ' -  [] "" ''  "" ''"" ""';access_log  /var/log/nginx/access.log  main;sendfile        on;#tcp_nopush     on;keepalive_timeout  65;#gzip  on;include /etc/nginx/conf.d/*.conf;
}
使用帶有 key 的命令創建 configMap
[root@k8s-master ~]# ku create cm nginx-config --from-file=nginx.conf=/etc/conf/nginx.conf 

請添加圖片描述

查看 configMap
[root@k8s-master ~]# ku get cm nginx-config -o yaml
創建 Pod 文件,掛載文件
[root@k8s-master ~]# vim dapi-test4-pod.yamlapiVersion: v1
kind: Pod
metadata:name: dapi-test4-pod
spec:containers:- name: dapi-test4-podimage: nginx:1.7.9ports:- containerPort: 80volumeMounts:- name: nginx-configmountPath: /etc/nginx/nginx.confsubPath: nginx.confvolumes:- name: nginx-configconfigMap:name: nginx-configitems:- key: nginx.confpath: nginx.conf

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

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

相關文章

ESP32+MicroPython:用Python玩轉物聯網開發

什么是ESP32&#xff1f; ESP32作為當下最熱門的物聯網開發板&#xff0c;常被比作"嵌入式世界的瑞士軍刀"。但很多初學者會混淆芯片、模組和開發板的概念&#xff0c;其實它們的關系很簡單&#xff1a; 芯片(Soc)&#xff1a;核心處理器&#xff0c;如ESP32-D0WD模…

opencv學習(圖像金字塔)

1.什么是圖像金字塔圖像金字塔是一種多尺度圖像表示方法&#xff0c;通過對原始圖像進行下采樣&#xff08;縮小&#xff09;和上采樣&#xff08;放大&#xff09;&#xff0c;生成一系列不同分辨率的圖像集合&#xff0c;形似 “金字塔”&#xff08;底部是高分辨率原始圖像&…

從 C# 到 Python:項目實戰第五天的飛躍

在前面三天的學習中&#xff0c;我們已經掌握了 Python 的基礎語法、數據結構以及一些核心庫的使用。今天&#xff0c;我們將通過三個實戰項目&#xff0c;深入對比 C# 和 Python 在命令行工具開發、Web 應用開發以及數據處理方面的差異&#xff0c;感受 Python 在實際項目中的…

rabbitmq 03

一、mq的作用和使用場景 MQ的基本作用 MQ&#xff08;Message Queue&#xff0c;消息隊列&#xff09;是一種應用程序對應用程序的通信方法&#xff0c;主要作用包括&#xff1a; 異步處理&#xff1a;解耦生產者和消費者&#xff0c;允許生產者發送消息后立即返回&#xff0…

Ubuntu 24.04 顯示中文+使用中文鍵盤

ubuntu 24.04 中文顯示中文鍵盤Ubuntu中文輸入重啟iBus服務Ubuntu中文輸入 安裝的Ubuntu24.04&#xff0c;一般默認是英文的&#xff0c;要使用中文的話&#xff0c;可以通過命令行設置&#xff0c;也可以使用‘設置’&#xff0c;在圖形化界面中操作。 下面是在‘設置’的圖形…

Docker實戰:Tomcat容器從部署到自定義網頁的完整操作

Docker實戰&#xff1a;Tomcat容器從部署到自定義網頁的完整操作 繼Nginx容器部署后&#xff0c;我們再來實操Tomcat容器的使用——從拉取鏡像、啟動容器&#xff0c;到端口映射、網頁掛載&#xff0c;全程通過實際命令演示&#xff0c;帶你掌握Tomcat在Docker中的核心用法。 一…

使用cherry studio離線搭建私人知識庫流程記錄

本篇文章記錄近期嘗試在個人筆記本上、全離線狀態下搭建知識庫的流程。用到的工具包括&#xff1a;Cherry Studio、ollama。主要過程是&#xff1a;首先下載ollama用于管理大模型&#xff1b;然后&#xff0c;從魔塔社區下載需要的deepseek、千問大模型和bge-m3嵌入模型&#x…

【工具類】Linux 環境利用 uv 安裝多版本 python

文章目錄前置工作環境說明如果kali無法訪問網絡pypi 換源安裝 uvuv 寫入環境變量臨時寫入永久寫入無法打開 github 解決方案&#xff08;注意此方法可能也會失效&#xff09;安裝多版本 python查看已安裝的pythonuv python install到 uv 的 github 主頁&#xff0c;找安裝文件下…

求職招聘小程序源碼招聘小程序開發定制

身份&#xff1a;求職者、企業求職者&#xff1a;完善簡歷&#xff0c;簡歷投遞企業&#xff1a;企業入駐&#xff0c;查看簡歷企業會員&#xff1a;半年 、年度 權益&#xff1a;每日發布條數、刷新條數&#xff0c;簡歷下載數量聊天&#xff1a;求職者可以和企業聊天招聘會…

Git 使用全指南:從配置到免密登錄

Git 使用全指南&#xff1a;從配置到免密登錄一、Git 基礎配置二、Git 代碼提交流程2.1 克隆遠程倉庫2.2 創建并切換分支2.3 暫存文件2.4 提交到本地倉庫2.5 拉取遠程最新代碼2.6 推送本地分支到遠程三、VSCode 服務器免密登錄配置3.1 生成 Windows SSH 密鑰3.2 復制公鑰到服務…

組合期權:領式策略

文章目錄0.簡介1.多頭領式策略&#xff08;Long Collar&#xff09;?1.1 策略構成1.2 適用場景?1.3 損益分析1.4 案例示范2.空頭領式策略&#xff08;Short Collar&#xff09;?2.1 策略構成2.2 適用場景2.3 損益分析2.4 案例示范參考文獻0.簡介 領式策略&#xff08;Colla…

ECSPI控制器

目錄 SPI協議簡介 極性與相位 SPI框圖 單字節收發 發送數據流程 接收數據流程 ECSPI控制器 關鍵特性 時鐘源 主機模式 等待狀態 片選控制 單突發傳輸 多突發傳輸 相位控制 ECSPI Memory Map ECSPI寄存器 ECSPIx_RXDATA ECSPIx_TXDATA ?編輯 ECSPIx_CONREG …

HTTP 與 SpringBoot 參數提交與接收協議方式

HTTP 協議支持多種參數提交方式&#xff0c;主要取決于請求方法(Method)和內容類型(Content-Type)。以下是主要的參數提交協議&#xff1a;1. URL 查詢參數 (Query Parameters)請求方法: GET (也可用于其他方法)格式: ?key1value1&key2value2示例: GET /users?id123&…

Lua(數組)

Lua 數組基礎概念Lua 中的數組實際上是用整數索引的 table&#xff0c;是一種特殊形式的表。數組索引通常從 1 開始&#xff08;Lua 慣例&#xff09;&#xff0c;但也可以從其他值開始。創建數組通過表構造器初始化數組&#xff1a;-- 索引從 1 開始的數組 local arr {10, …

【Docker項目實戰】在Docker環境下部署go-file文件分享工具

【Docker項目實戰】在Docker環境下部署go-file文件分享工具一、go-file介紹1.1 go-file簡介1.2 go-file特點1.3 go-file使用場景二、本地環境介紹2.1 本地環境規劃2.2 本次實踐介紹三、本地環境檢查3.1 檢查Docker服務狀態3.2 檢查Docker版本3.3 檢查docker compose 版本四、下…

C++基礎學習——文件操作詳解

一、文件流類概述 C 標準庫提供了三個主要的文件流類&#xff1a; ifstream (輸入文件流)&#xff1a;用于從文件讀取數據ofstream (輸出文件流)&#xff1a;用于向文件寫入數據fstream (文件流)&#xff1a;既可讀又可寫 這些類都繼承自 iostream 類&#xff0c;因此可以使用 …

Android補全計劃 DrawerLayout使用

DrawerLayout其實用了很久了&#xff0c;甚至封裝了一些代碼方便不同項目使用&#xff0c;但重構代碼的時候突然意識到這塊內容很不成體系&#xff0c;因此又參考了些文檔&#xff0c;組建了自己的一個文檔。 toolbardrawerlayout能寫的效果很多&#xff0c;在此我也只是截取了…

人工智能之數學基礎:概率論之韋恩圖的應用

韋恩圖的應用由于事件的計算有時候太過于抽象了&#xff0c;此時我們可以使用韋恩圖的方式來進行驗證&#xff0c;我們下面來舉一個例子&#xff0c;A∪B&#xff09;-CA∪(B-C)是否成立&#xff1f;我們可以通過韋恩圖來完成這個任務&#xff1a;我們通過這種方式來一點一點的…

小白成長之路-部署Zabbix7(二)

文章目錄一、zabbix-自動發現二、自動注冊三、zabbix-網易云郵箱-發送消息二、zabbix-釘釘告警總結一、zabbix-自動發現 1.在準備兩臺虛擬機&#xff0c;我的是192.168.144.12,192.168.144.13 server換成zabbix服務器的ip地址 vim /etc/zabbix/zabbix_agentd.conf 2.創建自動…

CMU15445-2024fall-project4踩坑經歷

project4目錄Task1Task2ReconstructSeqScanTask3InsertCommitTxnMgrDbgGenerateNewUndoLog And GenerateUpdateUndoLogUpdate And Delete垃圾回收Task4Index Insert并發控制Index ScanDelete、Update并發控制主鍵更新Bonus 1Bonus 2處理寫傾斜感謝CMU的教授們給我們分享了如此精…