安装路径时遇到问题,我的目标是即使pod重新启动也能保持数据持久性,但是它会创建一个新目录,其中没有我的任何配置文件。如何在不覆盖整个目录的情况下挂载整个目录?即使pod重新启动,我也应该将所有数据库数据都保存在该路径中。在我的场景中,它会创建一个新路径。
我的dockerfile
FROM centos:7
ENV DIR /binaries
ENV PASS admin
WORKDIR ${DIR}
COPY libstdc++-4.8.5-39.el7.x86_64.rpm ${DIR}
COPY numactl-libs-2.0.12-3.el7.x86_64.rpm ${DIR}
COPY mysqlmonitor-8.0.18.1217-linux-x86_64-installer.bin ${DIR}
RUN yum install -y libaio && yum -y install gcc && yum -y install gcc-c++ && yum -y install compat-libstdc++-33 && yum -y install libstdc++-devel && yum -y install elfutils-libelf-devel && yum -y install glibc-devel && yum -y install libaio-devel && yum -y install sysstat
RUN yum install -y gcc && yum install -y make && yum install -y apr-devel && yum install -y openssl-devel && yum install -y java
RUN rpm -ivh numactl-libs-2.0.12-3.el7.x86_64.rpm
RUN useradd sql
RUN chown sql ${DIR}
RUN chmod 777 ${DIR}
RUN chmod 755 /home/sql
USER sql
WORKDIR ${DIR}
RUN ./mysqlmonitor-8.0.18.1217-linux-x86_64-installer.bin --installdir /home/sql/mysql/enterprise/monitor --mode unattended --tomcatport 18080 --tomcatsslport 18443 --adminpassword ### --dbport 13306
RUN rm -rf /binaries/*
VOLUME /home/mysql/mysql/enterprise/monitor/mysql/data
ENTRYPOINT ["/bin/bash", "-c", "/home/sql/mysql/enterprise/monitor/mysqlmonitorctl.sh start && tail -f /home/sql/mysql/enterprise/monitor/apache-tomcat/logs/mysql-monitor.log"]
我的部署文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: mypod
spec:
replicas: 1
selector:
matchLabels:
app: mem
template:
metadata:
labels:
app: mem
spec:
containers:
- name: mem
image: 22071997/mem
command:
volumeMounts:
- mountPath: /home/sql/mysql/enterprise/mysql/data
name: volume
volumes:
- name: volume
persistentVolumeClaim:
claimName: mem-pvc2
输出:
[sql@mypod-67cb4f85b8-9km26 data]$ pwd
/home/sql/mysql/enterprise/mysql/data
[sql@mypod-67cb4f85b8-9km26 data]$ ls
[sql@mypod-67cb4f85b8-9km26 data]$
答案 0 :(得分:0)
默认情况下,当您在现有路径上装载一些卷时,该现有路径的内容将被隐藏。
如果要同时保留两者,则可以使用一个名为subPath
的选项,这样就可以使用相同的卷分别装载每个文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: echo
spec:
selector:
matchLabels:
app: echo
template:
metadata:
labels:
app: echo
spec:
volumes:
- name: task-pv-storage
persistentVolumeClaim:
claimName: task-pv-claim
containers:
- name: echo
image: nginx
ports:
- name: http
containerPort: 80
volumeMounts:
- name: task-pv-storage
mountPath: "/usr/share/nginx/html/index.htm"
subPath: "index.htm"
- name: task-pv-storage
mountPath: "/usr/share/nginx/html/teste.html"
subPath: "teste.html"
在此示例中,我只有一个名为 task-pv-storage 的卷,是hostPath
卷,并且该文件夹中只有2个文件:teste.yaml
和{ {1}},当我应用此配置时,两个文件都将放置在容器中原始文件的旁边:
index.html
您可以看到,但可能会花费额外的配置,也许您只能将所有文件保留在卷中,而不是直接保留在容器中。
参考