ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[kubernetes]-kubernetes+nfs运行禅道

2020-02-29 12:44:49  阅读:521  来源: 互联网

标签:opt name kubernetes spec yaml nfs zbox 禅道


第一步 在虚拟机环境测试

需要修改的文件如下
/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万+ 私信 关注

标签:opt,name,kubernetes,spec,yaml,nfs,zbox,禅道
来源: https://blog.csdn.net/xujiamin0022016/article/details/104571903

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有