k8s---配置管理
文章目录配置管理原理:Secret方式一:基于文件形式方式二:基于参数创建secretConfigMap方式一:基于kubectl形式方式二:基于变量参数形式配置管理原理:●当需要修改很多配置文件时,创建一个配置资源,将配置资源挂载到各个pod当中,给pod所使用,这样就只要修改配置资源就可以了Secret●Secret(机密):加密数据并存放在Etcd中,让Pod的容器以挂载Volume方式访问
·
配置管理原理:
●当需要修改很多配置文件时,创建一个配置资源,将配置资源挂载到各个pod当中,给pod所使用,这样就只要修改配置资源就可以了
Secret
●Secret(机密):
- 加密数据并存放在Etcd中,让Pod的容器以挂载Volume方式访问
●应用场景:
- 凭据
https://kubernetes.io/docs/concepts/configuration/secret/
方式一:基于文件形式
1.创建用户名和密码文件
[root@master ~]# echo -n 'admin' > username.txt ##创建username文件存放用户名admin;-n:不转行输出
[root@master ~]# echo -n '123456' > password.txt ##创建password文件存放密码123456
2.查看资源
[root@master ~]# kubectl create secret generic db-user-pass --from-file=username.txt --from-file=password.txt ##创以数据库形式的资源,以文件形式导入凭据存放
secret/db-user-pass created
[root@master ~]# kubectl get secret ##查看secret资源
[root@master ~]# kubectl describe secret db-user-pass ##查看资源详细信息
方式二:基于参数创建secret
1.创建变量参数
[root@master ~]# echo -n 'admin' | base64 ##基于用户名生成64位编码
YWRtaW4= ##生成的编码
[root@master ~]# echo -n '123456' | base64 ##基于密码生成64位编码
MTIzNDU2 ##生成的编码
2.创建yaml文件
[root@master ~]# cd demo/
[root@master demo]# vim secret.yaml
apiVersion: v1
kind: Secret ##资源格式
metadata:
name: mysecret ##资源名称
type: Opaque ##opa凭证类型
data:
username: YWRtaW4= ##复制生成的用户名编码
password: MTIzNDU2 ##复制生成的密码编码
3.创建secret资源并查看信息
[root@master demo]# kubectl create -f secret.yaml ##创建了配置资源
secret/mysecret created
[root@master demo]# kubectl get secret
用法:
1.使用secret中的变量导入到pod中
[root@master demo]# vim secret-var.yaml
apiVersion: v1
kind: Pod ##类型为pod
metadata:
name: mypod
spec:
containers:
- name: nginx ##名字为nginx
image: nginx ##镜像为nginx
env: ##环境代理
- name: SECRET_USERNAME ##username赋值给SECRET_USERNAME
valueFrom: ##值来自于谁
secretKeyRef:
name: mysecret ##值来自于mysecret资源
key: username ##资源的值:username
- name: SECRET_PASSWORD ##password 赋值给SECRET_PASSWORD
valueFrom:
secretKeyRef:
name: mysecret
key: password
[root@master demo]# kubectl apply -f secret-var.yaml ##创建资源
pod/mypod created
[root@master demo]# kubectl get pods ##查看pod资源
NAME READY STATUS RESTARTS AGE
mypod 1/1 Running 0 29s
[root@master demo]# kubectl exec -it mypod bash ##进入资源
root@mypod:/# echo $SECRET_USERNAME ##输出username变量
admin
root@mypod:/# echo $SECRET_PASSWORD ##输出PASSWORD变量
123456
2.以volume的形式挂载到pod的某个目录下
[root@master demo]# vim secret-vol.yaml ##编写secret-vol文件
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: nginx
image: nginx
volumeMounts: ##容器卷挂载
- name: foo ##指明挂载卷的名称
mountPath: "/etc/foo" ##挂载的路径在容器中的/etc/foo
readOnly: true ##设置权限为只读模式
volumes: ##被挂载的外部资源
- name: foo ##创建挂载卷名称
secret:
secretName: mysecret ## secret资源
[root@master demo]# kubectl delete -f secret-var.yaml ##删除之前的secret资源
pod "mypod" deleted
[root@master demo]# kubectl create -f secret-vol.yaml ##创建资源
pod/mypod created
[root@master demo]# kubectl get pods ##查看资源
NAME READY STATUS RESTARTS AGE
mypod 1/1 Running 0 50s ##创建成功
[root@master ~]# kubectl exec -it mypod bash ##进入mypod资源
root@mypod:/# ls /etc/foo
password username ##挂载成功
root@mypod:/# cat /etc/foo/password
123456 ##看到password对应的值
root@mypod:/etc/foo# cat username
admin ##看到username对应的值
ConfigMap
●ConfigMap
- 与Secret类似,区别在于ConfigMap保存的是不需要加密配置的信息
●应用场景
- 应用配置
方式一:基于kubectl形式
[root@master demo]# vim redis.properties ##创建redis的配置文件中需要的参数文件
redis.host=127.0.0.1 ##主机地址
redis.port=6379 ##端口
redis.password=123456 ##密钥
[root@master demo]# kubectl create configmap redis-config --from-file=redis.properties ##创建configmap资源,名称为redis-config文件来自于redis.properties文件
configmap/redis-config created
[root@master demo]# kubectl get configmap ##查看资源
NAME DATA AGE
redis-config 1 69s
[root@master demo]# kubectl get cm ##缩写查看资源
NAME DATA AGE
redis-config 1 95s
[root@master demo]# kubectl describe cm redis-config ##查看参数信息
创建mypod资源查看文件导入
[root@master demo]# kubectl delete pod/mypod ##先将原先创建的mypod资源删除
pod "mypod" deleted
[root@master demo]# vim cm.yaml
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: busybox
image: busybox ##镜像为linux最小内核
command: [ "/bin/sh","-c","cat /etc/config/redis.properties" ] ##执行在pod中查看 /etc/config/redis.properties文件中的数据信息
volumeMounts:
- name: config-volume ##使用指定资源的标签
mountPath: /etc/config ##挂载点
volumes:
- name: config-volume ##指定资源标签
configMap:
name: redis-config ##指定的资源名称
restartPolicy: Never
[root@master demo]# kubectl apply -f cm.yaml ##创建资源
pod/mypod created
[root@master demo]# kubectl get pods ##查看pod资源
NAME READY STATUS RESTARTS AGE
mypod 0/1 Completed 0 25s ##执行完任务状态就为Completed
[root@master demo]# kubectl logs mypod ##查看mypod的日志信息
redis.host=127.0.0.1
redis.port=6379
redis.password=123456
方式二:基于变量参数形式
[root@master demo]# vim myconfig.yaml ##创建变量资源
apiVersion: v1
kind: ConfigMap
metadata:
name: myconfig
namespace: default
data:
special.level: info ##定义两个键值
special.type: hello
[root@master demo]# kubectl create -f myconfig.yaml ##创建资源
configmap/myconfig created
创建mypod使用configmap资源输出变量参数
[root@master demo]# vim config-var.yaml
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: busybox
image: busybox
command: [ "/bin/sh", "-c", "echo $(LEVEL) $(TYPE)" ] ##输出LEVEL和TYPE两个变量
env: ##定义环境变量
- name: LEVEL ##定义LEVEL变量
valueFrom: ##值来自于
configMapKeyRef: ##来自于configMap类型资源
name: myconfig ##创建的configMap的资源
key: special.level ##key来自于configMap中的special.level
- name: TYPE ##定义TYPE变量
valueFrom:
configMapKeyRef:
name: myconfig
key: special.type
restartPolicy: Never
[root@master demo]# kubectl delete pod mypod ##删除重复的名称的资源
pod "mypod" deleted
[root@master demo]# kubectl apply -f config-var.yaml ##创建mypod资源
pod/mypod created
[root@master demo]# kubectl logs mypod ##通过查看日志查看变量的输出
info hello
更多推荐
已为社区贡献7条内容
所有评论(0)