轻量对象存储----填补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集群的云原生应用带状态迁移难题。

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

相关推荐
爬山算法7 分钟前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
Moment24 分钟前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
yunteng52143 分钟前
通用架构(同城双活)(单点接入)
架构·同城双活·单点接入
Cobyte1 小时前
AI全栈实战:使用 Python+LangChain+Vue3 构建一个 LLM 聊天应用
前端·后端·aigc
麦聪聊数据1 小时前
Web 原生架构如何重塑企业级数据库协作流?
数据库·sql·低代码·架构
程序员侠客行2 小时前
Mybatis连接池实现及池化模式
java·后端·架构·mybatis
Honmaple2 小时前
QMD (Quarto Markdown) 搭建与使用指南
后端
PP东2 小时前
Flowable学习(二)——Flowable概念学习
java·后端·学习·flowable
invicinble3 小时前
springboot的核心实现机制原理
java·spring boot·后端
全栈老石3 小时前
Python 异步生存手册:给被 JS async/await 宠坏的全栈工程师
后端·python