敏行运维
发布于 2023-11-02 / 275 阅读
0

使用Solopace.Gem访问k8s部署的CMS系统

说明:本教程将通过kubernetes来部署CMS的后端数据存储和前端服务,在参阅本教程前,需要您具备一定的kubernetes基础知识

部署mysql

  1. 创建部署文件

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
  1. 创建存储卷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
  1. 创建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
  1. 创建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
  1. 应用资源模板

kubectl apply -f .
  1. 查看容器状态

kubectl get pods -n middleware deploy-mysql-5fddfdfd46-vphnv

STATUS为Running则代表mysql启动成功

部署Halo CMS

  1. 创建部署文件

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


      
  1. 创建存储卷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
  1. 创建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
  1. 应用资源模板

kubectl apply -f .
  1. 查看容器状态

kubectl get pods -n middleware deploy-halo-5c5864b648-kx6x7

STATUS为Running则代表mysql启动成功

通过SolopaceGem完成Kubernetes Work节点与用户端的组网

  1. 任选一台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

  • 复制组网链接地址至浏览器打开

  • 创建组网并加入

成功加入组网

  1. 在客户端上安装SolopaceGem

  • 下载SolopaceGem客户端

在官网下载适用于您设备系统的客户端。

官网:https://solopace.doaction.pro/

下载完成后,按照提示进行安装即可。

  • 安装后登录/注册(未注册用户将会自动注册)

此处使用之前安装Docker客户端是注册的账号登录

  • 客户端加入组网

登录后选择已有网络ID,将会自动列出之前创建的网络

选择网络ID并加入即可

  • 连接网络

当在在线设备列表中看到当前客户端与Kubernetes Docker客户端都处于在线状态时,说明组网成功。

访问CMS

组网成功后,在管理端PC上通过访问k8s work节点的SolopaceGem组网IP+Halo服务的NodePort端口,即可访问Halo的管理页面,第一次访问时需要做一些初始化配置,按照提示完成即可。