Kubernetes集群架构:k8scloude1作为master节点,k8scloude2,k8scloude3作为worker节点
使用ConfigMap的前提是已经有一套可以正常运行的Kubernetes集群,关于Kubernetes(k8s)集群的安装部署,可以查看博客《Centos7 安装部署Kubernetes(k8s)集群》https://www.cnblogs.com/renshengdezheli/p/16686769.html。
ConfigMap 是一种 API 对象,用来将非机密性的数据保存到键值对中。使用时, Pods 可以将其用作环境变量、命令行参数或者存储卷中的配置文件。
ConfigMap 是一个 API 对象, 让你可以存储其他对象所需要使用的配置。 和其他 Kubernetes 对象都有一个 spec 不同的是,ConfigMap 使用 data 和 binaryData 字段。这些字段能够接收键-值对作为其取值。data 和 binaryData 字段都是可选的。data 字段设计用来保存 UTF-8 字符串,而 binaryData 则被设计用来保存二进制数据作为 base64 编码的字串。
ConfigMap 的名字必须是一个合法的 DNS 子域名。
data 或 binaryData 字段下面的每个键的名称都必须由字母数字字符或者 -、_ 或 . 组成。在 data 下保存的键名不可以与在 binaryData 下出现的键名有重叠。
从 v1.19 开始,你可以添加一个 immutable 字段到 ConfigMap 定义中, 创建不可变更的 ConfigMap。
ConfigMap 将你的环境配置信息和 容器镜像 解耦,便于应用配置的修改。
注意:ConfigMap 并不提供保密或者加密功能。 如果你想存储的数据是机密的,请使用 Secret,关于secret的使用请查看博客《Kubernetes(k8s)密码管理:Secret》, 或者使用其他第三方工具来保证你的数据的私密性,而不是用 ConfigMap。
ConfigMap 并不提供保密或者加密功能
ConfigMap的用途如下:使用 ConfigMap 来将你的配置数据和应用程序代码分开。
这让你可以获取在云中运行的容器镜像,并且如果有需要的话,在本地调试完全相同的代码。
ConfigMap 在设计上不是用来保存大量数据的。在 ConfigMap 中保存的数据不可超过 1 MiB。如果你需要保存超出此尺寸限制的数据,你可能希望考虑挂载存储卷 或者使用独立的数据库或者文件服务。
查询configmap
[root@k8scloude1 secret-manage]# kubectl get cmNAME DATA AGEkube-root-ca.crt 1 5h29m
[root@k8scloude1 secret-manage]# kubectl get cm
NAME DATA AGE
kube-root-ca.crt 1 5h29m
configmap的创建方式和secret类似,可以使用键值对,也可以使用文件
使用键值对创建configmap
[root@k8scloude1 secret-manage]# kubectl create cm cm1 --from-literal=xioaming=zxc --from-literal=bob=plmconfigmap/cm1 created[root@k8scloude1 secret-manage]# kubectl get cmNAME DATA AGEcm1 2 4skube-root-ca.crt 1 5h31m
[root@k8scloude1 secret-manage]# kubectl create cm cm1 --from-literal=xioaming=zxc --from-literal=bob=plm
configmap/cm1 created
cm1 2 4s
kube-root-ca.crt 1 5h31m
查看configmap的详细内容
[root@k8scloude1 secret-manage]# kubectl describe cm cm1 Name: cm1Namespace: secret-manageLabels: <none>Annotations: <none>Data====bob:----plmxioaming:----zxcEvents: <none>
[root@k8scloude1 secret-manage]# kubectl describe cm cm1
Name: cm1
Namespace: secret-manage
Labels: <none>
Annotations: <none>
Data
====
bob:
----
plm
xioaming:
zxc
Events: <none>
以yaml格式查看configmap
[root@k8scloude1 secret-manage]# kubectl get cm cm1 -o yamlapiVersion: v1data: bob: plm xioaming: zxckind: ConfigMapmetadata: creationTimestamp: "2022-01-21T09:25:32Z" name: cm1 namespace: secret-manage resourceVersion: "890529" selfLink: /api/v1/namespaces/secret-manage/configmaps/cm1 uid: bdbb0647-dfe9-45ec-827d-9af2ea12a0a1
[root@k8scloude1 secret-manage]# kubectl get cm cm1 -o yaml
apiVersion: v1
data:
bob: plm
xioaming: zxc
kind: ConfigMap
metadata:
creationTimestamp: "2022-01-21T09:25:32Z"
name: cm1
namespace: secret-manage
resourceVersion: "890529"
selfLink: /api/v1/namespaces/secret-manage/configmaps/cm1
uid: bdbb0647-dfe9-45ec-827d-9af2ea12a0a1
使用文件创建configmap
[root@k8scloude1 secret-manage]# kubectl create cm cm2 --from-file=/etc/shadow --from-file=/etc/hostsconfigmap/cm2 created[root@k8scloude1 secret-manage]# kubectl create cm cm3 --from-file=nginx.conf configmap/cm3 created[root@k8scloude1 secret-manage]# kubectl get cmNAME DATA AGEcm1 2 4m18scm2 2 22scm3 1 4skube-root-ca.crt 1 5h35m
[root@k8scloude1 secret-manage]# kubectl create cm cm2 --from-file=/etc/shadow --from-file=/etc/hosts
configmap/cm2 created
[root@k8scloude1 secret-manage]# kubectl create cm cm3 --from-file=nginx.conf
configmap/cm3 created
cm1 2 4m18s
cm2 2 22s
cm3 1 4s
kube-root-ca.crt 1 5h35m
使用MySQL镜像创建pod,以环境变量的方式引用ConfigMap
[root@k8scloude1 secret-manage]# vim mysqlconfgmap.yaml #configMapKeyRef:指定confgmap的名字和key[root@k8scloude1 secret-manage]# cat mysqlconfgmap.yaml apiVersion: v1kind: Podmetadata: creationTimestamp: null labels: run: mysql name: mysqlspec: terminationGracePeriodSeconds: 0 containers: - image: hub.c.163.com/library/mysql:latest imagePullPolicy: IfNotPresent name: mysql resources: {} env: - name: MYSQL_ROOT_PASSWORD valueFrom: configMapKeyRef: name: cm1 key: xioaming dnsPolicy: ClusterFirst restartPolicy: Alwaysstatus: {}
[root@k8scloude1 secret-manage]# vim mysqlconfgmap.yaml
#configMapKeyRef:指定confgmap的名字和key
[root@k8scloude1 secret-manage]# cat mysqlconfgmap.yaml
kind: Pod
creationTimestamp: null
labels:
run: mysql
name: mysql
spec:
terminationGracePeriodSeconds: 0
containers:
- image: hub.c.163.com/library/mysql:latest
imagePullPolicy: IfNotPresent
resources: {}
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
configMapKeyRef:
key: xioaming
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
创建pod
[root@k8scloude1 secret-manage]# kubectl apply -f mysqlconfgmap.yaml pod/mysql created[root@k8scloude1 secret-manage]# kubectl get pod -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESmysql 1/1 Running 0 24s 10.244.112.139 k8scloude2 <none> <none>
[root@k8scloude1 secret-manage]# kubectl apply -f mysqlconfgmap.yaml
pod/mysql created
[root@k8scloude1 secret-manage]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mysql 1/1 Running 0 24s 10.244.112.139 k8scloude2 <none> <none>
连接mysql数据库
[root@k8scloude1 secret-manage]# mysql -uroot -pzxc -h 10.244.112.139Welcome to the MariaDB monitor. Commands end with ; or \g.Your MySQL connection id is 3Server version: 5.7.18 MySQL Community Server (GPL)Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MySQL [(none)]> exitBye
[root@k8scloude1 secret-manage]# mysql -uroot -pzxc -h 10.244.112.139
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.18 MySQL Community Server (GPL)
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]> exit
Bye
查看mysql pod的mysql密码MYSQL_ROOT_PASSWORD,mysql密码没有显示
[root@k8scloude1 secret-manage]# kubectl describe pod mysql | grep -A10 Environment Environment: MYSQL_ROOT_PASSWORD: <set to the key 'xioaming' of config map 'cm1'> Optional: false Mounts: /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-dllmm (ro)Conditions: Type Status Initialized True Ready True ContainersReady True PodScheduled True Volumes:
[root@k8scloude1 secret-manage]# kubectl describe pod mysql | grep -A10 Environment
Environment:
MYSQL_ROOT_PASSWORD: <set to the key 'xioaming' of config map 'cm1'> Optional: false
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-dllmm (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
删除pod
[root@k8scloude1 secret-manage]# kubectl delete pod mysql --forcewarning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely.pod "mysql" force deleted
[root@k8scloude1 secret-manage]# kubectl delete pod mysql --force
warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely.
pod "mysql" force deleted
配置pod,以卷的方式引用configmap,挂载cm3的nginx.conf到/etc/nginx/nginx.conf
[root@k8scloude1 secret-manage]# vim volumenginxconfconfigmap.yaml [root@k8scloude1 secret-manage]# cat volumenginxconfconfigmap.yaml apiVersion: v1kind: Podmetadata: creationTimestamp: null labels: run: nginx name: nginxspec: terminationGracePeriodSeconds: 0 #定义configmap类型的卷 volumes: - name: configmap1 configMap: name: cm3 containers: - image: nginx imagePullPolicy: IfNotPresent name: nginx resources: {} #把nginx.conf文件挂载到/etc/nginx/nginx.conf volumeMounts: - name: configmap1 mountPath: /etc/nginx/nginx.conf subPath: nginx.conf dnsPolicy: ClusterFirst restartPolicy: Alwaysstatus: {}
[root@k8scloude1 secret-manage]# vim volumenginxconfconfigmap.yaml
[root@k8scloude1 secret-manage]# cat volumenginxconfconfigmap.yaml
run: nginx
name: nginx
#定义configmap类型的卷
volumes:
- name: configmap1
configMap:
name: cm3
- image: nginx
#把nginx.conf文件挂载到/etc/nginx/nginx.conf
volumeMounts:
mountPath: /etc/nginx/nginx.conf
subPath: nginx.conf
[root@k8scloude1 secret-manage]# kubectl apply -f volumenginxconfconfigmap.yaml pod/nginx created[root@k8scloude1 secret-manage]# kubectl get pod -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESnginx 1/1 Running 0 9s 10.244.112.141 k8scloude2 <none> <none>
[root@k8scloude1 secret-manage]# kubectl apply -f volumenginxconfconfigmap.yaml
pod/nginx created
nginx 1/1 Running 0 9s 10.244.112.141 k8scloude2 <none> <none>
进入Nginx容器
[root@k8scloude1 secret-manage]# kubectl exec -it nginx -- bashroot@nginx:/# cat /etc/nginx/nginx.conf | head -3##modify fileuser nginx;worker_processes auto;root@nginx:/# exitexit
[root@k8scloude1 secret-manage]# kubectl exec -it nginx -- bash
root@nginx:/# cat /etc/nginx/nginx.conf | head -3
##modify file
user nginx;
worker_processes auto;
root@nginx:/# exit
exit
可以使用edit编辑nginx.conf文件
[root@k8scloude1 secret-manage]# kubectl edit cm cm3configmap/cm3 edited
[root@k8scloude1 secret-manage]# kubectl edit cm cm3
configmap/cm3 edited
查看修改过后的configmap内容
[root@k8scloude1 secret-manage]# kubectl get cm cm3 -o yaml | head -7apiVersion: v1data: nginx.conf: |+ ##modify file ##new add user nginx; worker_processes auto;
[root@k8scloude1 secret-manage]# kubectl get cm cm3 -o yaml | head -7
nginx.conf: |+
##new add
进入容器查看Nginx的配置文件,可以发现:cm3里文件内容已经改变了,但是容器里文件内容没变。
pod里的配置文件nginx.conf没有变化,需要重新创建pod
删除pod并重新创建pod
[root@k8scloude1 secret-manage]# kubectl delete pod nginx --forcewarning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely.pod "nginx" force deleted[root@k8scloude1 secret-manage]# kubectl apply -f volumenginxconfconfigmap.yaml pod/nginx created
[root@k8scloude1 secret-manage]# kubectl delete pod nginx --force
pod "nginx" force deleted
此时nginx.conf文件内容已经改变了,就达到了修改configmap文件,从而改变容器里配置文件的目的。
[root@k8scloude1 secret-manage]# kubectl exec -it nginx -- bashroot@nginx:/# cat /etc/nginx/nginx.conf | head -3##modify file##new adduser nginx;root@nginx:/# exitexit
查看所有的configmap
[root@k8scloude1 secret-manage]# kubectl get cm -ANAMESPACE NAME DATA AGEdefault kube-root-ca.crt 1 12dkube-node-lease kube-root-ca.crt 1 12dkube-public cluster-info 1 12dkube-public kube-root-ca.crt 1 12dkube-system calico-config 4 12dkube-system coredns 1 12dkube-system extension-apiserver-authentication 6 12dkube-system kube-proxy 2 12dkube-system kube-root-ca.crt 1 12dkube-system kubeadm-config 2 12dkube-system kubelet-config-1.21 1 12dns1 kube-root-ca.crt 1 11dns2 kube-root-ca.crt 1 11dpod kube-root-ca.crt 1 9dsecret-manage cm1 2 33msecret-manage cm2 2 29msecret-manage cm3 1 12msecret-manage kube-root-ca.crt 1 6h5mvolume kube-root-ca.crt 1 3d5h
[root@k8scloude1 secret-manage]# kubectl get cm -A
NAMESPACE NAME DATA AGE
default kube-root-ca.crt 1 12d
kube-node-lease kube-root-ca.crt 1 12d
kube-public cluster-info 1 12d
kube-public kube-root-ca.crt 1 12d
kube-system calico-config 4 12d
kube-system coredns 1 12d
kube-system extension-apiserver-authentication 6 12d
kube-system kube-proxy 2 12d
kube-system kube-root-ca.crt 1 12d
kube-system kubeadm-config 2 12d
kube-system kubelet-config-1.21 1 12d
ns1 kube-root-ca.crt 1 11d
ns2 kube-root-ca.crt 1 11d
pod kube-root-ca.crt 1 9d
secret-manage cm1 2 33m
secret-manage cm2 2 29m
secret-manage cm3 1 12m
secret-manage kube-root-ca.crt 1 6h5m
volume kube-root-ca.crt 1 3d5h
可以编辑其他的configmap内容
[root@k8scloude1 secret-manage]# kubectl edit cm calico-config -n kube-systemEdit cancelled, no changes made.[root@k8scloude1 secret-manage]# kubectl edit cm kube-proxy -n kube-systemEdit cancelled, no changes made.
[root@k8scloude1 secret-manage]# kubectl edit cm calico-config -n kube-system
Edit cancelled, no changes made.
[root@k8scloude1 secret-manage]# kubectl edit cm kube-proxy -n kube-system
原文链接:https://www.cnblogs.com/renshengdezheli/p/17084642.html
本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728