このガイドでは、ベアメタル クラスタで Kubernetes 用の OpenStack Cloud プロバイダを構成する方法について説明します。OpenStack クラウド プロバイダは、OpenStack LBaaS を使用して Kubernetes Service を公開するように構成する必要があります。
前提条件
このガイドでは、OpenStack にベアメタル クラスタをデプロイするガイドで説明されているように、OpenStack 環境で Google Distributed Cloud で作成されたクラスタが実行されていることを前提としています。以下の手順に進む前に、このガイドの内容を確認してください。
プロバイダを構成する
このセクションは、ローカル ワークステーションのターミナル ウィンドウから行うことを前提としています。
ソースは、OpenStack クライアント構成(
openrc
)ファイルです。OpenStack WebUI からファイルをダウンロードできます。source PATH_TO_OPENRC_FILE/openrc
OpenStack Kubernetes クラウド プロバイダの構成ファイルを作成します。
cat > cloud.conf << EOF [Global] auth-url=${OS_AUTH_URL} username=${OS_USERNAME} password=${OS_PASSWORD} region=RegionOne tenant-name=admin domain-id=default # this is for using a self-signed cert if your using a CA then comment this line # and point to the CA certificate using the "ca-file" arg tls-Insecure=true [LoadBalancer] use-octavia=true # this is generally the public network on OpenStack floating-network-id=PUBLIC_NETWORK_ID # this should be private network subnet where vip is allocated for the ABM nodes subnet-id=ABM_NETWORK_SUBNET_ID [BlockStorage] bs-version=v2 EOF
次のように置き換えます。
OS_AUTH_URL
、OS_USERNAME
、OS_PASSWORD
: これらの変数は、openrc
ファイルを source したことで環境に設定されているはずです。したがって、それらは自動的に取得されます。PUBLIC_NETWORK_ID
: OpenStack デプロイメントの一般公開ネットワークであり、ここからフローティング IP アドレスが割り当てられます。このネットワークから Kubernetes サービスのLoadBalancer IPs
が割り当てられます。1 行のコマンドを使用して、OpenStack 環境からこの IP を取得できます。ABM_NETWORK_SUBNET_ID
: OpenStack デプロイのプライベート ネットワーク上のサブネットです。ここから Google Distributed Cloud ソフトウェアのみを実行している VM に IP が割り振られます。OpenStack でパブリック ネットワークの ID を取得するようなコマンドを使用すると、OpenStack 環境からこの IP を取得できます。
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 '"')
cloud.conf
ファイルを OpenStack のabm-ws
VM にコピーします。scp ./cloud.conf ubuntu@$FLOATING_IP:~
SSH を使用して
abm-ws
VM に安全に接続し、root
ユーザーとしてログインします。Terraform スクリプトによって構成された
root
ユーザーはabm
です。ssh ubuntu@$FLOATING_IP sudo -u abm -i
cloud.conf
ファイルをroot
ユーザーの$HOME
ディレクトリにコピーします。cp /home/ubuntu/cloud.conf $HOME
その構成を使用して
Kubernetes Secret
を作成します。# make sure the kubectl client is pointing towards your cluster export KUBECONFIG=~/bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig # store the provider configurations as a Kubernetes secret kubectl create secret -n kube-system generic cloud-config --from-file=cloud.conf
Kubernetes 用の OpenStack クラウド プロバイダをインストールします。
# create the necessary roles for the OpenStack provider kubectl apply -f https://raw.githubusercontent.com/kubernetes/cloud-provider-openstack/master/manifests/controller-manager/cloud-controller-manager-roles.yaml # create the required role-bindings for the OpenStack provider kubectl apply -f https://raw.githubusercontent.com/kubernetes/cloud-provider-openstack/master/manifests/controller-manager/cloud-controller-manager-role-bindings.yaml # create the OpenStack controller manager kubectl apply -f https://raw.githubusercontent.com/kubernetes/cloud-provider-openstack/master/manifests/controller-manager/openstack-cloud-controller-manager-ds.yaml
OpenStack の統合を検証する
サンプル POS アプリケーションをデプロイします。
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-samples/master/anthos-bm-openstack-terraform/resources/point-of-sales.yaml
アプリケーション Pod が実行されているかどうかを確認します。
kubectl get pods
予想される出力:
NAME READY STATUS RESTARTS AGE api-server-7db4777f7f-zflk5 1/1 Running 0 74s inventory-58c6fb5568-dqk2x 1/1 Running 0 74s payments-68d5d65d5c-5mjl6 1/1 Running 0 74s
LoadBalancer
タイプのサービスを介してアプリケーションを公開します。kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-samples/master/anthos-bm-openstack-terraform/resources/point-of-sales-service.yaml
ブラウザからこのサービスにアクセスしてみます。
# wait for the external IP to be assigned kubectl get service api-server-lb NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE api-server-lb LoadBalancer 10.203.77.215 172.29.249.159 80:32378/TCP 4m12s
EXTERNAL-IP
を使用してアクセスされた POS。OpenStack WebUI にアクセスすると、新しい OpenStack ロードバランサを OpenStack に作成できます。