Kubernetes 用に OpenStack クラウド プロバイダを構成する

このガイドでは、ベアメタル クラスタで Kubernetes 用の OpenStack Cloud プロバイダを構成する方法について説明します。OpenStack クラウド プロバイダは、OpenStack LBaaS を使用して Kubernetes Service を公開するように構成する必要があります。

前提条件

このガイドでは、OpenStack にベアメタル クラスタをデプロイするガイドで説明されているように、OpenStack 環境で Google Distributed Cloud で作成されたクラスタが実行されていることを前提としています。以下の手順に進む前に、このガイドの内容を確認してください。

OpenStack にインストールされた Google Distributed Cloud。

プロバイダを構成する

このセクションは、ローカル ワークステーションのターミナル ウィンドウから行うことを前提としています。

  1. ソースは、OpenStack クライアント構成(openrc)ファイルです。OpenStack WebUI からファイルをダウンロードできます。

    source PATH_TO_OPENRC_FILE/openrc
    
  2. 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_URLOS_USERNAMEOS_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 を取得できます。
  3. 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 '"')
    
  4. cloud.conf ファイルを OpenStack の abm-ws VM にコピーします。

    scp ./cloud.conf ubuntu@$FLOATING_IP:~
    
  5. SSH を使用して abm-ws VM に安全に接続し、root ユーザーとしてログインします。

    Terraform スクリプトによって構成された root ユーザーは abm です。

    ssh ubuntu@$FLOATING_IP
    sudo -u abm -i
    
  6. cloud.conf ファイルを root ユーザーの $HOME ディレクトリにコピーします。

    cp /home/ubuntu/cloud.conf $HOME
    
  7. その構成を使用して 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
    
  8. 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 の統合を検証する

  1. サンプル POS アプリケーションをデプロイします。

    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-samples/master/anthos-bm-openstack-terraform/resources/point-of-sales.yaml
    
  2. アプリケーション 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
    
  3. LoadBalancer タイプのサービスを介してアプリケーションを公開します。

    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-samples/master/anthos-bm-openstack-terraform/resources/point-of-sales-service.yaml
    
  4. ブラウザからこのサービスにアクセスしてみます。

    # 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 の LoadBalancer を介して公開される、ベアメタル クラスタで実行される POS アプリケーション

    OpenStack WebUI にアクセスすると、新しい OpenStack ロードバランサを OpenStack に作成できます。

    Google Distributed Cloud ソフトウェアのみによってプロビジョニングされた LoadBalancer を示す OpenStack アプリ