OKEクラスターでコンテナを動かしてみる
このエントリーはOracle Cloudアドベントカレンダー その2の2日目です。
2日目も引き続き、Oracle Contianer Engine for Kubernetes(以下「OKE」。Oracleが提供するKubernetesのマネージドサービス)の話題です。このエントリーでは、1日目に作成したOKEでクラスターにkubectlでアクセスし、サンプルのコンテナをデプロイしてみます。
0 . 前提条件
手順の流れ
大雑把に言って、以下のような手順になります。
- kubectl等のコマンドラインツールをインストールする
- OKEにアクセスするためのkubectlの設定ファイルを取得する
- コンテナをデプロイする
それではやってみましょう。
1 . kubectl等のコマンドラインツールをインストールする
OKEクラスターの利用のためには、以下のコマンドラインツールが必要です。
kubectlでOKEクラスターにアクセスするためには、接続情報などが書かれたkubectlの設定ファイルを入手する必要があります。これを行うために、OCI CLIが必要です。
また、OCI CLIの利用のためにPythonを必要とします。
1.1. Pythonのインストール
現在のPythonのバージョンを確認するには、ターミナルで以下のコマンドを実行します。
Python 2.x 系の場合
python --version
Python 3.x 系の場合
python3 --version
もし上述の条件を満たしていない場合は、ここでPythonのインストール/アップデートを行ってください。
1.2. OCI CLIをインストールをする
OCI CLIのインストールを行っていきます。
1.2.1. OCIDの確認
OCIネイティブのアカウントでコンソールにログインし、画面右上の人型のアイコンをクリックします。さらに、展開されたメニューの"User Settings"をクリックします。
ユーザーの詳細情報の画面で”User Information"タブ内にユーザーのOCIDが表示されている箇所があります。OCIDの値の右にある"Copy"をクリックすると、クリップボードにOCIDがコピーされるので、これを手元のテキストエディタなどにペーストしておきます。
次に、同じく画面右上の人型のアイコンをクリックし、展開されたメニューにあるTenant名をクリックします。
Tenantの詳細情報の画面で”Tenancy Information"タブ内にOCIDが表示されている箇所があります。OCIDの値の右にある"Copy"をクリックすると、クリップボードにOCIDがコピーされるので、これを手元のテキストエディタなどにペーストしておきます。
1.2.2. OCI CLIのインストール
OCI CLIをインストールするには、以下のコマンドを実行します。
bash -c "$(curl -L https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh)"
CLIのバイナリの配置先などを設定するインタラクションがあります。自身の環境に合わせて、好みの設定を行ってください(全てデフォルトのままで進めても問題ありません)。
インストールが完了したら、OCI CLIの初期セットアップを行います。以下のコマンドを実行してください。
oci setup config
ここでも設定をおこなうためのインタラクションがあります。ここでは、下表のように入力してください。
質問 | 応答操作 |
---|---|
Enter a location for your config [/home/<ユーザー名>/.oci/config] | なにも入力せず[Return] |
Enter a user OCID | 先の手順で確認したユーザーのOCIDを入力 |
Enter a tenancy OCID | 先の手順で確認したテナントのOCIDを入力 |
Enter a region (e.g. eu-frankfurt-1, us-ashburn-1, us-phoenix-1) | アクセスしたいリージョンを例に従って入力 |
Do you want to generate a new RSA key pair? (If you decline you will be asked to supply the path to an existing key.) [Y/n] | Y + [Return] |
Enter a directory for your keys to be created [/home/<ユーザー名>/.oci] | なにも入力せず[Return] |
Enter a name for your key [oci_api_key] | なにも入力せず[Return] |
Enter a passphrase for your private key (empty for no passphrase) | なにも入力せず[Return] |
CLIからOCIに対してアクセスを行う際には、OCIのAPIの認証が行われます。このため予め認証をパスするのに必要なAPIキーを、ユーザー毎にOCIにアップロードしておく必要があります。
OCI CLIの初期セットアップの際に作成した鍵ペアのうち、公開鍵の方を、管理コンソールからアップロードします。
まず、以下のターミナルで以下のコマンドを実行し、公開鍵を表示しておきます。
cat ~/.oci/oci_api_key_public.pem
続いてOCIのコンソールに移り、画面右上の現在ログイン中のユーザー名が表示されている箇所をクリックします。さらに、展開されたメニューの"User Settings"をクリックします。
ユーザーの詳細画面の左側のメニューで、"API Keys"をクリックし、さらに"Add Public Key"ボタンをクリックします。
”Add Public Key"ダイアログの入力欄に、先ほとターミナルに表示した公開鍵をペーストし、"Add"ボタンをクリックします("-----BEGIN PUBLIC KEY-----"と"-----END PUBLIC KEY-----"の行も含めてペーストします)。
以上でOCI CLIのインストールは完了です。
1.3. kubectlのインストール
Kubernetesの公式ドキュメントの手順に従って、kubectlをインストールしておきます。
2 . OKEにアクセスするためのkubectlの設定ファイルを取得する
最後にkubectlの設定ファイルを取得し、kubectlで実際にクラスターにアクセスしてみます。 OCIのコンソールで、画面右上のタブから"Developer Services"をクリックします。
あらかじめ作成しておいたOKEクラスターの名前をクリックします。
クラスターの詳細画面で、"Access Kubeconfig"をクリックします。
”How to Access Kubeconfig"ダイアログに、kubetctlの設定ファイルを取得するためのコマンドが表示されますので、これらを順次実行していきます。
1つ目のコマンドは、設定ファイルを格納するためのディレクトリの作成です。
mkdir -p $HOME/.kube
2つ目のコマンドは、OCI CLIの設定ファイル取得用のコマンドを実行しています(実際のコマンドはダイアログからコピーしてください)。
oci ce cluster create-kubeconfig --cluster-id ocid1.cluster.oc1.iad.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --file $HOME/.kube/config
最後に、以下のコマンドを実行して、kubectlの動作確認をしてみます。
kubectl get nodes
以下のような実行結果になれば、正常にクラスターにアクセスできています。
NAME STATUS ROLES AGE VERSION
129.213.100.157 Ready node 3d v1.11.1
129.213.118.118 Ready node 3d v1.11.1
129.213.95.69 Ready node 3d v1.11.1
3 . コンテナをデプロイする
それではいよいよ、OKEのクラスターにコンテナをデプロイしていきます。
今回は、公式のドキュメントにあるサンプルを利用して、Nginxを動かしてみます。以下のコマンドを実行してください。
kubectl apply -f https://k8s.io/examples/application/deployment.yaml
コマンドで指定されているymalファイルには、クラスターでコンテナを動かすための構成情報が記述されています(URLにアクセスすると、内容を確認できます)。上記のコマンドでは、このファイルの構成に従って、OKEクラスター上にコンテナをデプロイするよう指示しています。
以下のコマンドを実行すると、コンテナ(KubernetesではPodという単位に内包されています)の状態を確認できます。
kubectl get pods -l app=nginx
NAME READY STATUS RESTARTS AGE nginx-deployment-1771418926-7o5ns 1/1 Running 0 16h nginx-deployment-1771418926-r18az 1/1 Running 0 16h
2つのPodに冗長化してデプロイされてるようでうす。どちらも"Running"のステータスになっていればOKです。
このままでは、クラスターの外からコンテナにトラフィックを届けることができないので、以下のコマンドでクラスター外に公開します。
kubectl expose deployment nginx-deployment --type="LoadBalancer" --port 80
これによって、上の手順で作成したPodのセット(nginx-deployment)に対して、ロードバランサーを通してトラフィックを届けることができます。ここでのロードバランサーは、このコマンドが実行されたときにOCIのロードバランサーを自動プロビジョニングして利用しています。
数十秒程度時間をおいてから以下のコマンドを実行すると、コンテナが公開されているIPアドレス(ロードバランサー)のIPアドレスを確認できます。
kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 4d nginx-deployment LoadBalancer 10.96.219.208 129.213.187.123 80:32053/TCP 33s
nginx-deploymentというエントリーのEXTERNAL-IPに表示されているものがそれです。
ブラウザでこのIPアドレスにアクセスすると、おなじみにNginxの画面が表示されます。
http://129.213.187.123/
コンテナのデプロイは以上で完了です!
お掃除
デプロイしたものを削除するには、以下のコマンドを実行してください。
kubectl delete deployment nginx-deployment
kubectl delete service nginx-deployment