摘要:定义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的目录里面。
当前的重启策略是永不。
桃花开了
鼓励的话语:只要还怀有一颗永不放弃的希望之心,黑夜总会迎来黎明。坎坷总会有平路。一群人中最低调的那一个,往往是实力最强的!
来源:绍辉教育