Kubernetes—配置管理ConfigMap
2021-04-07 02:28
标签:ffffff 资源 k8s 字符 区别 flink gre man deploy ??在部署应用程序时,我们都会涉及到应用的配置,在容器中,如Docker容器中,如果将配置文件打入容器镜像,这种行为等同于写死配置,每次修改完配置,镜像就得重新构建。当然,我们也可以通过挂载包含该文件的卷进行配置管理和修改。而在k8s中,我们要讲一种更好的方式,即ConfigMap,这种资源对象的出现,更是极大的方便了应用程序的配置管理。 在使用命令的时候注意单词: configmap等价于cm,cm算是简写,类似于deployment可以使用命令时写成deploy,service可以写成svc,namespace可以写成ns,pod可以写成po。 1)yaml文件方式创建 命令: 2)命令行方式创建 1)查看configmap列表 2)查看configmap详情 3)查看yaml输出 1)edit 1)通过yaml文件的方式删除 2)直接删除资源 容器应用对ConfigMap的使用主要是两种: 以下内容均以上述的ConfigMap资源cm-test01为例 1)创建pod 执行创建pod: 2)查看pod 3)查看pod日志 说明容器内部的环境变量使用ConfigMap中进行读取的。 1)创建pod 执行创建pod: 2)查看pod 注意: 进入容器中查看 关于 Kubernetes—配置管理ConfigMap 标签:ffffff 资源 k8s 字符 区别 flink gre man deploy 原文地址:https://www.cnblogs.com/Andya/p/12490000.html1 ConfigMap介绍
1.1 概述
??ConfigMap是一个或多个key/value的形式保存在k8s中,内部可以管理变量也可以管理完整的配置文件内容。1.2 用法
spec.env
或者spec.envFrom
进行引用。spec.volumes
引用。2 ConfigMap用法
2.1 创建
样例:apiVersion: v1
kind: ConfigMap
metadata:
name: cm-test01
data:
appconf01: value01
appconf02: value02
$ kubectl create -f configmap-test01.yaml
--from-file
参数从文件中读取。可以指定key的名称,若不指定,则默认使用文件名为key。
如当前目录有一个配置文件为test.propertieskey01:value01
key02:value02
conf01: value03
$ kubectl create cm cm-test-file --from-file=test.properties
--from-literal
指定keyxx=valuexx创建confimap中的data内配置属性。$ kubectl create configmap cm-test-literal --from-literal=key01=value01 --from-literal=key02=value02
2.2 查询
$ kubectl get cm
[root@k8s /cm/test]# kubectl get cm
NAME DATA AGE
cm-test-file 1 1m
cm-test-literal 2 2s
cm-test01 2 1h
$ kubectl describe cm cm-test01
[root@k8s /cm/test]# kubectl describe cm cm-test01
Name: cm-test01
Namespace: system-pro
Labels:
$ kubectl describe configmap cm-test-file
[root@k8s /cm/test]# kubectl describe configmap cm-test-file
Name: cm-test-file
Namespace: system-pro
Labels:
$ kubectl describe cm cm-test-literal
[root@k8s /cm/test]# kubectl describe cm cm-test-literal
Name: cm-test-literal
Namespace: system-pro
Labels:
$ kubectl get cm cm-test01 -o yaml
[root@k8s /cm/test]# kubectl get cm cm-test01 -o yaml
apiVersion: v1
data:
appconf01: value01
appconf02: value02
kind: ConfigMap
metadata:
creationTimestamp: 2020-03-13T13:06:21Z
name: cm-test01
namespace: system-pro
resourceVersion: "594861"
selfLink: /api/v1/namespaces/system-pro/configmaps/cm-test01
uid: 6f5e7efb-652b-11ea-adf9-fa163e4464a5
$ kubectl get configmap cm-test-file -o yaml
[root@k8s /cm/test]# kubectl get configmap cm-test-file -o yaml
apiVersion: v1
data:
test.properties: |
key01:value01
key02:value02
conf01: value03
kind: ConfigMap
metadata:
creationTimestamp: 2020-03-13T14:29:30Z
name: cm-test-file
namespace: system-pro
resourceVersion: "598548"
selfLink: /api/v1/namespaces/system-pro/configmaps/cm-test-file
uid: 0d226ad2-6537-11ea-adf9-fa163e4464a5
$ kubectl get cm cm-test-literal -o yaml
[root@k8s /cm/test]# kubectl get cm cm-test-literal -o yaml
apiVersion: v1
data:
key01: value01
key02: value02
kind: ConfigMap
metadata:
creationTimestamp: 2020-03-13T14:30:57Z
name: cm-test-literal
namespace: system-pro
resourceVersion: "598613"
selfLink: /api/v1/namespaces/system-pro/configmaps/cm-test-literal
uid: 412affd4-6537-11ea-adf9-fa163e4464a5
2.3 更新
$ kubectl edit cm cm-test01
通过kubectl describe cm cm-test01
查看更新是否生效
2)apply
直接更改yaml文件里面的值,通过kubectl apply -f configmap-test01.yaml
重新发布一遍进行更新。2.4 删除
$ kubectl delete -f configmap-test01.yaml
$ kubectl delete cm cm-test01
3 ConfigMap和Pod的使用
1)通过环境变量获取ConfigMap的内容:spec.env
和spec.envFrom
2)通过卷volume挂载的方式将ConfigMap的内容挂载到容器内部的文件或目录:spec.volumes
3.1 环境变量方式
spec.env方式
[root@k8s /cm/test]# vim pod-test01.yaml
apiVersion: v1
kind: Pod
metadata:
name: cm-pod-test001
spec:
containers:
- name: cm-test
image: tomcat:8
command: [ "/bin/sh", "-c", "env | grep APP"]
env:
- name: APPCONF01 # 定义环境变量的名称
valueFrom: # key “appconf01”的值获取
configMapKeyRef:
name: cm-test01 # 环境变量的值来自于configmap cm-test01
key: appconf01 # configmap中的配置key为appconf01
- name: APPCONF02 # 定义环境变量的名称
valueFrom: # key “appconf02”的值获取
configMapKeyRef:
name: cm-test01 # 环境变量的值来自于configmap cm-test01
key: appconf02 # configmap中的配置key为appconf02
restartPolicy: Never # 重启策略:从不。
$ kubectl create -f pod-test01.yaml
$ kubectl get pods
[root@k8s /cm/test]# kubectl get pods
NAME READY STATUS RESTARTS AGE
cm-pod-test001 0/1 Completed 0 1h
$ kubectl logs cm-pod-test001
[root@k8s /cm/test]# kubectl logs cm-pod-test001
APPCONF01=value01
APPCONF02=value02
spec.envFrom方式
yaml文件[root@k8s /cm/test]# vim pod-test02.yaml
apiVersion: v1
kind: Pod
metadata:
name: cm-pod-test002
spec:
containers:
- name: cm-test2
image: tomcat:8
command: [ "/bin/sh", "-c", "env"]
envFrom:
- configMapRef:
name: cm-test01 # 根据ConfigMap cm-test01资源自动生成环境变量
restartPolicy: Never
$ kubectl create -f pod-test02.yaml
$ kubectl get po
[root@k8s /cm/test]# kubectl get po
NAME READY STATUS RESTARTS AGE
cm-pod-test001 0/1 Completed 0 2h
cm-pod-test002 0/1 Completed 0 1h
环境变量的名称受限制:[a-zA-Z][a-zA-Z0-9_]*
,不能以数字或非法字符开头。3.2 卷挂载方式
指定items
[root@k8s /cm/test]# vim pod-test03.yaml
apiVersion: v1
kind: Pod
metadata:
name: cm-pod-test003
spec:
containers:
- name: cm-test3
image: tomcat:8
volumeMounts:
- name: vm-01-1
mountPath: /conf
volumes:
- name: vm-01-1
configMap:
name: cm-test-file
items:
- key: key-testproperties
path: test.properties
restartPolicy: Never
不指定items
[root@k8s /cm/test]# vim pod-test04.yaml
apiVersion: v1
kind: Pod
metadata:
name: cm-pod-test004
spec:
containers:
- name: cm-test4
image: tomcat:8
volumeMounts:
- name: vm-02-2
mountPath: /conf
volumes:
- name: vm-02-2
configMap:
name: cm-test-file
restartPolicy: Never
$ kubectl exec -it cm-pod-test004 -c cm-test4 -- bash
进入容器后,ls /conf
查看是否有test.properties文件。[root@k8s /cm/test]# kubectl exec -it cm-pod-test004 -c cm-test4 -- bash
root@cm-pod-test004:/usr/local/tomcat# ls /conf
test.properties
补充
--from-file
的方式的创建指定key和不指定key的区别
1)不指定key名
创建:$ kubectl create cm cm-test-file --from-file=test.properties
输出:$ kubectl get cm cm-test-file -o yaml
2)指定key
创建:$ kubectl create cm cm-test-file02 --from-file=tp=test.properties
输出:$ kubectl get cm cm-test-file -o yaml
若指定key的名称,configmap中将会使用指定名称;若不指定,则默认使用文件名为key。
上一篇:初识Ajax&Json
下一篇:C# 获取当前屏幕的宽高和位置
文章标题:Kubernetes—配置管理ConfigMap
文章链接:http://soscw.com/index.php/essay/72231.html