【云原生之kubernetes实战】在k8s环境下部署jpress开源网站
一、jpress介绍
1.jpress简介
JPress 是一个使用 Java 开发的、开源免费 的建站神器,灵感来源于 WordPress。可以作为一款安全舒心的开源CMS系统。
2.jpress功能
- 内容相关:文章管理、页面管理、评论管理、附件管理
- 电商相关:产品管理、会员管理、订单管理、分销管理、提现管理、优惠券管理、支付配置、物流配置
- 用户相关:用户管理、会员管理、权限管理、订单管理、用户标签、短信群发、邮件群发
- 系统相关:模板管理、插件管理、微信管理、系统管理
二、检查本地k8s环境
1.检查工作节点状态
检查本地的k8s环境,确保所有节点都正常运行。
[root@k8s-master ~]# kubectl get nodes -owide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
k8s-master Ready control-plane,master 153d v1.23.1 192.168.3.201 <none> CentOS Linux 7 (Core) 3.10.0-957.el7.x86_64 containerd://1.6.6
k8s-node01 Ready <none> 153d v1.23.1 192.168.3.202 <none> CentOS Linux 7 (Core) 3.10.0-957.el7.x86_64 containerd://1.6.6
k8s-node02 Ready <none> 153d v1.23.1 192.168.3.203 <none> CentOS Linux 7 (Core) 3.10.0-957.el7.x86_64 containerd://1.6.6
2.检查系统pod状态
检查k8s集群中的系统pod状态,确保所有系统pod都在正常运行中。
[root@k8s-master ~]# kubectl get pods -owide -n kube-system
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
calico-kube-controllers-7bc6547ffb-2nf66 1/1 Running 7 (30m ago) 153d 10.244.235.216 k8s-master <none> <none>
calico-node-8c4pn 1/1 Running 7 (30m ago) 153d 192.168.3.202 k8s-node01 <none> <none>
calico-node-f28qq 1/1 Running 7 (30m ago) 153d 192.168.3.203 k8s-node02 <none> <none>
calico-node-wmc2j 1/1 Running 7 (29m ago) 153d 192.168.3.201 k8s-master <none> <none>
coredns-6d8c4cb4d-6gm4x 1/1 Running 7 (29m ago) 153d 10.244.235.214 k8s-master <none> <none>
coredns-6d8c4cb4d-7vxlz 1/1 Running 7 (29m ago) 153d 10.244.235.215 k8s-master <none> <none>
etcd-k8s-master 1/1 Running 7 (29m ago) 153d 192.168.3.201 k8s-master <none> <none>
kube-apiserver-k8s-master 1/1 Running 7 (29m ago) 153d 192.168.3.201 k8s-master <none> <none>
kube-controller-manager-k8s-master 1/1 Running 7 (29m ago) 153d 192.168.3.201 k8s-master <none> <none>
kube-proxy-8dfw8 1/1 Running 7 (30m ago) 153d 192.168.3.201 k8s-master <none> <none>
kube-proxy-ghzrv 1/1 Running 7 (30m ago) 153d 192.168.3.203 k8s-node02 <none> <none>
kube-proxy-j867z 1/1 Running 7 (30m ago) 153d 192.168.3.202 k8s-node01 <none> <none>
kube-scheduler-k8s-master 1/1 Running 7 (29m ago) 153d 192.168.3.201 k8s-master <none> <none>
三、编辑jpress.yaml文件
1.创建安装目录
在master节点,我们新建一个安装目录,用于存放jpress.yaml部署文件。
[root@k8s-master ~]# mkdir /data/jpress
[root@k8s-master ~]# cd /data/jpress/
2.编辑jpress.yaml文件
编辑jpress应用的部署yaml文件
jpress.yaml
---
apiVersion: v1
kind: Namespace
metadata:
name: jpress
---
kind: Service
apiVersion: v1
metadata:
name: jpress-db
namespace: jpress
spec:
ports:
- port: 3306
targetPort: 3306
name: mysql
protocol: TCP
nodePort: 30033
type: NodePort
selector:
app: mysql
deploy: jpress
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql-deployment
namespace: jpress
spec:
selector:
matchLabels:
app: mysql
deploy: jpress
template:
metadata:
labels:
app: mysql
deploy: jpress
spec:
# nodeName: k8s-db
containers:
- name: jpress-mysql
image: mysql:5.7
livenessProbe: #存活性检查
tcpSocket:
port: 3306
readinessProbe: #就绪性检查
tcpSocket:
port: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "admin"
- name: MYSQL_DATABASE
value: "jpress"
- name: TZ
value: "Aisa/Shanghai"
- name: MYSQL_USER
value: jpress
- name: MYSQL_PASSWORD
value: jpress
volumeMounts:
- name: jpress-db
mountPath: /var/lib/mysql
volumes:
- name: jpress-db
hostPath:
path: /data/jpress/db
---
########################## Aplication#####################################################
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: jpress
deploy: jpress
name: jpress
namespace: jpress
spec:
replicas: 2
selector:
matchLabels:
app: jpress
template:
metadata:
labels:
app: jpress
deploy: jpress
spec:
volumes:
- name: attachment
hostPath:
path: /data/jpress/attachment
- name: addons
hostPath:
path: /data/jpress/webapp/addons
- name: inf
hostPath:
path: /data/jpress/webapp/WEB-INF/addons
- name: content
hostPath:
path: /data/jpress/webapp/wp-content
- name: dockers
hostPath:
path: /data/jpress/webapp/templates/dockers
containers:
- image: fuhai/jpress:v5.0.7
name: jpress-it
ports:
- name: web
protocol: "TCP"
containerPort: 8080
# - name : 443
# protocol: "TCP"
# containerPort: 443
env:
- name: TZ
value: "Asia/Shanghai"
- name: PUID
value: "1000"
- name: PGID
value: "1000"
- name: JPRESS_DB_NAME
value: "jpress"
- name: JPRESS_DB_USER
value: "root"
- name: JPRESS_DB_PASSWORD
value: "admin"
- name: JPRESS_DB_HOST
value: 192.168.3.202:30033
# - name: APP_KEY
# value: "base64:5U/KPKw1GN/Rz0fWYO/4FsSOqjmjvDAQzMCqwcAqstc="
resources:
requests:
cpu: 0.5
memory: 128Mi
limits:
cpu: 0.6
memory: 512Mi
volumeMounts:
- name: attachment
mountPath: /opt/jpress/webapp/attachment
- name: addons
mountPath: /opt/jpress/webapp/addons
- name: inf
mountPath: /opt/jpress/webapp/WEB-INF/addons
- name: content
mountPath: /opt/jpress/webapp/wp-content
- name: dockers
mountPath: /opt/jpress/webapp/templates/dockers
---
apiVersion: v1
kind: Service
metadata:
name: jpress-it
namespace: jpress
spec:
ports:
- port: 8080
nodePort: 30016
selector:
app: jpress
deploy: jpress
type: NodePort
四、部署jpress应用
1.应用jpress.yaml
开始使用jpress.yaml文件部署jpress应用
[root@k8s-master jpress]# kubectl apply -f jpress.yaml
namespace/jpress unchanged
service/jpress-db unchanged
deployment.apps/mysql-deployment unchanged
deployment.apps/jpress created
service/jpress-it unchanged
2.查看pod资源
查看jpress应用的pod状态,确保每一个pod状态都处在正常状态中,若有异常状态,可通过pod的描述及日志信息进行排错。
[root@k8s-master jpress]# kubectl get pods -n jpress
NAME READY STATUS RESTARTS AGE
jpress-bc7989f7-pwsmj 1/1 Running 0 12m
jpress-bc7989f7-zt54q 1/1 Running 0 12m
mysql-deployment-54657d77f8-drwgm 1/1 Running 0 12m
3.查看pod详细信息
查看jpress应用的某个pod详细信息,可以看到事件中pod的启动过程,可以初步判断jpress的服务运行情况。如果需要详细查看pod日志,使用kubectl logs jpress-bc7989f7-zt54q -n jpress 命令,其中 jpress-bc7989f7-zt54q 为pod名随机生成,使用自己查询的即可。
[root@k8s-master jpress]# kubectl describe pods -n jpress jpress-bc7989f7-zt54q
Name: jpress-bc7989f7-zt54q
Namespace: jpress
Priority: 0
Node: k8s-node01/192.168.3.202
Start Time: Sat, 03 Dec 2022 14:42:56 +0800
Labels: app=jpress
deploy=jpress
pod-template-hash=bc7989f7
Annotations: cni.projectcalico.org/containerID: 0a0c7488687276bc5e2eb097adcef32b2030203ef230572e9db02d9438fe201a
cni.projectcalico.org/podIP: 10.244.85.215/32
cni.projectcalico.org/podIPs: 10.244.85.215/32
Status: Running
IP: 10.244.85.215
IPs:
IP: 10.244.85.215
Controlled By: ReplicaSet/jpress-bc7989f7
Containers:
jpress-it:
Container ID: containerd://306b29bdb5f6ef5e6c52954a89129b8beecfe3be0b416528c64f458f531c9271
Image: fuhai/jpress:v5.0.7
Image ID: docker.io/fuhai/jpress@sha256:74653433017956793a01fcfa4858526d465cfbcec08c686317d374242f66eb06
Port: 8080/TCP
Host Port: 0/TCP
State: Running
Started: Sat, 03 Dec 2022 14:45:55 +0800
Ready: True
Restart Count: 0
Limits:
cpu: 600m
memory: 512Mi
Requests:
cpu: 500m
memory: 128Mi
Environment:
TZ: Asia/Shanghai
PUID: 1000
PGID: 1000
JPRESS_DB_NAME: jpress
JPRESS_DB_USER: root
JPRESS_DB_PASSWORD: admin
JPRESS_DB_HOST: 192.168.3.202:30033
Mounts:
/opt/jpress/webapp/WEB-INF/addons from inf (rw)
/opt/jpress/webapp/addons from addons (rw)
/opt/jpress/webapp/attachment from attachment (rw)
/opt/jpress/webapp/templates/dockers from dockers (rw)
/opt/jpress/webapp/wp-content from content (rw)
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-trvj7 (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
attachment:
Type: HostPath (bare host directory volume)
Path: /data/jpress/attachment
HostPathType:
addons:
Type: HostPath (bare host directory volume)
Path: /data/jpress/webapp/addons
HostPathType:
inf:
Type: HostPath (bare host directory volume)
Path: /data/jpress/webapp/WEB-INF/addons
HostPathType:
content:
Type: HostPath (bare host directory volume)
Path: /data/jpress/webapp/wp-content
HostPathType:
dockers:
Type: HostPath (bare host directory volume)
Path: /data/jpress/webapp/templates/dockers
HostPathType:
kube-api-access-trvj7:
Type: Projected (a volume that contains injected data from multiple sources)
TokenExpirationSeconds: 3607
ConfigMapName: kube-root-ca.crt
ConfigMapOptional: <nil>
DownwardAPI: true
QoS Class: Burstable
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 12m default-scheduler Successfully assigned jpress/jpress-bc7989f7-zt54q to k8s-node01
Normal Pulling 12m kubelet Pulling image "fuhai/jpress:v5.0.7"
Normal Pulled 9m24s kubelet Successfully pulled image "fuhai/jpress:v5.0.7" in 2m58.74207719s
Normal Created 9m24s kubelet Created container jpress-it
Normal Started 9m24s kubelet Started container jpress-it
4.查看service
查看jpress应用的web和mysql的对外映射端口,mysql服务对外映射的为30033端口,jpress服务对外映射的为30016端口。
[root@k8s-master jpress]# kubectl get service -n jpress
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
jpress-db NodePort 10.110.25.22 <none> 3306:30033/TCP 13m
jpress-it NodePort 10.106.42.44 <none> 8080:30016/TCP 13m
五、jpress的初始化安装
1.进入jpress的安装界面
我们使用k8s集群的某个工作节点IP进行访问,本次使用工作节点IP:192.168.3.202进行访问,访问地址:http://192.168.3.202:30016,将IP替换为自己集群中工作节点的IP地址。
2.连接数据库
在连接数据库配置界面中,我们需要填写数据库相关信息:
- 数据库名:jpress;
- 用户名:root;
- 密码:admin;
- 主机:工作节点的IP地址,这里填写的是192.168.3.202;
- 端口号:30033,这里填写的是数据库对外暴露的端口30033。
- 下一步即可。
3.网站设置
设置网站名和登录账号密码,自定义设置即可。
六、登录jpress的后台管理
七、访问jpress的首页
访问地址:http://192.168.3.202:30016,将IP换为自己工作节点的IP地址,此时,已成功访问到jpress的首页。
八、jpress的后台设置
1.设置主题模板
访问地址:http://192.168.3.202:30016/admin,填写刚设置的管理员账号和密码,进入到jpress的后台管理页面,在系统管理——所有模板界面,可以设置主题模板。
2.查看模板效果
设置完模板后,我们返回jpress的前台首页,可以看到已经成功更换主题了。
3.文章导入功能
在jpress的后台管理中,我们可以将不同平台的文章进行导入。
4.用户管理功能
在用户管理页面中,我们可以对用户进行基本管理,包括新建、查询用户等。
5.插件安装
在插件管理页面,可以安装一些基本插件。
6.编辑文本内容
在jpress的后台管理中,可以直接在编辑器中编辑文章,进行发布。