说明:本教程将通过kubernetes来部署CMS的后端数据存储和前端服务,在参阅本教程前,需要您具备一定的kubernetes基础知识
部署mysql
创建部署文件
vim deployment-mysql.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy-mysql
labels:
app: mysql
front: halo
spec:
replicas: 1
selector:
matchLabels:
app: mysql
front: halo
template:
metadata:
name: mysql
labels:
app: mysql
front: halo
spec:
containers:
- name: mysql
image: mysql:5.7
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3306
readinessProbe:
tcpSocket:
port: 3306
initialDelaySeconds: 5
periodSeconds: 10
timeoutSeconds: 1
successThreshold: 1
failureThreshold: 3
livenessProbe:
tcpSocket:
port: 3306
initialDelaySeconds: 5
periodSeconds: 10
timeoutSeconds: 1
successThreshold: 1
failureThreshold: 3
lifecycle:
preStop:
exec:
command: ["sh", "-c", "mysqladmin -uroot -p$MYSQL_ROOT_PASSWORD shutdown"]
resources:
limits:
cpu: 2000m
memory: 2048Mi
requests:
cpu: 100m
memory: 100Mi
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: sec-mysql-pass
key: MYSQL_ROOT_PASSWORD
- name: MYSQL_DATABASE
value: halo_db
- name: MYSQL_USER
value: halo
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: sec-mysql-pass
key: MYSQL_HALO_PASSWORD
volumeMounts:
- name: mysql-data
mountPath: /var/lib/mysql
volumes:
- name: mysql-data
persistentVolumeClaim:
claimName: pvc-mysql-data
创建存储卷PVC存放持久化数据
vim pvc-mysql.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-mysql-data
labels:
app: mysql
front: halo
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 50Gi
storageClassName: alibabacloud-cnfs-nas
创建Secret存放mysql密码
vim sec-mysql.yaml
apiVersion: v1
kind: Secret
metadata:
name: sec-mysql-pass
labels:
app: mysql
front: halo
type: Opaque
data:
MYSQL_ROOT_PASSWORD: xxxxxxxxxx
MYSQL_HALO_PASSWORD: xxxxxxxxxx
创建Service提供集群内访问
vim svc-mysql.yaml
apiVersion: v1
kind: Service
metadata:
name: svc-mysql
labels:
app: mysql
front: halo
spec:
type: ClusterIP
ports:
- port: 3306
targetPort: 3306
name: mysql
selector:
app: mysql
front: halo
应用资源模板
kubectl apply -f .
查看容器状态
kubectl get pods -n middleware deploy-mysql-5fddfdfd46-vphnv
STATUS为Running则代表mysql启动成功
部署Halo CMS
创建部署文件
vim deployment-halo.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy-halo
labels:
app: halo
spec:
replicas: 1
selector:
matchLabels:
app: halo
template:
metadata:
labels:
app: halo
spec:
containers:
- name: halo
image: halohub/halo:2.10
ports:
- containerPort: 8090
args:
- --spring.r2dbc.url=r2dbc:pool:mysql://svc-mysql.middleware.svc.cluster.local:3306/halo_db
- --spring.r2dbc.username=halo
- --spring.r2dbc.password=<数据库账号halo的密码>
- --spring.sql.init.platform=mysql
- --halo.external-url=<http://SolopaceGem组网IP:NodePort端口>
readinessProbe:
httpGet:
path: /actuator/health/readiness
port: 8090
initialDelaySeconds: 30
periodSeconds: 60
timeoutSeconds: 5
livenessProbe:
httpGet:
port: 8090
path: /actuator/health/readiness
initialDelaySeconds: 30
periodSeconds: 60
timeoutSeconds: 5
resources:
limits:
cpu: 500m
memory: 1Gi
requests:
cpu: 100m
memory: 256Mi
volumeMounts:
- mountPath: /root/.halo2
name: halo-data
volumes:
- name: halo-data
persistentVolumeClaim:
claimName: pvc-halo-data
创建存储卷PVC存放halo的持久化数据
vim pvc-halo.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-halo-data
labels:
app: halo
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: alibabacloud-cnfs-nas
创建NodePort类型的Service暴露管理页面
vim svc-halo.yaml
apiVersion: v1
kind: Service
metadata:
name: svc-halo
labels:
app: halo
spec:
type: NodePort
ports:
- port: 8090
targetPort: 8090
name: http
nodePort: 31111
selector:
app: halo
应用资源模板
kubectl apply -f .
查看容器状态
kubectl get pods -n middleware deploy-halo-5c5864b648-kx6x7
STATUS为Running则代表mysql启动成功
通过SolopaceGem完成Kubernetes Work节点与用户端的组网
任选一台Kubernetes Work节点安装SolopaceGem
Kubernetes本身具有容器运行环境,因此我们选择最简单方便的Docker来安装SolopaceGem
执行以下命令启动SolopaceGem Docker客户端
sudo docker run -d --name=SolopaceGem -v /var/lib:/var/lib -v /dev/net/tun:/dev/net/tun --network=host --restart=always --cap-add=NET_ADMIN --cap-add=NET_RAW doaction/solopacegem:latest
获取SolopaceGem组网链接
sudo docker exec SolopaceGem solopacegem status
复制组网链接地址至浏览器打开
创建组网并加入
成功加入组网
在客户端上安装SolopaceGem
下载SolopaceGem客户端
在官网下载适用于您设备系统的客户端。
官网:https://solopace.doaction.pro/
下载完成后,按照提示进行安装即可。
安装后登录/注册(未注册用户将会自动注册)
此处使用之前安装Docker客户端是注册的账号登录
客户端加入组网
登录后选择已有网络ID,将会自动列出之前创建的网络
选择网络ID并加入即可
连接网络
当在在线设备列表中看到当前客户端与Kubernetes Docker客户端都处于在线状态时,说明组网成功。
访问CMS
组网成功后,在管理端PC上通过访问k8s work节点的SolopaceGem组网IP+Halo服务的NodePort端口,即可访问Halo的管理页面,第一次访问时需要做一些初始化配置,按照提示完成即可。