本篇文章给大家介绍将wordpress部署到K8s集群,要求使用svc和rc资源实现。
目录
项目思路
使用之前制作好的wordpress镜像,配合数据库镜像进行操作,由于我们会在不同的节点上做,我们需要考虑做NFS挂载,做wordpress的代码文件的和数据库的NFS挂载,以保证pod删除后数据依旧存在,保证在访问的时候不会因为访问到容器不同请求的内容不一样,类似于没做会话保持的那种状态。
也可以先做出来一步wordpress,发现部署业务只部署到了一个Pod上,再拆分出数据库,再重新部署,发现文字刷新可以访问,因为文字是保存在数据库上,但是图片刷新不出来,再去挂载图片目录,发现提交不了,再去修改权限,或者是属主属组或者直接改成777(属组属主不知道怎么改就先将图片目录改成777再上传图片,看它的属主属组是多少,根据它的改),再部署发现配置文件没有挂载,干脆把代码文件都挂载上。。。
也可以采用这种一步一步排错的方法,当然我更喜欢一次性把事情考虑周到,再慢慢排错,这样也有坏处,就是因为错误可能是一起出现的,不知道该在哪里排除。还有就是Pod的资源清单进行拆分,这样好找错误
项目实操
1、编写数据库的yaml文件
[root@Master231 wordpress]# cat 01-deploy-db.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: db
spec:
replicas: 1
selector:
matchLabels:
app: mysql57
template:
metadata:
labels:
app: mysql57
spec:
volumes:
- name: data
nfs:
server: master231
path: /koten/data/kubernetes/mysql57
containers:
- name: mysql
image: harbor.koten.com/koten-db/mysql:5.7
volumeMounts:
- name: data
mountPath: /var/lib/mysql/
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: koten
- name: MYSQL_DATABASE
value: wordpress
- name: MYSQL_USER
value: wordpress
- name: MYSQL_PASSWORD
value: wordpress
2、编写数据库的svc,固定其暴露的IP
[root@Master231 wordpress]# cat 02-svc-db.yaml
apiVersion: v1
kind: Service
metadata:
name: db
spec:
clusterIP: 10.200.100.100
type: ClusterIP
selector:
app: mysql57
ports:
- port: 3306
targetPort: 3306
3、编写wordpress的yaml文件
[root@Master231 wordpress]# cat 03-deploy-wp-nfs.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: wp
spec:
# replicas: 1
replicas: 3
selector:
matchLabels:
app: wordpress
template:
metadata:
labels:
app: wordpress
spec:
volumes:
- name: data
nfs:
server: master231
path: /koten/data/kubernetes/wordpress/
containers:
- name: wordpress
image: harbor.koten.com/koten-web/wordpress:v1.0
volumeMounts:
- name: data
mountPath: /var/www/html/
ports:
- containerPort: 80
env:
- name: WORDPRESS_DB_HOST
value: 10.200.100.100
- name: WORDPRESS_DB_USER
value: wordpress
- name: WORDPRESS_DB_PASSWORD
value: wordpress
4、编写wordpress的svc,使其映射在节点端口
[root@Master231 wordpress]# cat 04-svc-wp.yaml
apiVersion: v1
kind: Service
metadata:
name: wp
spec:
type: NodePort
selector:
app: wordpress
ports:
- port: 80
targetPort: 80
nodePort: 8080
5、创建所需挂载主机上目录
[root@Master231 wordpress]# mkdir /koten/data/kubernetes/wordpress/
[root@Master231 wordpress]# mkdir /koten/data/kubernetes/mysql57
6、运行所有的资源清单
[root@Master231 wordpress]# ls
01-deploy-db.yaml 03-deploy-wp-nfs.yaml
02-svc-db.yaml 04-svc-wp.yaml
[root@Master231 wordpress]# kubectl apply -f .
deployment.apps/db created
service/db created
deployment.apps/wp created
service/wp created
[root@Master231 wordpress]# kubectl get pods
NAME READY STATUS RESTARTS AGE
db-6f665d7684-r4jzx 1/1 Running 0 84s
wp-594c89768f-l5wlb 1/1 Running 0 11s
wp-594c89768f-s5xgk 1/1 Running 0 9s
wp-594c89768f-tvzcp 1/1 Running 0 6s
[root@Master231 wordpress]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
db ClusterIP 10.200.100.100 <none> 3306/TCP 2m27s
kubernetes ClusterIP 10.200.0.1 <none> 443/TCP 2m45s
wp NodePort 10.200.88.137 <none> 80:8080/TCP 2m27s
7、修改代码文件的权限
[root@Master231 wordpress]# chmod 777 /koten/data/kubernetes/wordpress/ -R
项目展示
由于我们一步到位,直接把所有的错误都排除了,所以之前假设的问题都不会出现了,所以我们直接部署,经测试,发现部署,发布文章,查看文章都没有问题,大功告成!
我是koten,10年运维经验,持续分享运维干货,感谢大家的阅读和关注!