网站首页 > 精选教程 正文
书籍来源:《CKA/CKAD应试指南:从Docker到Kubernetes完全攻略》
一边学习一边整理老师的课程内容及实验笔记,并与大家分享,侵权即删,谢谢支持!
附上汇总贴:CKA备考实验 | 汇总_热爱编程的通信人的博客-CSDN博客
configmap(简称为cm)的作用和secret一样,其主要作用是可以存储密码或者是往pod里传递文件。configmap也是以键值对的方式存储数据,格式为:键=值。
configmap可以用多种方式来创建。secret和configmap的主要区别在于,secret里的值使用了base64进行编码,而configmap是不需要的。
查看现有configmap。
##########实操验证##########
[root@vms10 secret]# kubectl get configmaps
NAME DATA AGE
kube-root-ca.crt 1 24h
[root@vms10 secret]#
创建configmap
创建configmap的方法也很多,可以直接指定key和value,也可以把一个文件的内容作为value,还可以直接写yaml文件,下面分别用不同的方法来创建。
方法1:命令行的方式
kubectl create cm 名字 --from-literal=k1=v1 --from-literal=k2=v2 ...
这里k1的值为v1,k2的值为v2,如果而要多个变量,就写多个--from-literal。
下面创建一个名字为my1的configmap,里画有两个变量:xx和yy,它们的值分别是tom和redhat。
步骤1:创建cm。
##########实操验证##########
[root@vms10 secret]# kubectl create configmap my1 --from-literal=xx=tom --from-literal=yy=redhat
configmap/my1 created
[root@vms10 secret]#
步骤2:查看已经创建的my1。
##########实操验证##########
[root@vms10 secret]# kubectl get configmaps
NAME DATA AGE
kube-root-ca.crt 1 24h
my1 2 19s
[root@vms10 secret]# kubectl describe configmaps my1
Name: my1
Namespace: nssec
Labels: <none>
Annotations: <none>
Data
====
xx:
----
tom
yy:
----
redhat
Events: <none>
[root@vms10 secret]#
这里在Data里可以直接看到,xx的值为tom,yy的值为redhat。
方法2:创建文件的方式
也可以把一个文件创建为configmap,此文件的文件名为key,文件的内容为value,如果要把一个文件创建为configmap的话,用的命令如下。
kubectl create configmap my2 --from-file=file1
如果configmap里需要包括多个file的话,就写多个--from-file。
这种创建configmap的作用是,把一个文件的内容写入configmap里,后面通过卷的方式来引用这个configmap,就可以把此文件写入pod里了。
下面把/etc/hosts和/etc/issue这两个文件创建到my2里。
步骤1:创建configmap。
##########实操验证##########
[root@vms10 secret]# kubectl create configmap my2 --from-file=/etc/hosts --from-file=/etc/issue
configmap/my2 created
[root@vms10 secret]#
步骤2:查看现有的configmap。
##########实操验证##########
[root@vms10 secret]# kubectl get cm
NAME DATA AGE
kube-root-ca.crt 1 24h
my1 2 4m56s
my2 2 29s
[root@vms10 secret]#
步骤3:查看my2的内容。
##########实操验证##########
[root@vms10 secret]# kubectl describe cm my2
Name: my2
Namespace: nssec
Labels: <none>
Annotations: <none>
Data
====
hosts:
----
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.110 vms10.rhce.cc vms10
192.168.1.111 vms11.rhce.cc vms11
192.168.1.112 vms12.rhce.cc vms12
issue:
----
\S
Kernel \r on an \m
Events: <none>
[root@vms10 secret]#
或者:
##########实操验证##########
[root@vms10 secret]# kubectl get cm my2 -o yaml
apiVersion: v1
data:
hosts: |
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.110 vms10.rhce.cc vms10
192.168.1.111 vms11.rhce.cc vms11
192.168.1.112 vms12.rhce.cc vms12
issue: |+
\S
Kernel \r on an \m
kind: ConfigMap
metadata:
creationTimestamp: "2023-05-31T08:09:09Z"
name: my2
namespace: nssec
resourceVersion: "52543"
selfLink: /api/v1/namespaces/nssec/configmaps/my2
uid: 480f5cd1-1dcf-4a52-9220-e06bacd09775
[root@vms10 secret]#
从上面可以看到两个键hosts和issue,以及它们对应的值,还可以通过如下命令分别获取其key的值。
##########实操验证##########
[root@vms10 secret]# kubectl get cm my2 -o jsonpath='{.data.hosts}'
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.110 vms10.rhce.cc vms10
192.168.1.111 vms11.rhce.cc vms11
192.168.1.112 vms12.rhce.cc vms12
[root@vms10 secret]# kubectl get cm my2 -o jsonpath='{.data.issue}'
\S
Kernel \r on an \m
[root@vms10 secret]#
这种把文件创建为configmap的方式和secret类似,主要用于给pod传递文件。
使用configmap
使用configmap有两种方式,分别是以卷的方式和以变量的方式。
方法1:以卷的方式
这种用法和secret一致。这里是在pod里创建一个类型为configmap的卷,然后把它挂载到容器指定的目录里,容器创建好之后,会在容器的挂载目录里创建一个文件,此文件的文件名为configmap里的key,文件的内容为对应key的value。
步骤1:创建pod的yaml文件。
##########实操验证##########
[root@vms10 secret]# cat pod3.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: pod3
name: pod3
spec:
volumes:
- name: xx
configMap:
name: my2
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: pod3
resources: {}
volumeMounts:
- name: xx
mountPath: "/etc/test"
[root@vms10 secret]#
在这个pod里创建一个名字为xx、类型为configmap的卷,关联到configmap my2上,在创建的容器里挂载卷xx到目录/etc/test,此时容器的/etc/test里有两个文件:hosts和issue,它们的值分别是/etc/hosts和/etc/issue的内容。
步骤2:创建pod。
##########实操验证##########
[root@vms10 secret]# kubectl apply -f pod3.yaml
pod/pod3 created
[root@vms10 secret]# kubectl get pods
NAME READY STATUS RESTARTS AGE
pod3 1/1 Running 0 5s
[root@vms10 secret]#
步骤3:到pod里查询是否把cm指定的文件写入目录。
##########实操验证##########
[root@vms10 secret]# kubectl exec pod3 -- ls /etc/test
hosts
issue
[root@vms10 secret]#
步骤4:查看某一文件的内容。
##########实操验证##########
[root@vms10 secret]# kubectl exec pod3 -- cat /etc/test/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.110 vms10.rhce.cc vms10
192.168.1.111 vms11.rhce.cc vms11
192.168.1.112 vms12.rhce.cc vms12
[root@vms10 secret]#
删除此pod。
类似的,configmap里有多个文件,但是只想挂载一个文件的话,则使用subPath,这里不再赘述。
方法2:以变量的方式
跟介绍secret部分时所讲的通过变量的方式引用一样,只是这里的关键字由secretKeyRef变成了configMapKeyRef。
步骤1:创建pod的yaml文件。
##########实操验证##########
[root@vms10 secret]# cat pod4.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: pod4
name: pod4
spec:
containers:
- image: hub.c.163.com/library/mysql:latest
imagePullPolicy: IfNotPresent
name: pod4
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
configMapKeyRef:
name: my1
key: yy
[root@vms10 secret]#
此yaml文件用于创建一个MySQL的pod,在创建容器时需要指定一个变量MYSQL_ROOT_PASSWORD(用env下的name指定),这个变量的值并没有直接用value写出来,而是用valueFrom从其他地方引用过来。这里通过configMapKeyRef里的name引用my1,然后通过key引用my1里的yy这个键,整体的意思就是,MYSQL_ROOT_PASSWORD的值使用的是my1里yy这个键对应的值(为redhat)。
步骤2:创建pod。
##########实操验证##########
[root@vms10 secret]# kubectl apply -f pod4.yaml
pod/pod4 created
[root@vms10 secret]#
步骤3:获取此pod的IP。
##########实操验证##########
[root@vms10 secret]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod4 1/1 Running 0 58s 10.244.81.96 vms11.rhce.cc <none> <none>
[root@vms10 secret]#
步骤4:登录验证。
##########实操验证##########
[root@vms10 secret]# mysql -uroot -predhat -h10.244.81.96
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)]>
删除此pod。
猜你喜欢
- 2024-10-20 K8S Configmap和Secret热更新之Reloader
- 2024-10-20 WebSocket与Nginx的小秘密 ng websocket
- 2024-10-20 入门Elasticsearch,我觉着你看这一篇就够了
- 2024-10-20 还不会MapReduce的离线数据分析?阿里大数据负责人教你
- 2024-10-20 如何使用Nginx实现不同的Hearder值代理到不同的后端服务
- 2024-10-20 从netmap到dpdk,从硬件到协议栈,4个维度让网络体系构建起来
- 2024-10-20 MAPREDUCE快速入门 mapreduce讲解
- 2024-10-20 K8s 配置管理必备!ConfigMap vs Secret,哪个更适合你?
- 2024-10-20 Java8 快速实现List转map 、分组、过滤等操作
- 2024-10-20 client-go获取k8s资源信息 k8s获取pod信息
你 发表评论:
欢迎- 05-16原来汇编中的循环是这么玩儿的
- 05-16什么?Java 中的锁还有状态?
- 05-161.4、Java流程控制语句详解
- 05-16Java基础-循环语句
- 05-16Java虚拟机和Dalvik虚拟机有哪些区别和不同?
- 05-16Java、Python、C语言?5大热门编程语言,我该怎么选?
- 05-16java的就业方向有哪些
- 05-16java好学吗?java是不是最难学的语言?
- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)