Como implantar o IBM Db2 Warehouse no Google Kubernetes Engine com armazenamento NFS

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

  1. 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.
  2. No Console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como confirmar se o faturamento está ativado para o projeto.

  4. Ative as APIs GKE and Filestore.

    Ative as APIs

  5. 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 Como fazer a 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 e db2wh-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:

Arquitetura

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.

  1. No navegador, acesse a imagem Docker do IBM Db2 Warehouse EE (em inglês).

  2. Faça login com seu nome de usuário e senha do Docker.

  3. Clique em Proceed to checkout.

  4. Preencha seus dados.

  5. Se você concordar com os termos, marque as caixas de seleção I agree ... e I acknowledge ... à direita.

  6. 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.

  7. 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 as opções de zona do Compute Engine na ferramenta de linha de comando gcloud, defina a região e a zona como padrões.

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.

  1. Abra o Cloud Shell:

    ABRIR o Cloud Shell

  2. 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 chamado db2whdata.

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.

  1. 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
    
  2. Crie uma conta de serviço:

    gcloud iam service-accounts create $GKE_SERVICE_ACCOUNT_NAME \
        --display-name=$GKE_SERVICE_ACCOUNT_NAME
    
  3. 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")
    
  4. 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.

  1. No Cloud Shell, faça o login no Docker Store. A instância de registro de Docker que você usará é:

    docker login
    
  2. 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.

  1. No Cloud Shell, crie uma conta de serviço para gerenciar recursos do NFS:

    kubectl apply -f solutions-db2wh/nfs/rbac.yaml
    
  2. Implante o provisionador de cliente NFS:

    kubectl apply -f solutions-db2wh/nfs/deployment.yaml
    
  3. Crie um StorageClass para recuperar PersistentVolumeClaims com volumes NFS:

    kubectl apply -f solutions-db2wh/nfs/class.yaml
    
  4. 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.

  1. 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
    
  2. 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.

  1. 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
    
  2. Execute um job que copie o arquivo nodes no volume NFS:

    kubectl apply -f solutions-db2wh/nodes-file-deploy-job.yaml
    
  3. Verifique se o job de implantação do arquivo nodes foi executado:

    kubectl get jobs --watch
    

    O job é executado quando nodes-config é relatado como Successful:

    NAME           DESIRED   SUCCESSFUL   AGE
    nodes-config   1         1            19s
    
  4. Implante um Serviço LoadBalancer para permitir acesso ao console de administração do IBM Db2 Warehouse:

    kubectl apply -f solutions-db2wh/service.yaml
    
  5. 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 e EXTERNAL-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
    
  6. Implante o StatefulSet para iniciar os pods do IBM Db2 Warehouse:

    kubectl apply -f solutions-db2wh/statefulset.yaml
    
  7. Verifique se os pods do IBM Db2 Warehouse (db2wh-0, db2wh-1 e db2wh-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
    
  8. 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}')
    
  9. 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}')
    
  10. 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!
    
  11. 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.

  1. 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
    
  2. Crie a Implantação para iniciar o contêiner de cliente do IBM Db2 Warehouse:

    kubectl apply -f solutions-db2wh/client.yaml
    
  3. 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.

  1. No Cloud Shell, exiba a senha criada anteriormente:

    echo $DB2_ADMIN_PASSWORD
    
  2. 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}')
    
  3. Abra uma janela do shell no contêiner de cliente:

    kubectl exec -it $CLIENT_CONTAINER_NAME -- cli
    
  4. Crie uma variável de ambiente para armazenar a senha, em que [PASSWORD] é a senha que você conseguiu anteriormente:

    DB_PASSWORD=[PASSWORD]
    
  5. 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.

  6. Crie uma variável de ambiente para armazenar o nome do host do banco de dados:

    DB_HOST=db2wh-ext.default.svc.cluster.local
    
  7. Configure o catálogo do banco de dados:

    db_catalog --add $DB_HOST --alias $DB_ALIAS
    
  8. 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
    
  9. 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
    
  10. 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.

  1. No Cloud Shell, encontre o endereço IP externo do serviço:

    kubectl get svc db2wh-ext
    
  2. 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.

  3. Faça login com as credenciais a seguir:

    • Nome de usuário: bluadmin
    • Senha: a que você criou no procedimento anterior
  4. Caso você aceite o EULA do IBM Db2 Warehouse, clique em Accept.

  5. No lado esquerdo, abra o menu e selecione Administer > Tables:

    IU de administração do IBM Db2 Warehouse, mostrando a pasta "Tables"

  6. Feche o pop-up do Quick Tour.

  7. Clique em NYC_FREE_PUBLIC_WIFI:

    Lista de pontos de acesso Wi-Fi disponíveis

  8. Clique na guia Data Distribution e verifique se a tabela está preenchida:

    Guia "Data Distribution" na listagem "Tables"

    São exibidas 2.871 linhas no total, que compõem todo o conjunto de dados.

  9. Clique em Generate SQL.

  10. Selecione SELECT statement.

  11. Clique em OK.

    A guia Generate SQL será aberta e preenchida com uma instrução SELECT gerada automaticamente.

  12. Adicione uma cláusula LIMIT à instrução SELECT 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;
    
  13. 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.

    Resultados da execução da instrução SQL com cinco registros dos dados carregados

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

  1. No Console do Cloud, acesse a página Gerenciar recursos:

    Acessar "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

A seguir