ノート:
- このチュートリアルでは、Oracle Cloudへのアクセスが必要です。無料アカウントにサインアップするには、Oracle Cloud Infrastructure Free Tierの開始を参照してください。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントに例の値を使用します。演習を終える際は、これらの値をクラウド環境に固有の値に置き換えてください。
OCI VCNネイティブ・ポッド・ネットワーキングCNIプラグインを使用したOracle Cloud Infrastructure Container Engine for Kubernetesへのネットワーキング・サービスの提供
イントロダクション
デフォルトでは、Oracle Cloud Infrastructure Container Engine for Kubernetes (OKE)は、Oracle Cloud Infrastructure (OCI) VCNネイティブ・コンテナ・ネットワーク・インタフェース(CNI)プラグインを使用して、コンテナ化されたアプリケーションにネットワークまたはセキュリティ機能を提供します。このチュートリアルでは、どのようなCNIプラグインが使用されているかを確認する方法と、このデフォルトのCNIプラグイン(OCI VCNネイティブCNIプラグイン)を使用してOCI Load Balancerサービスを構成し、コンテナ内で実行されているアプリケーションにアタッチする方法について説明します。
OCI VCNネイティブ・ポッド・ネットワーキングCNIプラグインを使用する利点は、ポッドまたはコンテナがVCNのプライベート・サブネットからIPアドレスを取得することです。つまり、Kubernetesポッドは、VM(インスタンス)またはベアメタル・ノードまたは他のワークロードと同じネットワークに存在します。
目的
- OKEで使用されるデフォルトのCNIプラグインを検証する方法を確認します。新しいNginxコンテナ化アプリケーションをデプロイして、デフォルトのOCI VCNネイティブCNIプラグインの基本的なネットワーキング機能をテストし、OCI VCNネイティブ・ポッド・ネットワーキングCNIプラグインを利用して、ロード・バランサ・タイプの新しいネットワーク・サービスを作成し、そのサービスをデプロイされたNginxアプリケーションに公開します。最後に、アプリケーションおよびロード・バランサ・サービスをクリアします。
タスク1: OKEを使用したKubernetesクラスタのデプロイ
選択できる様々なOKEデプロイメント・モデルの詳細は、ネットワーク・リソース構成の例を参照してください。
OKEデプロイメント・モデルの例は、次のとおりです。
-
例1: Flannel CNIプラグイン、パブリックKubernetes APIエンドポイント、プライベート・ワーカー・ノードおよびパブリック・ロード・バランサを含むクラスタ。
-
例2: Flannel CNIプラグイン、プライベートKubernetes APIエンドポイント、プライベート・ワーカー・ノードおよびパブリック・ロード・バランサを含むクラスタ。
-
例3: OCI CNIプラグイン、パブリックKubernetes APIエンドポイント、プライベート・ワーカー・ノードおよびパブリック・ロード・バランサを含むクラスタ。
-
例4: OCI CNIプラグイン、プライベートKubernetes APIエンドポイント、プライベート・ワーカー・ノードおよびパブリック・ロード・バランサを含むクラスタ。
例3のデプロイメント・モデルを選択します。詳細は、3つのワーカー・ノードを使用したOracle Cloud Infrastructure Container Engine for Kubernetesの設定を参照してください。
タスク2: インストールされたCNIプラグインの確認
OKEを使用するKubernetesクラスタが完全にデプロイされ、これにアクセスできる場合は、次のコマンドを実行できます。
-
次のコマンドを実行します
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ **kubectl get all -n kube-system** NAME READY STATUS RESTARTS AGE pod/coredns-64ffdf5cf7-lvrhq 1/1 Running 0 2d pod/coredns-64ffdf5cf7-rmxt8 1/1 Running 0 2d pod/coredns-64ffdf5cf7-vq76p 1/1 Running 0 2d pod/csi-oci-node-ghff6 1/1 Running 0 2d pod/csi-oci-node-jrjpr 1/1 Running 0 2d pod/csi-oci-node-r68qz 1/1 Running 1 (2d ago) 2d pod/kube-dns-autoscaler-5bb955d5c-r2j2q 1/1 Running 0 2d pod/kube-proxy-5cznp 1/1 Running 0 2d pod/kube-proxy-fddrd 1/1 Running 0 2d pod/kube-proxy-sb769 1/1 Running 0 2d pod/proxymux-client-7s7f9 1/1 Running 0 2d pod/proxymux-client-lngrm 1/1 Running 0 2d pod/proxymux-client-qxlf2 1/1 Running 0 2d **pod/vcn-native-ip-cni-hkfjz 1/1 Running 0 2d pod/vcn-native-ip-cni-pdv4c 1/1 Running 0 2d pod/vcn-native-ip-cni-qfvk8 1/1 Running 0 2d** NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kube-dns ClusterIP 10.96.5.5 <none> 53/UDP,53/TCP,9153/TCP 2d NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE daemonset.apps/csi-oci-node 3 3 3 3 3 <none> 2d daemonset.apps/kube-proxy 3 3 3 3 3 beta.kubernetes.io/os=linux 2d daemonset.apps/node-termination-handler 0 0 0 0 0 oci.oraclecloud.com/oke-is-preemptible=true 2d daemonset.apps/nvidia-gpu-device-plugin 0 0 0 0 0 <none> 2d daemonset.apps/proxymux-client 3 3 3 3 3 node.info.ds_proxymux_client=true 2d **daemonset.apps/vcn-native-ip-cni 3 3 3 3 3 <none> 2d** NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/coredns 3/3 3 3 2d deployment.apps/kube-dns-autoscaler 1/1 1 1 2d NAME DESIRED CURRENT READY AGE replicaset.apps/coredns-64ffdf5cf7 3 3 3 2d replicaset.apps/kube-dns-autoscaler-5bb955d5c 1 1 1 2d iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
ポッド・セクションの出力では、名前が
vcn-native
であることに注意してください。 -
デーモンセット・セクションの出力では、名前が
vcn-native
であることに注意してください。
これにより、OCI VCNネイティブ・ポッド・ネットワーキングCNIプラグインがこのデプロイされたOKEデプロイメントに現在使用されていることが示されます。
タスク3: サンプル・アプリケーションのデプロイ
このサンプル・アプリケーションをOCI VCNネイティブ・ポッド・ネットワーキングCNIプラグインとともに使用し、次のタスクでOCI Load Balancerサービス・タイプを有効にします。
-
次のコマンドを実行して、OKE内にサンプルNginxアプリケーションをデプロイします。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl apply -f https://k8s.io/examples/application/deployment.yaml deployment.apps/nginx-deployment created
-
次のコマンドを実行して、デプロイされたサンプルNginxアプリケーションの詳細を確認します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl describe deployment nginx-deployment Name: nginx-deployment Namespace: default CreationTimestamp: Fri, 08 Mar 2024 07:57:02 +0000 Labels: <none> Annotations: deployment.kubernetes.io/revision: 1 Selector: app=nginx Replicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable StrategyType: RollingUpdate MinReadySeconds: 0 RollingUpdateStrategy: 25% max unavailable, 25% max surge Pod Template: Labels: app=nginx Containers: nginx: Image: nginx:1.14.2 Port: 80/TCP Host Port: 0/TCP Environment: <none> Mounts: <none> Volumes: <none> Conditions: Type Status Reason ---- ------ ------ Available True MinimumReplicasAvailable Progressing True NewReplicaSetAvailable OldReplicaSets: <none> NewReplicaSet: nginx-deployment-86dcfdf4c6 (2/2 replicas created) Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ScalingReplicaSet 14s deployment-controller Scaled up replica set nginx-deployment-86dcfdf4c6 to 2 iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
アプリケーションが2つのポッドを使用してデプロイされていることを確認します。
-
次のコマンドを実行して、デプロイされたポッドを詳しく確認します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get pods NAME READY STATUS RESTARTS AGE nginx-deployment-86dcfdf4c6-fdxgz 1/1 Running 0 3m46s nginx-deployment-86dcfdf4c6-fqrkh 1/1 Running 0 3m46s iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Nginxアプリケーションのインスタンスまたはポッドまたはレプリカが2つあり、ステータスがRUNNINGに設定されていることを確認します。
次の図に、デプロイメントの視覚的な表現を示します。ワーカー・ノード内のデプロイ済の2つのポッドにフォーカスします。
OCI VCNネイティブ・ポッド・ネットワーキングCNIプラグインを使用する利点は、ポッドまたはコンテナがVCNのプライベート・サブネットからIPアドレスを取得することです。つまり、Kubernetesポッドは、VM(インスタンス)またはベアメタル・ノードまたは他のワークロードと同じネットワークに存在します。
タスク4: Load BalancerタイプのKubernetesサービスの構成
サンプル・アプリケーションはOKE内で実行されており、ロード・バランサ・タイプのネットワーク・サービスをアプリケーションにアタッチすることで、アプリケーションをネットワークまたはインターネットに公開する時期です。
-
Kubernetesクラスタ内の既存の実行中のサービスを確認します。
-
次のコマンドを実行して、Kubernetesクラスタ内の既存の実行中のサービスを確認します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP,12250/TCP 2d23h iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
実行中のサービスはKubernetesコントロール・プレーンに属していることに注意してください。
-
-
ネットワーク・サービスをアプリケーションに追加します。
-
次のコマンドを実行して、ロード・バランサ・タイプの新しいOCI VCNネイティブ・ポッド・ネットワーキングCNIプラグイン・ネットワーク・サービスをデプロイし、この新しいサービスをアプリケーションに公開します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl expose deployment nginx-deployment --type=LoadBalancer --name=my-service service/my-service exposed iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
サービスが正常に公開されていることを確認します。
-
-
Kubernetesクラスタ内の既存の実行中のサービスを確認します。
-
次のコマンドを実行して、Kubernetesクラスタ内の既存の実行中のサービスを確認します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP,12250/TCP 2d23h my-service LoadBalancer 10.96.209.132 xxx.xxx.xxx.167 80:32291/TCP 53s iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
構成したサービスがリストに表示されます。
-
.167
で終わるロード・バランサに割り当てられているEXTERNAL-IP
(パブリックIPアドレス)に注意してください。 -
最小化アイコンをクリックして、OCI Cloud Shellを最小化します。
-
-
パブリックIPアドレスをコピーしてWebブラウザに貼り付けると、Oracle Cloud Infrastructure Container Engine for Kubernetes内のコンテナにデプロイされているNginx Webサーバーにアクセスできるようになりました。
-
OCIコンソールを使用して、バックグラウンドで何が起こっているのかを詳しく確認することもできます。
-
「ネットワーキング」をクリックします。
-
「ロード・バランサ」をクリックします。
-
-
「Load Balancer」をクリックします。
- パブリックIPアドレスが
.167
で終わる新しいロード・バランサがデプロイされていることを確認します。 - ロード・バランサをクリックします。
- ロード・バランサがACTIVEであることを確認します。
- 下へスクロール
- デプロイされたロード・バランサの構成の詳細を確認します。
- 「リストア」をクリックして、OCI Cloud Shellをリストアします。
- パブリックIPアドレスが
ロード・バランサ・デプロイメントのビジュアル表現は、次の図を参照してください。ロード・バランサに注目します。
タスク5: Load Balancerタイプのサンプル・アプリケーションとKubernetesサービスの削除
サンプル・アプリケーションをデプロイし、ロード・バランサ・タイプの新しいKubernetesネットワーク・サービスを作成しました。アプリケーションおよびサービスをクリーンアップする時期です。
-
ロード・バランサ・サービスを削除します。
-
次のコマンドを実行して、ロード・バランサ・サービスを削除します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl delete service my-service -n default service "my-service" deleted
-
ロード・バランサ・サービスが正常に削除されたことを確認します。
-
次のコマンドを実行して、ロード・バランサ・サービスが削除されていることを確認します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP,12250/TCP 2d23h iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
ロード・バランサ・サービスが削除されていることを確認します。
-
-
サンプル・アプリケーションを削除します。
-
次のコマンドを実行して既存のポッドを取得します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get pods NAME READY STATUS RESTARTS AGE nginx-deployment-86dcfdf4c6-fdxgz 1/1 Running 0 36m nginx-deployment-86dcfdf4c6-fqrkh 1/1 Running 0 36m
-
Nginxアプリケーションがまだ実行されていることを確認します。
-
次のコマンドを実行して、Nginxアプリケーションのデプロイメントを削除します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl delete deployment nginx-deployment --namespace default deployment.apps "nginx-deployment" deleted
-
次のコマンドを実行して、既存のポッドを再度取得し、デプロイメントが削除されたことを確認します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get pods No resources found in default namespace. iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Nginxアプリケーションが削除されていることを確認します。
-
最小化アイコンをクリックして、OCI Cloud Shellを最小化します。
- OCIコンソールに、ロード・バランサが削除されたというメッセージが表示されます。
- 「閉じる」をクリックします。
-
ロード・バランサはデプロイされていないことに注意してください。
ロード・バランサの削除を視覚的に表したものを次の図に示します。ロード・バランサがデプロイされなくなった部分に注目します。
関連リンク
承認
- 著者 - Iwan Hoogendoorn (OCIネットワーク・スペシャリスト)
その他の学習リソース
docs.oracle.com/learnの他のラボをご覧いただくか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスして、Oracle Learning Explorerになります。
製品ドキュメントは、Oracle Help Centerを参照してください。
Use OCI VCN-Native Pods Networking CNI Plugin to Provide Networking Services to Oracle Cloud Infrastructure Container Engine for Kubernetes
F95770-01
March 2024