Neste tutorial, você aprende a criar um cluster do IBM Db2 Warehouse no Google Kubernetes Engine (GKE) com um volume de Network File System (NFS) como camada de armazenamento. Você usa o Filestore como back-end do NFS para a solução de armazenamento compartilhado. Se preferir, escolha qualquer outra solução de NFS que possa ser implantada na nuvem.
Este tutorial é útil se você é administrador de sistemas, desenvolvedor, engenheiro ou administrador de banco de dados e quer implantar um cluster IBM Db2 Warehouse no Google Cloud.
Para uma visão geral do IBM Db2 Warehouse e as opções de implantação no Google Cloud, consulte esta página.
Você usará os softwares a seguir neste tutorial:
- Ubuntu-server 16.04
- IBM Db2 Warehouse Enterprise Edition
- Cliente do IBM Db2 Warehouse
Objetivos
- Acessar as imagens Docker do IBM Db2 Warehouse na Docker Store.
- Criar uma instância do Filestore.
- Iniciar o cluster do GKE.
- Verificar se o cluster está operacional.
- Inicializar a autenticação do Docker Store no cluster do GKE.
- Implantar e executar o provedor de cliente NFS no cluster.
- Implantar e executar contêineres do IBM Db2 Warehouse no cluster.
- Fazer upload de dados de amostra para o IBM Db2 Warehouse.
- Conectar-se ao console de administração do IBM Db2.
Custos
Neste tutorial, há componentes faturáveis do Google Cloud, inclusive estes:
Use a calculadora de preços para gerar uma estimativa de custo com base no uso previsto.
Antes de começar
- Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
-
No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.
-
Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como verificar se o faturamento está ativado em um projeto.
-
Ative as APIs GKE and Filestore.
-
No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.
-
Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como verificar se o faturamento está ativado em um projeto.
-
Ative as APIs GKE and Filestore.
- Se você não tiver um código do Docker, crie um no Docker Store.
Neste tutorial, usaremos o IBM Db2 Warehouse Enterprise Edition. Se você ainda não tiver uma licença desse software (em inglês), use a versão de avaliação gratuita para concluir este tutorial.
Ao concluir este tutorial, exclua os recursos criados para evitar o faturamento contínuo. Para mais informações, consulte Limpeza.
Arquitetura
Neste tutorial, você verá como implantar um cluster do Kubernetes usando o GKE em três zonas diferentes do Google Cloud. No cluster, você implanta três instâncias do IBM Db2 Warehouse:
- Uma instância chamada
db2wh-1
é inicialmente designada como o nó principal. - As instâncias chamadas
db2wh-2
edb2wh-3
são inicialmente designadas como nós de dados.
Os papéis (nó principal ou de dados) das instâncias individuais poderão mudar se o nó principal falhar.
Você também implanta uma instância do Filestore denominada db2wh-data-nfs
,
que age como o armazenamento compartilhado para os nós do cluster.
Veja a arquitetura no diagrama a seguir:
Como ter acesso às imagens do Docker do IBM Db2 Warehouse Edition
Neste tutorial, você permite que sua conta do Docker Store faça o download de uma versão de avaliação gratuita do IBM Db2 Warehouse Edition pelo Docker Store. Isso envolve o download de duas imagens separadas, do servidor e do cliente.
No navegador, acesse a imagem Docker do IBM Db2 Warehouse EE (em inglês).
Faça login com seu nome de usuário e senha do Docker.
Clique em Proceed to checkout.
Preencha seus dados.
Se você concordar com os termos, marque as caixas de seleção I agree ... e I acknowledge ... à direita.
Clique em Get Content.
Isso direcionará você para a página Configuração. Não é necessário seguir as instruções, porque você realizará essas etapas posteriormente no tutorial.
Repita o processo para a imagem do cliente do IBM Db2 Warehouse (em inglês).
Como preparar o ambiente
Neste tutorial, use us-central1
como a região padrão e
us-central1-b
como a zona padrão. Para economizar tempo ao digitar suas opções de zona do Compute Engine na Google Cloud CLI, você define a região e a zona como padrão.
Você realiza a maioria das etapas deste tutorial no Cloud Shell. Ao abrir o Cloud Shell, também é possível clonar automaticamente o repositório do GitHub relacionado a este tutorial.
Abra o Cloud Shell:
Defina a região e a zona padrão:
gcloud config set compute/region us-central1 gcloud config set compute/zone us-central1-b
Como criar a instância do Filestore
A próxima etapa é criar a instância de banco de dados do Filestore.
No Cloud Shell, crie uma instância do Filestore:
gcloud beta filestore instances create db2wh-data-nfs \ --location=us-central1-c \ --tier=STANDARD \ --file-share=name="db2whdata",capacity=1TB \ --network=name="default",reserved-ip-range="10.0.0.0/29"
Isso cria uma instância de nível padrão do Filestore chamada
db2wh-data-nfs
, com capacidade de 1 TB, e um ponto de montagem chamadodb2whdata
.
Como provisionar uma conta de serviço para gerenciar clusters do GKE
Para o tutorial, crie uma conta de serviço para gerenciar instâncias do Compute Engine no cluster do GKE. Os nós do cluster do GKE usarão essa conta de serviço em vez da conta de serviço padrão. É uma prática recomendada limitar a conta de serviço apenas aos papéis e às permissões de acesso necessários para executar o aplicativo.
O único papel necessário para a conta de serviço é o papel de administrador do Compute
(roles/compute.admin
). Esse papel fornece controle total de todos
os recursos do Compute Engine. A conta de serviço precisa desse papel para gerenciar
os nós de cluster do GKE.
No Cloud Shell, crie uma variável de ambiente que armazene o nome da conta de serviço:
export GKE_SERVICE_ACCOUNT_NAME=db2dw-gke-service-account
Crie uma conta de serviço:
gcloud iam service-accounts create $GKE_SERVICE_ACCOUNT_NAME \ --display-name=$GKE_SERVICE_ACCOUNT_NAME
Crie uma variável de ambiente que armazene o e-mail da conta de serviço:
export GKE_SERVICE_ACCOUNT_EMAIL=$(gcloud iam service-accounts list \ --format='value(email)' \ --filter=displayName:"$GKE_SERVICE_ACCOUNT_NAME")
Vincule o papel
compute.admin
à conta de serviço:gcloud projects add-iam-policy-binding \ $(gcloud config get-value project 2> /dev/null) \ --member serviceAccount:$GKE_SERVICE_ACCOUNT_EMAIL \ --role roles/compute.admin
Como preparar o cluster do GKE
Nesta seção, você iniciará o cluster do GKE, concederá permissões e finalizará a configuração do cluster.
Iniciar o cluster do GKE
Agora, crie e inicie o cluster do GKE.
No Cloud Shell, crie um cluster regional do GKE com um único nó em cada zona:
gcloud container clusters create ibm-db2dw-demo \ --enable-ip-alias \ --image-type=ubuntu \ --machine-type=n1-standard-16 \ --metadata disable-legacy-endpoints=true \ --node-labels=app=db2wh \ --node-locations us-central1-a,us-central1-b,us-central1-c \ --no-enable-basic-auth \ --no-issue-client-certificate \ --num-nodes=1 \ --region us-central1 \ --service-account=$GKE_SERVICE_ACCOUNT_EMAIL
Isso cria um cluster chamado
ibm-db2dw-demo
.
Como você está criando esse cluster com apenas um pool de nós (o padrão), todos os nós desse cluster estarão qualificados para executar cargas de trabalho do IBM Db2 Warehouse. Apenas os nós rotulados estão qualificados para hospedar os pods do IBM Db2 Warehouse. Se você quiser uma separação maior, crie um novo pool de nós ou um cluster dedicado. Isso pode ser útil se você quiser nós dedicados para o IBM Db2 Warehouse, por exemplo.
Gerenciar a autenticação do Docker Store
Neste tutorial, você cria um secret para armazenar suas credenciais do Docker Store, para que seu cluster do GKE possa fazer o download da imagem de Docker do IBM Db2 Warehouse no Docker Store. Para mais detalhes, veja esta seção da documentação do Kubernetes. Essa abordagem é válida também para instâncias particulares do Docker Registry.
No Cloud Shell, faça o login no Docker Store. A instância de registro de Docker que você usará é:
docker login
Crie um secret do Kubernetes com suas credenciais do Docker Store:
kubectl create secret generic dockerstore \ --type=kubernetes.io/dockerconfigjson \ --from-file=.dockerconfigjson="$HOME"/.docker/config.json
Conceder privilégios de Administrador de cluster ao usuário
Você precisa permitir que o usuário crie novos papéis no GKE, conforme descrito na documentação do GKE.
No Cloud Shell, conceda a permissão de criar novos papéis ao usuário:
kubectl create clusterrolebinding cluster-admin-binding \ --clusterrole cluster-admin \ --user $(gcloud config list \ --format 'value(core.account)')
Implantar o provisionador do cliente NFS
Neste tutorial, você implanta um provisionador de cliente NFS no cluster. Esse provisionador cuida da inicialização de PersistentVolumes na instância do Filestore para recuperar PersistentVolumeClaims.
No Cloud Shell, crie uma conta de serviço para gerenciar recursos do NFS:
kubectl apply -f solutions-db2wh/nfs/rbac.yaml
Implante o provisionador de cliente NFS:
kubectl apply -f solutions-db2wh/nfs/deployment.yaml
Crie um StorageClass para recuperar PersistentVolumeClaims com volumes NFS:
kubectl apply -f solutions-db2wh/nfs/class.yaml
Aguarde até que os pods do provisionador de cliente NFS sejam relatados como
Running
:kubectl get pods --watch
Quando eles estão em execução, você vê
Running
na resposta:nfs-client-provisioner 1/1 Running 0 10s
Criar os arquivos de nós
Agora, crie um arquivo de configuração para que o IBM Db2 Warehouse possa inicializar cada instância.
No Cloud Shell, crie os arquivos
nodes
:kubectl get nodes -o=jsonpath="{range \ .items[?(@.metadata.labels.app=='db2wh')]}\ {.metadata.name}{':'}{.status.addresses[?(@.type=='InternalIP')]\ .address}{\"\n\"}{end}" | sed '1s/^/head_node=/' | \ sed -e '2,$ s/^/data_node=/' > nodes
Crie um ConfigMap que contenha o arquivo de
nodes
:kubectl create configmap db2wh-nodes --from-file=nodes
Como implantar pods do IBM Db2 Warehouse
Agora, você criará todos os pods de GKE necessários para executar o IBM Db2 Warehouse.
No Cloud Shell, crie PersistentVolumeClaim. Esse objeto permite que o cluster monte o armazenamento NFS como um PersistentVolume em vários pods ao mesmo tempo.
kubectl apply -f solutions-db2wh/persistent-volume-claim.yaml
Execute um job que copie o arquivo
nodes
no volume NFS:kubectl apply -f solutions-db2wh/nodes-file-deploy-job.yaml
Verifique se o job de implantação do arquivo
nodes
foi executado:kubectl get jobs --watch
O job é executado quando
nodes-config
é relatado comoSuccessful
:NAME DESIRED SUCCESSFUL AGE nodes-config 1 1 19s
Implante um Serviço LoadBalancer para permitir acesso ao console de administração do IBM Db2 Warehouse:
kubectl apply -f solutions-db2wh/service.yaml
Aguarde até que o serviço do balanceador de carga chamado
db2wh-ext
tenha um endereço IP externo atribuído.kubectl get services --watch
Na resposta, você verá um endereço IP para
CLUSTER-IP
eEXTERNAL-IP
:NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE db2wh-ext LoadBalancer yy.yy.yy.yy xx.xx.xx.xx 8443:30973/TCP,50000:30613/TCP 7s
Implante o StatefulSet para iniciar os pods do IBM Db2 Warehouse:
kubectl apply -f solutions-db2wh/statefulset.yaml
Verifique se os pods do IBM Db2 Warehouse (
db2wh-0
,db2wh-1
edb2wh-2
) estão em execução:kubectl get pods --watch
Isso pode levar alguns minutos.
Os pods estão em execução quando você vê o status
Running
para todos os pods:db2wh-1 0/1 Running 0 3m db2wh-2 0/1 Running 0 3m db2wh-0 0/1 Running 0 3m
Crie uma variável de ambiente que armazene o endereço IP do nó que está executando o nó principal do IBM Db2 Warehouse:
HEAD_NODE_IP=$(grep "head_node" nodes | awk -F ':' '{print $2}')
Crie uma variável de ambiente que armazene o nome do pod de nó principal:
HEAD_NODE_POD_NAME=$(kubectl get pods \ --field-selector=status.phase=Running -o=jsonpath="{range \ .items[?(@.metadata.labels.app=='db2wh')]} \ {.metadata.name}{':'}{.status.\ hostIP}{'\n'}{end}" | grep $HEAD_NODE_IP | awk -F ':' '{print $1}')
Verifique os registros de um dos pods para garantir que o processo de inicialização esteja sendo executado sem problemas:
kubectl exec -it $HEAD_NODE_POD_NAME -- status --check-startup
Esse processo pode levar de 40 a 60 minutos. Durante esse tempo, talvez você veja que alguns erros foram detectados. Ignore-os neste tutorial.
O processo está sendo executado corretamente quando você vê o status
running successfully
na resposta:HA Management up and running successfully! Successfully started IBM Db2 Warehouse service stack!
Defina a senha do console de administração:
DB2_ADMIN_PASSWORD=$(openssl rand -hex 8) kubectl exec -it $HEAD_NODE_POD_NAME -- setpass ${DB2_ADMIN_PASSWORD}
Como testar a implantação
Agora que você terminou de configurar os pods, teste a implantação.
Implantar o contêiner de cliente do IBM Db2 Warehouse
Para fazer upload de dados para o IBM Db2 Warehouse, implante agora o contêiner de cliente e mapeie os dados de amostra usando um ConfigMap do Kubernetes.
No Cloud Shell, crie um ConfigMap que contenha os dados de amostra:
kubectl create configmap sample-data \ --from-file=solutions-db2wh/sample-data/nyc-wifi-locs.csv \ --from-file=solutions-db2wh/sample-data/sample-table.sql
Crie a Implantação para iniciar o contêiner de cliente do IBM Db2 Warehouse:
kubectl apply -f solutions-db2wh/client.yaml
Verifique se o pod de cliente do IBM Db2 Warehouse está em execução:
kubectl get pods --watch
Isso pode levar alguns minutos.
O pod está sendo executado quando você vê
Running
no status:db2wh-client-xxxxx-xxxx 1/1 Running 0 3m
Fazer upload dos dados de amostra
Para facilitar o teste da implantação, faça upload dos dados de amostra no servidor do IBM Db2 Warehouse.
No Cloud Shell, exiba a senha criada anteriormente:
echo $DB2_ADMIN_PASSWORD
Crie uma variável de ambiente que armazene o nome do contêiner de cliente do IBM Db2 Warehouse:
CLIENT_CONTAINER_NAME=$(kubectl get pods -l app=db2wh-client -o=jsonpath='{.items[0].metadata.name}')
Abra uma janela do shell no contêiner de cliente:
kubectl exec -it $CLIENT_CONTAINER_NAME -- cli
Crie uma variável de ambiente para armazenar a senha, em que
[PASSWORD]
é a senha que você conseguiu anteriormente:DB_PASSWORD=[PASSWORD]
Crie uma variável de ambiente que armazene o alias do banco de dados:
DB_ALIAS=BLUDB
BLUDB
é o nome padrão do banco de dados no IBM Db2 Warehouse.Crie uma variável de ambiente para armazenar o nome do host do banco de dados:
DB_HOST=db2wh-ext.default.svc.cluster.local
Configure o catálogo do banco de dados:
db_catalog --add $DB_HOST --alias $DB_ALIAS
Crie uma tabela para armazenar os dados de amostra no servidor do IBM Db2 Warehouse:
dbsql -f /sample-table.sql -d $DB_ALIAS -h $DB_HOST -u bluadmin -W $DB_PASSWORD
Faça upload dos dados para o servidor do IBM Db2 Warehouse:
dbload -verbose -host $DB_HOST -u bluadmin \ -pw $DB_PASSWORD -db $DB_ALIAS -schema BLUADMIN \ -t NYC_FREE_PUBLIC_WIFI -df /nyc-wifi-locs.csv -delim ',' \ -quotedValue DOUBLE -timeStyle 12HOUR -skipRows 1
Feche o shell do cliente do IBM Db2 Warehouse:
exit
Validar os dados usando o console de administração
Agora, conecte-se ao console de administração do IBM Db2 Warehouse e verifique os dados que você carregou.
No Cloud Shell, encontre o endereço IP externo do serviço:
kubectl get svc db2wh-ext
Abra um navegador e acesse o URL abaixo, em que
[EXTERNAL_IP]
é o endereço IP da etapa anterior:https://[EXTERNAL_IP]:8443
Ignore o aviso de segurança.
Faça login com as credenciais a seguir:
- Nome de usuário:
bluadmin
- Senha: a que você criou no procedimento anterior
- Nome de usuário:
Caso você aceite o EULA do IBM Db2 Warehouse, clique em Accept.
No lado esquerdo, abra o menu e selecione Administer > Tables:
Feche o pop-up do Quick Tour.
Clique em NYC_FREE_PUBLIC_WIFI:
Clique na guia Data Distribution e verifique se a tabela está preenchida:
São exibidas 2.871 linhas no total, que compõem todo o conjunto de dados.
Clique em Generate SQL.
Selecione SELECT statement.
Clique em OK.
A guia Generate SQL será aberta e preenchida com uma instrução
SELECT
gerada automaticamente.Adicione uma cláusula
LIMIT
à instruçãoSELECT
gerada automaticamente para limitar os resultados aos cinco primeiros registros:SELECT "THE_GEOM", "OBJECTID", "BORO", "TYPE", "PROVIDER", "NAME", "LOCATION", "LAT", "LON", "X", "Y", "LOCATION_T", "REMARKS", "CITY", "SSID", "SOURCEID", "ACTIVATED", "BOROCODE", "BORONAME", "NTACODE", "NTANAME", "COUNDIST", "POSTCODE", "BOROCD", "CT2010", "BOROCT2010", "BIN", "BBL", "DOITT_ID" FROM "BLUADMIN"."NYC_FREE_PUBLIC_WIFI" LIMIT 5;
Clique em Run e selecione Run All.
Uma lista dos registros é exibida na guia Result Set, mostrando que o upload dos dados de amostra foi concluído com sucesso.
Limpeza
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.
Exclua o projeto
- No console, acesse a página Gerenciar recursos.
- Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
- Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.
A seguir
- Leia os outros documentos desta série:
- Estratégias de implantação do IBM Db2 Warehouse no Google Cloud (visão geral)
- Como implantar o IBM Db2 Warehouse no Google Kubernetes Engine com armazenamento GlusterFS
- Como implantar o IBM Db2 Warehouse no Compute Engine com armazenamento NFS
- Como implantar o IBM Db2 Warehouse no Compute Engine com armazenamento GlusterFS
- Leia sobre a arquitetura do IBM Db2 Warehouse.
- Leia sobre os requisitos do IBM Db2 Warehouse (em inglês).
- Explore arquiteturas de referência, diagramas, tutoriais e práticas recomendadas sobre o Google Cloud. Confira o Centro de arquitetura do Cloud.