kubernetes基础知识之configmap

360影视 动漫周边 2025-03-21 08:45 4

摘要:定义env是给pod内部添加环境变量的方式。第一个环境变量的名字是大写的用户名USERNAME,值来源于一个configmap中的key,当前的configmap是literal-config。这个literal-config是已经创建出来的configmap

name: literal-config

namespace: default

data:

name: dave

password: pass

---

apiVersion: v1

kind: ConfigMap

metadata:

name: env-config

namespace: default

data:

log_everl: INFO

---

apiVersion: v1

kind: Pod

spec:

containers:

- name: test-container

image: nginx

imagePullPolicy: Always

command: [ "/bin/sh", "-c", "env"]

env:

- name: USERNAME

valueFrom:

configMapKeyRef:

name: literal-config

key: name

- name: PASSWORD

valueFrom:

configMapKeyRef:

name: literal-config

key: password

envForm:

- configMapRef:

name: env-config

restartPolicy: Never

Pod会调用configmap。

command中的命令在pod启动后会直接打印pod内部容器的env环境变量。

定义env是给pod内部添加环境变量的方式。第一个环境变量的名字是大写的用户名USERNAME,值来源于一个configmap中的key,当前的configmap是literal-config。这个literal-config是已经创建出来的configmap,指定key的名称是name。创建interal-config这个configmap的时候,有两个数据段:name: dave和password: pass,得告知我们要把这个数据段中哪个字段名的值赋值给当前的环境变量USERNAME。就是说把name字段的值赋值给环境变量USERNAME。同理,把pass这个值赋值给环境变量PASSWORD。

这是一种环境变量的添加方式,好处是显而易见,就是把值取出来赋值给指定的环境变量名。

第二种环境变量的添加方式是:envFrom。这种方案是直接把当前的configmap引入进来,它的key和value都会被注入到当前系统内部,那就不能替换了,当然也更简单了。

这两种环境变量的添加方式可以按照需要区选择。

最后又加了一个重启策略为永不重启。因为把命令替换成了打印env环境变量,打印完成环境变量env之后,它的前台就不存在了,然后pod就会终止运行。所以要加上一个重启策略,让它不再重启,因为结果已经拿到了,需要注意的是:重启策略restartPolicy和containers处于同一层级。

不同的资源清单是通过三个横杠连接在一起的,需要把多个资源对象放在同一个文件中,多个资源对象之间通过三个横杠去隔开,这个是固定格式。

使用资源清单文件创建资源对象:

kubectl create -f configmap.yaml

查看pod详细信息:

kubectl get pod --all-namespaces

会发现pod已经是Completed完成状态了。

通过kunectl logs查看pod的日志:

kubectl logs $pod_name -n $namespace_name

这样可以查看到env的环境变量。

可以把configmap的数据注入到pod容器内部,变成环境变量去调用。

将当前的configmap可以变成pod的启动命令,方法是:

创建资源清单文件:

apiVersion: v1

kind: ConfigMap

metadata:

name: literal-config

namespace: default

data:

name: dave

password: pass

---

apiVersion: v1

kind: Pod

metadata:

name: cm-command-pod

namespace: default

spec:

containers:

- name: myapp-container

image: nginx

imagePullPolicy: Always

command: [ "/bin/sh", "-c", "echo $(USERNAME) $(PASSWORD)" ]

env:

- name: USERNAME

valueFrom:

configMapKeyRef:

name: literal-config

key: name

- name: PASSWORD

valueFrom:

configMapKeyRef:

name: literal-config

key: password

restartPolicy: Never

configmap可以当启动参数,启动一些服务的时候,完全可以把变量调用过来,当做这个启动命令的一部分。把configmap放到pod容器中,变成环境变量。这个环境变量,USERNAME和PASSWORD是直接在启动命令中被调用。

Configmap当成启动参数,需要抓取环境变量做一些预设的操作。把configmap当做启动命令的一部分,可以显示环境变量并且调用起来。

configmap中定义的变量可以当成启动参数,成为启动服务的一部分,可以把configmap注入到pod中。

set paste可以设置vim的粘贴模式。

根据资源清单文件创建资源对象:

kubectl create -f configmap.yaml

查看pod容器的运行日志:

kubectl logs $pod_name -n $namespace_name

可以把configmap变成启动命令参数的方式进行调用。

可以把configmap创建的时候指定一个文件,使用kubectl create configmap $configmap_name --from-file 指定,然后文件名转换成key,文件内容转换成value去执行,这就是转换方式。

把configmap还原成文件的时候,相当于做了一个反向操作。这时候key会变成文件名,value会变成文件内容,保存在当前的文件实现里。

定义configmap的资源清单文件:

apiVersion: v1

kind: ConfigMap

metadata:

name: literal-config

namespace: default

data:

name: dave

password: pass

---

apiVersion: v1

kind: Pod

metadata:

name: cm-volume-pod

namespace: default

spec:

containers:

- name: myapp-container

image: nginx

imagePullPolicy: Always

volumeMounts:

- name: config-volume

mountPath: /etc/config

volumes:

configMap:

name: literal-config

restartPolicy: Never

volumeMounts是卷绑定,卷类似docker里面的卷,是脱离容器生命周期以外的存储方式。

卷绑定就是把卷挂载到指定的目录。

挂载卷config-volume到当前容器的/etc/config目录下。

卷config-volume的定义方式是与containers平级的volumes中定义的卷。

卷名是config-volume,基于literal-config这个configmap创建的。

把configmap literal-config转换成卷,又在容器里面把这个卷挂载到/etc/config的目录里面。

当前的重启策略是永不。

桃花开了

鼓励的话语:只要还怀有一颗永不放弃的希望之心,黑夜总会迎来黎明。坎坷总会有平路。一群人中最低调的那一个,往往是实力最强的!

来源:绍辉教育

相关推荐