目录
服务器版本
docker软件版本
Kubernetes(k8s)集群版本
CPU架构
CentOS Linux release 7.4.1708 (Core)
Docker version 20.10.12
v1.21.9
x86_64
Kubernetes集群架构:k8scloude1作为master节点,k8scloude2,k8scloude3作为worker节点
服务器
操作系统版本
CPU架构
进程
功能描述
k8scloude1/192.168.110.130
CentOS Linux release 7.4.1708 (Core)
x86_64
docker,kube-apiserver,etcd,kube-scheduler,kube-controller-manager,kubelet,kube-proxy,coredns,calico
k8s master节点
k8scloude2/192.168.110.129
CentOS Linux release 7.4.1708 (Core)
x86_64
docker,kubelet,kube-proxy,calico
k8s worker节点
k8scloude3/192.168.110.128
CentOS Linux release 7.4.1708 (Core)
x86_64
docker,kubelet,kube-proxy,calico
k8s 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 中保存的数据不可超过 1 MiB。如果你需要保存超出此尺寸限制的数据,你可能希望考虑挂载存储卷 或者使用独立的数据库或者文件服务。
查询configmap
[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=plm
configmap/cm1 created
[root@k8scloude1 secret-manage]# kubectl get cm
NAME DATA AGE
cm1 2 4s
kube-root-ca.crt 1 5h31m
查看configmap的详细内容
[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 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/hosts
configmap/cm2 created
[root@k8scloude1 secret-manage]# kubectl create cm cm3 --from-file=nginx.conf
configmap/cm3 created
[root@k8scloude1 secret-manage]# kubectl get cm
NAME DATA AGE
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: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: mysql
name: mysql
spec:
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: Always
status: {}
创建pod
[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.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:
删除pod
[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: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: nginx
name: nginx
spec:
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: Always
status: {}
创建pod
[root@k8scloude1 secret-manage]# kubectl apply -f volumenginxconfconfigmap.yaml
pod/nginx created
[root@k8scloude1 secret-manage]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx 1/1 Running 0 9s 10.244.112.141 k8scloude2 <none> <none>
进入Nginx容器
[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 cm3
configmap/cm3 edited
查看修改过后的configmap内容
[root@k8scloude1 secret-manage]# kubectl get cm cm3 -o yaml | head -7
apiVersion: v1
data:
nginx.conf: |+
##modify file
##new add
user nginx;
worker_processes auto;
进入容器查看Nginx的配置文件,可以发现:cm3里文件内容已经改变了,但是容器里文件内容没变。
pod里的配置文件nginx.conf没有变化,需要重新创建pod
[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
删除pod并重新创建pod
[root@k8scloude1 secret-manage]# kubectl delete pod nginx --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 "nginx" force deleted
[root@k8scloude1 secret-manage]# kubectl apply -f volumenginxconfconfigmap.yaml
pod/nginx created
此时nginx.conf文件内容已经改变了,就达到了修改configmap文件,从而改变容器里配置文件的目的。
[root@k8scloude1 secret-manage]# kubectl exec -it nginx -- bash
root@nginx:/# cat /etc/nginx/nginx.conf | head -3
##modify file
##new add
user nginx;
root@nginx:/# exit
exit
查看所有的configmap
[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-system
Edit cancelled, no changes made.
[root@k8scloude1 secret-manage]# kubectl edit cm kube-proxy -n kube-system
Edit cancelled, no changes made.
手机扫一扫
移动阅读更方便
你可能感兴趣的文章