Este guia explica como configurar o fornecedor de nuvem OpenStack para o Kubernetes no seu cluster de metal puro. O fornecedor de nuvem OpenStack tem de ser configurado para expor os serviços Kubernetes através do LBaaS do OpenStack.
Pré-requisitos
Este guia pressupõe que tem um cluster criado com o Google Distributed Cloud em execução no seu ambiente OpenStack com uma configuração semelhante à explicada no guia Implemente um cluster bare metal no OpenStack. Siga primeiro esse guia antes de experimentar estes passos.
Configure o fornecedor
A secção seguinte pressupõe que está a começar a partir de uma janela de terminal na sua estação de trabalho local.
Obtenha o ficheiro de configuração do cliente OpenStack (
openrc
). Pode transferi-lo a partir da IU Web do OpenStack.source PATH_TO_OPENRC_FILE/openrc
Crie o ficheiro de configuração para o fornecedor de nuvem do 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
Substitua o seguinte:
OS_AUTH_URL
,OS_USERNAME
,OS_PASSWORD
: estas variáveis já devem estar definidas no ambiente através da obtenção do ficheiroopenrc
. Assim, são captados automaticamente.PUBLIC_NETWORK_ID
: esta é a rede acessível publicamente na sua implementação do OpenStack a partir da qual são alocados endereços IP flutuantes. É a partir desta rede que oLoadBalancer IPs
para os serviços do Kubernetes é atribuído. Pode usar um comando de uma linha para obter este IP do seu ambiente OpenStack.ABM_NETWORK_SUBNET_ID
: esta é a sub-rede na rede privada na sua implementação do OpenStack a partir da qual os IPs são atribuídos para as VMs que executam apenas o software do Google Distributed Cloud. Pode usar um comando semelhante a Obter o ID da rede pública no OpenStack para obter este IP do seu ambiente OpenStack.
Obtenha o endereço IP flutuante público da VM
abm-ws
.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 '"')
Copie o ficheiro
cloud.conf
para a VMabm-ws
no OpenStack.scp ./cloud.conf ubuntu@$FLOATING_IP:~
Use o SSH para estabelecer ligação segura à VM
abm-ws
e inicie sessão como utilizadorroot
.O utilizador
root
, conforme configurado pelos scripts do Terraform, éabm
.ssh ubuntu@$FLOATING_IP sudo -u abm -i
Copie os ficheiros
cloud.conf
para o diretório$HOME
do utilizadorroot
.cp /home/ubuntu/cloud.conf $HOME
Crie um
Kubernetes Secret
com a configuração.# 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
Instale o fornecedor de nuvem do OpenStack para o Kubernetes.
# 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
Valide a integração do OpenStack
Implemente a aplicação de ponto de vendas de exemplo.
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-samples/master/anthos-bm-openstack-terraform/resources/point-of-sales.yaml
Verifique se os pods de aplicações estão em execução.
kubectl get pods
Resultado esperado:
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
Expôs a aplicação através de um serviço do tipo
LoadBalancer
.kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-samples/master/anthos-bm-openstack-terraform/resources/point-of-sales-service.yaml
Experimente aceder ao serviço a partir de um navegador.
# 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
Aplicação de ponto de venda acedida através do
EXTERNAL-IP
.Pode reparar que está a ser criado um novo OpenStack Load Balancer no OpenStack visitando a IU Web do OpenStack.