Kubernetes(K8S)快速搭建 typecho 个人博客

2023-10-25 22:58:01 +08:00
 cclt

Kubernetes ( K8S )快速搭建 typecho 个人博客

1 、准备工作

K8S 集群环境,搭建教程参考腾讯云 Lighthouse 组建跨地域 Kubernetes 集群 K8S 集群面板,搭建教程参考Kubernetes 集群管理面板的安装及使用 - 青阳のblog-一个计算机爱好者的个人博客 (hipyt.cn)

注意

如果没有集群或者服务器不够可以通过官网新购。

购买并配置 Lighthouse 服务器 Lighthouse 是腾讯云推出的一款轻量应用服务器产品,它提供了高性价比、高可用性、高安全性和高灵活性的云端计算服务。具体信息参阅官方文档: https://cloud.tencent.com/document/product/1207/44361

2 、部署说明

说明:本文的教程是基于 Kubernetes 集群的,搭建了 kuboard 管理面板,之后在进行搭建 typecho 博客的教程。

本文使用的对应 docker 镜像的地址如下: MySQL:mysql - Official Image | Docker Hub typecho:rehiy/typecho - Docker Image | Docker Hub

3 、创建 mysql 数据库

3.1 mysql 配置文件

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: &name mysql   # Deployment 的标签,用于标识资源为 mysql 应用程序
  name: *name  # Deployment 的名称为 mysql
  namespace: default  # Deployment 所在的命名空间为 default
spec:
  replicas: 1  # Deployment 副本数量为 1
  selector:  # 标签选择器,选择包含标签 app:mysql 的资源
    matchLabels:
      app: *name
  template:  # Pod 的模板,用于选择或创建 Pod
    metadata:  # Pod 的元数据
      labels:
        app: *name
    spec:
      affinity:  # Pod 亲和性设置
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
              - matchFields:
                  - key: metadata.name
                    operator: In
                    values:
                      - vm-4-13-ubuntu  # 选择节点名称为 vm-4-13-ubuntu 的节点作为部署目标
      containers:  # 容器定义
      - name: *name  # 容器的名称为 mysql
        image: mysql:latest  # 使用最新版的 MySQL 镜像
        ports:  # 容器端口映射
        - containerPort: 3306  # 将容器的 3306 端口暴露出来
        env:  # 环境变量设置
        - name: MYSQL_ROOT_PASSWORD  # MySQL 的 root 用户密码
          value: typecho@123
        - name: MYSQL_DATABASE  # MySQL 数据库名称
          value: typecho
        - name: MYSQL_USER  # MySQL 用户名
          value: typecho
        - name: MYSQL_PASSWORD  # MySQL 用户密码
          value: typecho@123
        volumeMounts:  # 容器的卷挂载设置
        - name: db  # 指定卷的名称为 db
          mountPath: /var/lib/mysql  # 将卷挂载到容器的/var/lib/mysql 路径下
      volumes:  # 卷定义
      - name: db  # 卷的名称为 db
        hostPath:
          path: /var/lib/mysql  # 指定主机上的路径/var/lib/mysql 作为卷的路径

---

apiVersion: v1
kind: Service
metadata:
  name: mysql  # Service 的名称为 mysql
  namespace: default  # Service 所在的命名空间为 default
spec:
  type: ClusterIP  # Service 类型为 ClusterIP ,内部集群使用
  selector:
    app: mysql
  ports:
  - name: db-port
    protocol: TCP
    port: 3306  # Service 的端口号为 3306
    targetPort: 3306  # Service 转发流量到 Pod 的 3306 端口


3.2 使用配置文件创建 mysql 服务

把上面的 yaml 配置修改之后复制粘贴到这里直接提交确定。 这样就是成功搭建了 mysql 服务,点击进去可以看到具体信息。

4 、创建 typecho

4.1 mysql 配置文件

kind: Deployment  # 创建 Deployment 资源
apiVersion: apps/v1
metadata:
  name: &name myblog  # 定义名为 myblog 的标量锚点,值为"myblog"。并将锚点引用到 name 字段中
  namespace: default
  labels:
    app: *name  # 将锚点引用到 app 标签的值上
spec:
  selector:
    matchLabels:
      app: *name  # 根据 app 标签选择匹配的 Pod
  template:
    metadata:
      labels:
        app: *name  # 在 Pod 模板中使用 app 标签,并引用锚点
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
              - matchFields:
                  - key: metadata.name
                    operator: In
                    values:
                      - vm-4-13-ubuntu  # 选择节点名称为 vm-4-13-ubuntu 的节点作为部署目标
      containers:
        - name: typecho  # 定义一个名为 typecho 的容器
          image: rehiy/typecho  # 使用 rehiy/typecho 镜像
          ports:
            - containerPort: 80  # 容器暴露的端口号为 80
            - containerPort: 443  # 容器暴露的端口号为 443
          volumeMounts:
            - name: *name  # 引用锚点指定的卷名
              subPath: usr  # 指定挂载到容器的子路径为 usr
              mountPath: /var/www/default/usr  # 将卷挂载到容器的/var/www/default/usr 路径下
      volumes:
        - name: *name  # 引用锚点指定的卷名
          hostPath:
            path: /srv/myblog  # 指定主机上的路径/srv/myblog 作为卷的路径
            type: DirectoryOrCreate  # 如果路径不存在,则创建目录

---

kind: Service  # 创建 Service 资源
apiVersion: v1
metadata:
  name: &name myblog  # 引用锚点指定的名称
  namespace: default
  labels:
    app: *name  # 引用锚点指定的标签值
spec:
  selector:
    app: *name  # 根据 app 标签选择匹配的 Pod
  ports:
    - name: http  # 定义名为 http 的端口
      port: 80  # Service 监听的端口号为 80
      targetPort: 80  # Service 转发流量到 Pod 的端口号为 80
    - name: https  # 定义名为 https 的端口
      port: 443  # Service 监听的端口号为 443
      targetPort: 443  # Service 转发流量到 Pod 的端口号为 443

---

kind: Ingress  # 创建 Ingress 资源
apiVersion: networking.k8s.io/v1
metadata:
  name: &name myblog  # 引用锚点指定的名称
  namespace: default
  annotations:
    traefik.ingress.kubernetes.io/router.entrypoints: web,websecure  # Traefik 路由入口配置
spec:
  rules:
    - host: blog.eg.cn  # 定义访问 Ingress 的域名
      http:
        paths:
          - path: /  # 匹配路径为/
            pathType: Prefix  # 路径类型为前缀匹配
            backend:
              service:
                name: *name  # 引用锚点指定的 Service 名称
                port:
                  name: http  # 引用锚点指定的端口名称
  tls:
    - secretName: default  # 使用名为 default 的 TLS 证书密钥对,用于 HTTPS 访问

4.2 使用配置文件创建 typecho 博客

和创建 mysql 一样的方式复制修改配置文件即可成功搭建。

4 、测试使用

首先把域名解析到对应的 pod 的 ip 之后,直接用域名访问。访问成功即创建博客成功,然后根据提示进行下一步安装。 提示 这里建议选择我标注出来的这个。

5 、总结

Kubernetes 提供了强大的高可用性特性,它可以自动管理和调度容器实例,确保应用程序在集群中始终可用。还可以监控和自动修复故障的容器实例,提高博客的稳定性和可靠性。它的弹性伸缩的特性,可以根据负载变化自动调整程序。当博客访问量增加时,Kubernetes 可以自动扩展应用程序的实例数以满足需求,并在访问量下降时自动缩减资源的使用。大家如果发现它别的特点功能可以和我讨论!或者还有什么类似的程序大家也可以分享一下!

2452 次点击
所在节点    Kubernetes
26 条回复
cclt
2023-10-31 22:03:38 +08:00
@BaseException 道理是一样的
cclt
2023-10-31 22:04:18 +08:00
@mightybruce 我也是在别人的指导下,慢慢的入门的,我就吧自己摸索过程分享出来
cclt
2023-10-31 22:04:47 +08:00
@fox0001 是的呢
cclt
2023-10-31 22:06:03 +08:00
@coolcoffee 安装我写的教程,一步步的来应该很好完成的
cclt
2023-10-31 22:06:57 +08:00
@rus4db 恰如其分,我只是刚学习这个集群,还不知道怎么玩好,就弄这么个玩意
johnzr
2023-12-05 03:16:17 +08:00
你这 typecho 如何与 mysql 数据库连接的?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/985457

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX