1、使用目录方式创建configmap
[root@k8s-node1 tomcat-config]# kubectl create configmap tomcat-config --from-file=/root/tomcat-config
说明:/root/tomcat-config #保存配置文件的目录
说明:tomcat-config #configmap的名称
查看/root/tomcat-config内容:
[root@k8s-node1 tomcat-config]# ll /root/tomcat-config/
total 224
drwxr-s--- 3 root root 23 Nov 27 15:00 Catalina
-rw-r--r-- 1 root root 13548 Nov 27 15:00 catalina.policy
-rw-r--r-- 1 root root 7661 Nov 27 15:00 catalina.properties
-rw-r--r-- 1 root root 1338 Nov 27 15:00 context.xml
-rw-r--r-- 1 root root 1149 Nov 27 15:00 jaspic-providers.xml
-rw-r--r-- 1 root root 2313 Nov 27 15:00 jaspic-providers.xsd
-rw-r--r-- 1 root root 3916 Nov 27 15:00 logging.properties
-rw-r--r-- 1 root root 7513 Nov 27 15:28 server.xml
-rw-r--r-- 1 root root 2164 Nov 27 15:00 tomcat-users.xml
-rw-r--r-- 1 root root 2633 Nov 27 15:00 tomcat-users.xsd
-rw-r--r-- 1 root root 171482 Nov 27 15:00 web.xml
2、查看configmap
[root@k8s-node1 tomcat-config]# kubectl get cm
NAME DATA AGE
tomcat-config 10 10m
3、创建tomcat deployment的yanl文件
[root@k8s-node1 yaml_file]# cat tomcat.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: tomcat
spec:
replicas: 1
selector:
matchLabels:
app: tomcat
minReadySeconds: 1
progressDeadlineSeconds: 60
revisionHistoryLimit: 5
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
template:
metadata:
name: tomcat
labels:
app: tomcat
spec:
containers:
- name: tomcat
image: tomcat:8
ports:
- containerPort: 8086
volumeMounts:
- name: tz-config
mountPath: /etc/localtime
- name: tomcat-t1
mountPath: /usr/local/tomcat/conf #configmap挂载到容器内部的目录
volumes:
- name: tz-config
hostPath:
path: /usr/share/zoneinfo/Asia/Shanghai
- name: tomcat-t1
configMap:
name: tomcat-config #定义configmap名称
---
apiVersion: v1
kind: Service
metadata:
name: tomcat
spec:
type: NodePort
ports:
- port: 8086
selector:
app: tomcat
4、创建tomcat deployment
kubectl create -f tomcat.yaml
5、查看部署状态
[root@k8s-node1 tomcat-config]# kubectl get pod
NAME READY STATUS RESTARTS AGE
tomcat-5ff9cfd9c5-d8rng 1/1 Running 0 15m
6、查看svc
[root@k8s-node1 tomcat-config]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
tomcat NodePort 10.1.164.83 8086:27913/TCP 15m
7、访问tomcat测试
[root@k8s-node1 yaml_file]# curl -I 192.168.29.176:27913
HTTP/1.1 200
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Date: Wed, 27 Nov 2019 07:52:53 GMT
附录:在一般情况下 configmap 挂载文件时,会先覆盖掉挂载目录,然后再将 congfigmap 中的内容作为文件挂载进行。如果想不对原来的文件夹下的文件造成覆盖,只是将 configmap 中的每个 key,按照文件的方式挂载到目录下,可以使用 subpath 参数
[root@k8s-node1 yaml_file]# cat tomcat.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: tomcat
spec:
replicas: 1
selector:
matchLabels:
app: tomcat
minReadySeconds: 1
progressDeadlineSeconds: 60
revisionHistoryLimit: 5
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
template:
metadata:
name: tomcat
labels:
app: tomcat
spec:
containers:
- name: tomcat
image: tomcat:8
ports:
- containerPort: 8085
volumeMounts:
- name: tz-config
mountPath: /etc/localtime
- name: tomcat-t1
mountPath: /usr/local/tomcat/conf/server.xml
subPath: server.xml #指定某个文件修改
volumes:
- name: tz-config
hostPath:
path: /usr/share/zoneinfo/Asia/Shanghai
- name: tomcat-t1
configMap:
name: tomcat-config
---
apiVersion: v1
kind: Service
metadata:
name: tomcat
spec:
type: NodePort
ports:
- port: 8085
selector:
app: tomcat