Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

事の始まり

kubernetes を構成している機器の一台で、POD が起動できない現象が発生しました。
どうやら Kubernetes 利用環境だと、docker image が保存されている領域が 85% 以上になると問題が起きる模様。
[参考]
https://kubernetes.io/docs/tasks/administer-cluster/out-of-resource/#eviction-policy

/home 領域が余っていたので、 / 領域に追加しました。

以下の手順で / の拡張を行っていきます。

構成

・/home 領域で glusterfs を利用(/home/glusterfs)
・node 3台構成
・今回の対象は k8s-master2

[Before]
/home : 180GB
/ : 50GB

[After]
/home : 80GB
/ :150GB

手順

  1. node から pod を退避させる
  2. バックアップの準備やバックアップ先のマウント
  3. glusterfs の停止
  4. home 領域の backup 取得
  5. home 領域の unmount
  6. home 領域の削除
  7. 新しい home 領域の作成
  8. バックアップした home のデータをリストア
  9. / 領域の拡張
  10. glusterfs の再開
  11. 作業後の確認

詳細手順

node から pod を退避させる

# kubectl drain --ignore-daemonsets --force --delete-local-data k8s-master2

必要なツールを準備します。

# yum install xfsdump

バックアップ先を用意します。このケースでは NFS。

# mount -t nfs 192.168.1.50:nfs_backup /mnt

glusterfs のステータス確認

# systemctl status glusterd
⇒ プロセスが起動していることを確認します。

# gluster peer status
⇒ peer が表示されていることを確認します。
  State: Peer in Cluster (Connected)

# gluster vol status
⇒ Brick の Online が Y になっていることを確認します。

glusterfs を停止します。
停止しても勝手に上がってくるので、mask で無理やり止めてます。
これでいいのか・・・?

# systemctl mask glusterd
# systemctl stop glusterd

※ これ以降、gluster 系のコマンドは使えなくなるので、
  ステータスを確認したい時は他の peer で確認しましょう。

表示例
[root@k8s-master1 ~]# gluster peer status
Number of Peers: 2

Hostname: etcd-master3
Uuid: 36d78117-e3ba-4bcc-b8bd-aa53109b7de7
State: Peer in Cluster (Connected)

Hostname: etcd-master2
Uuid: 03b802d9-dc51-4105-91b6-8720baabe80e
State: Peer in Cluster (Disconnected) ★停止中
[root@k8s-master1 ~]#

volume status 確認

# gluster vol status
volume 情報抜粋

Status of volume: mstdn
Gluster process                             TCP Port  RDMA Port  Online  Pid
------------------------------------------------------------------------------
Brick etcd-master1:/home/glusterfs/mstdn    49162     0          Y       5676
Brick etcd-master3:/home/glusterfs/mstdn    49162     0          Y       5477
Self-heal Daemon on localhost               N/A       N/A        Y       20508
Self-heal Daemon on etcd-master3            N/A       N/A        Y       28199

Task Status of Volume mstdn
------------------------------------------------------------------------------
There are no active volume tasks

バックアップを取得します。

# xfsdump -J -L home -M drive -f /mnt/`uname -n`/home.dump /home

xfsdump: dump complete: 118 seconds elapsed
xfsdump: Dump Summary:
xfsdump:   stream 0 /mnt/k8s-master2/home.dump OK (success)
xfsdump: Dump Status: SUCCESS

home を unmount します。

# umount /dev/mapper/centos-home

LVM 情報を確認。

# lvscan

既存のhomeを利用停止

# lvchange -an /dev/centos/home

結果確認
[root@k8s-master2 ~]# lvscan
  ACTIVE            '/dev/centos/swap' [7.81 GiB] inherit
  inactive          '/dev/centos/home' [179.46 GiB] inherit
  ACTIVE            '/dev/centos/root' [50.00 GiB] inherit
[root@k8s-master2 ~]#

既存のhomeを削除

# lvremove /dev/centos/home

結果確認
[root@k8s-master2 ~]# lvscan
  ACTIVE            '/dev/centos/swap' [7.81 GiB] inherit
  ACTIVE            '/dev/centos/root' [50.00 GiB] inherit
[root@k8s-master2 ~]#

新home作成

# lvcreate -L 80G -n home centos
# mkfs.xfs /dev/centos/home
# mount /home

確認

# lvscan
# df -h

[root@k8s-master2 ~]# lvscan
  ACTIVE            '/dev/centos/swap' [7.81 GiB] inherit
  ACTIVE            '/dev/centos/root' [50.00 GiB] inherit
  ACTIVE            '/dev/centos/home' [80.00 GiB] inherit
[root@k8s-master2 ~]#

df -h 抜粋
/dev/mapper/centos-home    80G   33M   80G    1% /home

homeダンプをリストア

# xfsrestore -J -L home -f /mnt/`uname -n`/home.dump /home

xfsrestore: restore complete: 168 seconds elapsed
xfsrestore: Restore Summary:
xfsrestore:   stream 0 /mnt/k8s-master2/home.dump OK (success)
xfsrestore: Restore Status: SUCCESS

空いたサイズをrootに割当

# lvextend -l +100%FREE /dev/centos/root

rootを拡張

# xfs_growfs /dev/mapper/centos-root

確認

# df -h
# lvscan

[root@k8s-master2 ~]# df -h
ファイルシス            サイズ  使用  残り 使用% マウント位置
/dev/mapper/centos-root   150G   43G  108G   29% /

[root@k8s-master2 ~]# lvscan
  ACTIVE            '/dev/centos/swap' [7.81 GiB] inherit
  ACTIVE            '/dev/centos/root' [149.46 GiB] inherit
  ACTIVE            '/dev/centos/home' [80.00 GiB] inherit
[root@k8s-master2 ~]#

glusterfs 再開

# systemctl unmask glusterd
# systemctl restart glusterd
# systemctl status glusterd

確認

[root@k8s-master2 ~]# gluster peer status
Number of Peers: 2

Hostname: etcd-master1
Uuid: 3b88e96b-af5b-4971-9af9-b03f06a03749
State: Peer in Cluster (Connected)

Hostname: etcd-master3
Uuid: 36d78117-e3ba-4bcc-b8bd-aa53109b7de7
State: Peer in Cluster (Connected)
[root@k8s-master2 ~]#

# gluster vol status

[表示例]
Status of volume: mstdn
Gluster process                             TCP Port  RDMA Port  Online  Pid
------------------------------------------------------------------------------
Brick etcd-master1:/home/glusterfs/mstdn    49162     0          Y       5676
Brick etcd-master2:/home/glusterfs/mstdn    49162     0          Y       2106
Brick etcd-master3:/home/glusterfs/mstdn    49162     0          Y       5477
Self-heal Daemon on localhost               N/A       N/A        Y       1998
Self-heal Daemon on etcd-master1            N/A       N/A        Y       20508
Self-heal Daemon on etcd-master3            N/A       N/A        Y       28199

Task Status of Volume mstdn
------------------------------------------------------------------------------
There are no active volume tasks

後処理

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

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

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


[表示例]
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

pod が起動しない設定を解除する

kubectl uncordon k8s-master2

うちは 3台構成なので、この作業を後2台に繰り返します。
面倒くさいので ansible で自動化したものが次の記事。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away