当前位置: 首页 > news >正文

initContainers实现整个数据目录的挂载

在部署mysql、oracle、tomcat测试时,面对配置文件非常多的情况下一个个挂载配置文件会显得非常麻烦,这时就可以通过将服务的整个数据目录给挂载下来,以方便修改配置和数据,但是因为服务需要初始化,直接挂载目录会将原本的数据给
覆盖掉导致容器报错,这时就可以采用initContainers将初始化后的文件拷贝到初始化容器内,以确保数据文件不会被覆盖掉,接下来使用tomcat与oracle进行测试

1、创建tomcat部署文件,添加initContainers进行文件拷贝

[root@master-11 tomcat]# cat tomcat.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: tomcat-deploymentlabels:app: tomcat
spec:replicas: 1selector:matchLabels:app: tomcattemplate:metadata:labels:app: tomcatspec:initContainers:                             # 在此创建一个initContainers,用来拷贝数据文件- name: init-tomcatimage: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/tomcat:8.0command:- /bin/sh- -c- |if [ -d /data ] && [ "$(ls -A /data 2>/dev/null)" ]; then           # 添加一个条件判断,因为data与tomcat目录的数据一致,所以判断data目录下有没有数据,没有就拷贝一份过来echo "无需拷贝"elsecp -r /usr/local/tomcat/* /data/fivolumeMounts:                                                           # 挂载tomcat目录- name: tomcat-datamountPath: /datasecurityContext:runAsUser: 0runAsGroup: 0containers:- name: tomcatimage: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/tomcat:8.0imagePullPolicy: IfNotPresentports:- containerPort: 8080env:- name: CATALINA_OPTSvalue: "-Xms512m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=256m -Dfile.encoding=UTF-8"resources:requests:memory: "512Mi"limits:memory: "1024Mi"volumeMounts:                                                          # 因为initContainers与containers使用的是同一个pvc,所以挂载后数据不会消失,而是使用了data目录下的数据- name: tomcat-datamountPath: /usr/local/tomcatvolumes:- name: tomcat-datapersistentVolumeClaim:claimName: tomcat-data
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: tomcat-datalabels:app: tomcat
spec:accessModes:- ReadWriteManystorageClassName: nfs-dataresources:requests:storage: 5Gi
---
apiVersion: v1
kind: Service
metadata:name: tomcat-servicelabels:app: tomcat
spec:selector:app: tomcattype: NodePortports:- name: httpport: 8080targetPort: 8080nodePort: 30000

2、测试

[root@master-11 tomcat]# kubectl get pods -owide
NAME                                 READY   STATUS             RESTARTS      AGE   IP             NODE      NOMINATED NODE   READINESS GATES
tomcat-deployment-65c55cd476-zzbjh   1/1     Running            0             16m   10.100.1.25    node-12   <none>           <none>[root@master-11 tomcat]# kubectl exec -it tomcat-deployment-65c55cd476-zzbjh bash              # 进入容器检查数据是否正常拷入
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
Defaulted container "tomcat" out of: tomcat, init-tomcat (init)
root@tomcat-deployment-65c55cd476-zzbjh:/usr/local/tomcat# ls
LICENSE  NOTICE  RELEASE-NOTES  RUNNING.txt  bin  conf  include  lib  logs  native-jni-lib  temp  webapps  work
root@tomcat-deployment-65c55cd476-zzbjh:/usr/local/tomcat#访问“IP:端口”查看服务是否能够正常访问,正常访问后在容器中创建一个文件后将容器删除,等待容器创建后检查服务与所创建的文件是否都是正常的

3、使用同样的方式来对oracle进行数据目录的挂载

[root@master-11 ~]# cat oracle.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: oracle-datanamespace: oracle
spec:accessModes: [ "ReadWriteOnce" ]storageClassName: nfs-dataresources:requests:storage: 20Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:name: oracle-dbnamespace: oracle
spec:replicas: 1selector:matchLabels:app: oracle-dbtemplate:metadata:labels:app: oracle-dbspec:initContainers:               # 创建initContainers- name: init-oracle-dataimage: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/oracleinanutshell/oracle-xe-11g:latestcommand:- /bin/sh- -c- |set -eecho "初始化 Oracle XE 数据目录..."if [ ! -d /mnt-oracle/oradata ] || [ -z "$(ls -A /mnt-oracle/oradata 2>/dev/null)" ]; then         # 判断oracle数据目录是否存在,不存在则拷贝一份mkdir -p /mnt-oraclecp -a /u01/app/oracle/. /mnt-oracle/echo "拷贝完成。"elseecho "检测到已有数据,跳过拷贝。"fivolumeMounts:                                                                                          # 挂载数据目录- name: oracle-datamountPath: /mnt-oraclecontainers:- name: oracleimage: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/oracleinanutshell/oracle-xe-11g:latestports:- containerPort: 1521  - containerPort: 8080  env:- name: ORACLE_SIDvalue: XEcommand:- /bin/bash- -c- |chown -R oracle:dba /u01/app/oraclechmod -R 755 /u01/app/oracle/etc/init.d/oracle-xe starttail -f /dev/nullvolumeMounts:                          # 与initContainers挂载同一个pvc来实现数据共享- name: oracle-datamountPath: /u01/app/oracle                    volumes:- name: oracle-datapersistentVolumeClaim:claimName: oracle-data
---
apiVersion: v1
kind: Service
metadata:name: oracle-dbnamespace: oracle
spec:selector:app: oracle-dbports:- name: sqlnetport: 1521targetPort: 1521nodePort: 31521- name: apexport: 8080targetPort: 8080nodePort: 32425type: NodePort

4、测试

使用navicat进行连接,初始用户密码为 sys/oracle
执行
CREATE TABLESPACE ceshi_data
DATAFILE '/opt/oracle/oradata/ceshi_data01.dbf'
SIZE 20G
AUTOEXTEND OFF;随后将容器删除,等待重新创建,进入容器查看/u01/app/oracle/oradata/XE目录下是否有ceshi_data01.dbf的文件存在,有的话这初始化成功
http://www.hskmm.com/?act=detail&tid=32228

相关文章:

  • 2025年屋脊通风天窗厂家最新权威推荐榜:工业厂房自然通风解决方案优选品牌
  • 2025年10月电子散热器行业权威报告:十大品牌技术创新、性能表现与市场布局全景解析及选购指南
  • 迁移boot分区解决brtfs引起的Sparse File Not Allowed问题
  • 阿里面试:Redis挂了怎么办?集群主节点挂了怎么 恢复数据?可能有多长时间 数据丢失?【转自】
  • 2025年10月北京开锁公司最新服务商平台推荐排行榜,北京紧急开锁换锁上门服务推荐!
  • 学霸的期末 解题报告
  • 一种适用于正整数值域的无旋平衡树
  • 2025 年电子散热器厂家 TOP 企业品牌推荐排行榜,电子 / 型材 / 插片 / 电源 / 固态 / 变频器 / 铝合金 / 逆变器散热器 / 散热器铝型材公司推荐
  • 禁用sentinel
  • 静态网站宣言:用IPFS重建开放网络的乐趣
  • 收敛数列的性质
  • Eclipse Mosquitto MQTT 代理中持久性引擎(database.c 概念)的作用分析报告 - 指南
  • FFmpeg 实现视频批量剪辑
  • 2023盘古石 物联网取证部分
  • 2025 年自润滑轴承厂家联系方式推荐,宁波索力特复合材料有限公司专业产品与可靠服务指南
  • MATLAB PSO-PF 融合滤波
  • SaltStack 集群安装指南
  • nginx基本配置详解
  • NCS 3.1.1 蓝牙如何设置 public 地址
  • C# Avalonia 16- Animation- BlurringButtons
  • iOS 26 崩溃日志导出全流程,多工具实践 辅助分析策略
  • 小白也能学会的 rime + 万象拼音 输入法安装教程
  • 别再争了,“Prompt已死”是个伪命题
  • 2025.10.16——1绿
  • 2025年通风气楼厂家最新权威推荐榜:工业厂房自然通风与消防排烟系统专业解决方案精选
  • 2025 年展柜定制厂家最新推荐排行榜:聚焦全链条服务与大规模生产能力的优质品牌精选
  • 了解漏洞管理和补丁管理
  • 于鸿硕项目案例作业03
  • restful接口返回忽略字段 jackon的@JsonIgnore注解应用
  • Windows系统-应用问题全面剖析Ⅱ:德承工控机DC-1300在Windows操作系统下[TPM功能]设置教程 - Johnny