[kubernetes]-kubernetes+nfs运行禅道

第一步 在虚拟机环境测试

需要修改的文件如下
/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

[kubernetes]-kubernetes+nfs运行禅道

修改完成之后 测试启动

由于我这里不需要启动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"]

[kubernetes]-kubernetes+nfs运行禅道

创建镜像并上传

docker build -f Dockerfile-zbox-80 -t harbor.aircourses.com/kubernetes/zbox:v3 .

docker push harbor.aircourses.com/kubernetes/zbox:v3

[kubernetes]-kubernetes+nfs运行禅道

第三步 在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

[kubernetes]-kubernetes+nfs运行禅道

创建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

[kubernetes]-kubernetes+nfs运行禅道

创建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

[kubernetes]-kubernetes+nfs运行禅道

访问测试

[kubernetes]-kubernetes+nfs运行禅道

上传一张照片测试 nfs挂载 情况

[kubernetes]-kubernetes+nfs运行禅道

[kubernetes]-kubernetes+nfs运行禅道

会自动在启动一个新的pod

[kubernetes]-kubernetes+nfs运行禅道

再次查看刚刚修改的地方 添加的图片还是存在的。说明容器和存储都没有问题

[kubernetes]-kubernetes+nfs运行禅道

[kubernetes]-kubernetes+nfs运行禅道[kubernetes]-kubernetes+nfs运行禅道 爷来辣 发布了290 篇原创文章 · 获赞 24 · 访问量 13万+ 私信 关注
上一篇:Linux安装禅道:


下一篇:11.26直播预告|解密MyBase for PostgreSQL引擎