IBM Cloud から提供されている 30 日間無料 Kubernetes サービス(IBM Kubernetes Service 、以下 "IKS")環境を使って利用することのできるコンテナイメージを1日に1個ずつ 30 日間連続で紹介していこうと思います。
初日は "Day 0" という特別な扱いとして、Day 1 以降でサービスを利用できる状態にするための準備作業や、この企画の背景・制約などを紹介していきます。ここでまずサービスを有効にして必要なツール等も導入し、Day 1 からは実際にコンテナを使っていく、という流れの最初の部分です。
【IKS について】
ウェブページやウェブサービスが運用される中で、単に「サービスとして公開できればいい」という時代から、「いかに安定して運用するか」という視点も求められるようになり、クラウドやコンテナといった環境が活用されることが少しずつ普通になってきました。
このコンテナ運用環境としての代表といえるのが Kubernetes(以下、"k8s") であると思っています。IBM 以外も含めたクラウドベンダー各社からもマネージド k8s 環境が提供されていて、各社の特徴を活かしながらの競争状態にあります。
そんな中、IBM Cloud から提供されているマネージド k8s である IKS の最大の特徴の1つが 30 日間無料で使える、という点です(30 日間でいったん k8s クラスタは消えてしまいますが、新しく環境を作り直せば 30 日単位で何回も利用できます。太っ腹!)。
この 30 日間無料で使える IKS は、有料版の IKS と比べていくつかの制約事項(後述)がありますが、ワーカーノード1つを自由に使うことができます。またサービスの外部公開も NodePort と呼ばれる「ワーカーノードのパブリック IP アドレスとポート番号を使った公開方法」に限られてしまいますが可能です。ワーカーノードのスペック範囲内であれば同時に複数のコンテナを起動して利用することもできるので開発段階や勉強目的などでは充分すぎる環境が用意されていると言えます。
この IKS 環境を使って 30 日間で 30 通りの使い方を紹介していく、というのが本ブログエントリの(明日からの30日間の)最大の目的です。
【無料版 IKS の制約事項】
有償製品版と比較しての、30日間無料版 IKS の制約事項は大きく以下の2点です:
・k8s クラスタのワーカーノードは1つ
・Ingress は利用不可。サービスの外部公開方法は NodePort のみ
まず実際のポッドやコンテナがデプロイされる先であるワーカーノードは1つ(vCPU x 2、メモリ 4GB)だけ割り振られます。 いくつかのアドオンが導入可能ですが、この制約により Istio アドオンの導入は(vCPU x 4、メモリ 16GB のワーカーノード3台が必要なので)できません。
また無料版では Ingress を使用することができません。Ingress を使うことで IBM Cloud ドメインによる HTTPS 接続可能なホスト名の割当も可能になるのですが、この環境では使えません。サービスを外部公開するには1つだけ利用可能なワーカーノードの IP アドレスをポート番号指定で公開する、いわゆる NodePort 接続だけが可能です。
この2点の制約はありますが、IP アドレスとポート番号を指定する形でのサービスの公開は可能です。一般的なウェブアプリケーション・サーバー複数台とデータベース・サーバー程度であれば(ワーカーノードのスペック範囲内で)普通に動かすことができると思っています。
【目的】
本ブログでは以下の目的を前提とした環境構築および操作手順を紹介します(ここに書かれていない部分については、できないという意味ではないのですが、無料ではなくなってしまったり、別の面倒な準備作業が必要になってしまったりするため、紹介範囲としての優先度を落とす、という意味だとご理解ください):
・無料の IKS 環境で実際に動かすことができるコンテナイメージを、実際のデプロイ手順とともに紹介する
・ボリュームマウントは(サービスによっては使うと便利な機能であることは理解しているが、無料の範囲外となってしまうことが多そうなので)今回使わない(なので、ここで紹介する内容では再起動時にデータは消えます)
・NodePort を使って(HTTPS ではなく)HTTP でポート番号を指定してサービスを公開する
・デプロイ可能な公開コンテナイメージとサンプル YAML ファイルを用意し、実際にデプロイして、利用するまでの手順を紹介する
・公式イメージが存在して、かつこの IKS 環境で簡単に動かすことができるものであればそちらを優先して紹介しますが、必ずしも公式イメージにこだわるつもりはありません。「簡単に動かす環境が揃っているもの」を優先して調査し、紹介していきます。
【準備】
では実際に IKS を利用するための準備作業を紹介します。作業は大きく(1)サーバー側(IBM Cloud 側) と、(2)クライアント側(利用する人の PC 環境側)、そして(3)CLI でログイン とに別れますが、順に説明します。
(1)サーバー側準備
サーバー側の準備では IKS の 30 日間無料プランを用意するまでの手順を紹介します。まず何はともあれ IBM Cloud のアカウントが必要となるので、お持ちでない場合は IBM Cloud アカウント作成ページからメールアドレスを指定してまずは無料アカウントを作成してください(指定したメールアドレスがログイン ID となります。パスワードはアカウント作成時に指定します)。
次にこの IBM Cloud アカウントを「ベーシックアカウント」に切り替えます。ここが少しややこしいので、説明を加えておきます。 IBM Cloud のアカウントは上記手順でオンラインで作成すると最初は「ライトアカウント」として作成されます。ライトアカウントはメールアドレスだけで作成することができる無料アカウントです。ライトアカウントでログインすると IBM Cloud のサービスの中で無料で提供されているサービスを無料の範囲内で利用することができるようになります。 で、ここが少しややこしいのですが、今回紹介する IKS は 30 日間無料ですがライトアカウントでは利用できないものです。IKS を利用する場合は(有料無料に関係なく)ライトアカウントからベーシックアカウントと呼ばれる有料プランに切り替える必要があります。具体的にはクレジットカードを登録して支払いに関する契約を(オンライン上で)行っていただきます。なお注意点として、この作業を行うことで、これまで無料のライトアカウントで(無料の範囲内だけで)使えていたサービスが、無料の枠を超えて使えるようになってしまい、場合によっては利用料金が発生するようになる可能性があることです。既存のライトアカウントをプラン変更して以下の手順を実行する場合はご注意ください(どうしても不安な場合は別のメールアドレスを使って、あらたにアカウントを作成した上でベーシックアカウントに変更し、こちらのアカウントについては IKS 以外の他のサービスを使わないようにしてください)。
IBM Cloud のベーシックアカウントが使えるようになれば 30 日間無料の IKS が申し込めるようになります。その手順はこちらを参照してください(画面が少し古くて、一部現在の画面内容と異なっている部分もありますが、手順そのものはまだ使えるはずです)。作成時のプランとして、必ず無料の "Free" を選択する点に注意してください(それ以外のは有料の k8s クラスタ環境です):
http://dotnsf.blog.jp/archives/1074305610.html
これで 30 日間無料で利用できる k8s クラスタ環境を IBM Cloud 内に用意することができました:

この画面内に(下の赤枠で)表示されているクラスター ID はこの後に何度か使うことになります。そのたびにこのページを開くのは面倒だと思うので、コピペしてどこかに保存しておくことをおすすめします。
(2)クライアント側準備
続いて実際のデプロイ指示を出したり、稼働状況を確認できたりするよう、クライアント PC 側も準備作業を済ませておきます。
まず今回の企画では k8s の CLI である kubectl コマンドと、IBM Cloud CLI である ibmcloud コマンドなど、CLI 環境を使ってデプロイ等を行うことになります。そのためこれらの(自分の PC 環境にあった) CLI アプリケーションを自分の PC にインストールしておく必要があります。
こちらのページを参考に、自分の PC にあった ibmcloud CLI と kubectl CLI を自分の PC にインストールしてください:
https://cloud.ibm.com/docs/containers?topic=containers-cs_cli_install
(3)CLI でログイン
最後に(2)で用意した CLI ツールを使って(1)で用意した IKS 環境を使えるよう、CLI ツールでログインする方法を紹介しておきます。この手順は Day 1 以降で実際にデプロイするコマンドを実行する際には事前に済ませておく必要のある手続きとなります。Day 1 以降で何度か実行することになると思うので、まずは練習のつもりで一度実行しておきましょう。
ターミナル(Windows の場合はコマンドプロンプト)を起動します。まずは ibmcloud コマンドを使って IBM Cloud に CLI でログインします。以下のコマンドを実行してください:
-u オプションに続いて IBM Cloud アカウント名(メールアドレス)、-r オプションにはリソースグループと呼ばれるグループ名を指定するのですが、特に指定したり変更していない場合は default を指定して実行してください。パスワードを聞かれるので IBM Cloud にログインする際のパスワードを指定します。またターゲットリージョンを聞かれたら IKS サービスを作成するときに指定したリージョンを指定します。
続けて自分の IKS 環境に接続するためのコマンドを実行します。上述で確認したクラスター ID を指定して以下のコマンドを実行します:
-c オプションに続いてクラスター ID を指定して実行します。
ここまでの作業が成功していると ibmcloud コマンドや kubectl コマンドを使って IKS 内の k8s クラスタの状態を確認できるようになります。例えば以下のコマンドを実行して、IKS のワーカーノードの(今回の無料版は単一ワーカーノードなので、その1つのワーカーノードの)パブリック IP アドレス(以下の例では 169.51.204.190)を確認できます:

また、ここまでの手順が成功していると kubectl コマンドも同環境に対して実行できるようになっています。以下のコマンドで IKS 内で動いているすべてのデプロイメントやサービス等を出力してみましょう(IKS 作成直後の場合は以下のような kubernetes サービスのみが表示されます):
とりあえずここまでの手順で30日間無料の k8s クラスタ環境を作成し、このクラスタを操作するためのツールの準備もできた、ということになります。
以上、Day 0 で紹介する準備手順の内容でした。Day 1 からは実際に以下のような内容で1日に1つずつコンテナをデプロイして動作確認する様子を紹介していく予定です。
※この表は Day 30 まで紹介した後に全リンクを更新予定です。
初日は "Day 0" という特別な扱いとして、Day 1 以降でサービスを利用できる状態にするための準備作業や、この企画の背景・制約などを紹介していきます。ここでまずサービスを有効にして必要なツール等も導入し、Day 1 からは実際にコンテナを使っていく、という流れの最初の部分です。
【IKS について】
ウェブページやウェブサービスが運用される中で、単に「サービスとして公開できればいい」という時代から、「いかに安定して運用するか」という視点も求められるようになり、クラウドやコンテナといった環境が活用されることが少しずつ普通になってきました。
このコンテナ運用環境としての代表といえるのが Kubernetes(以下、"k8s") であると思っています。IBM 以外も含めたクラウドベンダー各社からもマネージド k8s 環境が提供されていて、各社の特徴を活かしながらの競争状態にあります。
そんな中、IBM Cloud から提供されているマネージド k8s である IKS の最大の特徴の1つが 30 日間無料で使える、という点です(30 日間でいったん k8s クラスタは消えてしまいますが、新しく環境を作り直せば 30 日単位で何回も利用できます。太っ腹!)。
この 30 日間無料で使える IKS は、有料版の IKS と比べていくつかの制約事項(後述)がありますが、ワーカーノード1つを自由に使うことができます。またサービスの外部公開も NodePort と呼ばれる「ワーカーノードのパブリック IP アドレスとポート番号を使った公開方法」に限られてしまいますが可能です。ワーカーノードのスペック範囲内であれば同時に複数のコンテナを起動して利用することもできるので開発段階や勉強目的などでは充分すぎる環境が用意されていると言えます。
この IKS 環境を使って 30 日間で 30 通りの使い方を紹介していく、というのが本ブログエントリの(明日からの30日間の)最大の目的です。
【無料版 IKS の制約事項】
有償製品版と比較しての、30日間無料版 IKS の制約事項は大きく以下の2点です:
・k8s クラスタのワーカーノードは1つ
・Ingress は利用不可。サービスの外部公開方法は NodePort のみ
まず実際のポッドやコンテナがデプロイされる先であるワーカーノードは1つ(vCPU x 2、メモリ 4GB)だけ割り振られます。 いくつかのアドオンが導入可能ですが、この制約により Istio アドオンの導入は(vCPU x 4、メモリ 16GB のワーカーノード3台が必要なので)できません。
また無料版では Ingress を使用することができません。Ingress を使うことで IBM Cloud ドメインによる HTTPS 接続可能なホスト名の割当も可能になるのですが、この環境では使えません。サービスを外部公開するには1つだけ利用可能なワーカーノードの IP アドレスをポート番号指定で公開する、いわゆる NodePort 接続だけが可能です。
この2点の制約はありますが、IP アドレスとポート番号を指定する形でのサービスの公開は可能です。一般的なウェブアプリケーション・サーバー複数台とデータベース・サーバー程度であれば(ワーカーノードのスペック範囲内で)普通に動かすことができると思っています。
【目的】
本ブログでは以下の目的を前提とした環境構築および操作手順を紹介します(ここに書かれていない部分については、できないという意味ではないのですが、無料ではなくなってしまったり、別の面倒な準備作業が必要になってしまったりするため、紹介範囲としての優先度を落とす、という意味だとご理解ください):
・無料の IKS 環境で実際に動かすことができるコンテナイメージを、実際のデプロイ手順とともに紹介する
・ボリュームマウントは(サービスによっては使うと便利な機能であることは理解しているが、無料の範囲外となってしまうことが多そうなので)今回使わない(なので、ここで紹介する内容では再起動時にデータは消えます)
・NodePort を使って(HTTPS ではなく)HTTP でポート番号を指定してサービスを公開する
・デプロイ可能な公開コンテナイメージとサンプル YAML ファイルを用意し、実際にデプロイして、利用するまでの手順を紹介する
・公式イメージが存在して、かつこの IKS 環境で簡単に動かすことができるものであればそちらを優先して紹介しますが、必ずしも公式イメージにこだわるつもりはありません。「簡単に動かす環境が揃っているもの」を優先して調査し、紹介していきます。
【準備】
では実際に IKS を利用するための準備作業を紹介します。作業は大きく(1)サーバー側(IBM Cloud 側) と、(2)クライアント側(利用する人の PC 環境側)、そして(3)CLI でログイン とに別れますが、順に説明します。
(1)サーバー側準備
サーバー側の準備では IKS の 30 日間無料プランを用意するまでの手順を紹介します。まず何はともあれ IBM Cloud のアカウントが必要となるので、お持ちでない場合は IBM Cloud アカウント作成ページからメールアドレスを指定してまずは無料アカウントを作成してください(指定したメールアドレスがログイン ID となります。パスワードはアカウント作成時に指定します)。
次にこの IBM Cloud アカウントを「ベーシックアカウント」に切り替えます。ここが少しややこしいので、説明を加えておきます。 IBM Cloud のアカウントは上記手順でオンラインで作成すると最初は「ライトアカウント」として作成されます。ライトアカウントはメールアドレスだけで作成することができる無料アカウントです。ライトアカウントでログインすると IBM Cloud のサービスの中で無料で提供されているサービスを無料の範囲内で利用することができるようになります。 で、ここが少しややこしいのですが、今回紹介する IKS は 30 日間無料ですがライトアカウントでは利用できないものです。IKS を利用する場合は(有料無料に関係なく)ライトアカウントからベーシックアカウントと呼ばれる有料プランに切り替える必要があります。具体的にはクレジットカードを登録して支払いに関する契約を(オンライン上で)行っていただきます。なお注意点として、この作業を行うことで、これまで無料のライトアカウントで(無料の範囲内だけで)使えていたサービスが、無料の枠を超えて使えるようになってしまい、場合によっては利用料金が発生するようになる可能性があることです。既存のライトアカウントをプラン変更して以下の手順を実行する場合はご注意ください(どうしても不安な場合は別のメールアドレスを使って、あらたにアカウントを作成した上でベーシックアカウントに変更し、こちらのアカウントについては IKS 以外の他のサービスを使わないようにしてください)。
IBM Cloud のベーシックアカウントが使えるようになれば 30 日間無料の IKS が申し込めるようになります。その手順はこちらを参照してください(画面が少し古くて、一部現在の画面内容と異なっている部分もありますが、手順そのものはまだ使えるはずです)。作成時のプランとして、必ず無料の "Free" を選択する点に注意してください(それ以外のは有料の k8s クラスタ環境です):
http://dotnsf.blog.jp/archives/1074305610.html
これで 30 日間無料で利用できる k8s クラスタ環境を IBM Cloud 内に用意することができました:

この画面内に(下の赤枠で)表示されているクラスター ID はこの後に何度か使うことになります。そのたびにこのページを開くのは面倒だと思うので、コピペしてどこかに保存しておくことをおすすめします。
(2)クライアント側準備
続いて実際のデプロイ指示を出したり、稼働状況を確認できたりするよう、クライアント PC 側も準備作業を済ませておきます。
まず今回の企画では k8s の CLI である kubectl コマンドと、IBM Cloud CLI である ibmcloud コマンドなど、CLI 環境を使ってデプロイ等を行うことになります。そのためこれらの(自分の PC 環境にあった) CLI アプリケーションを自分の PC にインストールしておく必要があります。
こちらのページを参考に、自分の PC にあった ibmcloud CLI と kubectl CLI を自分の PC にインストールしてください:
https://cloud.ibm.com/docs/containers?topic=containers-cs_cli_install
(3)CLI でログイン
最後に(2)で用意した CLI ツールを使って(1)で用意した IKS 環境を使えるよう、CLI ツールでログインする方法を紹介しておきます。この手順は Day 1 以降で実際にデプロイするコマンドを実行する際には事前に済ませておく必要のある手続きとなります。Day 1 以降で何度か実行することになると思うので、まずは練習のつもりで一度実行しておきましょう。
ターミナル(Windows の場合はコマンドプロンプト)を起動します。まずは ibmcloud コマンドを使って IBM Cloud に CLI でログインします。以下のコマンドを実行してください:
$ ibmcloud login -u (メールアドレス) -g (リソースグループ名 通常は default)
-u オプションに続いて IBM Cloud アカウント名(メールアドレス)、-r オプションにはリソースグループと呼ばれるグループ名を指定するのですが、特に指定したり変更していない場合は default を指定して実行してください。パスワードを聞かれるので IBM Cloud にログインする際のパスワードを指定します。またターゲットリージョンを聞かれたら IKS サービスを作成するときに指定したリージョンを指定します。
続けて自分の IKS 環境に接続するためのコマンドを実行します。上述で確認したクラスター ID を指定して以下のコマンドを実行します:
$ ibmcloud ks cluster config -c (クラスターID)
-c オプションに続いてクラスター ID を指定して実行します。
ここまでの作業が成功していると ibmcloud コマンドや kubectl コマンドを使って IKS 内の k8s クラスタの状態を確認できるようになります。例えば以下のコマンドを実行して、IKS のワーカーノードの(今回の無料版は単一ワーカーノードなので、その1つのワーカーノードの)パブリック IP アドレス(以下の例では 169.51.204.190)を確認できます:
$ ibmcloud ks worker ls --cluster (作成したクラスター名 通常は mycluster-free)

また、ここまでの手順が成功していると kubectl コマンドも同環境に対して実行できるようになっています。以下のコマンドで IKS 内で動いているすべてのデプロイメントやサービス等を出力してみましょう(IKS 作成直後の場合は以下のような kubernetes サービスのみが表示されます):
$ kubectl get all NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 172.21.0.1 <none> 443/TCP 14d
とりあえずここまでの手順で30日間無料の k8s クラスタ環境を作成し、このクラスタを操作するためのツールの準備もできた、ということになります。
以上、Day 0 で紹介する準備手順の内容でした。Day 1 からは実際に以下のような内容で1日に1つずつコンテナをデプロイして動作確認する様子を紹介していく予定です。
※この表は Day 30 まで紹介した後に全リンクを更新予定です。
Day | カテゴリー | デプロイ内容 |
---|---|---|
0 | 準備 | 準備作業 |
1 | ウェブサーバー | ? |
2 | ? | |
3 | ? | |
4 | ? | |
5 | ? | |
6 | データベース | ? |
7 | ? | |
8 | ? | |
9 | ? | |
10 | ? | |
11 | ? | |
12 | ? | |
13 | ? | |
14 | ? | |
15 | ? | |
16 | ? | |
17 | ? | |
18 | ? | |
19 | プログラミング | ? |
20 | ? | |
21 | ? | |
22 | ? | |
23 | ? | |
24 | ? | |
25 | アプリケーション | ? |
26 | ? | |
27 | ? | |
28 | ? | |
29 | ? | |
30 | ? |