侧边栏壁纸
博主头像
再见理想博主等级

只争朝夕,不负韶华

  • 累计撰写 112 篇文章
  • 累计创建 64 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

通过 K8S 部署 Halo 博客

再见理想
2022-07-06 / 0 评论 / 0 点赞 / 630 阅读 / 726 字

一,前言

在 K8S 上如何部署一个简单的服务?此文中,将介绍如何在 K8S 上部署一个 halo 博客,并将服务暴露到外网。大致流程可以参考下图:



大致流程可以概况为:

  1. 准备服务镜像;
  2. 通过 pod 控制器管理创建 pod;
  3. 通过 Service 暴露服务;
  4. 域名解析,对外发布服务;

部署前需要准备:

  • K8S 集群环境;
  • 已搭建的MySQL 服务;
  • halo 服务镜像;

二,准备服务镜像

从 halo 官网可以拿到最新的镜像为:

halohub/halo:1.5.3

一般项目需要通过 Dockerfile 生成镜像,通过 Jenkins 将镜像上传到 DockerHub 或者 阿里云镜像中心,然后就能获取到可用的服务镜像。

可参考:Docker 构建镜像

三,通过pod 控制器创建

可以通过 pod 控制器去创建指定副本数量的 pod,以及配置服务启动相关参数(也可以通过 ConfigMap)和容器卷挂载相关配置。

开始前需要准备已经搭建好的 MySQL 服务,并在 MySQL 中新建 halodb 数据库。

创建并编辑 pod 控制器 yaml 文件:

mkdir /k8s/halo
vim halo-deploy.yaml

halo-deploy.yaml 文件配置:

apiVersion: apps/v1
kind: Deployment      
metadata:
  name: halo-blog
  namespace: halo
  labels: 
    app: halo
spec: 
  replicas: 2    # 创建2个副本
  selector:
    matchLabels:
      app: halo
  template:
    metadata:
      labels:
        app: halo
    spec:
      containers:
      - name: halo
        image: halohub/halo:1.5.3
        imagePullPolicy: IfNotPresent
        volumeMounts:
        - name: halo-volume
          mountPath: /root/.halo
        env:
        - name: "SERVER_PORT"
          value: "8090"
        - name: "SPRING_DATASOURCE_DRIVER_CLASS_NAME"
          value: "com.mysql.cj.jdbc.Driver"
        - name: "SPRING_DATASOURCE_URL"
          value: "jdbc:mysql://mysql地址/halodb?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true"
        - name: "SPRING_DATASOURCE_USERNAME"
          value: "用户名"
        - name: "SPRING_DATASOURCE_PASSWORD"
          value: "密码"
        - name: "HALO_ADMIN_PATH"
          value: "admin"
        - name: "HALO_CACHE"
          value: "memory"
      volumes:
      - name: halo-volume
        hostPath: 
          path: /k8s/halo/logs   # 挂载到主机/k8s/halo/logs目录
          type: DirectoryOrCreate

根据配置文件启动:

kubectl apply -f halo-deploy.yaml

启动后通过命令及查看启动日志检查 pod 是否创建成功:

kubectl get pod -n halo
kubectl logs -f --tail 200 pod全名称 -n halo

四,通过 Service 暴露服务

可以通过 Service 的 NodePort 类型,将 service 的端口映射到Node的一个端口上,然后就可以通过NodeIp:NodePort 来访问 service 了。

创建并编辑 Service 配置文件

vim halo-svc.yaml

halo-svc.yaml 配置:

apiVersion: v1
kind: Service
metadata:
  name: halo-svc
  namespace: halo
spec:
  selector:
    app: halo
  type: NodePort
  ports:
  - port: 8090         # service端口
    nodePort: 30002    # 主机端口 范围:30000-32767
    targetPort: 8090   # pod端口

根据配置文件启动 Service:

kubectl apply -f halo-svc.yaml

启动完成后,在浏览器上访问 服务器ip:暴露端口 看能否成功访问。

至此,已成功通过 K8S 部署。

0

评论区