Redian新闻
>
如何用Kubernetes实战快速搭建typecho个人博客?

如何用Kubernetes实战快速搭建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/v1kind: Deploymentmetadata:  labels:    app: &name mysql   # Deployment的标签,用于标识资源为mysql应用程序  name: *name  # Deployment的名称为mysql  namespace: default  # Deployment所在的命名空间为defaultspec:  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: v1kind: Servicemetadata: name: mysql # Service的名称为mysql namespace: default # Service所在的命名空间为defaultspec: 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/v1metadata:  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: v1metadata: 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/v1metadata: 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一样的方式复制修改配置文件即可成功搭建。


测试使用

    首先把域名解析到对应的pod的ip之后,直接用域名访问。访问成功即创建博客成功,然后根据提示进行下一步安装。

提示


这里建议选择我标注出来的这个。


5、总结

    Kubernetes提供了强大的高可用性特性,它可以自动管理和调度容器实例,确保应用程序在集群中始终可用。还可以监控和自动修复故障的容器实例,提高博客的稳定性和可靠性。它的弹性伸缩的特性,可以根据负载变化自动调整程序。当博客访问量增加时,Kubernetes可以自动扩展应用程序的实例数以满足需求,并在访问量下降时自动缩减资源的使用。


:https://cloud.tencent.com/developer/article/2350505


微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
Kubernetes 实战:使用 k8s+jenkins 实现 CICDOne Year After Exit, Blizzard Games Eyes Return to China: Report八月25日共军飞机继续绕台湾飞行桃源在心Kubernetes 基础入门,还有谁不会?准备好屏幕 | 现场:BimBamBoom - Shinzo BakuBaku Ochokochoi @ 下北沢SHELTER通过例子介绍如何从零开发 Kubernetes OperatorOld Markets, New Appeal: Young Chinese Rediscover Wet Markets剑指 Kubernetes!微软发布开源平台 Radius:高效构建、运行云原生应用程序How Tinder Became China’s Hottest Networking App《星级男人通鉴》第20章 平安夜的陷阱Kubernetes 上 API 网关的未来既然有了Kubernetes,为什么还需要 Istio?早报 | ​Phoebe Philo个人品牌首个系列发布,定价对标BV;​Dior上海恒隆旗舰店重新开幕;传Topshop将被卖如何利用 Kubernetes 实现应用零宕机燃情岁月1989(22)Pinterest 使用 Kubernetes 和 Helix 构建下一代异步计算平台 PacerJenkins pipeline如何连接Kubernetes?Kubernetes 中的 Java 应用的内存调优小米一开源项目被批“三无”,项目导师回应;Ruby on Rails之父将TypeScript从Turbo框架中移除 | Q资讯Kubernetes 中 Nginx 配置热加载After Dog Mauls Child, Chinese Cities Push to Tighten Pet Laws使用 kube-downscaler 降低Kubernetes集群成本ACE 合作|线下·硅谷 | 9/19 Chinese Tech NetworkSpringCloud 微服务迁移到 Kubernetes 容器化完整流程在 Kubernetes 集群中,如何正确选择工作节点资源大小海外华人王同学Redis实战 | 使用Redis 的有序集合(Sorted Set)实现排行榜功能,和Spring Boot集成kuberntes ingress 和 openshift router 异同?Kubernetes 网络排错终极指南图解几种常见 Kubernetes Pod 驱逐场景Experts Warn Against New Fad in Chinese Schools — Nasal Sticks优化资源利用:Kubernetes 装箱的效益和挑战Kubernetes 资源请求和限制的最佳实践容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。