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

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

相关推荐
JELEE.1 天前
Django登录注册完整代码(图片、邮箱验证、加密)
前端·javascript·后端·python·django·bootstrap·jquery
QX_hao1 天前
【Go】--反射(reflect)的使用
开发语言·后端·golang
小坏讲微服务1 天前
Docker-compose 搭建Maven私服部署
java·spring boot·后端·docker·微服务·容器·maven
yuuki2332331 天前
【数据结构】用顺序表实现通讯录
c语言·数据结构·后端
你的人类朋友1 天前
【Node】手动归还主线程控制权:解决 Node.js 阻塞的一个思路
前端·后端·node.js
史不了1 天前
静态交叉编译rust程序
开发语言·后端·rust
数字化顾问1 天前
(125页PPT)IBM流程架构方法论及案例(附下载方式)
架构
●VON1 天前
深入昇腾NPU:从架构到算子开发的全栈探索
架构·昇腾·昇腾npu·gpt-oss-20b·昇腾训练营
码事漫谈1 天前
C++中的多态:动态多态与静态多态详解
后端