Kubernetes : Como criar PODs

Pods correspondem à um grupo de aplicativos em execução com um contexto compartilhado. Dentro desse contexto, as aplicações também podem ter isolamentos cgroup individuais aplicados. Em um ambiente container, eles teriam executado no mesmo host físico ou virtual.
O contexto do pod pode ser definida como o conjunto de vários namespaces Linux:

namespace PID : Aplicações dentro do pod que podem ver processos uns dos outros.
namespace rede :Aplicações dentro do pod que podem ter acesso ao mesmo IP e espaço porto.
namespace IPC : Aplicações dentro do pod que pode usar System V IPC vs filas de mensagens POSIX para se comunicar.
namespace UTS : Aplicações dentro da quota pod que podem usar um nome de host.

lxc_architecture

1) Ambiente :

Será utilizado o mesmo ambiente do post http://fajlinux.com.br/devops/docker-cluster-com-o-kubernetes/

2) Criando o container e configurando os servidores minion-01 e minion-02 :

Dentro de /opt criei o arquivo Dockerfile

FROM centos
MAINTAINER  fajlinux <admin@fajlinux.com.br>
RUN yum -y install httpd
RUN echo "Hello DockerFile" > /var/www/html/index.html
EXPOSE 80
CMD ["-D", "FOREGROUND"]
ENTRYPOINT ["/usr/sbin/httpd"]

Crie a imagem com o comando abaixo

cd /opt
docker build -t web_server:latest .

Captura de Tela 2016-02-27 às 18.14.55

Listando a imagem criada

docker images 

Captura de Tela 2016-02-27 às 18.40.09

Rode o container in background

docker run -d -p 80:80 web_server  

Captura de Tela 2016-02-27 às 18.42.33

Valide o container rodando com o comando “docker ps”

Captura de Tela 2016-02-27 às 18.43.15

Faça um cópia do container

docker save web_server > web_server.tar 

Copie o container do host minion-01 para o host minion-02

scp -r web_server.tar root@minion-02:/opt

Carregue o container no host minion-02

docker load < web_server.tar

3) Criando o pod no servidor Master :

Gere uma chave

openssl genrsa -out /tmp/serviceaccount.key 2048

Atualize o arquivo /etc/kubernetes/apiserver

KUBE_API_ARGS="--service_account_key_file=/tmp/serviceaccount.key"

Atualize o arquivo /etc/kubernetes/controller-manager

KUBE_CONTROLLER_MANAGER_ARGS="--service_account_private_key_file=/tmp/serviceaccount.key"

OBS : Os arquivos foram atualizados para não ocorrer o erro abaixo :


Error from server: error when creating “pod-webserver.yaml”: Pod “httpd-fajlinux” is forbidden: no API token found for service account default/default, retry after the token is automatically created and added to the service account

Criando o arquivo webserver.yaml

apiVersion: v1
kind: Pod
metadata:
  # Name of Pod
  name: httpd
  labels:
    # Label of Pod
    app: web_server
spec:
  containers:
    # name of Container
  - name: httpd
    # Container image
    image: web_server
    ports:
    - containerPort: 80

Crie o POD

kubectl create -f webserver.yaml 

Veja os PODs em execução

 kubectl get pods -o wide 

Captura de Tela 2016-02-27 às 19.54.29

Confirme o IP do POD

kubectl get pod httpd-fajlinux -o yaml | grep "podIP" 

Captura de Tela 2016-02-27 às 19.56.19

4) Testes Finais :

Confirmando o POD rodando no Cockpit

Captura de Tela 2016-02-27 às 20.06.14

Chamando no navegador

wget -v    172.17.0.6

Captura de Tela 2016-02-27 às 20.10.04

Referências

http://www.server-world.info/en/note?os=CentOS_7&p=kubernetes&f=3
http://kubernetes.io/v1.0/docs/user-guide/deploying-applications.html
https://access.redhat.com/documentation/en/red-hat-enterprise-linux-atomic-host/version-7/getting-started-with-containers/