Kubernetes集群中云盘在线扩容

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 云盘在线扩容功能已经发布,本文介绍如何在Kubernetes集群中在不断服的情况下实现云盘扩容。下面以StatefulSet多实例应用为例,介绍应用持续运行中实现挂载的云盘扩容。 注意:扩容云盘前,请务必先给云盘打快照,以免操作中出现数据丢失; 创建多实例statefulset应用 kubectl create -f sts.

云盘在线扩容功能已经发布,本文介绍如何在Kubernetes集群中在不断服的情况下实现云盘扩容。下面以StatefulSet多实例应用为例,介绍应用持续运行中实现挂载的云盘扩容。

注意:扩容云盘前,请务必先给云盘打快照,以免操作中出现数据丢失;
注意:本方案虽然实现了在线扩容云盘,但在扩容文件系统的时候如果应用正在读写数据盘,存在导致数据不一致的可能;

更新的扩容云盘方案请参考:云盘在线扩容、离线扩容云盘方案

创建多实例statefulset应用

kubectl create -f sts.yaml

apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx
---
apiVersion: apps/v1beta2
kind: StatefulSet
metadata:
  name: web
spec:
  selector:
    matchLabels:
      app: nginx
  serviceName: "nginx"
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: disk-ssd
          mountPath: /data
  volumeClaimTemplates:
  - metadata:
      name: disk-ssd
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "alicloud-disk-ssd"
      resources:
        requests:
          storage: 20Gi
运行2个pod,分别挂载一个云盘:
# kubectl get pod
NAME      READY     STATUS    RESTARTS   AGE
web-0     1/1       Running   0          1m
web-1     1/1       Running   0          1m

# kubectl get pvc
NAME             STATUS    VOLUME                   CAPACITY   ACCESS MODES   STORAGECLASS        AGE
disk-ssd-web-0   Bound     d-2zecm3r1qylc9dq057ul   20Gi       RWO            alicloud-disk-ssd   2m
disk-ssd-web-1   Bound     d-2zeav09gzb5smie2iekw   20Gi       RWO            alicloud-disk-ssd   1m

# kubectl get pv
NAME                     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS    CLAIM                    STORAGECLASS        REASON    AGE
d-2zeav09gzb5smie2iekw   20Gi       RWO            Delete           Bound     default/disk-ssd-web-1   alicloud-disk-ssd             1m
d-2zecm3r1qylc9dq057ul   20Gi       RWO            Delete           Bound     default/disk-ssd-web-0   alicloud-disk-ssd             1m

当前2个盘大小都是20G:
# kubectl exec web-0 df | grep data
/dev/vdc        20511312   45080  20449848   1% /data
# kubectl exec web-1 df | grep data
/dev/vdd        20511312   45080  20449848   1% /data

创建测试数据:
# kubectl exec web-1 touch /data/test1
# kubectl exec web-0 touch /data/test0
# kubectl exec web-0 ls /data
lost+found  test0
# kubectl exec web-1 ls /data
lost+found  test1

扩容云盘

注意:扩容云盘前,请务必先给云盘打快照,以免操作中出现数据丢失;

上面应用共用到2块云盘:

d-2zecm3r1qylc9dq057ul:pod web-0使用;
d-2zeav09gzb5smie2iekw:pod web-1使用;

1. 状态信息:

以d-2zeav09gzb5smie2iekw为例;

登陆pod web-1所在节点:

# mount | grep d-2zeav09gzb5smie2iekw
/dev/vdd on /var/lib/kubelet/plugins/kubernetes.io/flexvolume/alicloud/disk/mounts/d-2zeav09gzb5smie2iekw type ext4 (rw,relatime,data=ordered)
/dev/vdd on /var/lib/kubelet/pods/e8d03d50-ad24-11e9-b1a1-00163e03e854/volumes/alicloud~disk/d-2zeav09gzb5smie2iekw type ext4 (rw,relatime,data=ordered)

可见:

云盘挂载挂载设备为/dev/vdd;

使用的文件系统为ext4;

容器的挂载目录为:/var/lib/kubelet/plugins/kubernetes.io/flexvolume/alicloud/disk/mounts/d-2zeav09gzb5smie2iekw

云盘当前状态:大小为20G;

# df -h | grep vdd
/dev/vdd         20G   45M   20G   1% /var/lib/kubelet/plugins/kubernetes.io/flexvolume/alicloud/disk/mounts/d-2zeav09gzb5smie2iekw

2. 控制台扩容云盘

登陆阿里云ECS控制台,找到相应Region、可用区,并找到云盘:d-2zeav09gzb5smie2iekw

控制台的状态如下:云盘大小为20G,正在使用中。点击磁盘扩容:

image

选择云盘在线扩容,并调整期望大小:

image

点击确认,并到控制台查看当前云盘大小:

image

3. 文件系统扩容:

在挂载节点上查看云盘,可以看到/dev/vdd已经扩容。

# lsblk -l /dev/vdd
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vdd  253:48   0  30G  0 disk /var/lib/kubelet/pods/e8d03d50-ad24-11e9-b1a1-00163e03e854/volumes/alicloud~disk/d-2zeav09gzb5smie2iekw

但此时文件系统依然是20G:

# df | grep vdd
/dev/vdd        20511312   45080  20449848   1% /var/lib/kubelet/plugins/kubernetes.io/flexvolume/alicloud/disk/mounts/d-2zeav09gzb5smie2iekw

执行文件系统扩容(在线扩容需要当时没有文件读写,如果存在应用读写,需要先把应用停掉):

# resize2fs /dev/vdd

3. 扩容验证:

下面命令验证云盘已经扩容成功;
# kubectl exec -ti web-1 df | grep data
/dev/vdd        30832548   45036  30771128   1% /data

下面命令验证数据持久性:
# kubectl exec -ti web-1 ls data
lost+found  test1

用以上方法对其他云盘进行扩容

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
2月前
|
Kubernetes Ubuntu 应用服务中间件
在Ubuntu22.04 LTS上搭建Kubernetes集群
在Ubuntu22.04.4上安装Kubernetes v1.28.7,步骤超详细
323 1
在Ubuntu22.04 LTS上搭建Kubernetes集群
|
2月前
|
Kubernetes 安全 Docker
在 K8s 集群中创建 DERP 服务器
在 K8s 集群中创建 DERP 服务器
|
1月前
|
Prometheus 监控 Kubernetes
Kubernetes 集群监控与日志管理实践
【2月更文挑战第29天】 在微服务架构日益普及的当下,Kubernetes 已成为容器编排的事实标准。然而,随着集群规模的扩大和业务复杂度的提升,有效的监控和日志管理变得至关重要。本文将探讨构建高效 Kubernetes 集群监控系统的策略,以及实施日志聚合和分析的最佳实践。通过引入如 Prometheus 和 Fluentd 等开源工具,我们旨在为运维专家提供一套完整的解决方案,以保障系统的稳定性和可靠性。
|
20天前
|
数据库 存储 监控
什么是 SAP HANA 内存数据库 的 Delta Storage
什么是 SAP HANA 内存数据库 的 Delta Storage
16 0
什么是 SAP HANA 内存数据库 的 Delta Storage
|
1天前
|
存储 运维 Kubernetes
Kubernetes 集群的持续性能优化实践
【4月更文挑战第22天】在动态且复杂的微服务架构中,确保 Kubernetes 集群的高性能运行是至关重要的。本文将深入探讨针对 Kubernetes 集群性能优化的策略与实践,从节点资源配置、网络优化到应用部署模式等多个维度展开,旨在为运维工程师提供一套系统的性能调优方法论。通过实际案例分析与经验总结,读者可以掌握持续优化 Kubernetes 集群性能的有效手段,以适应不断变化的业务需求和技术挑战。
13 4
|
9天前
|
Kubernetes 搜索推荐 Docker
使用 kubeadm 部署 Kubernetes 集群(二)k8s环境安装
使用 kubeadm 部署 Kubernetes 集群(二)k8s环境安装
47 17
|
22天前
|
消息中间件 Kubernetes Kafka
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
15 0
|
22天前
|
Kubernetes 安全 网络安全
搭建k8s集群kubeadm搭建Kubernetes二进制搭建Kubernetes集群
搭建k8s集群kubeadm搭建Kubernetes二进制搭建Kubernetes集群
104 0
|
29天前
|
Kubernetes Cloud Native Docker
【云原生】kubeadm快速搭建K8s集群Kubernetes1.19.0
Kubernetes 是一个开源平台,用于管理容器化工作负载和服务,提供声明式配置和自动化。源自 Google 的大规模运维经验,它拥有广泛的生态支持。本文档详细介绍了 Kubernetes 集群的搭建过程,包括服务器配置、Docker 和 Kubernetes 组件的安装,以及 Master 和 Node 的部署。此外,还提到了使用 Calico 作为 CNI 网络插件,并提供了集群功能的测试步骤。
217 0
|
1月前
|
Prometheus 监控 Kubernetes
Kubernetes 集群的监控与日志管理实践
【2月更文挑战第31天】 在微服务架构日益普及的今天,容器编排工具如Kubernetes已成为部署、管理和扩展容器化应用的关键平台。然而,随着集群规模的扩大和业务复杂性的增加,如何有效监控集群状态、及时响应系统异常,以及管理海量日志信息成为了运维人员面临的重要挑战。本文将深入探讨 Kubernetes 集群监控的最佳实践和日志管理的高效策略,旨在为运维团队提供一套系统的解决思路和操作指南。
27 0

相关产品

  • 容器服务Kubernetes版