背景
当前XX生产环境中的共享存储为自建型NFS服务,存在以下风险:
单点故障:
NFS服务为单台虚拟机,当节点异常,整个集群业务将受到影响;
更高效存储性能:
NAS设备通常针对海量存储场景设计,在性能上可能有更高服务保障;
运维简便:
NAS在扩容的场景下更为快捷;
其它
...
为规避上述风险以及NAS可提供更为稳定的存储服务,XX准备将K8S集群中的NFS服务器替换为NAS服务。
一言蔽之,就是说我们在Kubernetes中使用NAS资源的StorageClass的PVC都需要进行处理。
前置条件
条件1:NAS资源到位
NAS资源已经申请到位,且Kubernetes集群中的工作节点网络能正常访问到NAS服务。
条件2:替换期间需停服务
需要窗口期,具体多少需要根据数据量来评估。
实现步骤
步骤1:数据全量复制
将NAS资源挂载到NFS服务节点,通过rsync工具将当前集群所有的持久化数据复制到NAS资源上面。
# rsync -arv NFS_DATA NAS_DATA
提示:该操作不会影响服务正常运行,但会占用NFS节点大量网络带宽,同时所涉及的数据量较大,建议选择服务空闲期操作(如工作日的凌晨或周末)
步骤2:停止服务
为避免产生新数据,我们需要将正在运行的Pod进行缩容,步骤参考如下:
如何正确收缩已部署的Kubernetes应用
【封面图片:广州市天河国际乒乓培训中心】如何正确收缩已部署的Kubernetes应用
步骤3:数据增量复制
由于步骤1已经复制过一次数据,此时我们继续通过rsync工具将后续产生的数据进行增量复制。
# rsync -av NFS_DATA NAS_DATA
步骤4:导出PV、PVC资源
将集群所有PV、PVC资源导出
# kubectl get pv <name> -o yaml > pv.yaml
# kubectl get pvc <name> -o yaml > pv.yaml
步骤5:编辑PV YAML资源
编辑 NFS 服务器地址:
<省略若干行 >
path: /xxx
server: 新NAS地址
步骤6:重新创建PV、PVC资源
由于PV、PVC资源无法进行直接编辑,我们只能先删除再创建的步骤来实现
# kubectl delete -f .
# kubectl apply -f .
执行完成后,检查PVC是否为
Bound
状态,若为非
Bound
则说明PVC、PV资源异常。
步骤7:应用恢复
步骤还是参考如下:
如何正确收缩已部署的Kubernetes应用
【封面图片:广州市天河国际乒乓培训中心】如何正确收缩已部署的Kubernetes应用
步骤8:业务测试
对进行业务功能测试。
步骤10:回收NFS服务器资源
服务运行一段时间后,将NFS资源进行回收。
注意事项
事项1: pvc 的状态为 Lost
重建PVC、PV时,PVC的状态可能为 Lost状态,需要将导出来的PV YAML资源中的 claimRef: 字段内容进行清除。
轻量级私有容器镜像仓库
背景需要一个容器镜像仓库服务,Habor、Nexus是首选,尽量保持轻量化但又想能提供可视化页面。此时就可以使用 registry-ui + docker-registry。 服务实现 docker-compose.ymlservices: registry-ui: image: registry.cn-shenzhen.aliyuncs.com/shuhui/docker-registry-ui:2.5.
Jan 23, 2025
Kubernetes监控插件-NPD
Node Problem Detector(NPD)是Kubernetes集群中一个重要的监控插件,主要作用是监控节点的健康状况并检测可能出现的问题。如NTP、文件系统损坏、内核死锁、CPU、内存或磁盘损坏、运行时守护进程无响应等。 部署使用chart安装 # helm -n monitoring install node-problem-detector https://dl.
Nov 10, 2024
Talos Linux体验
简介Talos Linux 是一个为 Kubernetes 环境从头开始设计的安全、最小化且只读的操作系统。它旨在提供一种轻量级、高效且安全的方式来运行 Kubernetes 集群。以下是 Talos Linux 的一些关键特性: 安全性:Talos Linux 采用了多种安全措施,包括只读文件系统和最小化的软件栈,以减少潜在的攻击面。
Sep 9, 2024
妙用kubectl-neat
背景有时候你需要将正在运行于Kubernets中的应用的YAML导出来,此时你会想到使用以下方式: $ kubectl get deploy|sts -oyaml 然而导出来很多内容不能直接使用--需要做一些删减。这时你就可以使用kubectl的neat插件了。 范例 下载安装 # wget https://github.com/itaysk/kubectl-neat/releases/download/v2.
May 26, 2024