terça-feira, 14 de janeiro de 2020

Devops - Configurando um cluster Kubernetes na IBMCloud

Fala Pessoal, nesse artigo vou demonstrar como criar um cluster Kubernetes dentro da estrutura da IBMCloud.


Basicamente vamos ver:
  • Criação de estrutura de permissão (IAM) para grupo de recursos e grupos de acesso (opcional)
  • Criação do cluster Kubernetes

Criação de estrutura de permissão (IAM) - grupos de recursos e grupos de acessos.

Essa parte de gerenciamento de permissão IAM, tem como objetivo organizar os recursos criados dentro da nuvem da IBM bem como designar/controlar acessos necessários de usuarios aos recursos do IAM.

Está parte da configuração é opcional, mas é importante para um ambiente produtivo onde você deseja controlar o acesso aos recursos de cada membro de sua equipe.

1) A primeira coisa a se fazer é criar um grupo de recurso, para isso dentro do portal ibmcloud acesse o menu Gerenciar > Acesso IAM e clique em Grupo de Recursos.



2) Clique em criar


3) Digite o nome do novo resource group e clique em incluir.
Futuramente você pode criar outros grupos como DEV e PROD e conceder a um membro de sua equipe acesso somente a um determinado grupo de recurso.




4) Na imagem abaixo, é possivel ver o nosso resource group criado




5) Agora precisamos criar um grupo de acesso onde vamos vincular usuários e dar algumas permissões.



 6) Clique em criar.



7) Digite um nome e descrição para seu grupo de acesso e clique em criar.




8) depois de clicar no botão criar da tela acima, aparecerá a tela abaixo onde será necessário clicar no botão “Incluir usuários” para associar membros ao grupo HLG.




9) Selecione os usuários que já estão cadastrados na IBM depois clique em “Incluir no grupo”





10) Na tela abaixo, podemos visualizar os usuários que acabamos de incluir no grupo HLG




11) Com o grupo e seus membros configurados, agora precisamos definir os acessos desse novo grupo, dentro das propriedades do grupo HLG, clique na aba Politicas de acesso e clique em “Designar acesso”




12) Escolha a opção “Designar acesso dentro de um grupo de recursos”




13) Deixe as demais configurações conforme tela abaixo e depois clique em designar.





14) Abaixo é possível ver as Políticas de Acesso que acabamos de criar.


Com a estrutura de grupos de acesso e grupos de recursos criada, agora vamos a criação de nosso Cluster Kubernetes.




Criando Cluster Kubernetes

1) Com um conta admin do IBMCloud, procure no catalogo por Kubernetes > Criar cluster






2) Crie o cluster kubernetes seguindo as orientações da imagem abaixo. Para ambiente de estudos ou lab, você pode criar o cluster usando o plano gratuito onde você terá apenas um NÓ, em nosso exemplo, estamos usando o plano padrão (standard) pois vamos rodar nosso cluster com 3 NÓS.





3) Depois de clicar em criar cluster, o processo pode demorar de 10 a 20 minutos, portanto essa é a hora de você tomar um café!!!





4) Se tudo correr bem, seu cluster kubernetes estará com o status Normal




Bem...agora que o nosso cluster está pronto, vamos conectar no mesmo. Basicamente existem duas maneiras de se conectar no cluster Kubernetes:

a) Acesso via comandos CLI IBMCloud
b) Acesso via Painel do Kubernetes


Conectando no Cluster Kubernetes pelo Painel IBMCloud

Essa é facil...para acessar o dashboard do Kubernetes, via painel IBMCloud, basta clicar em Painel Kubernetes.




6) Na tela abaixo podemos ver nosso Dashboard do Kubernetes, sem nenhum deploy.


Conectando no Cluster Kubernetes via comandos IBMCloud CLI

Antes de começarmos, é necessario instalar o IBMCloud CLI em nosso terminal mac/linux.
Em nosso exemplo estou usando um terminal Linux, mas o comando para instalar o ibmcloud cli é o mesmo para os dois sistemas.

Instalando IBMCloud CLI
curl -sL https://ibm.biz/idt-installer | bash

Para mais informações acesse o link: https://cloud.ibm.com/docs/cli?topic=cloud-cli-getting-started



Para verificar se o cli foi instalado, rode o comando:

ibmcloud -v



Depois que o IBMCloud CLI foi instalado, é necessário instalar plugins adicionais de acordo com o seu uso. Rode o comando abaixo para obter uma lista dos plugins disponiveis para instalação:

ibmcloud plugin repo-plugins -r "IBM Cloud"



Para instalar um plugin especifico use ibmcloud plugin install [nomedoplugin].

Por hora vamos instalar apenas dois plugins (kubernetes-servicecontainer-registry), portanto rode os dois comandos abaixo:

ibmcloud plugin install kubernetes-service
ibmcloud plugin install container-registry

Como eu já tinha os plugins instalados, o cli sugeriu atualizar os mesmos.


Para listar os plugins instalados, rode:

ibmcloud plugin list


Agora com o IBMCloud CLI e seus plugins instalados, vamos aos comandos para conectar em nosso cluster kubernetes. Abra novamente as configurações do cluster kubernetes e clique na guia Acessos.

Perceba que na imagem abaixo, já é fornecido um passo-a-passo dos comandos que você precisará rodar em seu terminal para conectar no cluster kubernetes. Esses comandos já vem preenchidos com as informações como grupo de recursos, id do cluster  e variaveis de ambiente para conexão.




Com base na imagem acima...rode o primeiro comando:




Rode o segundo comando.





Veja na imagem acima que após rodar o comando 2, no final será gerado uma linha de export, copie essa linha para rodar o comando 3.



Feito isso, você já estará conectado no cluster kubernetes, rode um kubectl cluster-info para obter informações sobre o seu cluster.


E é isso pessoal!!! Com isso finalizamos a criação do Cluster Kubernetes dentro da IBMCloud.

No proximo artigo vou demostrar como fazer o deploy e publicação de uma aplicação via arquivo yml dentro do Kubernetes

abçs!!!!!

quinta-feira, 9 de janeiro de 2020

Java Tomcat7 - Problema horario de verão

Recentemente tive um problema onde uma aplicação rodando em Tomcat 7 - Java, estava 1 hora a frente do horario configurado no sistema operacional. 

Isso ocorre porque o Java tem a sua própria configuração de timezone. Bem...não vou enrolar mais, abaixo o procedimento para corrigir esse problema:

1) Acesse o link https://www.iana.org/time-zones e faça download do arquivo tzdata2019c.tar.gz referente ao banco de dados de fusos horarios.


2) Faça download do TZUpdater através do link abaixo:




3) Depois do download, crie uma pasta no C:\ do computador ex: update_timezone_java e copie os dois arquivos baixados para esse diretorio.


4) Abra um prompt de comando (de preferencia como administrador) e rode o comando abaixo para começar a atualização do banco de dados timezone java.

java -jar c:\update_timezone_java\tzupdater.jar -v -f -l file:c:\update_timezone_java\tzdata2019c.tar.gz



5) Reinicie o serviço do Apache Tomcat7 e teste a sua aplicação.

terça-feira, 4 de outubro de 2016

Pasta ConflictAndDeleted excedeu seu limite configurado no DFS

Em alguns ambientes que possuem o DFS implementando, você poderá se deparar com a situação onde o volume onde está configurado a replicação DFS consumir boa tarde do disco disponível, correndo o risco até mesmo de esgotar o pouco que resta.

Geralmente isso ocorre devido a volumetria da pasta ConflictAndDeleted que excedeu o limite configurado no DFS porque o arquivo ConflictAndDeletedManifest.xml está corrompido.

Não vou entrar muito nos detalhes disso, mas para quer quiser saber mais, o link abaixo poderá fornecer todas as informações.


O artigo do link foi escrito para Windows Server 2003, porém todo o procedimento abaixo foi realizado em um ambiente com Windows Server 2012

Antes de começar, todas as pastas relacionadas as configurações de DFS estão ocultas, portanto para visualiza-las, primeiro você deverá ir até Folder Options no Painel de Controle e deixar as opções como na imagem abaixo:



Após isso, você visualizará a pasta DFSPrivate e dentro dela toda as outras pastas e arquivos relacionados as configurações de DFS. 


Por padrão, a pasta DFSPrivate fica dentro da pasta onde configurou a replicação.




Bem...para resolver esse problema, a partir do servidor DFS, abra um prompt de comando como administrador e rode o primeiro comando abaixo:


WMIC.EXE /namespace:\\root\microsoftdfs path dfsrreplicatedfolderconfig get replicatedfolderguid,replicatedfoldername

Esse comando irá listar o ID da pasta replicada bem como o seu nome conforme pode ser visto na imagem abaixo:




Com o ID em mãos, vamos rodar o segundo comando para limpar a pasta ConflitcandDeleted

WMIC.EXE /namespace:\\root\microsoftdfs path dfsrreplicatedfolderinfo where "replicatedfolderguid='colar aqui o ID listado no comando acima'" call cleanupconflictdirectory




Após isso, é só aguardar a limpeza da pasta ConflitcandDeleted, dependendo da atual volumetria dessa pasta, isso pode demorar horas, portanto sugiro fazer isso fora do horário de expediente ou final de semana.

abçs!



quarta-feira, 28 de setembro de 2016

Erro de credenciais ao abrir uma VM no Hyper-V Manager


Ai você entra na console do seu Hyper-V Manager e quando tenta abrir qualquer VM recebe a mensagem abaixo:

"A connection will not be made because credentials may not be sent to the remote computer. For assistance, contact your system administrator."



Para resolver isso, siga os passo abaixo para habilitar a opção Use default credentials automatically (no prompt):





Feito isso, você conseguira abrir suas VMs através da console do Hyper-V Manager.

abçs!


terça-feira, 10 de novembro de 2015

Converter instalações do Windows Standard para Enterprise ou Datacenter sem reinstalar o S.O

Em algumas situações, alguns administradores de ambiente são obrigados a mudar o sistema operacional de seu servidor de uma versão Standard para uma versão Enterprise ou até mesmo Datacenter por questões de licenciamento, funcionalidades adicionais ou até mesmo compatibilidade com alguns softwares de terceiros.

Em cima disso, a partir do Windows Server 2008 R2 a Microsoft disponibilizou um utilitário que é capaz de realizar esse "upgrade" sem a utilização de mídia ou reinstalação do seu S.O para versão desejada. 

Esse utilitário é o DISM (Deployment Image Servicing and Management). Como o objetivo aqui é uma demo de como funciona a conversão através desse utilitário, não entrarei em detalhes, portanto para quem quiser conhecer mais deixo aqui o link para consultas e referencias.


Mãos à obra...

Aqui vou demonstrar uma conversão a partir de um Windows Server 2008 R2 Standard para Windows Server 2008 R2 Datacenter.

Vale lembrar que o mesmo procedimento passado aqui, funciona para Windows Server 2012 e 2012 R2.


1) Abra um prompt em modo elevado (como administrador). 
    Veja no desktop que a versão atual é a Standard.



2) Execute o comando: DISM /online /Get-CurrentEdition
    Esse comando irá listar a versão atual do sistema operacional do servidor.



3) Agora precisamos saber para quais versões podemos converter nossa instalação. Rode o comando:

DISM /online /Get-TargetEditions
 
   A imagem abaixo mostra o resultado do comando onde é possível ver que nesse caso podemos          converter a instalação para ServerDataCenter e ServerEnterprise. 


4) Como dito anteriormente, vamos converter a instalação para DataCenter. Rode o comando abaixo:

DISM /online /Set-Edition:ServerDataCenter /productkey:74YFP-3QFB3-KQT8W-PMXWJ-7M648

* Obs.: A chave utilizada no comando acima, trata-se de uma chave genérica KMS do Windows Server 2008 R2 DataCenter. Essa chave é utilizada apenas para converter a instalação, ela não irá ativar definitivamente o seu servidor durante o processo de conversão. 

No link https://technet.microsoft.com/pt-br/library/jj612867.aspx , você poderá ter uma relação completa das chaves de acordo com a versão do Windows Server para o qual você deseja converter.

Para que ocorra a ativação definitiva, após todo o processo de conversão, você deverá inserir uma chave valida (original) que sua empresa possui a partir de um contrato de licenciamento por volume.



Depois de rodar o comando para converter a instalação, você terá uma tela parecida com a abaixo.

Após isso, o Windows Server solicitará para reiniciar por 2 vezes.

Depois de reiniciado, já é possível ver que o Windows foi convertido para versão Datacenter.



* Uma nota importante é que esse procedimento não deverá ser executado em servidores de Active Directory.


Abraços!

Não é possível abrir VM a partir da console do Hyper-V Manager


Situação: A partir da console do Hyper-V Manager você tenta abrir uma VM qualquer e recebe o erro abaixo:

A connection will not be made because credentials may not be sent to the remote computer. For assistance, contact you system administrator


Solução:

1) Na console do Hyper-V Manager, clique em Hyper-V Settings...



2) Navegue até User Credentials e depois habilite a opção Use default credentials automatically (no prompt).

depois clique em aplicar e pronto, você já conseguira conectar novamente em sua VM a partir da console.



Abraços!

terça-feira, 15 de setembro de 2015

Automatizando Backup de VMs Hyper-V com o Veeamzip 8

Hoje compartilharei com vocês um procedimento para automatizar backup de seus servidores virtuais através da ferramenta da Veeam, o Veeam Backup Free Edition versão 8.

Como o próprio nome diz, o Veeam Backup, trata-se de uma ferramenta totalmente gratuita que permite que você realize backups constantes de suas maquinas virtuais (Hyper-V | VMware) de maneira muito simples e intuitiva sem precisar pausar ou desligar suas VMs.

Por se tratar de uma versão free, a unica limitação dessa versão é a impossibilidade de agendar tarefas de backup de suas VMs. Obrigando dessa maneira você iniciar os backups "na mão" através de sua console de gerenciamento.

Claro que na versão full, além de você poder criar/agendar jobs de backup de suas VMs, você tem outras inúmeras funcionalidades muito uteis e interessantes para quem tem um ambiente de virtualização mais complexo. Mas o nosso proposito aqui é usufruir da versão Free.

Bem, graças a um update recente (Update 2) para a versão 8 do Veeam Backup Free Edition, é possível utilizar o módulo PowerShell do Veeam e escrever um script para realizar o backup de suas VMs e posteriormente utilizar o Task Scheduler do Windows para agendar a execução desse script.

Para obter o Veeam bem como a sua atualização, pesquise na internet por Veeam Backup Free Edition v8 ou entre no link atual do produto:

Obs,: É necessário realizar um cadastro para realizar o download do produto.


A instalação de Veeam é bem simples, mas para quem tiver alguma duvida, pode consultar a documentação online do passo a passo:



Muito Importante!!! Durante a instalação, será solicitado para escolher as funções que deseja instalar, nessa etapa você deverá obrigatoriamente habilitar a opção Veeam Backup & Replication PowerShell SDK (destacada em vermelho na imagem abaixo).



Script PowerShell para Backup de Virtual Machines

Para realizar o backup das VMs, vamos utilizar o script PowerShell abaixo. Consegui esse script na internet e fiz algumas alterações. 

Como a maioria dos clientes que atendo usam Hyper-V, o script abaixo está escrito para realizar somente backup de VMs rodando sobre Hyper-V.

Copie o código abaixo em um bloco de notas e salve o mesmo como VeeamBackupVMs.ps1.
ou faça download do script pronto através do link abaixo:


##################################################################
#                   Script de Backup VMs - Hyper-V
##################################################################

# Nome das VMs como elas aparecem na console Hyper-V separadas por virgula. Exemplo, $VMNames = “VM1”,”VM2”
$VMNames = "VM1","VM2"

# Hostname ou IP do host Hyper-V ou VCenter onde estão rodando as VMs
$HostName = "IP do Servidor Hyper-V"

# Diretorio onde serao salvos os backups (Exemplo: C:\Backup\Virtual_Machines)
$Directory = "C:\Backup\Virtual_Machines"

# Nivel de compressão do Backup (Valores: 0 - None, 4 - Dedupe-friendly, 5 - Optimal, 6 - High, 9 - Extreme) 
$CompressionLevel = "5"

# Quiesce VM when taking snapshot (Optional; VMware Tools are required; Possible values: $True/$False)
$EnableQuiescence = $True

# Protect resulting backup with encryption key (Optional; $True/$False)
$EnableEncryption = $False

# Encryption Key (Optional; path to a secure string)
$EncryptionKey = ""

# Retencao do Backup (Por padrão, os arquivos VeeamZIP não removidos e serão mantidos no local onde foi salvo por periodo indeterminado
# Valores: Never , Tonight, TomorrowNight, In3days, In1Week, In2Weeks, In1Month)
$Retention = "Never"

##################################################################
#                   Configuracoes de Email
##################################################################

# Ativando ou Desativando Alertas por Email
$EnableNotification = $True

# Email SMTP server
$SMTPServer = "IP do seu servidor Relay SMTP"

# Email FROM
$EmailFrom = "endereco de email que enviara as notificacoes do backup" 

# Email TO
$EmailTo = "endereco de email que recebera as notificacoes do backup"

# Email subject
$EmailSubject = "[BACKUP VM] - Backup Report VM - Veeam Backup"

##################################################################
#                   Formatacao do corpo do Email
##################################################################

$style = "<style>BODY{font-family: Arial; font-size: 10pt;}"
$style = $style + "TABLE{border: 1px solid black; border-collapse: collapse;}"
$style = $style + "TH{border: 1px solid black; background: #dddddd; padding: 5px; }"
$style = $style + "TD{border: 1px solid black; padding: 5px; }"
$style = $style + "</style>"

##################################################################
#                   Declaracao das Variaveis
##################################################################

#################### DA PARTIR DESSE PONTO, NAO ALTERAR NENHUMA LINHA ################
Asnp VeeamPSSnapin

$Server = Get-VBRServer -name $HostName
$MesssagyBody = @()

foreach ($VMName in $VMNames)
{
  $VM = Find-VBRHvEntity -Name $VMName -Server $Server
  
  If ($EnableEncryption)
  {
    $EncryptionKey = Add-VBREncryptionKey -Password (cat $EncryptionKey | ConvertTo-SecureString)
    $ZIPSession = Start-VBRZip -Entity $VM -Folder $Directory -Compression $CompressionLevel -DisableQuiesce:(!$EnableQuiescence) -AutoDelete $Retention -EncryptionKey $EncryptionKey
  }
  
  Else 
  {
    $ZIPSession = Start-VBRZip -Entity $VM -Folder $Directory -Compression $CompressionLevel -DisableQuiesce:(!$EnableQuiescence) -AutoDelete $Retention
  }
  
  If ($EnableNotification) 
  {
    $TaskSessions = $ZIPSession.GetTaskSessions().logger.getlog().updatedrecords
    $FailedSessions =  $TaskSessions | where {$_.status -eq "EWarning" -or $_.Status -eq "EFailed"}
  
  if ($FailedSessions -ne $Null)
  {
    $MesssagyBody = $MesssagyBody + ($ZIPSession | Select-Object @{n="Name";e={($_.name).Substring(0, $_.name.LastIndexOf("("))}} ,@{n="Start Time";e={$_.CreationTime}},@{n="End Time";e={$_.EndTime}},Result,@{n="Details";e={$FailedSessions.Title}})
  }
   
  Else
  {
    $MesssagyBody = $MesssagyBody + ($ZIPSession | Select-Object @{n="Name";e={($_.name).Substring(0, $_.name.LastIndexOf("("))}} ,@{n="Start Time";e={$_.CreationTime}},@{n="End Time";e={$_.EndTime}},Result,@{n="Details";e={($TaskSessions | sort creationtime -Descending | select -first 1).Title}})
  }
  
  }   
}
If ($EnableNotification)
{
$Message = New-Object System.Net.Mail.MailMessage $EmailFrom, $EmailTo
$Message.Subject = $EmailSubject
$Message.IsBodyHTML = $True
$message.Body = $MesssagyBody | ConvertTo-Html -head $style | Out-String
$SMTP = New-Object Net.Mail.SmtpClient($SMTPServer)
$SMTP.Send($Message)
}




Basicamente, a unica coisa que muda no script para backups de Hyper-V ou VMware, é a entidade na linha 76, como mostra as imagens abaixo.



Entidade para Backups de VMs em Hyper-V


 Entidade para Backups de VMs em VMware


Agendando execução do script PowerShell pelo Task Scheduler

Abra o Task Scheduler e siga as etapas abaixo:


clique em criar tarefa básica



De um nome e uma descrição para nova tarefa


No nosso exemplo, vou criar uma tarefa para executar 5 dias na semana.   Mas no de vocês, escolham a frequência que mais se enquadra com seu ambiente.


Escolha os dias de execução do script


Escolha iniciar um programa


Powershell –file “Caminho do arquivo VeeamBackupVMs.ps1”


Caso apareça o alerta abaixo, clique em sim


Clique em concluir


Opcionalmente você pode usar outra ferramenta agendar a execução do script de Backup. Eu particularmente gosto de uma chamada System Scheduler.

Caso se interessem, podem baixa-la através do link abaixo:



Bem, é isso, espero que seja útil.

Abraços!!!