
Kubernetes ( K8S )快速搭建 typecho 个人博客
K8S 集群环境,搭建教程参考腾讯云 Lighthouse 组建跨地域 Kubernetes 集群 K8S 集群面板,搭建教程参考Kubernetes 集群管理面板的安装及使用 - 青阳のblog-一个计算机爱好者的个人博客 (hipyt.cn)
如果没有集群或者服务器不够可以通过官网新购。
购买并配置 Lighthouse 服务器 Lighthouse 是腾讯云推出的一款轻量应用服务器产品,它提供了高性价比、高可用性、高安全性和高灵活性的云端计算服务。具体信息参阅官方文档: https://cloud.tencent.com/document/product/1207/44361 。
说明:本文的教程是基于 Kubernetes 集群的,搭建了 kuboard 管理面板,之后在进行搭建 typecho 博客的教程。
本文使用的对应 docker 镜像的地址如下: MySQL:mysql - Official Image | Docker Hub typecho:rehiy/typecho - Docker Image | Docker Hub
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 端口
把上面的 yaml 配置修改之后复制粘贴到这里直接提交确定。
这样就是成功搭建了 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 访问
和创建 mysql 一样的方式复制修改配置文件即可成功搭建。
首先把域名解析到对应的 pod 的 ip 之后,直接用域名访问。访问成功即创建博客成功,然后根据提示进行下一步安装。 提示
这里建议选择我标注出来的这个。 
Kubernetes 提供了强大的高可用性特性,它可以自动管理和调度容器实例,确保应用程序在集群中始终可用。还可以监控和自动修复故障的容器实例,提高博客的稳定性和可靠性。它的弹性伸缩的特性,可以根据负载变化自动调整程序。当博客访问量增加时,Kubernetes 可以自动扩展应用程序的实例数以满足需求,并在访问量下降时自动缩减资源的使用。大家如果发现它别的特点功能可以和我讨论!或者还有什么类似的程序大家也可以分享一下!
1 baiduyixia 2023-10-25 23:37:29 +08:00 你这叫快速?????购买个虚拟主机,这才是快速:下载上传安装,搞定! |
2 rus4db 2023-10-25 23:46:24 +08:00 想到了那个 meme:巨大的平板拖车上放着一个小小的纸盒 |
3 jackgoudan 2023-10-25 23:47:46 +08:00 高射炮打蚊子 |
4 QUC062IzY3M1Y6dg 2023-10-26 00:28:56 +08:00 你这也太复杂了吧 |
6 stinkytofu 2023-10-26 01:53:59 +08:00 核弹炸小强 |
7 fox0001 2023-10-26 07:50:22 +08:00 via Android up 主只是想分享知识的吧?买的 VPS ,才 512MB 内存,不敢上 K8S |
8 bigha 2023-10-26 08:47:37 +08:00 说实话 搭建 k3s 集群的脚本写的不错 但漏掉了很多细节 对小白还是很致命啊 比如 1 、可能要升级系统内核 2 、得自己配置镜像加速 |
9 coolcoffee 2023-10-26 09:47:10 +08:00 OP 这个快速搭建教程,小白两三天能学会都算厉害的了。 Kubernetes 的高可用仅限于云厂商全托管的集群,否则网络、存储、节点扩容以及自愈都会是问题。 当然,Kubernetes 专家除外。 |
10 luomao 2023-10-26 10:35:26 +08:00 航空母舰载 mini 无人机? |
11 mightybruce 2023-10-26 10:55:47 +08:00 建议楼主 至少建个 helm 模板,对于这种个人博客来说,很多小白不愿意钻研技术的。 |
12 mightybruce 2023-10-26 10:57:35 +08:00 另外这样的个人博客,在很多云平台上是有运开定制好的应用模板,有的还有 servereless 博客服务,点击几下,几十秒就自动创建了, 你这个倒是很像自学 kubernetes 的新手。 |
13 BaseException 2023-10-26 10:58:50 +08:00 docker 或者 docker-compose 部署 typecho 是个不错的折衷方案。。 |
14 zhonj 2023-10-26 11:07:43 +08:00 核弹打细菌 |
15 klo424 2023-10-26 11:14:22 +08:00 腾讯云的软广是吧 |
16 anubu 2023-10-26 11:22:00 +08:00 搭建个人博客前要先部署一个 k8s 集群,感谢你对 yaml 工程师的认可,如果不是有意揭露我们工作本质的话。 |
17 szdev 2023-10-26 11:34:40 +08:00 这软广不错 |
18 dif 2023-10-26 11:48:48 +08:00 想起一张图,一个半挂拉着一个小盒子。 |
19 cmos 2023-10-26 11:53:53 +08:00 |
20 blackmirror 2023-10-26 17:21:06 +08:00 嗯,下次 PHP 面试就用这题目了 |
21 cclt OP @BaseException 道理是一样的 |
22 cclt OP @mightybruce 我也是在别人的指导下,慢慢的入门的,我就吧自己摸索过程分享出来 |
24 cclt OP @coolcoffee 安装我写的教程,一步步的来应该很好完成的 |
26 johnzr 2023-12-05 03:16:17 +08:00 你这 typecho 如何与 mysql 数据库连接的? |