轻量对象存储----填补Lighthouse云原生存储的重要一环

在腾讯云轻量服务器上构建 Kubernetes 集群和部署云原生应用的过程中,由于低配的轻量服务器无法很好的发挥云原生存储应用的性能,导致共享存储一直是一个避而不谈的话题,这也严重影响了集群中一些有状态应用的故障迁移能力。然而,最近腾讯云轻量对象存储的悄然上线为我们提供了一种新的可能性,很大程度上填补了这一环节的不足。

本文将引导读者使用轻量对象存储作为共享存储,部署一个高可用的 Typecho 博客。

购买轻量对象存储

轻量对象存储 Lighthouse-COS 是腾讯云 Lighthouse 服务基于对象存储 COS 服务提供的分布式存储服务。

值得一提的是,轻量对象存储的计费策略非常简单,购买一个资源包就可以覆盖容量和流量两种计费属性,并且接口请求数是免费的。具体购买方式请参阅购买指南。

准备服务器操作环境

1、轻量服务器 Kubernets 集群

如果你还没有可用的集群,可参阅之前的文章快速搭建:腾讯云同地域组建Kubernetes集群。

2、挂载轻量对象存储桶到 /srv/lhcos 目录

创建存储桶后,可参阅官方文档挂载存储桶一章,将其挂载到所有k8s节点服务器上。需要注意的是:所有节点上的存储桶挂载目录、服务器挂载目录必须一致,以确保pod迁移后可以恢复之前的状态。

本文中约定,存储桶挂载目录全部填写 /k8s,服务器挂载目录全部填写 /srv/lhcos,两者的命名并没有什么强关联性。

创建 kubernetes 部署文件

使用 OrcaTerm 将下面的代码保存到主节点服务器上,文件路径/srv/myblog.yml,请注意修改配置文件中的域名 myblog.example.org。

此部署使用了我为云原生场景定制的 Typechoy 镜像,基于 rehiy/webox:nginx-php8 构建,支持 x86_64 和 arm64 构架;每周日拉取 Typecho 主分支代码更新镜像。

yaml 复制代码
kind: Deployment
apiVersion: apps/v1
metadata:
  name: &name myblog
  labels:
    app: *name
spec:
  selector:
    matchLabels:
      app: *name
  template:
    metadata:
      labels:
        app: *name
    spec:
      containers:
        - name: typecho
          image: rehiy/typecho
          ports:
            - containerPort: 80
            - containerPort: 443
          volumeMounts:
            - name: *name
              subPath: usr
              mountPath: /var/www/default/usr
      volumes:
        - name: *name
          hostPath:
            path: /srv/lhcos/myblog
            type: DirectoryOrCreate
---
kind: Service
apiVersion: v1
metadata:
  name: &name myblog
  labels:
    app: *name
spec:
  selector:
    app: *name
  ports:
    - name: http
      port: 80
      targetPort: 80
    - name: https
      port: 443
      targetPort: 443
---
kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:
  name: &name myblog
  annotations:
    traefik.ingress.kubernetes.io/router.entrypoints: web,websecure
spec:
  rules:
    - host: blog.example.org
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: *name
                port:
                  name: http
  tls:
    - secretName: default

部署 Typecho 服务

使用 OrcaTerm终端,执行以下命令完成部署。

shell 复制代码
kubectl apply -f /srv/myblog.yml

测试和验证

浏览器打开 http://blog.example.org,看到博客初始页面即表示部署成功。为了验证其是否高可用,可以关闭正在运行该服务的节点,观察是否可以自动切换到其他节点继续提供服务。

测试过程中,有些步骤可能需要长时间的等待,这是由于拉取镜像比较耗时导致的,并没有太好的解决办法。大家可以尝试使用一些国内的docker镜像来缓解这个问题。

总结

轻量对象存储简单易用,作为附件存储(即一次写入多次读取的场景)非常合适,可以在一定程度上解决轻量K8s集群的云原生应用带状态迁移难题。

须知 :本文同步自若海の技术写真,如有错漏请到原文下留言反馈。

相关推荐
孟健27 分钟前
从5000亿Token到83%字节匹配:AI逆向工程与重构的工程闭环实践
后端·架构·ai编程
码事漫谈1 小时前
丢得静悄悄,谈一谈 Agent 的记忆是怎么没的
后端
迪飞特科技1 小时前
智慧物业平台实战:Spring Boot 整合小程序实现报修巡检费用全流程
spring boot·后端·小程序
考虑考虑1 小时前
@JsonInclude注解使用
spring boot·后端·spring
IT_陈寒2 小时前
Vite的这个问题坑了我三天,原来如此解决!
前端·人工智能·后端
网易云信2 小时前
大模型能上岗做销售吗?我们让 12 款国产模型交了 420 份作业
前端·后端
CCblandy2 小时前
HTTP 长连接 3 类故障实测:[WinError 10053]、99 个 TIME_WAIT、69 次多余握手,4 种对策怎么选
后端·python·网络协议·http·云原生·性能优化·架构
蜗牛互联网2 小时前
Python Agent工具调用的白名单、参数校验与审批门禁
java·服务器·前端·人工智能·后端·python
false_or_true3 小时前
一次由 tcp_tw_recycle 引发的“灵异”故障排查:基于双网闸架构的踩坑记
网络·tcp/ip·架构
dd聊技术3 小时前
Prompt 从代码常量搬进数据库:改一句话,不用再发一次版
java·后端