惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
IT之家
IT之家
酷 壳 – CoolShell
酷 壳 – CoolShell
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
C
Check Point Blog
月光博客
月光博客
Jina AI
Jina AI
S
SegmentFault 最新的问题
WordPress大学
WordPress大学
博客园 - 叶小钗
人人都是产品经理
人人都是产品经理
博客园 - 司徒正美
腾讯CDC
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
有赞技术团队
有赞技术团队
博客园 - 聂微东
Hugging Face - Blog
Hugging Face - Blog
小众软件
小众软件
Last Week in AI
Last Week in AI
V
V2EX
罗磊的独立博客
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
阮一峰的网络日志
阮一峰的网络日志
NISL@THU
NISL@THU
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Threat Research - Cisco Blogs
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
L
Lohrmann on Cybersecurity
宝玉的分享
宝玉的分享
爱范儿
爱范儿
T
Troy Hunt's Blog
量子位
Project Zero
Project Zero
S
Secure Thoughts
V
Visual Studio Blog
美团技术团队
AI
AI
博客园 - 【当耐特】
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Last Watchdog
The Last Watchdog
V
Vulnerabilities – Threatpost
P
Privacy International News Feed
Spread Privacy
Spread Privacy
Schneier on Security
Schneier on Security
博客园_首页
P
Privacy & Cybersecurity Law Blog
博客园 - 三生石上(FineUI控件)
Apple Machine Learning Research
Apple Machine Learning Research
N
News | PayPal Newsroom

博客园 - 尹正杰

TKE集群LoadBalancer映射案例 k8s集群为每个节点分配不通的ippool实战 ansible剧本实现一键升级K8S集群的NVIDIA GPU驱动 vmagent采集etcd数据并写入victoriametrics集群 VictoriaMetrics集群部署实战 Squid正向代理实战 kubespray生产故障案例之kubelet启动参数案例 filebeat指定名称空间采集pod数据 Calico自定义Ipool实战 ansible剧本实现kibana的部署和卸载 ansible剧本应用案例集合2 Ansible急速入门实战篇 ansible快速入门篇 k8s集群管理 kubesray实战 kubespray实战案例 kubespray管理k8s的worker集群扩缩容 kubespray快速部署k8s集群实战 Kubeasz使用吐槽博客专题 Kubeasz基于ezctl实现etcd集群的管理实战 Kubeasz基于ezctl实现k8s集群一键升级 Calico启用纯BGP模式+RR实战案例 Calico 底层原理及IPIP(依赖BGP协议))和vxlan(不依赖BGP)工作模式切换 kubeasz基于ezctl实现k8s集群的扩容和缩容 kubeasz快速部署K8S集群实战 Ubuntu 24.04.04 LTS版本系统优化 Ubuntu Server 24.04.04 LTS部署指南 windows极速部署Openclaw实战篇 K8S的StatefulSet控制器应用案例之MySQL主从同步实战 k8s底层基于不同运行时集成harbor企业级私有仓库实战 二进制K8S集群附加组件部署及CNI网络插件切换实战 二进制部署K8S 1.35.0+最新版实战案例 etcd高可用集群部署及K8S周期性备份数据实战 基于Docker实现《若依》服务业务容器化实战篇 k8s集群基于Flannel网络插件部署凡人修仙传 k8s集群基于Calico网络插件部署凡人修仙传 ElasticSEearch 9.X环境部署 K8S Vertical Pod Autoscaler(VPA)实战案例 Prometheus监控自定义程序指标
ansible剧本实现磁盘格式化
尹正杰 · 2026-06-22 · via 博客园 - 尹正杰

                                              作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.直接格式化单块nvme磁盘并配置开机自动挂载

1.现有环境说明

(venv) root@JasonYin2020:~/nx_ops/ops-playbook# ansible -i  /root/nx_ops/kubespray-release-2.29/inventory/yinzhengjie-k8s/inventory.ini efk -m shell -a 'lsblk'
efk-1 | CHANGED | rc=0 >>
NAME    MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda       8:0    0 446.6G  0 disk 
├─sda1    8:1    0     1G  0 part /boot/efi
└─sda2    8:2    0 445.6G  0 part /
nvme0n1 259:0    0    14T  0 disk 
efk-2 | CHANGED | rc=0 >>
NAME    MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda       8:0    0 446.6G  0 disk 
├─sda1    8:1    0     1G  0 part /boot/efi
└─sda2    8:2    0 445.6G  0 part /
nvme0n1 259:0    0    14T  0 disk 
efk-3 | CHANGED | rc=0 >>
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda           8:0    0 446.6G  0 disk 
├─sda1        8:1    0     1G  0 part /boot/efi
└─sda2        8:2    0 445.6G  0 part /
nvme0n1     259:0    0    14T  0 disk 
├─nvme0n1p1 259:1    0     1G  0 part 
└─nvme0n1p2 259:2    0 445.6G  0 part 
(venv) root@JasonYin2020:~/nx_ops/ops-playbook# 

2.编写剧本

(venv) root@JasonYin2020:~/nx_ops/ops-playbook#  cat format_nvme_data.yml 
- name: 批量格式化nvme0n1为ext4并挂载至/data
  hosts: efk
  gather_facts: true
  become: true
  vars:
    dev_name: "/dev/nvme0n1"
    mount_path: "/data"
    fstab_file: "/etc/fstab"
  vars_prompt:
    - name: confirm_wipe
      prompt: "警告:执行后会清空所有节点 {{ dev_name }} 全部数据,确认执行请输入 YES"
      private: false

  tasks:
    - name: 校验确认输入,防止误操作
      fail:
        msg: "输入非 YES,终止任务"
      when: confirm_wipe != "YES"

    - name: 1. 检查目标NVMe磁盘是否存在
      shell: lsblk {{ dev_name }}
      register: nvme_check
      failed_when: nvme_check.rc != 0
      changed_when: false

    - name: 2. 卸载nvme0n1下所有分区(防止占用无法擦除)
      shell: |
        for part in $(lsblk -no NAME {{ dev_name }} | grep nvme0n1p); do
          umount /dev/$part 2>/dev/null || true
        done
      register: umount_part
      changed_when: true

    - name: 3. 清除nvme0n1分区表与文件系统签名
      shell: |
        wipefs -a {{ dev_name }}
        parted -s {{ dev_name }} mklabel gpt
      register: wipe_disk
      changed_when: true

    - name: 4. 整块nvme0n1格式化为ext4
      filesystem:
        dev: "{{ dev_name }}"
        fstype: ext4
        force: true
      register: format_result

    - name: 5. 创建/data挂载目录
      file:
        path: "{{ mount_path }}"
        state: directory
        mode: '0755'

    - name: 6. 获取磁盘UUID用于fstab持久挂载
      shell: blkid -s UUID -o value {{ dev_name }}
      register: disk_uuid
      changed_when: false

    - name: 7. 写入/etc/fstab开机自动挂载
      mount:
        path: "{{ mount_path }}"
        src: "UUID={{ disk_uuid.stdout }}"
        fstype: ext4
        opts: defaults,noatime
        state: present

    - name: 8. 实时挂载/data(无需重启)
      mount:
        path: "{{ mount_path }}"
        src: "{{ dev_name }}"
        fstype: ext4
        opts: defaults,noatime
        state: mounted

    - name: 9. 校验挂载结果
      shell: df -h {{ mount_path }}
      register: df_info
      changed_when: false

    - name: 输出挂载信息
      debug:
        msg: "{{ df_info.stdout_lines }}"
(venv) root@JasonYin2020:~/nx_ops/ops-playbook# 

3.执行剧本并测试验证

  1.执行剧本
(venv) root@JasonYin2020:~/nx_ops/ops-playbook# ansible-playbook -i /root/nx_ops/kubespray-release-2.29/inventory/yinzhengjie-k8s/inventory.ini format_nvme_data.yml
警告:执行后会清空所有节点 /dev/nvme0n1 全部数据,确认执行请输入 YES: YES

PLAY [批量格式化nvme0n1为ext4并挂载至/data] **********************************************************************************************************

TASK [Gathering Facts] *******************************************************************************************************************************
ok: [efk-1]
ok: [efk-3]
ok: [efk-2]

TASK [校验确认输入,防止误操作] **********************************************************************************************************************
skipping: [efk-1]
skipping: [efk-2]
skipping: [efk-3]

TASK [1. 检查目标NVMe磁盘是否存在] *******************************************************************************************************************
ok: [efk-2]
ok: [efk-1]
ok: [efk-3]

TASK [2. 卸载nvme0n1下所有分区(防止占用无法擦除)] **************************************************************************************************
changed: [efk-2]
changed: [efk-1]
changed: [efk-3]

TASK [3. 清除nvme0n1分区表与文件系统签名] ************************************************************************************************************
changed: [efk-2]
changed: [efk-1]
changed: [efk-3]

TASK [4. 整块nvme0n1格式化为ext4] ********************************************************************************************************************
changed: [efk-2]
changed: [efk-3]
changed: [efk-1]

TASK [5. 创建/data挂载目录] **************************************************************************************************************************
changed: [efk-1]
changed: [efk-2]
changed: [efk-3]

TASK [6. 获取磁盘UUID用于fstab持久挂载] **************************************************************************************************************
ok: [efk-1]
ok: [efk-2]
ok: [efk-3]

TASK [7. 写入/etc/fstab开机自动挂载] *****************************************************************************************************************
changed: [efk-1]
changed: [efk-2]
changed: [efk-3]

TASK [8. 实时挂载/data(无需重启)] ******************************************************************************************************************
changed: [efk-1]
changed: [efk-2]
changed: [efk-3]

TASK [9. 校验挂载结果] *******************************************************************************************************************************
ok: [efk-1]
ok: [efk-2]
ok: [efk-3]

TASK [输出挂载信息] **********************************************************************************************************************************
ok: [efk-1] => {
    "msg": [
        "Filesystem      Size  Used Avail Use% Mounted on",
        "/dev/nvme0n1     14T   28K   14T   1% /data"
    ]
}
ok: [efk-2] => {
    "msg": [
        "Filesystem      Size  Used Avail Use% Mounted on",
        "/dev/nvme0n1     14T   28K   14T   1% /data"
    ]
}
ok: [efk-3] => {
    "msg": [
        "Filesystem      Size  Used Avail Use% Mounted on",
        "/dev/nvme0n1     14T   28K   14T   1% /data"
    ]
}

PLAY RECAP *******************************************************************************************************************************************
efk-1                      : ok=11   changed=6    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0   
efk-2                      : ok=11   changed=6    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0   
efk-3                      : ok=11   changed=6    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0   

(venv) root@JasonYin2020:~/nx_ops/ops-playbook#


  2.测试验证
(venv) root@JasonYin2020:~/nx_ops/ops-playbook# ansible -i  /root/nx_ops/kubespray-release-2.29/inventory/yinzhengjie-k8s/inventory.ini efk -m shell -a 'df -h | grep data'
efk-1 | CHANGED | rc=0 >>
/dev/nvme0n1     14T   28K   14T   1% /data
efk-3 | CHANGED | rc=0 >>
/dev/nvme0n1     14T   28K   14T   1% /data
efk-2 | CHANGED | rc=0 >>
/dev/nvme0n1     14T   28K   14T   1% /data
(venv) root@JasonYin2020:~/nx_ops/ops-playbook#

二.将单块磁盘基于lvm管理创建单个挂载点并配置开机自动挂载

1.编写剧本

(venv) root@JasonYin2020:~/nx_ops/ops-playbook# cat single-lvm_k8s_storage.yml 
- name: K8s节点sda盘LVM分区与目录挂载部署
  osts: gpu
  become: true
  gather_facts: false
  vars:
    data_disk: /dev/nvme0n1
    vg_name: vg-model

  tasks:
    - name: 清空磁盘分区表(仅全新裸盘执行,谨慎!)
      command: wipefs -a {{ data_disk }}
      when: not ansible_check_mode

    - name: 创建PV(不存在才执行)
      command: pvcreate {{ data_disk }}
      register: pv_create_res
      failed_when: pv_create_res.rc not in [0,5]
      changed_when: pv_create_res.rc == 0

    - name: 创建VG卷组(不存在才执行)
      command: vgcreate {{ vg_name }} {{ data_disk }}
      register: vg_create_res
      failed_when: vg_create_res.rc not in [0,4]
      changed_when: vg_create_res.rc == 0

    - name: 创建逻辑卷 lv-model,使用所有的卷组。
      command: lvcreate -l 100%FREE -n lv-model {{ vg_name }}
      register: lv_kubelet_res
      failed_when: lv_kubelet_res.rc not in [0,5]
      changed_when: lv_kubelet_res.rc == 0


    - name: 格式化所有逻辑卷为ext4
      filesystem:
        dev: /dev/{{ vg_name }}/{{ item }}
        fstype: ext4
        force: true
      loop:
        - lv-model

    - name: 创建挂载目录
      file:
        path: "{{ item }}"
        state: directory
        mode: '0755'
      loop:
        - /model-csi-cache

    - name: 写入/etc/fstab永久挂载
      mount:
        path: "{{ item.path }}"
        src: /dev/{{ vg_name }}/{{ item.lv }}
        fstype: ext4
        opts: defaults
        state: mounted
      loop:
        - { lv: lv-model, path: /model-csi-cache }

(venv) root@JasonYin2020:~/nx_ops/ops-playbook#

2.测试验证

(venv) root@JasonYin2020:~/nx_ops/ops-playbook# ansible-playbook -i /root/nx_ops/kubespray-release-2.29/inventory/yinzhengjie-k8s/inventory.ini single-lvm_k8s_storage.yml 

三.将单块磁盘基于lvm管理创建多个挂载点并配置开机自动挂载

1.环境准备

(venv) root@JasonYin2020:~/nx_ops/ops-playbook# ansible -i  /root/nx_ops/kubespray-release-2.29/inventory/yinzhengjie-k8s/inventory.ini gpu -m shell -a 'lsblk | grep nvme'
GPU-POD01-06 | CHANGED | rc=0 >>
nvme0n1     259:0    0 894.3G  0 disk 
├─nvme0n1p1 259:1    0   512M  0 part /boot/efi
├─nvme0n1p2 259:2    0     4G  0 part /boot
└─nvme0n1p3 259:3    0 889.8G  0 part /
nvme1n1     259:4    0     7T  0 disk 
nvme2n1     259:5    0     7T  0 disk 
nvme3n1     259:6    0     7T  0 disk 
nvme4n1     259:7    0     7T  0 disk 
GPU-POD01-09 | CHANGED | rc=0 >>
nvme1n1     259:0    0 894.3G  0 disk 
├─nvme1n1p1 259:1    0   512M  0 part /boot/efi
├─nvme1n1p2 259:2    0     4G  0 part /boot
└─nvme1n1p3 259:3    0 889.8G  0 part /
nvme2n1     259:4    0     7T  0 disk 
nvme4n1     259:5    0     7T  0 disk 
nvme3n1     259:6    0     7T  0 disk 
nvme0n1     259:7    0     7T  0 disk 
GPU-POD01-05 | CHANGED | rc=0 >>
nvme0n1     259:0    0 894.3G  0 disk 
├─nvme0n1p1 259:1    0   512M  0 part /boot/efi
├─nvme0n1p2 259:2    0     4G  0 part /boot
└─nvme0n1p3 259:3    0 889.8G  0 part /
nvme3n1     259:4    0     7T  0 disk 
nvme2n1     259:5    0     7T  0 disk 
nvme1n1     259:6    0     7T  0 disk 
nvme4n1     259:7    0     7T  0 disk 
GPU-POD01-07 | CHANGED | rc=0 >>
nvme0n1     259:0    0 894.3G  0 disk 
├─nvme0n1p1 259:1    0   512M  0 part /boot/efi
├─nvme0n1p2 259:2    0     4G  0 part /boot
└─nvme0n1p3 259:3    0 889.8G  0 part /
nvme1n1     259:4    0     7T  0 disk 
nvme2n1     259:5    0     7T  0 disk 
nvme4n1     259:6    0     7T  0 disk 
nvme3n1     259:7    0     7T  0 disk 
GPU-POD01-08 | CHANGED | rc=0 >>
nvme0n1     259:0    0 894.3G  0 disk 
├─nvme0n1p1 259:1    0   512M  0 part /boot/efi
├─nvme0n1p2 259:2    0     4G  0 part /boot
└─nvme0n1p3 259:3    0 889.8G  0 part /
nvme4n1     259:4    0     7T  0 disk 
nvme3n1     259:5    0     7T  0 disk 
nvme1n1     259:6    0     7T  0 disk 
nvme2n1     259:7    0     7T  0 disk 
GPU-POD01-10 | CHANGED | rc=0 >>
nvme0n1     259:0    0 894.3G  0 disk 
├─nvme0n1p1 259:1    0   512M  0 part /boot/efi
├─nvme0n1p2 259:2    0     4G  0 part /boot
└─nvme0n1p3 259:3    0 889.8G  0 part /
nvme1n1     259:4    0     7T  0 disk 
nvme3n1     259:5    0     7T  0 disk 
nvme2n1     259:6    0     7T  0 disk 
nvme4n1     259:7    0     7T  0 disk 
GPU-POD01-11 | CHANGED | rc=0 >>
nvme0n1     259:0    0 894.3G  0 disk 
├─nvme0n1p1 259:1    0   512M  0 part /boot/efi
├─nvme0n1p2 259:2    0     4G  0 part /boot
└─nvme0n1p3 259:3    0 889.8G  0 part /
nvme1n1     259:4    0     7T  0 disk 
nvme4n1     259:5    0     7T  0 disk 
nvme2n1     259:6    0     7T  0 disk 
nvme3n1     259:7    0     7T  0 disk 
GPU-POD01-14 | CHANGED | rc=0 >>
nvme0n1     259:0    0 894.3G  0 disk 
├─nvme0n1p1 259:1    0   512M  0 part /boot/efi
├─nvme0n1p2 259:2    0     4G  0 part /boot
└─nvme0n1p3 259:3    0 889.8G  0 part /
nvme1n1     259:4    0     7T  0 disk 
nvme3n1     259:5    0     7T  0 disk 
nvme2n1     259:6    0     7T  0 disk 
nvme4n1     259:7    0     7T  0 disk 
GPU-POD01-13 | CHANGED | rc=0 >>
nvme2n1     259:0    0 894.3G  0 disk 
├─nvme2n1p1 259:1    0   512M  0 part /boot/efi
├─nvme2n1p2 259:2    0     4G  0 part /boot
└─nvme2n1p3 259:3    0 889.8G  0 part /
nvme0n1     259:4    0     7T  0 disk 
nvme1n1     259:5    0     7T  0 disk 
nvme4n1     259:6    0     7T  0 disk 
nvme3n1     259:7    0     7T  0 disk 
GPU-POD01-12 | CHANGED | rc=0 >>
nvme0n1     259:0    0 894.3G  0 disk 
├─nvme0n1p1 259:1    0   512M  0 part /boot/efi
├─nvme0n1p2 259:2    0     4G  0 part /boot
└─nvme0n1p3 259:3    0 889.8G  0 part /
nvme1n1     259:4    0     7T  0 disk 
nvme3n1     259:5    0     7T  0 disk 
nvme4n1     259:6    0     7T  0 disk 
nvme2n1     259:7    0     7T  0 disk 
GPU-POD01-15 | CHANGED | rc=0 >>
nvme0n1     259:0    0 894.3G  0 disk 
├─nvme0n1p1 259:1    0   512M  0 part /boot/efi
├─nvme0n1p2 259:2    0     4G  0 part /boot
└─nvme0n1p3 259:3    0 889.8G  0 part /
nvme4n1     259:4    0     7T  0 disk 
nvme1n1     259:5    0     7T  0 disk 
nvme2n1     259:6    0     7T  0 disk 
nvme3n1     259:7    0     7T  0 disk 
GPU-POD01-64 | CHANGED | rc=0 >>
nvme0n1     259:0    0 894.3G  0 disk 
├─nvme0n1p1 259:1    0   512M  0 part /boot/efi
├─nvme0n1p2 259:2    0     4G  0 part /boot
└─nvme0n1p3 259:3    0 889.8G  0 part /
nvme1n1     259:4    0     7T  0 disk 
nvme4n1     259:5    0     7T  0 disk 
nvme2n1     259:6    0     7T  0 disk 
nvme3n1     259:7    0     7T  0 disk 
GPU-POD01-62 | CHANGED | rc=0 >>
nvme0n1     259:0    0 894.3G  0 disk 
├─nvme0n1p1 259:1    0   512M  0 part /boot/efi
├─nvme0n1p2 259:2    0     4G  0 part /boot
└─nvme0n1p3 259:3    0 889.8G  0 part /
nvme1n1     259:4    0     7T  0 disk 
nvme3n1     259:5    0     7T  0 disk 
nvme4n1     259:6    0     7T  0 disk 
nvme2n1     259:7    0     7T  0 disk 
GPU-POD01-63 | CHANGED | rc=0 >>
nvme4n1     259:0    0 894.3G  0 disk 
├─nvme4n1p1 259:1    0   512M  0 part /boot/efi
├─nvme4n1p2 259:2    0     4G  0 part /boot
└─nvme4n1p3 259:3    0 889.8G  0 part /
nvme1n1     259:4    0     7T  0 disk 
nvme0n1     259:5    0     7T  0 disk 
nvme2n1     259:6    0     7T  0 disk 
nvme3n1     259:7    0     7T  0 disk 
(venv) root@JasonYin2020:~/nx_ops/ops-playbook#

2.编写剧本

(venv) root@CPU-G01-Mon-19:~/nx_ops/ops-playbook# cat  lvm_k8s_storage.yml 
- name: K8s节点sda盘LVM分区与目录挂载部署
  hosts: gpu
  become: true
  gather_facts: false
  vars:
    data_disk: /dev/nvme1n1
    vg_name: vg-data
    lv_kubelet_size: 1T
    lv_containerd_size: 2T
    lv_data_size: 2T

  tasks:
    - name: 清空磁盘分区表(仅全新裸盘执行,谨慎!)
      command: wipefs -a {{ data_disk }}
      when: not ansible_check_mode

    - name: 创建PV(不存在才执行)
      command: pvcreate {{ data_disk }}
      register: pv_create_res
      failed_when: pv_create_res.rc not in [0,5]
      changed_when: pv_create_res.rc == 0

    - name: 创建VG卷组(不存在才执行)
      command: vgcreate {{ vg_name }} {{ data_disk }}
      register: vg_create_res
      failed_when: vg_create_res.rc not in [0,4]
      changed_when: vg_create_res.rc == 0

    - name: 创建逻辑卷 lv-kubelet
      command: lvcreate -n lv-kubelet -L {{ lv_kubelet_size }} {{ vg_name }}
      register: lv_kubelet_res
      failed_when: lv_kubelet_res.rc not in [0,5]
      changed_when: lv_kubelet_res.rc == 0

    - name: 创建逻辑卷 lv-containerd
      command: lvcreate -n lv-containerd -L {{ lv_containerd_size }} {{ vg_name }}
      register: lv_containerd_res
      failed_when: lv_containerd_res.rc not in [0,5]
      changed_when: lv_containerd_res.rc == 0

    - name: 创建逻辑卷 lv-data
      command: lvcreate -n lv-data -L {{ lv_data_size }} {{ vg_name }}
      register: lv_data_res
      failed_when: lv_data_res.rc not in [0,5]
      changed_when: lv_data_res.rc == 0

    - name: 格式化所有逻辑卷为ext4
      filesystem:
        dev: /dev/{{ vg_name }}/{{ item }}
        fstype: ext4
        force: true
      loop:
        - lv-kubelet
        - lv-containerd
        - lv-data

    - name: 创建挂载目录
      file:
        path: "{{ item }}"
        state: directory
        mode: '0755'
      loop:
        - /var/lib/kubelet
        - /var/lib/containerd
        - /data

    - name: 写入/etc/fstab永久挂载
      mount:
        path: "{{ item.path }}"
        src: /dev/{{ vg_name }}/{{ item.lv }}
        fstype: ext4
        opts: defaults
        state: mounted
      loop:
        - { lv: lv-kubelet, path: /var/lib/kubelet }
        - { lv: lv-containerd, path: /var/lib/containerd }
        - { lv: lv-data, path: /data }

(venv) root@CPU-G01-Mon-19:~/nx_ops/ops-playbook# 

3.测试验证

  1.执行剧本
(venv) root@JasonYin2020:~/nx_ops/ops-playbook# ansible-playbook -i  /root/nx_ops/kubespray-release-2.29/inventory/yinzhengjie-k8s/inventory.ini lvm_k8s_storage.yml

温馨提示:
  我上面的环境,GPU-POD01-09节点执行会报错,因为其nvme1n1被根分区占用,无法格式化使用,因此需要修改剧本,该对应的主机单独再执行一次即可。



  2.测试验证
(venv) root@JasonYin2020:~/nx_ops/ops-playbook#ansible -i  /root/nx_ops/kubespray-release-2.29/inventory/yinzhengjie-k8s/inventory.ini gpu -m shell -a 'df -h | grep data'
GPU-POD01-09 | CHANGED | rc=0 >>
/dev/mapper/vg--data-lv--kubelet    1007G   28K  956G   1% /var/lib/kubelet
/dev/mapper/vg--data-lv--containerd  2.0T   28K  1.9T   1% /var/lib/containerd
/dev/mapper/vg--data-lv--data        2.0T   28K  1.9T   1% /data
GPU-POD01-06 | CHANGED | rc=0 >>
/dev/mapper/vg--data-lv--kubelet    1007G   28K  956G   1% /var/lib/kubelet
/dev/mapper/vg--data-lv--containerd  2.0T   28K  1.9T   1% /var/lib/containerd
/dev/mapper/vg--data-lv--data        2.0T   28K  1.9T   1% /data
GPU-POD01-05 | CHANGED | rc=0 >>
/dev/mapper/vg--data-lv--kubelet    1007G   28K  956G   1% /var/lib/kubelet
/dev/mapper/vg--data-lv--containerd  2.0T   28K  1.9T   1% /var/lib/containerd
/dev/mapper/vg--data-lv--data        2.0T   28K  1.9T   1% /data
GPU-POD01-08 | CHANGED | rc=0 >>
/dev/mapper/vg--data-lv--kubelet    1007G   28K  956G   1% /var/lib/kubelet
/dev/mapper/vg--data-lv--containerd  2.0T   28K  1.9T   1% /var/lib/containerd
/dev/mapper/vg--data-lv--data        2.0T   28K  1.9T   1% /data
GPU-POD01-07 | CHANGED | rc=0 >>
/dev/mapper/vg--data-lv--kubelet    1007G   28K  956G   1% /var/lib/kubelet
/dev/mapper/vg--data-lv--containerd  2.0T   28K  1.9T   1% /var/lib/containerd
/dev/mapper/vg--data-lv--data        2.0T   28K  1.9T   1% /data
GPU-POD01-10 | CHANGED | rc=0 >>
/dev/mapper/vg--data-lv--kubelet    1007G   28K  956G   1% /var/lib/kubelet
/dev/mapper/vg--data-lv--containerd  2.0T   28K  1.9T   1% /var/lib/containerd
/dev/mapper/vg--data-lv--data        2.0T   28K  1.9T   1% /data
GPU-POD01-15 | CHANGED | rc=0 >>
/dev/mapper/vg--data-lv--kubelet    1007G   28K  956G   1% /var/lib/kubelet
/dev/mapper/vg--data-lv--containerd  2.0T   28K  1.9T   1% /var/lib/containerd
/dev/mapper/vg--data-lv--data        2.0T   28K  1.9T   1% /data
GPU-POD01-62 | CHANGED | rc=0 >>
/dev/mapper/vg--data-lv--kubelet    1007G   28K  956G   1% /var/lib/kubelet
/dev/mapper/vg--data-lv--containerd  2.0T   28K  1.9T   1% /var/lib/containerd
/dev/mapper/vg--data-lv--data        2.0T   28K  1.9T   1% /data
GPU-POD01-11 | CHANGED | rc=0 >>
/dev/mapper/vg--data-lv--kubelet    1007G   28K  956G   1% /var/lib/kubelet
/dev/mapper/vg--data-lv--containerd  2.0T   28K  1.9T   1% /var/lib/containerd
/dev/mapper/vg--data-lv--data        2.0T   28K  1.9T   1% /data
GPU-POD01-12 | CHANGED | rc=0 >>
/dev/mapper/vg--data-lv--kubelet    1007G   28K  956G   1% /var/lib/kubelet
/dev/mapper/vg--data-lv--containerd  2.0T   28K  1.9T   1% /var/lib/containerd
/dev/mapper/vg--data-lv--data        2.0T   28K  1.9T   1% /data
GPU-POD01-13 | CHANGED | rc=0 >>
/dev/mapper/vg--data-lv--kubelet    1007G   28K  956G   1% /var/lib/kubelet
/dev/mapper/vg--data-lv--containerd  2.0T   28K  1.9T   1% /var/lib/containerd
/dev/mapper/vg--data-lv--data        2.0T   28K  1.9T   1% /data
GPU-POD01-14 | CHANGED | rc=0 >>
/dev/mapper/vg--data-lv--kubelet    1007G   28K  956G   1% /var/lib/kubelet
/dev/mapper/vg--data-lv--containerd  2.0T   28K  1.9T   1% /var/lib/containerd
/dev/mapper/vg--data-lv--data        2.0T   28K  1.9T   1% /data
GPU-POD01-63 | CHANGED | rc=0 >>
/dev/mapper/vg--data-lv--kubelet    1007G   28K  956G   1% /var/lib/kubelet
/dev/mapper/vg--data-lv--containerd  2.0T   28K  1.9T   1% /var/lib/containerd
/dev/mapper/vg--data-lv--data        2.0T   28K  1.9T   1% /data
GPU-POD01-64 | CHANGED | rc=0 >>
/dev/mapper/vg--data-lv--kubelet    1007G   28K  956G   1% /var/lib/kubelet
/dev/mapper/vg--data-lv--containerd  2.0T   28K  1.9T   1% /var/lib/containerd
/dev/mapper/vg--data-lv--data        2.0T   28K  1.9T   1% /data
(venv) root@JasonYin2020:~/nx_ops/ops-playbook#