ベアメタル版 Anthos クラスタは、プライベート クラウド プラットフォームとして OpenStack をサポートしています。このサポートにより、次の OpenStack サービスを使用できるようになります。
- Infrastructure as a Service(IaaS)
- サービスとしてのロード バランシング(LBaaS)
- ストレージ
サポートされているオペレーティング システムを搭載した OpenStack 仮想マシン(VM)で実行されているベアメタルに、Anthos クラスタをデプロイできます。ベアメタル版 Anthos クラスタは、VM を自動的にプロビジョニングしないため、VM のプロビジョニングはこのガイドの範囲外です。VM の要件を学習し、デプロイの例を確認するには、OpenStack VM を作成する Terraform の例をご覧ください。
ベアメタル版 Anthos クラスタで OpenStack LBaaS と Kubernetes OpenStack Cloud Provider を使用して、Kubernetes サービスを OpenStack クラスタの外部に公開できます。
次のセクションで構成されています。
- ベアメタル版 Anthos クラスタをデプロイする
- ベアメタル版 Anthos クラスタで Kubernetes 用の OpenStack Cloud Provider を構成して、Octavia ロードバランサと統合する
- Kubernetes 用の OpenStack Cloud Provider の統合を検証する
このガイドでは OpenStack Ussuri を使用していますが、古いバージョンの OpenStack でも機能します。古い OpenStack バージョンはテストされていません。このガイドでは、OpenStack VM を使用して、OpenStack で動作するベアメタル版 2 ノード Anthos クラスタと概念実証環境を提供します。高可用性コントロール プレーンを使用した本番環境の作成については、本番環境の要件に関するベアメタル版 Anthos クラスタのドキュメントをご覧ください。
デプロイの例
このガイドでは、ベアメタル版 Anthos クラスタを、OpenStack の LBaaS と統合される OpenStack にデプロイする例を示します。コマンドと構成値を理解し、OpenStack 環境に合うように調整する必要があります。次の図は、デプロイの結果を示しています。
前提条件
- LBaaS v2 をデプロイし機能している OpenStack Ussuri
- bmctl ツールをダウンロードするためのサービス アカウント
- デプロイの例に示すように、OpenStack VM とネットワークを構成します。OpenStack 環境で同様の設定をプロビジョニングするには、次のオプションがあります。
- Terraform スクリプトを使用して、リソースを自動的にプロビジョニングする。
- リソースを手動でプロビジョニングする。
- 次の OpenStack VM は、SSH 経由ですぐに使用できる必要があります。
名前 | 用途 | IP アドレス |
---|---|---|
abm-ws |
10.200.0.10 (プライベート IP) float_ip (パブリック IP) |
管理ワークステーションとして機能し、ベアメタル版 Anthos を他のマシンにデプロイするために使用されます。 |
abm-cp1 | 10.200.0.11 | Anthos クラスタ コントロール プレーン: このホストでは、Kubernetes コントロール プレーンとロードバランサが実行されます。 |
abm-w1 | 10.200.0.12 | Anthos クラスタのワーカーノード:このホストは Kubernetes ワークロードを実行します。 |
ベアメタル版 Anthos クラスタをデプロイする
このセクションでは、次のタスクを行う方法を説明します。
- 必要なツールを
abm-ws
管理ワークステーション VM にインストールする - デプロイを安全に実行するために必要なプロジェクト ID とサービス アカウントを構成する
- クラスタ構成ファイルを作成する
- ベアメタル版 Anthos クラスタをデプロイする
必要なツールをインストールする
abm-ws
VM の公開フローティング IP アドレスを取得します。export OPENSTACK_IPS=$(openstack floating ip list --tags=abm_ws_floatingip -f json) export FLOATING_IP=$(jq -c '.[]."Floating IP Address"' <<< $OPENSTACK_IPS | tr -d '"')
SSH 経由で
abm-ws
VM に安全に接続し、root
ユーザーとしてログインできることを確認します。Terraform スクリプトによって構成されたroot
ユーザーはabm
です。ssh ubuntu@$FLOATING_IP sudo -u abm -i
他のノードに SSH 接続できることを確認します。
ssh abm@10.200.0.11 'echo SSH to $HOSTNAME succeeded' ssh abm@10.200.0.12 'echo SSH to $HOSTNAME succeeded'
前述のコマンドで想定される出力は次のとおりです。
SSH to abm-cp1 succeeded SSH to abm-w1 succeeded
abm-ws
VM にkubectl
コマンドライン ユーティリティをダウンロードします。curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl" chmod +x kubectl sudo mv kubectl /usr/local/sbin/
abm-ws
VM に Docker をインストールします。curl -fsSL https://get.docker.com -o get-docker.sh sh get-docker.sh sudo usermod -aG docker abm newgrp docker
Google Cloud プロジェクトとサービス アカウントを構成する
ユーザー アカウントの Google Cloud CLI アクセス認証情報を取得します。これは、後続の
gcloud
コマンドを使用するときに使用されます。gcloud auth login
必ずベアメタル版 Anthos クラスタを登録する Google Cloud プロジェクトを使用するように Google Cloud CLI を構成します。
gcloud config set project PROJECT_ID
管理ワークステーションで、ユーザー アカウントにアプリケーションのデフォルト認証情報(ADC)を設定します。これは、クラスタの作成に
bmctl
ツールを使用するときに使用されます。gcloud auth application-default login
bm-gcr
サービス アカウントを作成します。このサービス アカウントを使用して、ベアメタル版 Anthos クラスタから認証を行います。gcloud iam service-accounts create bm-gcr gcloud iam service-accounts keys create bm-gcr.json \ --iam-account=bm-gcr@PROJECT_ID.iam.gserviceaccount.com
必要な API を有効にします。
gcloud services enable \ anthos.googleapis.com \ anthosgke.googleapis.com \ cloudresourcemanager.googleapis.com \ container.googleapis.com \ gkeconnect.googleapis.com \ gkehub.googleapis.com \ serviceusage.googleapis.com \ stackdriver.googleapis.com \ monitoring.googleapis.com \ logging.googleapis.com \ opsconfigmonitoring.googleapis.com \ anthosaudit.googleapis.com
bm-gcr
サービス アカウントに追加の権限を付与します。権限を追加することで、サービスごとに複数のサービス アカウントを作成する必要はありません。gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/gkehub.connect" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/gkehub.admin" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/logging.logWriter" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/monitoring.metricWriter" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/monitoring.dashboardEditor" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/stackdriver.resourceMetadata.writer" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/opsconfigmonitoring.resourceMetadata.writer"
クラスタ構成ファイルを作成する
bmctl
コマンドライン ユーティリティをダウンロードします。mkdir baremetal && cd baremetal gsutil cp gs://anthos-baremetal-release/bmctl/1.10.8/linux-amd64/bmctl . chmod a+x bmctl sudo mv bmctl /usr/local/sbin/
クラスタのベアメタル版 Anthos クラスタ ワークスペースを作成します。
bmctl create config -c CLUSTER_NAME
ベアメタル版 Anthos クラスタの構成ファイルを作成します。
cat > bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME.yaml << EOB --- gcrKeyPath: /home/abm/bm-gcr.json sshPrivateKeyPath: /home/abm/.ssh/id_rsa gkeConnectAgentServiceAccountKeyPath: /home/abm/bm-gcr.json gkeConnectRegisterServiceAccountKeyPath: /home/abm/bm-gcr.json cloudOperationsServiceAccountKeyPath: /home/abm/bm-gcr.json --- apiVersion: v1 kind: Namespace metadata: name: openstack-cluster-ns --- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: CLUSTER_NAME namespace: openstack-cluster-ns annotations: baremetal.cluster.gke.io/external-cloud-provider: "true" spec: type: hybrid anthosBareMetalVersion: 1.10.8 gkeConnect: projectID: PROJECT_ID controlPlane: nodePoolSpec: clusterName: CLUSTER_NAME nodes: - address: 10.200.0.11 clusterNetwork: pods: cidrBlocks: - 10.202.0.0/16 services: cidrBlocks: - 10.203.0.0/16 loadBalancer: mode: manual ports: controlPlaneLBPort: 443 vips: controlPlaneVIP: 10.200.0.101 ingressVIP: 10.200.0.102 clusterOperations: location: us-central1 projectID: PROJECT_ID storage: lvpNodeMounts: path: /mnt/localpv-disk storageClassName: node-disk lvpShare: numPVUnderSharedPath: 5 path: /mnt/localpv-share storageClassName: standard nodeAccess: loginUser: abm --- apiVersion: baremetal.cluster.gke.io/v1 kind: NodePool metadata: name: node-pool-1 namespace: openstack-cluster-ns spec: clusterName: CLUSTER_NAME nodes: - address: 10.200.0.12 EOB
デプロイ
クラスタをデプロイします。
bmctl create cluster -c CLUSTER_NAME
bmctl
コマンドを実行すると、新しいハイブリッド クラスタの設定が開始されます。これには、ノードでのプリフライト チェック、管理クラスタとユーザー クラスタの作成、Connect を使用した Google Cloud へのクラスタの登録が含まれます。セットアップには 15 分ほどかかります。クラスタを作成すると、次の出力が表示されます。
Please check the logs at bmctl-workspace/CLUSTER_NAME/log/create-cluster-20210926-020741/create-cluster.log
[2021-09-26 02:07:59+0000] Creating bootstrap cluster... ⠦ kind get kubeconfig --name bmctl > ~/.kube/config && k get pods --all-namespaces
[2021-09-26 02:07:59+0000] Creating bootstrap cluster... OK
[2021-09-26 02:10:48+0000] Installing dependency components... OK
[2021-09-26 02:13:42+0000] Waiting for preflight check job to finish... OK
[2021-09-26 02:15:22+0000] - Validation Category: machines and network
[2021-09-26 02:15:22+0000] - [PASSED] gcp
[2021-09-26 02:15:22+0000] - [PASSED] node-network
[2021-09-26 02:15:22+0000] - [PASSED] 10.200.0.11
[2021-09-26 02:15:22+0000] - [PASSED] 10.200.0.11-gcp
[2021-09-26 02:15:22+0000] - [PASSED] 10.200.0.12
[2021-09-26 02:15:22+0000] - [PASSED] 10.200.0.12-gcp
[2021-09-26 02:15:22+0000] Flushing logs... OK
[2021-09-26 02:15:23+0000] Applying resources for new cluster
[2021-09-26 02:15:24+0000] Waiting for cluster to become ready OK
[2021-09-26 02:25:04+0000] Writing kubeconfig file
[2021-09-26 02:25:04+0000] kubeconfig of created cluster is at bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig, please run
[2021-09-26 02:25:04+0000] kubectl --kubeconfig bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig get nodes
[2021-09-26 02:25:04+0000] to get cluster node status.
[2021-09-26 02:25:04+0000] Please restrict access to this file as it contains authentication credentials of your cluster.
[2021-09-26 02:25:04+0000] Waiting for node pools to become ready OK
[2021-09-26 02:25:24+0000] Moving admin cluster resources to the created admin cluster
[2021-09-26 02:25:53+0000] Flushing logs... OK
[2021-09-26 02:25:53+0000] Deleting bootstrap cluster...
クラスタの確認と操作
abm-ws
VM で、クラスタの kubeconfig
ファイルは、bmctl-workspace
ディレクトリ内にあります。デプロイを確認するには次の手順を行います。
KUBECONFIG
環境変数にクラスタの構成ファイルへのパスを設定し、クラスタでkubectl
コマンドを実行します。export KUBECONFIG=$HOME/bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig kubectl get nodes
クラスタのノードが、次のように表示されます。
NAME STATUS ROLES AGE VERSION abm-cp1 Ready control-plane,master 5m24s v1.20.5-gke.1301 abm-w1 Ready <none> 2m17s v1.20.5-gke.1301
Google Cloud コンソールからクラスタにログインする
Google Cloud コンソールでワークロードをモニタリングするには、クラスタにログインする必要があります。クラスタへのログインの手順と詳細については、Google Cloud コンソールからクラスタにログインするをご覧ください。
クリーンアップ
管理ワークステーション(abm-ws
)VM で次のコマンドを発行すると、クラスタをクリーンアップできます。
export KUBECONFIG=$HOME/bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
bmctl reset --cluster CLUSTER_NAME
次のステップ
これで、Kubernetes 用の OpenStack Cloud Provider を構成するためのガイドに沿って、新しく作成されたベアメタル版 Anthos クラスタに OpenStack Cloud Provider をインストールできます。これにより、OpenStack の LBaaS を活用する LoadBalancer
タイプのサービスを使用して、アプリケーションを公開できます。