本指南介绍如何在 Anthos clusters on Bare Metal 集群中配置适用于 Kubernetes 的 OpenStack Cloud Provider。OpenStack Cloud Provider 必须配置为使用 OpenStack LBaaS 公开 Kubernetes Service。
前提条件
本指南假定您有一个在 OpenStack 环境中运行的 Anthos clusters on Bare Metal 集群,其设置类似于在 OpenStack 上部署 Anthos clusters on Bare Metal 指南中所述。请先按照该指南操作,然后再尝试这些步骤。
配置 Provider
以下部分假定您从本地工作站的终端窗口开始。
对 OpenStack 客户端配置 (
openrc
) 文件执行 source 命令。您可以从 OpenStack 网页界面下载该文件。source PATH_TO_OPENRC_FILE/openrc
为 OpenStack Kubernetes Cloud Provider 创建配置文件。
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 Service 的LoadBalancer IPs
将从此网络分配。您可以使用与此命令类似的命令从 OpenStack 环境中提取此 IP。ABM_NETWORK_SUBNET_ID
:这是 OpenStack 部署中专用网络上的子网,从此网络为运行 Anthos clusters on Bare Metal 的虚拟机分配 IP。您可以使用与此命令类似的命令从 OpenStack 环境中提取此 IP。
提取
abm-ws
虚拟机的公共浮动 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
虚拟机。scp ./cloud.conf ubuntu@$FLOATING_IP:~
通过 SSH 安全地登录
abm-ws
虚拟机,并以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 Anthos on bare metal 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 Cloud Provider。
# 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 集成
部署示例销售终端应用。
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
访问的销售终端应用。通过访问 OpenStack 网页界面,您可以发现 OpenStack 中创建了一个新的 OpenStack 负载均衡器。