大塚紳一郎, 2020年3月
2003年、株式会社野村総合研究所に新卒で入社。ミッションクリティカルシステムにおけるOracle Databaseの構築、運用、コンサルティングに関して15年以上の経験を持つ。毎年サンフランシスコで開催される世界最大のテクノロジーイベント「Oracle OpenWorld」を含む各種イベントでの講演多数。Autonomous DatabaseがGAされた年にOracle ACE Associateになれたことに運命を感じており、Oracleデータベース管理者の今後のロールモデルの構築に携わりたいと考え日々活動中。最新の登壇タイトルは「Boosting your career through Oracle Cloud Infrastructure 2018 Certified Architect Associate.」
こんにちは、NRIの大塚です。今回はCURRENT DATA領域の連載4回目です。
テーマとするPaaSはOracle Container Engine for Kubernetes(OKE)です。
今回は前回プロビジョニングしたOracle Container Engine for Kubernetesクラスタにアクセスしていきます。
今回作成するのは図中赤枠の部分です。
今回は以下の8ステップで構築していきます。
- Step1:Oracle Cloud管理コンソールへのログイン
- Step2:Kubernetesコントロールサーバ用サブネットのセキュリティ・リスト作成
- Step3:Kubernetesコントロールサーバ用サブネットの作成
- Step4:Kubernetesコントロールサーバ
- Step5:Kubernetesの管理用CLI(kubectl)のセットアップ
- Step6:Pythonのインストール
- Step7:Oracle Cloud Infrastructureコマンドラインインタフェース(OCI CLI)のインストール&セットアップ
- Step8:Oracle Container Engine for Kubernetesクラスタへのアクセス
それでは、さっそくはじめたいと思います。
早速Oracle Cloud管理コンソールへログインしてみましょう。URLは以下です。
https://www.oracle.com/jp/cloud/sign-in.html
(注)2ステップ検証は以下の記事で実装しました。
「Keys to the Oracle Cloud第7回:【Tea break】 Oracle CloudにおけるMulti-Factor Authentication(多要素認証)の実装」
標準のログインシーケンスでは、2ステップ検証の画面には遷移しませんのでご注意ください。
上記の記事を参考に各自実装をお願いします。
これからOracle Cloud管理コンソールを活用して実装をしていきます。ハンバーガーボタンを押下するとメニューが表示されます。表示されたメニューで構築を進めて行きます。
構築開始前にリージョンと、言語の確認をしましょう。必要に応じて、下図を参考に設定を変更してください。
次にVCNを作成したいと思います。
VCNの作成は「ハンバーガーボタン」→「ネットワーキング」→「仮想クラウド・ネットワーク」の順で押下して作成画面を表示します。
コンパートメントで「Blockchain」を選択し、その後「PROXY」を押下します。
「セキュリティ・リスト」を押下します。
「セキュリティ・リストの作成」を押下します。
セキュリティ・リストの設定値を入力していきます。
作成されました。
次にK8sコントロールサーバ用のサブネットを作成します。
「サブネットの作成」を押下してください。
サブネットの設定値を入力していきます。
以下のように作成されました。
それでは準備が出来ましたので、K8sコントロールサーバを作成しましょう。
「コンピュート」→「インスタンス」の順に押下してください。
「インスタンスの作成」を押下してください。
インスタンスの設定値を入力していきます。
インスタンスのプロビジョニングが開始されます。
すぐに作成されました。アイコンの色が緑色に変わるので、分かりやすいですね。
それでは作成したK8sコントロールサーバに接続したいと思います。接続の概要を説明します。
システム構成図で表すと下図のようになります。
実際のコマンドで接続してみたいと思います。
[opc@プロキシサーバのhostname 鍵ファイル置き場]$ ssh -i myrsa opc@ K8sコントロールサーバのPrivateIPアドレス
The authenticity of host ' K8sコントロールサーバのPrivateIPアドレス' can't be established.
Are you sure you want to continue connecting (yes/no)? yes
[opc@K8sコントロールサーバのhostname ~]$
接続することができました。それでは、これからK8sコントロールサーバのセットアップをしていきたいと思います。
OKEのマスターへの命令送信は管理用CLI(kubectlと言います)を用いて行います。
OCIへの命令送信はOracle Cloud Infrastructure コマンドラインインターフェース(CLI)を用いて行います。OCI CLIはOKEのIaaS部分の操作(例えばワーカー・ノードのスケーリングやOKEへの接続情報の取得)に使用します。 作成したK8sコントロールサーバのセットアップを行い、前回プロビジョニングしたKubernetesクラスタに対して、Kubernetesの管理用CLI(kubectl)を使ってアクセスできるようにしたいと思います。
Oracle Container Engine for Kubernetes用のKubectlは以下のようなソフトウェアスタックです。
まずKubernetesの管理用CLI(以降kubectl)です。
KubectlはKubernetesの公式ドキュメントの手順に従ってインストールします。
※Kubernetesの公式ドキュメント
https://kubernetes.io/docs/tasks/tools/install-kubectl/
以降はKubernetesの公式ドキュメントの抜粋です。
1.Download the latest release with the command:
curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl
2.Make the kubectl binary executable.
chmod +x ./kubectl
3.Move the binary in to your PATH.
sudo mv ./kubectl /usr/local/bin/kubectl
4.Test to ensure the version you installed is up-to-date:
kubectl version
実装していきましょう。
[opc@K8sコントロールサーバのhostname ~]$
[opc@K8sコントロールサーバのhostname ~]$ curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
--:--:-- --:--:-- --:--:-- 119M
[opc@opc@K8sコントロールサーバのhostname ~]$ ls
kubectl
[opc@K8sコントロールサーバのhostname ~]$ chmod +x ./kubectl
[opc@K8sコントロールサーバのhostname ~]$ sudo mv ./kubectl /usr/local/bin/kubectl
[opc@K8sコントロールサーバのhostname ~]$ kubectl version
Client Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.2", GitCommit:"c97fe5036ef3df2967d086711e6c0c405941e14b", GitTreeState:"clean", BuildDate:"2019-10-15T19:18:23Z", GoVersion:"go1.12.10", Compiler:"gc", Platform:"linux/amd64"}
The connection to the server localhost:8080 was refused - did you specify the right host or port?
[opc@opc@K8sコントロールサーバのhostname ~]$
Oracle Cloud Infrastructureコマンドラインインタフェース(以降OCI CLI)をインストールするには、Pythonの2.7.5以上 または 3.5以上がインストールされている必要があります。PythonはOracle Cloud Infrastructure のインスタンスには含まれていますので、ターミナルで以下のコマンドを実行しPythonのバージョンを確認すればOKです。
※コマンドラインインタフェース (CLI)要件
https://docs.oracle.com/cd/E97706_01/Content/API/Concepts/cliconcepts.htm
[opc@K8sコントロールサーバのhostname ~]$ python --version
Python 2.7.5
要件を満たすPythonが既に導入されておりますので、次のステップに進みます。
OCI CLIのセットアップにはuser OCIDと、tenancy OCIDの入力が必要になります。まずuser OCIDから確認していきたいと思います。
OKE-adminアカウントでOCIにサイン・インし、確認をしていきます。
ユーザーの詳細情報の画面で「ユーザー情報」タブ内のユーザーのOCID情報が確認できます。
OCIDの値の右にある「コピー」をクリックすると、クリップボードにOCIDがコピーされます。
これをテキストエディタなどにペーストしておきます(後でインストール時に貼り付けます)
次に、tenancy OCIDの情報を取得します。
コンソール上部の TENANCY の下のテナント名のリンクをクリックします
テナントの詳細情報の画面で「テナンシ情報」タブ内にテナントのOCID情報が確認できます。
OCIDの値の右にある「コピー」をクリックすると、クリップボードにOCIDがコピーされます。
これをテキストエディタなどにペーストしておきます
user OCIDと、tenancy OCIDの情報を取得できたのでOCI CLIをインストールします。
以下のコマンドを実行します。
bash -c "$(curl -L https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh)"
コマンドを実行すると、OCI CLIのインストール先などを聞かれます。私は以下としましたが、変更することも可能です。必要に応じて設定してください(以下は私の例です)
===> In what directory would you like to place the install? (leave blank to use '/home/opc/lib/oracle-cli'):
OCI CLIインストール先の指定。私は入力なしで「Enter」を押下(デフォルトの'/home/opc/lib/oracle-cli')
===> In what directory would you like to place the 'oci' executable? (leave blank to use '/home/opc/bin'):
OCI CLIの実体の配置場所の指定。私は入力なしで「Enter」を押下(デフォルトの'/home/opc/bin')
===> In what directory would you like to place the OCI scripts? (leave blank to use '/home/opc/bin/oci-cli-scripts'):
OCI CLIのスクリプト配置場所の指定。私は入力なしで「Enter」を押下(デフォルトの'/home/opc/bin/oci-cli-scripts')
===> Currently supported optional packages are: ['db (will install cx_Oracle)']
What optional CLI packages would you like to be installed (comma separated names; press enter if you don't need any optional packages)?:
オプションパッケージ。私は入力なしで「Enter」を押下。
===> Modify profile to update your $PATH and enable shell/tab completion now? (Y/n):
ユーザープロファイルのUpdate。私は「Y」を押下。
===> Enter a path to an rc file to update (leave blank to use '/home/opc/.bashrc'):
rcファイルのパス。私は入力なしで「Enter」を押下(デフォルトの'/home/opc/.bashrc')
以下が実行記録です。
[opc@K8sコントロールサーバのhostname ~]$ bash -c "$(curl -L https://raw.githubusercontent.com//oracle/oci-cli/master/scripts/install/install.sh)"
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
--:--:-- --:--:-- --:--:-- 77171
******************************************************************************
You have started the OCI CLI Installer in interactive mode. If you do not wish
to run this in interactive mode, please include the --accept-all-defaults option.
If you have the script locally and would like to know more about
input options for this script, then you can run:
./install.sh -h
If you would like to know more about input options for this script, refer to:
https://github.com/oracle/oci-cli/blob/master/scripts/install/README.rst
******************************************************************************
インストールが完了しました。次にOCI CLIのセットアップを行います。以下のコマンドで行います。
oci setup config
コマンドを実行すると、user OCIDなどを聞かれます。私は以下としましたが、変更することも可能です。必要に応じて設定してください(以下は私の例です)
Enter a location for your config [/home/<ユーザー名>/.oci/config]:
→コンフィグファイルのパス。私は入力なしで「Enter」を押下(デフォルトの’/home/<ユーザー名>/.oci/config’)
Enter a user OCID:
→まえの手順で確認したユーザーのOCIDを入力
Enter a tenancy OCID:
→まえの手順で確認したテナントのOCIDを入力
Enter a region (e.g. eu-frankfurt-1, us-ashburn-1, us-phoenix-1):
→アクセスしたいリージョンを例のとおりに入力。私は「us-ashburn-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]:
→RSAキー・ペアの生成。私は「Y」を入力
Enter a directory for your keys to be created [/home/<ユーザー名>/.oci]:
→生成したキーの配置場所。私は入力なしで「Enter」を押下(デフォルトの’/home/<ユーザー名>/.oci’)
Enter a name for your key [oci_api_key]:
→キーの名前。私は入力なしで「Enter」を押下(デフォルトの’oci_api_key’)
Enter a passphrase for your private key (empty for no passphrase):
→パスフレーズの入力。任意のパスフレーズを入力してください
以下が実行記録です。
OCI CLIからOracle Cloud Infrastructureへアクセスを行う際には、API認証が行われます。
このため予めAPIキーを、OKE-adminユーザーの設定に登録しておく必要があります。
つまりOCI CLIのセットアップの際に作成した鍵ペアのうち、公開鍵をOracle Cloudの管理コンソールを用いて登録します。まず、ターミナルで以下のコマンドを実行し、公開鍵を表示しておきます。
(この値をOracle Cloudの管理コンソールに登録します)
cat ~/.oci/oci_api_key_public.pem
以下が実行記録です。
[opc@K8sコントロールサーバのhostname ~]$ cat ~/.oci/oci_api_key_public.pem
-----BEGIN PUBLIC KEY-----
機密情報のため非公開
-----END PUBLIC KEY-----
[opc@K8sコントロールサーバのhostname ~]$
Oracle Cloudの管理コンソールに登録していきます。 まず、画面右上のユーザーボタンを押下します。次に展開されたメニューの「ユーザー設定を押下します。
ユーザーの詳細画面の左側のメニューで、「APIキー」をクリックし、「公開キーの追加」ボタンを押下します。
ここに先ほどターミナルで表示した値をペーストします。
(-----BEGIN PUBLIC KEY-----および-----END PUBLIC KEY-----も含めます)
登録されました。
最後にkubectlの設定ファイルを取得し、kubectlで実際にOracle Container Engine for Kubernetesクラスタにアクセスしてみます。
「ハンバーガーボタン」→「開発者サービス」→「コンテナ・クラスタ(OKE)」の順に押下します。
コンパートメントを「OKE」に切り替えます。
作成済のOracle Container Engine for Kubernetesクラスタが表示されます
「kubeconfigへのアクセス」を押下します。
以下のように表示されているコマンドを実行するとkubectlでOracle Container Engine for Kubernetesクラスタにアクセスできるようになります。
以下が実行記録です。
[opc@K8sコントロールサーバのhostname ~]$ oci -v
2.6.11
[opc@K8sコントロールサーバのhostname ~]$ mkdir -p $HOME/.kube
[opc@K8sコントロールサーバのhostname ~]$ oci ce cluster create-kubeconfig --cluster-id ocid1.cluster.oc1.iad.aaaaaaaaaeztemrsgqydsy3ggi3dsmbvga2dmmdbmu3dcyryhcqtimzrgbrd --file $HOME/.kube/config --region us-ashburn-1 --token-version 2.0.0
Private key passphrase:
New config written to the Kubeconfig file /home/opc/.kube/config
[opc@K8sコントロールサーバのhostname ~]$ export KUBECONFIG=$HOME/.kube/config
[opc@K8sコントロールサーバのhostname ~]$
kubectlでOracle Container Engine for Kubernetesクラスタにアクセスしてみます。kubectlコマンドでOracle Container Engine for Kubernetesクラスタに参加しているWorkerノードの状態を確認しましょう。
[opc@K8sコントロールサーバのhostname ~]$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
WorkerNode1のIPアドレス Ready node 28d v1.13.5
WorkerNode2のIPアドレス Ready node 28d v1.13.5
WorkerNode3のIPアドレス Ready node 28d v1.13.5
これは下図のような経路で行われた処理です。
以上でOracle Container Engine for Kubernetesクラスタのプロビジョニングと利用開始までの手順は全て完了しました。
今回は以上となります。次回は、Oracle Container Engine for Kubernetesを活用するお話しをしたいと思います。
読んで頂き、ありがとうございました。
※セキュリティ・リストに関するマニュアル
https://docs.oracle.com/cd/E97706_01/Content/Network/Concepts/securitylists.htm
※サブネットに関するマニュアル
https://docs.oracle.com/cd/E97706_01/Content/Network/Tasks/managingVCNs.htm
※コンピュートに関するマニュアル
https://docs.oracle.com/cd/E97706_01/Content/Compute/Concepts/computeoverview.htm
※Kubernetesの公式ドキュメント
https://kubernetes.io/docs/tasks/tools/install-kubectl/
※コマンドラインインタフェース (CLI)要件
https://docs.oracle.com/cd/E97706_01/Content/API/Concepts/cliconcepts.htm
※コマンドラインインタフェース (CLI)の手動でのインストール
https://docs.oracle.com/cd/E97706_01/Content/API/SDKDocs/climanualinst.htm
※コマンドラインインタフェース (CLI)に関するマニュアル
https://docs.oracle.com/cd/E97706_01/Content/API/Concepts/cliconcepts.htm
※Oracle Container Engine for Kubernetesに関するマニュアル
https://docs.oracle.com/cd/E97706_01/Content/ContEng/Concepts/contengoverview.htm