Agora vamos falar de Helm e a facilidade que ele traz para instalar pacotes. O Helm é um gerenciador de pacotes; a melhor maneira de encontrar, compartilhar e instalar softwares para Kubernetes. Imagine um npm, um dockerhub, um pip ou quem sabe um homebrew… um centralizador de pacotes que facilita a sua vida na hora de instalar/atualizar um pacote.





O Helm é mantido pela CNCF junto com MicrosoftGoogleBitnami e a comunidade do Helm.



Iremos também explorar um dos pacotes mais usados no Kubernetes, que é o Istio, usado para conectar, controlar e observar serviços, além de garantir a segurança.





Quando estiver usando o Istio em produção, é importante saber em que estágio estão as features desejadas (alpha, beta, stable), pois isso impacta diretamente na maneira como a manutenção precisará ser feita.



Não queremos nenhuma ligação no meio da noite, não é mesmo?



Para trazer uma experiência legal, usaremos também o Kiali, que é um pacote que traz um admin para que você possa visualmente acompanhar o que está acontecendo com seu Istio.





Atenção



Caso tenha feito o tutorial anterior, é importante rodar o comandominikube destroy, pois o Minikube consome bastante memória e cpu e pode ficar bem lento se continuarmos adicionando coisas em cima dele antes de limpá-lo por completo. Se você ainda está fazendo o tutorial anterior ou quer aprimorar/mudar seu banco & webapp, não rode o comando pois ele irá zerar tudo que fizemos anteriormente.



Algumas tarefas desse tutorial podem demorar um pouco para finalizar, por isso sugiro no mínimo alocar 4GB de memória ao iniciar o Minikube.



minikube start --memory=4096 --cpus=4



Se você estiver no macOS, lembre-se de adicionar a flag--vm-driver=xhyve



Instalando Istio & istioctl



Primeiro passo é baixar o Istio:



curl -L https://git.io/getLatestIstio | sh -





Após isso, vamos movê-lo para o bin, ao invés de simplesmente adicionar a pasta em que ele foi baixado ao path, como diz a imagem.



cd istio-1.0.3
sudo mv bin/istioctl /usr/local/bin





O comando istioctl estará disponível para você através da linha de comando:





Ainda dentro da pasta do Istio, vamos criar o Service Account do Tiller:



kubectl create -f install/kubernetes/helm/helm-service-account.yaml





Inicie o Tiller no cluster:



helm init --service-account tiller





Após isso, o pod do Tiller deverá estar criado para prosseguir (lembrando que, dependendo da alocação de recursos que você colocou no minikube start, a criação desse pod pode demorar um pouco).



Para ver se está criado, basta rodar:



kubectl -n kube-system get po





Apesar de ter alocado 4GB, demorou aproximadamente 15 min para o container ser criado, então caso você prossiga sem esperar ele ser criado, pode ver o seguinte erro:



Error: could not find a ready tiller pod



Finalmente, vamos instalar o Istio:



helm install install/kubernetes/helm/istio --name istio --namespace istio-system



Após criar, basta rodar o comando a seguir para checar se está tudo ok:



kubectl get svc -n istio-system





Vamos verificar também o estado dos pods criados pelo Istio:



kubectl get pods -n istio-system





Como vocês podem ver, um pod entrou em CrashLoopBackOff e eu fui pesquisar para entender o que ocorreu. Investigando, descobri que isso pode acontecer devido a algum erro na instalação (como a demora do minikube), fazendo com que o istio-cidatel-* seja montado antes, inviabilizando os secrets que o istio-security-post-install-* necessita para rodar. A solução (workaround) que eu encontrei, foi forçar a deleção do pod para ele ser recriado com sucesso e finalizado sem erros.



kubectl delete pod istio-security-post-install-pvvz8 -n istio-system --grace-period=0 --force





Agora o istio-security-post-install-* finalizou com sucesso:





Instalando uma aplicação de exemplo do Istio



Agora, vamos instalar o Bookinfo, que é uma aplicação exemplo do próprio Istio, composto de quatro micro serviços separados, usados para demonstrar vários recursos do Istio.



A aplicação exibe informações sobre um livro, semelhante a um catálogo único de uma livraria on-line. Na página, há uma descrição do livro, detalhes do livro (ISBN, número de páginas e assim por diante) e algumas resenhas de livros. Ele é dividido em quatro micro serviços separados:



productpage (Página do produto): O micro serviço de productpage chama os micro serviços de details e reviews para preencher a página



details (Detalhes): O micro serviço de details contém informações do livro



reviews (Resenhas): O micro serviço de reviews contém resenhas de livros. Ele também chama o micro serviço de ratings



ratings (Classificações): O micro serviço de ratings contém informações de classificação de livros que acompanham uma resenha do livro.



kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml





Agora vamos definir o gateway do Ingress:



istioctl create -f samples/bookinfo/networking/bookinfo-gateway.yaml





Vamos verificar se está tudo no ar, começando pelos serviços:



kubectl get services





E os pods:



kubectl get pods





Hora de confirmar que a aplicação está no ar, com tudo certinho.



export INGRESS_HOST=$(minikube ip)export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http")].nodePort}')export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT





Rode o comando echo $GATEWAY_URLpara garantir que você tem um ip e uma porta, caso contrário, você precisará trocar a porta buscando nas specs o http2 ao invés do http dessa maneira:





Basta checar no browser, a url dessa maneira no Linux:



xdg-open http://${GATEWAY_URL}/productpage



Ou no macOS:



open http://${GATEWAY_URL}/productpage







Instalando o Kiali para deixar tudo mais visual



A primeira coisa, é que precisaremos usar um comando chamadoenvsubst que vem no Ubuntu por padrão, mas não existe no macOS. Caso você esteja usando o macOS, você vai precisar do homebrew para rodar os seguintes comandos e instalar o pacote gettext:



brew install gettext
brew link --force gettext



Mãos a obra! Primeiro vamos pegar alguns arquivos do Kiali que são fundamentais para podermos instalá-lo:



O Configmap:



curl https://raw.githubusercontent.com/kiali/kiali/master/deploy/kubernetes/kiali-configmap.yaml | \
VERSION_LABEL=master envsubst > kiali-configmap.yaml





Os Secrets:



curl https://raw.githubusercontent.com/kiali/kiali/master/deploy/kubernetes/kiali-secrets.yaml | \
VERSION_LABEL=master envsubst > kiali-secrets.yaml





E o próprio Kiali:



curl https://raw.githubusercontent.com/kiali/kiali/master/deploy/kubernetes/kiali.yaml | \
IMAGE_NAME=kiali/kiali \
IMAGE_VERSION=latest \
NAMESPACE=istio-system \
VERSION_LABEL=master \
VERBOSE_MODE=4 envsubst > kiali.yaml





Uma vez que você tenha todos os arquivos necessários, é hora de criá-los no namespace istio-systemque criamos no Minikube nas etapas anteriores:



kubectl create -f kiali-configmap.yaml -n istio-system





kubectl create -f kiali-secrets.yaml -n istio-system





kubectl create -f kiali.yaml -n istio-system





Vamos ver se tudo foi criado corretamente, checando primeiro os serviços com o comando:



kubectl get svc kiali -n istio-system





Lembrando que a porta que aparece aqui (no meu caso 30788) é importante pois vamos usá-la para acessar o admin.



E depois os pods:



kubectl get pods -n istio-system





O penúltimo pod foi criado com sucesso. Agora basta digitar minikube ip para descobrir o seu ip do Minikube e usar com a porta que descobrimos anteriormente:





Basta logar com admin admin para ver o Overview (essa credencial se encontra no arquivo kiali-secrets.yaml que baixamos no início da instalação):





Hey, espera aí, não vai embora não



Para mais informações referentes a Helm, Istio & Kiali; acessem os links abaixo:





Autor: Guilherme Esteves


Social

Fale conosco

Almeda Campinas 802, CJ 12, Jardim Paulista,

São Paulo - SP, 01404-001

Faça parte do time

Nossos conteúdos

Social

Fale conosco

Almeda Campinas 802, CJ 12, Jardim Paulista,

São Paulo - SP, 01404-001

Faça parte do time

Nossos conteúdos

Social

Fale conosco

Almeda Campinas 802, CJ 12, Jardim Paulista,

São Paulo - SP, 01404-001

Faça parte do time

Nossos conteúdos