LoginSignup
0
0

Cloud-initを用いたOracle Container Engine for Kubernetes (OKE) のBoot Volume拡張

Last updated at Posted at 2024-03-01

はじめに

OKEに巨大なContainerイメージを使ってContainer立てて検証をしようとしたとき、すぐに容量が枯渇することがありました。実はOKEのNodeのBoot Volumeはデフォルトで50GBなので、巨大なイメージを使う場合は十二分に容量があるとは言えません。大きなContainerイメージや複数のイメージを使用する場合、容量不足になることがあります。例えば、流行りのAI周りで使われるLLMのイメージなどを使う場合は容量の拡張は必須ですね。
この記事では、Oracle Container Engine for Kubernetes (OKE) でyamlファイルを指定してCloud-initを実行することでBoot Volumeを拡張する方法を紹介します。

Oracle Container Engine for Kubernetes (OKE)とは

Oralce Cloudでは、KubernetesのマネージドサービスとしてOracle Container Engine for Kubernetes (OKE) が提供されています。

OKEクラスターの作成にはクイック作成とカスタム作成の2つの作成方法があります。
詳細は、以前投稿した記事に記載しています。

Oracle Container Engine for Kubernetes (OKE) のBoot Volumeの拡張

前提

【ネットワークリソースの事前構築】
・VCN
・Public Subnet
・Internet Gateway

手順

  1. アーキテクチャ
  2. DefaultのBoot Volumeの確認
  3. Boot Volumeの拡張
  4. 拡張されたBlock Volumeの確認

アーキテクチャ

今回は以下のようなアーキテクチャを作成し、OKEのカスタム作成で作成時にBoot Volumeを拡張します。

image.png

DefaultのBoot Volumeの確認

まず、比較対象としてデフォルトのBoot Volumeを確認します。OKEのBoot Volumeはデフォルトで50GB(正確には46.6GB)です。

$ lsblk
NAME               MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                  8:0    0 46.6G  0 disk 
├─sda1               8:1    0  100M  0 part /boot/efi
├─sda2               8:2    0    1G  0 part /boot
└─sda3               8:3    0 45.5G  0 part 
  ├─ocivolume-root 252:0    0 35.5G  0 lvm  /
  └─ocivolume-oled 252:1    0   10G  0 lvm  /var/oled

ではBoot Volumeを拡張したOKEクラスタを作成していきます。
OKEのカスタム作成を選択します

image.png

次に、「ネットワーク設定」のページの必要な項目を記載します。ここで,Public Subnetを持つVCNを指定してください。

image.png

ここでNodeをPublic Subnetに配置させます。Node Place Configurationの項目にPublic Subnetを指定してください。

image.png

次に、「拡張オプションの表示」をクリックします。拡張オプションでBoot Volumeのサイズや初期化スクリプトを指定します。

image.png

次に、Boot Volumeの項目で「カスタム・ブート・ボリューム・サイズを指定します」を選択します。Boot Volumeのサイズを100GBと記載します。Boot Volumeは50GB~32TBの範囲で選択することができます。Boot Volumeに関する詳細はドキュメントをご確認ください。

image.png

次に、「初期化スクリプト」の項目で、Cloud-initのスクリプトを選択します。

image.png

このCloud-initには、Boot Volume用に紐づけたBlock Volumeをscanしてパーティションを拡張するスクリプトが書かれています。Cloud-initをインスタンスの起動時に実行します。今回はsample-cloud-init.yamlというファイルを指定しています。

sample-cloud-init.yaml

#!/bin/bash
curl --fail -H "Authorization: Bearer Oracle" -L0 http://169.254.169.254/opc/v2/instance/metadata/oke_init_script | base64 --decode >/var/run/oke-init.sh
bash /var/run/oke-init.sh
sudo dd iflag=direct if=/dev/oracleoci/oraclevda of=/dev/null count=1
echo "1" | sudo tee /sys/class/block/`readlink /dev/oracleoci/oraclevda | cut -d'/' -f 2`/device/rescan
sudo /usr/libexec/oci-growfs -y

この起動スクリプトの内容を解説します。

#!/bin/bash
curl --fail -H "Authorization: Bearer Oracle" -L0 http://169.254.169.254/opc/v2/instance/metadata/oke_init_script | base64 --decode >/var/run/oke-init.sh

このスクリプトは、デフォルトのOKEの起動スクリプトです。OKEの管理対象ノードでカスタムでCloud-initの初期化スクリプトを作成する場合は、このデフォルトの起動スクリプトの前後に追加のスクリプトを記載します。詳細は「カスタムのCloud-init初期化スクリプトを使用した管理対象ノードの設定」をご確認ください。

sudo dd iflag=direct if=/dev/oracleoci/oraclevda of=/dev/null count=1
echo "1" | sudo tee /sys/class/block/`readlink /dev/oracleoci/oraclevda | cut -d'/' -f 2`/device/rescan

このスクリプトは、Block Volumeのディスクの再scanを行っています。追加でアタッチされたBlock Volumeを再scanして認識しています。詳細は「Linuxベースのインスタンスにアタッチされたボリュームのディスクの再スキャン」をご確認ください。

sudo /usr/libexec/oci-growfs -y

このスクリプトは、OCIユーティリティのoci-growfsを実行しています。oci-growfsユーティリティを使用して、ルート・パーティションを拡張できます。デフォルトでは、Boot Volumeが50 GB以上の場合、Linuxベースのインスタンスは拡張したBoot Voluem全体を自動的には使用しません。詳細は「oci-growfs」のドキュメントをご確認ください。

次に、ノードに対してssh接続を可能にします。この作業はBoot Volumeの拡張をSSH接続で確認するために行っていますが、必須の作業ではないです。
「SSHキーの追加」からSSH公開キーを追加します。

image.png

OKEのクラスタの設定項目は以上です。このままOKEのクラスタを作成します。

拡張されたBlock Volumeの確認

クラスタが立ち上がり、ノードプールとノードが作成されます。クラスタのノードに該当するインスタンスを確認します。SSH接続をするためにPublic IPアドレスをコピーしておきます。

秘密キーを指定して、SSH接続をします。問題なく動作していると、OKEのNodeにSSH接続できます。

$ ssh -i ~/.ssh/id_rsa.key opc@132.145.69.184
...
[opc@oke-c23xxylolma-nde35tb4pdq-sxxjqdbsu5a-0 ~]$

lsblkコマンドでNodeのBoot Volumeを確認します。sdaが100GBとなっているので問題なく拡張できています。

[opc@oke-c23xxylolma-nde35tb4pdq-sxxjqdbsu5a-0 ~]$ lsblk
NAME               MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                  8:0    0  100G  0 disk 
├─sda1               8:1    0  100M  0 part /boot/efi
├─sda2               8:2    0    1G  0 part /boot
└─sda3               8:3    0 45.5G  0 part 
  ├─ocivolume-root 252:0    0 35.5G  0 lvm  /
  └─ocivolume-oled 252:1    0   10G  0 lvm  /var/oled

以上が、OKEのNodeにおけるBlock Volumeの拡張方法です。

まとめ

今回の記事では、OCIのマネージドKubernetesサービスであるOKEのBoot Volumeの拡張を行いました。Volume Sizeの指定と、Cloud-initを書くだけで意外と簡単に拡張することができました。ただVolume Sizeの指定だけでは自動的にBoot Volumeが拡張されなかったり、OKE作成時のみBoot Volumeの拡張が可能なことなどいくつか注意点があります。詰まった方はこの記事を参考にしていただければ幸いです。

参考

カスタムのCloud-init初期化スクリプトを使用した管理対象ノードの設定

Linuxベースのインスタンスにアタッチされたボリュームのディスクの再スキャン

OCIユーティリティ

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0