Docker : Cluster com o Kubernetes

Neste post será apresentado como configurar o Kubernetes e criar um Cluster com o Docker.

Kubernetes é um sistema de código aberto que foi desenvolvido pelo Google para gerenciamento de aplicativos em containers através de múltiplos hosts de um cluster. Tem como principal objetivo facilitar a implantação de aplicativos baseados em microservices. Ele foi baseado na experiência do Google de muitos anos trabalho com containers, adaptando-o para se trabalhar com Docker.

Segue abaixo o site do projeto :

http://kubernetes.io/

Componentes do Kubernetes :

etcd – Alta disponibilidade de chaves guardadas para compartilhar configuração compartilhada e descoberta de serviços.
flannel – Usa o etcd para distribuir conectividade entre os containers.
kube-apiserver – API para os Kubernetes.
kube-controller-manager – Responsável pelos serviços Kubernetes ativos.
kube-scheduler – Agenda tarefas nos containers.
kubelet – Agentes que rodam nos hosts do cluster.
kube-proxy – Serviço de Proxy.

Arquitetura do Kubernetes :

kubernetes-cluster-with-docker

1) Laboratório :

Usaremos um laboratório com VMS CentOS7 (1 Master e 2 servidores Minions), todas VMs com 1Gbs e 2 vcpus em ambiente VMWARE.

10.0.0.30 MASTER-LXC
10.0.0.31 MINION-01
10.0.0.32 MINION-02

2) Requisitos :

Para configuração dos servidores foram desativados o firewalld e o SELINUX, também foram inclusos as definições de nome no /etc/hosts para resolução de nome estática.

Desativando FirewallD

systemctl stop firewalld 
systemctl disable firewalld

Editando o SELINUX para permissive

setenforce 0 

3) Configurando o Servidor :

Em noção instalação deixaremos configurado o Kubernetes e a interface Cockpit para nos auxiliar na gerência.

Instalação dos pacotes necessários

yum install docker  cockpit cockpit-docker cockpit-kubernetes kubernetes flannel etcd -y

Configuração do arquivo /etc/etcd/etcd.config :

ETCD_LISTEN_PEER_URLS="http://localhost:2380"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"

Configuração do arquivo /etc/kubernetes/apiserver :

KUBE_API_ADDRESS="--address=0.0.0.0"
KUBE_API_PORT="--port=8080"
KUBELET_PORT="--kubelet_port=10250"
KUBE_ETCD_SERVERS="--etcd_servers=http://127.0.0.1:2379"
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
KUBE_ADMISSION_CONTROL="--admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"
KUBE_API_ARGS=""

Configuração do arquivo /etc/kubernetes/config

KUBE_MASTER="--master=http://IPMASTER:8080"

Definindo a rede que os containers irão trabalhar :

etcdctl mk /atomic.io/network/config '{"Network":"172.17.0.0/16"}'

Vamos reiniciar os serviços

 systemctl restart etcd
 systemctl restart kube-apiserver
 systemctl restart kube-controller-manager
 systemctl restart kube-scheduler
 systemctl restart cockipit.service

4) Configuração dos clientes :

Instalação dos pacotes necessários

yum -y install flannel kubernetes

Remova o docker-selinux

yum remove docker-selinux -y

Configuração do arquivo /etc/sysconfig/flanneld

FLANNEL_ETCD="http://IPMASTER:2379"

Configuração do Kubernetes para conectar na API do master no arquivo /etc/kubernetes/config

KUBE_MASTER="--master=http://IPMASTER:8080"

Configuração dos minions no arquivo /etc/kubernetes/kubelet

KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_PORT="--port=10250"
KUBELET_HOSTNAME="--hostname-override=IPMINION"
KUBELET_API_SERVER="--api_servers=http://IPMASTER:8080" 
KUBELET_ARGS=""

Reiniciando os serviços

systemctl restart kube-proxy 
systemctl restart kubelet
systemctl restart docker 
systemctl restart flanneld

Validando o registro do minion no servidor master :

Captura de Tela 2016-02-27 às 13.20.14

Podemos também acessar o cockipt na URL do Master https://10.0.0.30:9090/kubernetes e ver o container registrado via Cockpit :

Captura de Tela 2016-02-27 às 15.26.37

Referências :

http://kubernetes.io/v1.0/docs/user-guide
https://cloud.google.com/container-engine/docs/clusters/operations

Nos próximos posts apresentarei como realizar deploys de aplicações através deste ambiente.

Translate »