CentOS7 で /(root) 領域を拡張する(Ansible 編)

# 前提


- 構成は前回を踏襲しています。
- ansible が使えるようになっていること。
- ssh でパスワード無しでログインできること。
- 対象ホストの名前解決ができること。
- root でログインできること。
- 対象ホストは k8s-master2 と k8s-master3


# コマンド

```shell

構文をチェックする
# ansible-playbook resize_home.yml -i hosts --syntax-check

dry run をする場合はこちらを実行（多分失敗する）
# ansible-playbook resize_home.yml -i hosts --check

実行
# ansible-playbook resize_home.yml -i hosts
```

# ファイル構成
```
 resize/
　 ├ hosts
　 └ resize_root.yml

```
# ファイル一覧

hosts
-
```text:hosts
k8s-master1
k8s-master2
k8s-master3
```

ansible-playbook
---

```:resize_root.yml
- hosts: k8s-master3    #対象ホストを指定する。
  vars:
    backup_mountpoint: nfs_backup　# バックアップ先 nfs サーバ側のマウントポイント
    file_server: 192.168.1.50 # nfs サーバの IP アドレス
    mountpoint: /mnt　# node 側の nfs マウントポイント

  tasks:                #実行するtaskを指定する。
    - name: yum install xdump を実行する
      yum: name=xfsdump state=present


    - name: backup 先を NFS マウントする
      mount: name={{ mountpoint }} src={{ file_server }}:{{ backup_mountpoint }} fstab=/tmp/fstab.tmp fstype=nfs state=mounted


    - name: glusterd を mask して停止させる
      systemd:
        name: glusterd
        masked: yes
        state: stopped


    - name: backup が存在するか確認する
      stat: path={{ mountpoint }}/{{ inventory_hostname }}/home.dump
      register: res
      failed_when: no
      changed_when: no


    - name: backup が存在しない場合、xfsdump を実行し backup を取得する
      shell: xfsdump -J -L home -M drive -f {{mountpoint}}/`uname -n`/home.dump /home
      when: not res.stat.exists


    - name: /home を unmount する
      mount: name=/home state=unmounted


    - name: logical volume home を削除する
      lvol:
        vg: centos
        lv: home
        state: absent
        force: yes


    - name: logical volume home を 80G で作成する
      lvol:
        vg: centos
        lv: home
        size: 80g


    - name: xfs で /dev/centos/home をフォーマットする
      shell: mkfs.xfs /dev/centos/home


    - name: /home/glusterfs ディレクトリの存在チェック
      stat: path=/home/glusterfs/
      register: pathchack


    - name: /dev/centos/home をマウントする
      shell: mount /home
      when: not pathcheck.stat.exists
      failed_when: no
      changed_when: no


    - name: xfsrestore で /home をリストアする
      shell: xfsrestore -J -L home -f {{ mountpoint }}/\`uname -n\`/home.dump /home
      when: not pathcheck.stat.exists
      failed_when: no
      changed_when: no


    - name: logical volume root を拡張する
      filesystem:
        fstype: xfs
        dev: /dev/mapper/centos-root
        resizefs: yes


    - name: enable service httpd and ensure it is not masked
      systemd:
        name: glusterd
        masked: no
        state: restarted


```

# 後処理

glusterfs の正常性が確認できれば、以下を実施して node に pod を配置可能な状態に戻します。

```shell
# kubectl uncordon <node>
```

glusterfs の正常性は以下で確認します。

```shell
gluster volume 一覧を環境変数にセットする
# VOL_LIST=`gluster vol list`

確認
# echo $VOL_LIST

gluster volume の正常性確認
# for vol in ${VOL_LIST}; 
  do echo $vol;
  gluster vol heal $vol info
  done

[表示例]
Brick etcd-master1:/home/glusterfs/mstdn
Status: Connected
Number of entries: 0

Brick etcd-master2:/home/glusterfs/mstdn
Status: Connected
Number of entries: 0

Brick etcd-master3:/home/glusterfs/mstdn
Status: Connected
Number of entries: 0

```

Number of entries: 0
と表示されていることを確認します。