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.
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 .
Listando a imagem criada
docker images
Rode o container in background
docker run -d -p 80:80 web_server
Valide o container rodando com o comando “docker ps”
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
Confirme o IP do POD
kubectl get pod httpd-fajlinux -o yaml | grep "podIP"
4) Testes Finais :
Confirmando o POD rodando no Cockpit
Chamando no navegador
wget -v 172.17.0.6
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/