[kubernetes]-部署mm-wiki

测试在虚拟机上迁移

导入数据库到RDS

在虚拟机上启动测试
./mm-wiki --conf conf/mm-wiki.conf

没问题

准备工作

nfs创建

略。。

修改配置文件

主要是调整静态文件的地址 数据库账号密码 端口号

拷贝静态文件到nfs的/opt/mm_wiki下 用nfs 挂载 其余配置文件打进容器

创建dockerfile
FROM harbor.aircourses.com/kubernetes/jdk-1.8.0_161:v1.1
MAINTAINER PDABC Enterprise Container Images <[email protected]>

COPY wiki /opt/wiki

ENV LANG=en_US.UTF-8
ENV LANGUAGE=en_US.UTF-8
#ENTRYPOINT ["sh", "/opt/wiki/start.sh"]
ENTRYPOINT ["sh", "/opt/mm_wiki/start.sh"]

迁移到k8s

创建pv.yaml
##创建nfs-PV
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mm-wiki-pv
  namespace: default
  labels:
    pv: mm-wiki-pv
spec:
  capacity:
    storage: 50Gi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  nfs:
    path: /opt/mm_wiki
    server: 192.168.13.212

kubectl create -f pv.yaml

创建pvc.yaml
##创建 mm-wiki-pvc
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: mm-wiki-pvc
  namespace: default
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 50Gi
  selector:
    matchLabels:
      pv: mm-wiki-pv

kubectl create -f pvc.yaml

创建deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
# deployment名字 和svc 和ingress绑定没关系
  name: mm-wiki-dp
  namespace: default
spec:
  replicas: 1
  # 在定义模板的时候必须定义labels,因为Deployment.spec.selector是必须字段,而他又必须和template.labels对应
  selector:
    matchLabels:
      app: mm-wiki
  # template里面定义的内容会应用到下面所有的副本集里面(例如depolyment下的pod),在template.spec.containers里面不能定义labels标签。可以kubectl get pods --show-labels查看
  template:
    metadata:
      labels:
        app: mm-wiki
    spec:
      containers:
      # containers名字 和svc 和ingress绑定没关系
      - name: mm-wiki
        image: harbor.aircourses.com/kubernetes/mm-wiki:v2.0
        volumeMounts:
        - mountPath: /opt/mm_wiki
          name: mm-wiki-data
        ports:
        - name: http
          containerPort: 80
      volumes:
      - name: mm-wiki-data
        persistentVolumeClaim:
          claimName: mm-wiki-pvc
      imagePullSecrets:
        - name: myregistrykey

kubectl apply -f deployment.yaml

创建svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: mm-wiki
  namespace: default
spec:
  type: ClusterIP
  selector:
    app: mm-wiki
  ports:
  - name: http
    port: 80
    targetPort: 80

kubectl apply -f svc.yaml

创建ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
# 通过添加下面的annotations 来开启白名单
# 关闭80强制跳转443 为ingress配置增加注解(annotations):nginx.ingress.kubernetes.io/ssl-redirect: 'false' 就可以禁止http强制跳转至https
  annotations:
    nginx.ingress.kubernetes.io/whitelist-source-range: "60.191.70.64/29, 192.168.0.0/16, 47.111.185.111, 47.97.113.64, 47.99.246.58, 47.111.170.245, 47.111.247.117, 47.99.244.221, 47.110.144.233, 47.110.144.233, 121.41.103.54, 121.40.186.211, 121.40.16.165, 121.40.16.63, 60.191.70.66, 60.191.70.67"
    nginx.ingress.kubernetes.io/ssl-redirect: 'false'
  name: mm-wiki
spec:
  tls:
   - hosts:
     - mm-wiki.aircourses.com
     secretName: aircourses
  rules:
    - host: mm-wiki.aircourses.com
      http:
        paths:
        - path: /
          backend:
            serviceName: mm-wiki
            servicePort: 80

kubectl apply -f ingress.yaml

中间出现了点小故障

pod显示running 端口也启动了。但是访问的时候页面显示不正常,进入容器,用同一个脚本换一个端口启动就可以访问。

正常的请求如下

访问有问题的请求返回如下

直接起一个容器 映射配置文件和端口进去排查

docker run  -it -v /mm-wiki:/opt  --name=mm-wiki-06  harbor.aircourses.com/kubernetes/mm-wiki:v11 -p 80:80   /bin/sh

发现报错如下

直接curl ip+port 没有返回

应该是需要在和views一级的目录下 启动项目,否则就会报错。代码应该是go写的,不太懂。排查了一小会 根据报错推测出来的。

启动脚本 修改到和views一级下面启动。 果然可以了

发布了300 篇原创文章 · 获赞 25 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/xujiamin0022016/article/details/104623861
mm