Kubernetes(K8S)快速搭建 typecho 个人博客 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cclt
V2EX    Kubernetes

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

  •  
  •   cclt 2023-10-25 22:58:01 +08:00 2986 次点击
    这是一个创建于 742 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 可以自动扩展应用程序的实例数以满足需求,并在访问量下降时自动缩减资源的使用。大家如果发现它别的特点功能可以和我讨论!或者还有什么类似的程序大家也可以分享一下!

    26 条回复    2023-12-05 03:16:17 +08:00
    baiduyixia
        1
    baiduyixia  
       2023-10-25 23:37:29 +08:00   2
    你这叫快速?????购买个虚拟主机,这才是快速:下载上传安装,搞定!
    rus4db
        2
    rus4db  
       2023-10-25 23:46:24 +08:00   2
    想到了那个 meme:巨大的平板拖车上放着一个小小的纸盒
    jackgoudan
        3
    jackgoudan  
       2023-10-25 23:47:46 +08:00   4
    高射炮打蚊子
    QUC062IzY3M1Y6dg
        4
    QUC062IzY3M1Y6dg  
       2023-10-26 00:28:56 +08:00
    你这也太复杂了吧
    xiaoranj
        5
    xiaoranj  
       2023-10-26 00:35:21 +08:00
    @rus4db 我想到了另一个 meme:巨大的平板拖车上放着一大摞东西,前面是个小三轮车头,上面写着 “J1900”
    stinkytofu
        6
    stinkytofu  
       2023-10-26 01:53:59 +08:00
    核弹炸小强
    fox0001
        7
    fox0001  
       2023-10-26 07:50:22 +08:00 via Android
    up 主只是想分享知识的吧?买的 VPS ,才 512MB 内存,不敢上 K8S
    bigha
        8
    bigha  
       2023-10-26 08:47:37 +08:00
    说实话 搭建 k3s 集群的脚本写的不错 但漏掉了很多细节 对小白还是很致命啊 比如

    1 、可能要升级系统内核
    2 、得自己配置镜像加速
    coolcoffee
        9
    coolcoffee  
       2023-10-26 09:47:10 +08:00
    OP 这个快速搭建教程,小白两三天能学会都算厉害的了。

    Kubernetes 的高可用仅限于云厂商全托管的集群,否则网络、存储、节点扩容以及自愈都会是问题。 当然,Kubernetes 专家除外。
    luomao
        10
    luomao  
       2023-10-26 10:35:26 +08:00
    航空母舰载 mini 无人机?
    mightybruce
        11
    mightybruce  
       2023-10-26 10:55:47 +08:00
    建议楼主 至少建个 helm 模板,对于这种个人博客来说,很多小白不愿意钻研技术的。
    mightybruce
        12
    mightybruce  
       2023-10-26 10:57:35 +08:00
    另外这样的个人博客,在很多云平台上是有运开定制好的应用模板,有的还有 servereless 博客服务,点击几下,几十秒就自动创建了, 你这个倒是很像自学 kubernetes 的新手。
    BaseException
        13
    BaseException  
       2023-10-26 10:58:50 +08:00   1
    docker 或者 docker-compose 部署 typecho 是个不错的折衷方案。。
    zhonj
        14
    zhonj  
       2023-10-26 11:07:43 +08:00
    核弹打细菌
    klo424
        15
    klo424  
       2023-10-26 11:14:22 +08:00
    腾讯云的软广是吧
    anubu
        16
    anubu  
       2023-10-26 11:22:00 +08:00
    搭建个人博客前要先部署一个 k8s 集群,感谢你对 yaml 工程师的认可,如果不是有意揭露我们工作本质的话。
    szdev
        17
    szdev  
       2023-10-26 11:34:40 +08:00
    这软广不错
    dif
        18
    dif  
       2023-10-26 11:48:48 +08:00
    想起一张图,一个半挂拉着一个小盒子。
    cmos
        19
    cmos  
       2023-10-26 11:53:53 +08:00   4
    帮楼上补一张图

    blackmirror
        20
    blackmirror  
       2023-10-26 17:21:06 +08:00
    嗯,下次 PHP 面试就用这题目了
    cclt
        21
    cclt  
    OP
       2023-10-31 22:03:38 +08:00
    @BaseException 道理是一样的
    cclt
        22
    cclt  
    OP
       2023-10-31 22:04:18 +08:00
    @mightybruce 我也是在别人的指导下,慢慢的入门的,我就吧自己摸索过程分享出来
    cclt
        23
    cclt  
    OP
       2023-10-31 22:04:47 +08:00
    @fox0001 是的呢
    cclt
        24
    cclt  
    OP
       2023-10-31 22:06:03 +08:00
    @coolcoffee 安装我写的教程,一步步的来应该很好完成的
    cclt
        25
    cclt  
    OP
       2023-10-31 22:06:57 +08:00
    @rus4db 恰如其分,我只是刚学习这个集群,还不知道怎么玩好,就弄这么个玩意
    johnzr
        26
    johnzr  
       2023-12-05 03:16:17 +08:00
    你这 typecho 如何与 mysql 数据库连接的?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5299 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 06:52 PVG 14:52 LAX 22:52 JFK 01:52
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86