第一步 在虚拟机环境测试
需要修改的文件如下
/opt/zbox/app/zentao/config/my.php
/opt/zbox/app/zentaoep/config/my.php
/opt/zbox/app/zentaopro/config/my.php
# 这个文件里也有数据库配置 但是不改好像暂时没影响,最好还是改下。
/opt/zbox/etc/php/php.ini
# 修改端口
/opt/zbox/etc/apache/httpd.conf
创建启动用户和组
否则如果没有这个用户和组会报错AH00544: httpd: bad group name nogroup
useradd nobody
groupadd nogroup
以下文件 根据需求 自行删除或者保留
# 禅道中图片存放位置
/opt/zbox/app/zentao/www/data/upload
# 禅道自动备份保存位置
/opt/zbox/app/zentao/tmp/backup
将上述配置文件中的数据库 信息 修改成自己的数据库,我这边是阿里云RDS
修改完成之后 测试启动
由于我这里不需要启动mysql 我就不用原有的zbox start 启动了
改为
sh run/apache/apachectl start 或者/opt/zbox/run/apache/httpd -k start
第二步 上容器前依赖工作
因为我这里保留之前测试上传的图片等数据 需要使用存储
思路是启动脚本放在/opt/run,nfs存储的文件挂到/opt/zbox
安装nfs
找了一台服务器暂时充当nfs服务器
# 安装 NFS 服务器所需的软件包
yum install -y nfs-utils
# 编辑exports文件 并设置挂载权限
cat >> /etc/exports <<EOF
/opt/ 192.168.0.0/16(rw,no_root_squash,sync)
EOF
# 启动nfs服务
systemctl enable rpcbind.service
systemctl enable nfs-server.service
systemctl start rpcbind.service
systemctl start nfs-server.service
systemctl stop firewalld
systemctl disable firewalld
rpcinfo -p
# 挂载nfs
exportfs -r
exportfs
编写dockerfile
我这边的想法是把/opt/zbox/run 文件夹挂到/opt下
出于容器启动 需要一个后台一直运行的进程
在run下面创建了一个start.sh内容如下
nohup /opt/run/apache/httpd -k start &
tail -999f /opt/run/nohup.out
在和run文件夹统一路径下创建dockerfile
Dockerfile-zbox-80
FROM harbor.aircourses.com/kubernetes/jdk-1.8.0_161:v1.1
MAINTAINER PDABC Enterprise Container Images <hugo.xu@pdabc.com>
RUN (useradd nobody;groupadd nogroup )
COPY run /opt/run
ENV LANG=en_US.UTF-8
ENV LANGUAGE=en_US.UTF-8
ENTRYPOINT ["sh", "/opt/run/start.sh"]
创建镜像并上传
docker build -f Dockerfile-zbox-80 -t harbor.aircourses.com/kubernetes/zbox:v3 .
docker push harbor.aircourses.com/kubernetes/zbox:v3
第三步 在kubernetes环境测试
创建pv
pv.yaml
# 创建nfs-PV
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv
namespace: default
labels:
pv: nfs-pv
spec:
capacity:
storage: 100Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
nfs:
path: /opt/zbox
server: 192.168.13.212
kubectl create -f pv.yaml
创建pvc.yaml
pvc.yaml
# 创建 NFS-pvc
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: nfs-pvc
namespace: default
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 100Gi
selector:
matchLabels:
pv: nfs-pv
kubectl apply -f pvc.yaml
创建deployment.yaml
deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
# deployment名字 和svc 和ingress绑定没关系
name: zbox-dp
namespace: default
spec:
replicas: 1
# 在定义模板的时候必须定义labels,因为Deployment.spec.selector是必须字段,而他又必须和template.labels对应
selector:
matchLabels:
app: zbox
# template里面定义的内容会应用到下面所有的副本集里面(例如depolyment下的pod),在template.spec.containers里面不能定义labels标签。可以kubectl get pods --show-labels查看
template:
metadata:
labels:
app: zbox
spec:
containers:
# containers名字 和svc 和ingress绑定没关系
- name: zbox
image: harbor.aircourses.com/kubernetes/zbox:v4
volumeMounts:
- mountPath: /opt/zbox
name: zbox-data
ports:
- name: http
containerPort: 80
volumes:
- name: zbox-data
persistentVolumeClaim:
claimName: nfs-pvc
imagePullSecrets:
- name: myregistrykey
kubectl apply -f deployment.yaml
创建svc-zbox.yaml
svc-zbox.yaml
apiVersion: v1
kind: Servicekubectl apply -f pvc.yaml
metadata:
name: zbox
namespace: default
spec:
type: ClusterIP
selector:
app: zbox
ports:
- name: http
port: 80
targetPort: 80
kubectl apply -f svc-zbox.yaml
创建ingress-zbox.yaml
ingress-zbox.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
# deployment名字 和svc 和ingress绑定没关系
name: zbox-dp
namespace: default
spec:
replicas: 1
# 在定义模板的时候必须定义labels,因为Deployment.spec.selector是必须字段,而他又必须和template.labels对应
selector:
matchLabels:
app: zbox
# template里面定义的内容会应用到下面所有的副本集里面(例如depolyment下的pod),在template.spec.containers里面不能定义labels标签。可以kubectl get pods --show-labels查看
template:
metadata:
labels:
app: zbox
spec:
containers:
# containers名字 和svc 和ingress绑定没关系
- name: zbox
image: harbor.aircourses.com/jiaminxu/zbox:v1.0
volumeMounts:
- mountPath: /opt/zbox
name: zbox-data
ports:
- name: http
containerPort: 80
volumes:
- name: zbox-data
persistentVolumeClaim:
claimName: nfs-pvc
imagePullSecrets:
- name: myregistrykey
kubectl apply -f ingress-zbox.yaml
访问测试
上传一张照片测试 nfs挂载 情况
会自动在启动一个新的pod
再次查看刚刚修改的地方 添加的图片还是存在的。说明容器和存储都没有问题
爷来辣 发布了290 篇原创文章 · 获赞 24 · 访问量 13万+ 私信 关注