ConfigMap
ConfigMap 是 configMap 是一種 API 對象,用來將非機密性的數據保存到健值對中。使用時可以用作環境變量、命令行參數或者存儲卷中的配置文件。
ConfigMap 將您的環境配置信息和 容器鏡像 解耦,便於應用配置的修改。當您需要儲存機密信息時可以使用 Secret 對象。
具體用法查看官網,這里記錄下使用過程中遇到的問題。
項目中會將配置放到configmap,然后創建應用時,會讀取configmap內容,映射到pod容器中,對應到項目的配置路徑。
創建configmap
- k8s配置文件形式
configmap-nginx.yaml
kind: ConfigMap
apiVersion: v1
metadata:
name: nginx-config
data:
app.conf: |
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html/app/;
server_name walking.com;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php {
fastcgi_pass app-php:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
}
abc.conf: walking.com
創建configmap,
kubectl apply -f configmap-nginx.yaml -n [namesapce]
kubectl apply -f 也可以更新操作。
-n [namesapce] 指定命名空間,沒有就會是默認default命名空間。
- 從文件或者目錄加載進去
kubectl create configmap game-config --from-file=configure-pod-container/configmap/ -n [namesapce]
更新會麻煩點,使用管道,先獲取內容,在使用kubectl replace -f
實現更新。
kubectl create configmap nginx-config --from-file configure-pod-container/configmap/ -o yaml --dry-run -n [namesapce] | kubectl replace -f -
- 從文字生成ConfigMap
為了從字面一個ConfigMap special.type=charm並且special.how=very,你可以指定ConfigMap發電機kustomization.yaml作為
# Create a kustomization.yaml file with ConfigMapGenerator
cat <<EOF >./kustomization.yaml
configMapGenerator:
- name: special-config-2
literals:
- special.how=very
- special.type=charm
EOF
應用Kustomization目錄創建ConfigMap對象。
kubectl apply -k .
configmap/special-config-2-c92b5mmcf2 created
關於configmap的更新着實躺了個坑,當時也沒查到相關資料,就自己動手用shell實現了套。
#!/bin/bash
path=./config
cd $path
# kubectl 更新
kubectlUpdate() {
`rm -rf ../configmap.yaml`
if [ -f "$1" ];then
str=$str" "$1:" |-\n"$(awk '{print " "$0}' $1)"\n"
else
callback=$(ls $1)
str="data:\n"
for filename in $callback
do
if [ -d "$1/$filename" ];then
continue
else
# 獲取所有配置
str=$str" "$filename:" |-\n"$(awk '{print " "$0}' $1/$filename)"\n"
fi
done
fi
# configmap內容寫入臨時文件configmap.yaml
content="---
apiVersion: v1
kind: ConfigMap
metadata:
name: $2
namespace: namespace"
`echo -e "${content}" >> ../configmap.yaml && echo -e "${str}" >> ../configmap.yaml`
# 更新configmap
echo `kubectl apply -f ../configmap.yaml -n bigdata`
return
}
# params create
res_params=`kubectl create configmap params-configmap --from-file=config/ -n [namespace]`
if [ -z "$res_params" ];then
kubectlUpdate config/ params-configmap
else
echo $res_params
fi
還是躺了個坑。
查看configmap
# -0 yaml 代表輸出以yaml形式
kubectl get configmaps special-config -o yaml