测试在虚拟机上迁移
导入数据库到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一级下面启动。 果然可以了