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


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

    1、准备工作

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

    注意

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

    腾讯云轻量应用服务器购买地址:传送门

    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端口
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66

    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访问
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85

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

    输入图片说明
    输入图片说明
    和创建mysql一样的方式复制修改配置文件即可成功搭建。

    4、测试使用

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

    5、总结

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

  • 相关阅读:
    C# 将一种类型的数组转换为另一种类型的数组
    【Qt】界面布局
    从零开始写 Docker(十七)---容器网络实现(中):为容器插上”网线“
    ubuntu20.4 执行sudo apt-get update出现错误 libnettle.so.6 动态链接库错误
    秋招面试题系列- - -Java工程师(三)
    图像采集卡在应用程序的重要性概述
    【毕业设计源码】PHP高校兼职跑腿系统
    java计算机毕业设计考研驿站网站源程序+mysql+系统+lw文档+远程调试
    50道Java集合高频面试题,看完面试成功率百分之99
    基于SSM的小区物业管理系统设计与实现
  • 原文地址:https://blog.csdn.net/qq_36134996/article/details/134045530