Pular para o conteúdo principal

Rancher com Kubernetes

Instalação Kubernetes com Rancher no Opensuse


O que é Rancher e o que é Kubernentes?

Uma breve descrição:

O Rancher é uma plataforma de gerenciamento de contêineres que facilita a implantação e a operação de clusters Kubernetes em ambientes de nuvem e locais. Ele oferece uma interface gráfica de usuário (GUI) e ferramentas de linha de comandos para gerenciar clusters, simplificar a orquestração de contêineres e proporcionar segurança, monitoramento e escalabilidade de aplicações baseadas em contêineres.

O Kubernetes é uma plataforma de código aberto para orquestração de containers, usada para gerenciar e automatizar o deployment, a escalabilidade e as operações de aplicações containerizadas. Ele foi desenvolvido inicialmente pelo Google e agora é mantido pela Cloud Native Computing Foundation (CNCF).


Kubernetes com seus componentes principais:


Control Plane: Coordena o cluster, gerenciando o estado e o ciclo de vida das aplicações. Inclui o API Server (interface principal), o Scheduler (alocação de pods nos nós), e o Controller Manager (gestão de controladores).
Etcd: Um banco de dados chave-valor distribuído que armazena de forma confiável todos os dados do cluster, como configurações e estados.
Worker Nodes: Os servidores que executam os containers e incluem o Kubelet (comunicação com o Control Plane), Kube Proxy (gestão de rede) e o runtime de containers (como Docker ou containerd).



Resumo: O rancher é englobado pelo cluster Kubernetes que contém os componentes Control Plane, Etcd e worker. 

Obs: Essa configuração é enxuta e direcionada para o aprendizado e execução deste tutorial.

Principais Termos: 

Container: Uma instância independente que executa um ou mais aplicativos ou processos.
Pod: A menor unidade no Kubernetes, que contém um ou mais contêineres funcionando juntos e compartilhando recursos como rede e armazenamento.
Deployment: Gerencia pods, suportando atualizações automáticas e reversões.
Service: Exposição de pods como um ponto de acesso interno/externo na rede.

Apartir segue o tutorial de instalação e configuração:

O Opensuse utilizado foi o 15.6 Leaf.

Ajustes da timezone de São Paulo:

timedatectl set-timezone America/Sao_Paulo

Após cada servidor do Opensuse instalado:

Ex: Ips:
192.168.15.95 --> kubernentes-control-plane
192.168.15.135 --> kubernentes-etcd
192.168.15.145 --> kubernentes-worker

hostnamectl set-hostname kubernentes-control-plane
hostnamectl set-hostname kubernentes-etcd
hostnamectl set-hostname kubernentes-worker

Criar 3 servidores básicos: (Control Plane, Etcd e Worker), a memória alocada em cada servidor fico como comentário no arquivo /etc/hosts
Adicione as informações no /etc/hosts:

192.168.15.95    kubernentes-control-plane # 8GB alocado
192.168.15.135    kubernentes-etcd                 # 4GB alocado
192.168.15.145    kubernentes-worker            # 8GB alocado

Em todos servidores executar:

zypper update
zypper in vim wget iputils

Não é recomendável, mas p/ facilitar a ditática, será desabilitado o firewall local. Desabilitar o firewalld:

systemctl disable --now firewalld

Instalar o docker (dependência para o cluster kubernentes)

zypper addrepo https://download.docker.com/linux/opensuse/leap/15.6/x86_64/stable/ docker-ce
zypper refresh
zypper install docker-24.0.7_ce-150000.198.2
systemctl enable docker --now
docker ps

Criar usuário:

useradd -m k8s
passwd k8s (Senha:m@st3r-!@#)
groupadd k8s
usermod -g k8s k8s
usermod -aG docker k8s

Servidor Control plane (bastion)

su - k8s
ssh-keygen -t rsa -b 4096 -f /home/k8s/.ssh/id_rsa
ssh-copy-id k8s@kubernentes-control-plane
ssh-copy-id k8s@kubernentes-etcd
ssh-copy-id k8s@kubernentes-worker
exit

Instalar o kubernetes (kubectl e rke)

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
install -o root -g root -m 0755 kubectl /usr/bin/kubectl
chmod 755 /usr/bin/kubectl
kubectl version --client

wget https://github.com/rancher/rke/releases/download/v1.4.17/rke_linux-amd64
mv rke_linux-amd64 /usr/bin/rke
chmod 755 /usr/bin/rke
rke --version

Configurar o cluster kubernentes:

su - k8s
rke config

Observa os Detalhes a serem preenchidos:

[+] Cluster Level SSH Private Key Path [~/.ssh/id_rsa]: <enter>
[+] Number of Hosts [1]: 3
[+] SSH Address of host (1) [none]: kubernentes-control-plane
[+] SSH Port of host (1) [22]: <enter>
[+] SSH Private Key Path of host (kubernentes-control-plane) [none]:
~/.ssh/id_rsa
[+] SSH User of host (kubernentes-control-plane) [ubuntu]: k8s
[+] Is host (kubernentes-control-plane) a Control Plane host (y/n)? [y]: y
[+] Is host (kubernentes-control-plane) a Worker host (y/n)? [n]: n
[+] Is host (kubernentes-control-plane) an etcd host (y/n)? [n]: n
[+] Override Hostname of host (kubernentes-control-plane) [none]:
kubernentes-control-plane
[+] Internal IP of host (kubernentes-control-plane) [none]: 192.168.15.95
[+] Docker socket path on host (kubernentes-control-plane)
[/var/run/docker.sock]: <enter>
[+] SSH Address of host (2) [none]: kubernentes-etcd
[+] SSH Port of host (2) [22]:  <enter>
[+] SSH Private Key Path of host (kubernentes-etcd) [none]:
~/.ssh/id_rsa
[+] SSH User of host (kubernentes-etcd) [ubuntu]: k8s
[+] Is host (kubernentes-etcd) a Control Plane host (y/n)? [y]: n
[+] Is host (kubernentes-etcd) a Worker host (y/n)? [n]: n
[+] Is host (kubernentes-etcd) an etcd host (y/n)? [n]: y
[+] Override Hostname of host (kubernentes-etcd) [none]:
kubernentes-etcd
[+] Internal IP of host (kubernentes-etcd) [none]: 192.168.15.135
[+] Docker socket path on host (kubernentes-etcd)
[/var/run/docker.sock]: <enter>
[+] SSH Address of host (3) [none]: kubernentes-worker
[+] SSH Port of host (3) [22]: <enter>
[+] SSH Private Key Path of host (kubernentes-worker) [none]:
~/.ssh/id_rsa
[+] SSH User of host (kubernentes-worker) [ubuntu]: k8s
[+] Is host (kubernentes-worker) a Control Plane host (y/n)? [y]: n
[+] Is host (kubernentes-worker) a Worker host (y/n)? [n]: y
[+] Is host (kubernentes-worker) an etcd host (y/n)? [n]: n
[+] Override Hostname of host (kubernentes-worker) [none]:
kubernentes-worker
[+] Internal IP of host (kubernentes-worker) [none]: 192.168.15.145
[+] Docker socket path on host (kubernentes-worker)
[/var/run/docker.sock]: <enter>
[+] Network Plugin Type (flannel, calico, weave, canal, aci) [canal]:
<enter>
[+] Authentication Strategy [x509]: <enter>
[+] Kubernetes Docker image [rancher/hyperkube:v1.24.6-rancher1]:
rancher/hyperkube:v1.27.14-rancher1
[+] Cluster domain [cluster.local]: <enter>
[+] Service Cluster IP Range [10.43.0.0/16]: <enter>
[+] Enable PodSecurityPolicy [n]: <enter>
[+] Cluster Network CIDR [10.42.0.0/16]: <enter>
[+] Cluster DNS Service IP [10.43.0.10]:<enter>
[+] Add addon manifest URLs or YAML files [no]: <enter>

Em cluster.yml insera o providor com o atritubo none.

vim cluster.yml

[...]
ingress:
provider: "none"
options: {}
[...]

Ajustando o cluster kubernentes para subir automaticamente:

mkdir /home/k8s/.kube
rke up
mv kube_config_cluster.yml config
cp config /home/k8s/.kube
vim /home/k8s/.bashrc
export KUBECONFIG=/home/k8s/.kube/config

Verificando o cluster Kubernetes

kubectl get nodes
kubectl cluster-info

Instalar helm (gerenciador de pacotes Kubernentes):

curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
bash get_helm.sh

Pré Requisito do Rancher (Ingress Controller​)

su - k8s
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install nginx-ingress ingress-nginx/ingress-nginx --namespace ingress-nginx --create-namespace

Verificar o Ingress Controller:

kubectl get pods -n ingress-nginx
kubectl get svc -n ingress-nginx

Adicionar repositório Rancher

helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
kubectl create namespace cattle-system

Crie a Autoridade Certificadora (CA)

mkdir certs && cd certs
openssl genpkey -algorithm RSA -out ca.key
openssl req -new -x509 -key ca.key -out ca.crt -days 3650 -subj "/C=BR/ST=DF/L=Brasilia/O=Rancher/OU=CA/CN=kubernentes-control-plane"

Gere a Chave e o CSR para o Servidor

openssl genpkey -algorithm RSA -out tls.key
openssl req -new -key tls.key -out tls.csr -subj "/C=BR/ST=DF/L=Brasilia/O=Rancher/OU=IT/CN=kubernentes-control-plane"

Assine o CSR com a CA

openssl x509 -req -in tls.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out tls.crt -days 3650

Criar Secret do Rancher:

kubectl -n cattle-system create secret tls tls-rancher-ingress --cert=tls.crt --key=tls.key

Criar Secret da CA

kubectl -n cattle-system create secret generic tls-ca --from-file=cacerts.pem=ca.crt

Listar secrets

kubectl -n cattle-system get secrets

Instalar Rancher com Helm

helm install rancher rancher-stable/rancher --namespace cattle-system --set bootstrapPassword=secretpasswd --set hostname=kubernentes-control-plane --set ingress.tls.source=secret --set privateCA=true

Para expor o Rancher para fora, foi necessário criar o manifest do tipo NodePort, pois é um metodo, simplificado para expor o Rancher fora do cluster Kubernetes.

k8s@rancher-cp:~> cat node-port.yml
apiVersion: v1
kind: Service
metadata:
  name: rancher
  namespace: cattle-system
spec:
  type: NodePort
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
      nodePort: 30080
    - protocol: TCP
      port: 443
      targetPort: 443
      nodePort: 30443
  selector:
    app: rancher

kubectl apply -f node-port.yml

Após acessar a primeira vez será gerada uma senha randomicamente: 
Digite esse comando no terminal para verificar a senha:

kubectl get secret --namespace cattle-system bootstrap-secret -o go-template='{{.data.bootstrapPassword | base64decode}}'

Acesse o link do Rancher para realizar o primeiro acesso:

  • https://192.168.15.95:30443

Os próximos login, não iram notificar a questão de primeiro acesso do Rancher, e ficará assim:


Após o acesso será apresentado as informações do primeiro cluster:


Exemplo de criação de um deployment com o serviço Nginx com 2 replicas, no caso será criado dois pods. Clique em Workloads e selecione deployment e posteriormente clique na caixa do lado direito superior "Create"


No momento que criar o deployment, insira o nome para o deployment: primeiro-deploy, em replicas foi utilizada 2 como exemplo, insira a imagem do container: nginx, após selecione "Create".


Se tudo ocorrer sem problemas, sera criado o deployment: primeiro-deploy


Para melhor entendimento e verificar as 2 replicas de pods criadas, clique em primeiro-deploy:


Foi criados 2 pods conforme exemplificado na figura com os seguintes nomes:

  • primeiro-deploy-6f55bc5d8-88bkq
  • primeiro-deploy-6f55bc5d8-jlgjg

Obs: Este tutorial foi elaborado com um cluster Kubernetes utilizando apenas um nó Worker. Embora haja duas réplicas do pod configuradas, a falta de múltiplos Workers impede a alta disponibilidade. Em caso de falha no único Worker, todos os pods serão interrompidos, pois não há outro nó para redistribuí-los. Para garantir resiliência, recomenda-se ao menos dois Workers em ambientes de produção.

Para expor o nginx para acesso externo devemos configurar o service:

Antes de propagar o service, precisamos configurar o label/selector para configurar o service:
No deployment "primeiro-deploy", foi editado as configurações e inserido o seguinte label: 

  • key: web
  • value: nginx 


Clique em "Save", neste momento os pods anterior serão excluidos e recriados.

Clique no menu: Service Discovery, posteriormente em Service, Clique em "Create":
Será apresentada a seguinte tela, estaremos utilizado o service Node Port:

Uma breve descrição: NodePort é um tipo de Service no Kubernetes que expõe um aplicativo para acesso externo, mapeando uma porta específica em todos os nós do cluster para a porta do pod. Isso permite que o serviço seja acessado diretamente pelo IP do nó e pela porta atribuída, seu range de portas externas seria de 30000 a 32767.


Após clicar em Node Port, Preencha o nome do serviço: Name, o nome da porta: Port Name, insira a porta local do container do nginx, no caso 80 e em Node Port, escolha a porta externa a ser pública no caso foi escolhida a porta 30111.


Para completar a configuração, insera o selector criado no deployment anteriormente:

  • key: web
  • value: nginx 

Após clique em Create:



Para acessar o Nginx, basta acessar:

http://kubernentes-worker:30111/
ou
http://192.168.15.145:30111/


Obs 1: O acesso somente funcione via ip, pois talvez não tenha entrada dns cadastradas ou a mesma não foi inserida no /etc/hosts.
Obs 2: Caso tiver 2 ou mais workers, o acesso por equanto, seria conforme exemplo abaixo com Node Port:

  • http://kubernentes-worker:30111/
  • http://kubernentes-worker2:30111/
  • http://kubernentes-worker3:30111/

###########################################
Espero que gostem deste tutorial, sugestões e dúvidas fico a disposição.


Ass: Luiz Guilherme Nunes Fernandes
Email: narutospinal@gmail.com
Informativo: Entusiasta e colaborador em Software Livre.


Comentários

Postagens mais visitadas deste blog

Feliz 2013!!!

Gostaria de agradecer a todos que este ano acompanharam as matérias postadas e as mais de  7000 visitas ao blog , muito obrigado. Este ano tivemos grandes conquistas e inúmeras novidades como por exemplo o fim do MSN no início de 2013, a criação da União Livre e o desenvolvimento do Kaiana que será lançada em 2013, distro nacional , a descontinução do BigLinux do DreanLinux entre outr as distro, o lançamento do liv ro da S B P - Software Publico Brasileiro, os dois anos do LibreOffice, o prime iro Hackday do LibreOffice , o IX Latinoware, a Microsoft boicotando o Linux (como sempre), o lançamento do Windows 8 e a sua baixa taxa de adesão pelos usuários, entre out ros. Gostaria de desejar a todos Boas Festas e que em 2013 possamos estar juntos novamente. Feliz Natal!!!! F eli z 2013 a todos!!!

O MSN tem Data Marcada para seu Fim

Imagem Retirado do Google 15 de Março Agora sim, o Windows Live Messenger está com os dias contatos, a Microsoft anunciou que o MSN deixará de funcionar no dia 15 de Março deste ano, menos na China. A empresa aconselha a todos os usuários a usarem o Skype que foi integrado com o serviço do MSN, segundo a empresa, os usuários estão sendo notificados por e-mail sobre como proceder para fazer esta mudança de plataforma (eu não recebi até agora tal notificação). Acho o Skype melhor que o Windows Live (assim como muitos profissionais de TI) , mesmo na versão para Linux, claro, sempre existem outras opções e o Pidgin, que se mostra como opção.

Feliz Dia das Mães!!!!

Como Instalar a Fonte ttf-mscorefonts (Times New Roman, Arial, etc) no Ubuntu, Linux Mint e Derivados

Quando instalamos uma distribuição GNU/Linuxmsabemos que vem o LibreOffice por padrão porém geralmente não vem instalado a fonte ttf-mscorefonts que contém as fontes Times New Roman, Arial, etc, como essas fontes são muito útil para os universitários, pelo mundo corporativo e a Associação Brasileira de Normas Técnicas (ABNT), exige que os trabalhos sejam entregues nas fontes Times New Roman e Arial, por meio desta postagem espero pode ajudar a todos com a instalação da fonte ttf-mscorefonts que contém essas fontes. Ao instalar o GNU/Linux abra o terminal e execute o comando: $ sudo apt-get install ttf-mscorefonts-installer Leia os termos de uso e avance clicando em “Ok” Agora aceite os termos de uso clicando em “Sim” Pronto agora abra o LibreOffice e veja se as fontes Times New Roman, Arial estão instaladas. Caso ocorra algum erro ou precisa reinstalar, execute: $ sudo apt-get install --reinstall ttf-mscorefonts-installer

Comandos Úteis para o Linux Mint, Ubuntu e Derivados

Alguns dias sugeriram que eu postasse alguns comandos uteis  utilizados no Linux Mint e para o Ubuntu, mas com tantas distros baseadas no Ubuntu esses comandos também podem ser utilizados nas distros como: Ubuntu 15.04, Ubuntu 14.10, Ubuntu 14.04 , Linux Mint 17.2, Linux Mint 17.1, Linux Mint 17, Pinguy OS 14.04, Elementary OS 0.3, Deepin 2014, Peppermint Five, LXLE 14.04 and Linux Lite 2 2 , DuZeru, Kaiana e derivados . Segue alguns comandos importantes para manutenção do sistema, principalmente para usuários iniciantes... 1- Atualizar a lista de pacotes:  $ sudo apt-get update 2- Atualizar toda a distro:  $ sudo apt-get -f dist-upgrade ou update-manager -d -c 3- Instalar pacotes:  $ sudo apt-get install [nome do pacote] 4- Procurar arquivos corrompidos:  $ sudo apt-get check 5- Corrigir problemas de dependências, concluir instalação de pacotes pendentes e outros erros: $ sudo apt-get -f install 6- Se o comando sudo apt-get -f install nã...

Como Instalar a Fonte ttf-mscorefonts (Times New Roman, Arial, etc) no Ubuntu, Linux Mint e Derivados

Quando instalamos uma distribuição GNU/Linuxmsabemos que vem o LibreOffice por padrão porém geralmente não vem instalado a fonte ttf-mscorefonts que contém as fontes Times New Roman, Arial, etc, como essas fontes são muito útil para os universitários, pelo mundo corporativo e a Associação Brasileira de Normas Técnicas (ABNT), exige que os trabalhos sejam entregues nas fontes Times New Roman e Arial, por meio desta postagem espero pode ajudar a todos com a instalação da fonte ttf-mscorefonts que contém essas fontes. Ao instalar o GNU/Linux abra o terminal e execute o comando: $ sudo apt-get install ttf-mscorefonts-installer Leia os termos de uso e avance clicando em “Ok” Agora aceite os termos de uso clicando em “Sim” Pronto agora abra o LibreOffice e veja se as fontes Times New Roman, Arial estão instaladas. Caso ocorra algum erro ou precisa reinstalar, execute: $ sudo apt-get install --reinstall ttf-mscorefonts-installer

QElectroTech (Software Livre para Criar Diagramas Elétricos)

ElectroTech, ou QET, abreviadamente, é um software livre para criar diagramas elétricos industriais complexos. Mas você também pode criar diagramas de encanamento, geotermia, ar condicionado, layout, hidráulica, pneumática, domótica, PID, fotovoltaica, encanamento de piscinas, etc.! Na última versão 0.100, a coleção contém mais de 8.000 símbolos... Mais informações clique aqui . Para baixar clique no link: https://qelectrotech.org/download.php  

Como Instalar o Kodi 19.5 "Matrix"

Kodi (anteriormente denominado XBMC) é um famoso hub de mídia de código aberto e home theater PC, sendo traduzido em mais de 30 idiomas. Além disso, suas características podem ser altamente estendido através de plugins de terceiros e extensões e tem suporte para PVR (personal video recorder).   A versão final do Kodi 19.5 “Matrix” foi lançado, chegando com alterações que podem ser vistas clicando aqui . Para instalar no Ubuntu,  Linux Mint, Elementary OS e derivados, execute:   $ sudo add-apt-repository ppa:team-xbmc/ppa $ sudo apt-get update $ sudo apt-get install kodi     Use o comando a seguir para instalar codecs de áudio e outros complementos, executando:     $ sudo apt-get install --install-suggests kodi     Para remover, execute:   $ sudo apt-get remove kodi*

Boot USB Samsung Series 5 Ultra

A linha de Ultrabooks "Series 5 Ultra" da Samsung vem com o Windows 8 instalado e amarrado. Não é possível instalar um sistema decente (ou seja, Linux), antes de mudar várias opções da BIOS. Assim, seguem abaixo conforme as abas, a configuração da BIOS necessária para conseguir fazer boot. Na inicialização aperte F2 para acessar a BIOS e então faça as seguintes alterações: Advanced : Fast BIOS Mode -> Disabled AHCI Mode Control -> Manual ( Atenção: Se você não for usar exclusivamente Linux, mas sim fazer dual boot com Win, deixe essa opção no Auto ) Set AHCI Mode -> Disabled USB S3 Wake-up -> Enabled Boot: Secure Boot -> Disabled OS Mode Selection -> UEFI and CSM OS (Essa opção garante boot com Win e Linux) Boot > Boot Priority Order USB HDD: SATA CD: SATA HDD: Essa ordem de boot vai garantir que ele tente primeiro o boot pela USB, depois pelo CD e por último no HD. Apenas as opções acima são as necessá...

Escrevendo uma Macro no LibreOffice Calc - Introdução

Este tutorial foi retirado do site Debugpoint, não mudei nada nenhuma linha de comando, apenas traduzir a explicação do tutorial e espero que ajudem a todos. O LibreOfice fornece uma maneira de escrever a sua própria macro para automatizar várias tarefas repetitivas em seu aplicativo de escritório. Você pode usar Python ou Basic para o desenvolvimento do macro. Este tutorial se concentra em escrever um macro básico 'Olá Mundo' usando básico do LibreOffice Calc .   Macro Objetivo   Nós iremos criar uma macro que iria colocar a string ' Olá Mundo' na primeira célula do LibreOffice Calc ou seja, a célula da linha 1 e col A. Criando o Macro   Abr a o LibreOffice Calc em Aplicativos = > Office/Escritório => LibreOffice Calc .   Ou pesquise " calc " na barra de pesquisa Vá para a opção no menu : Ferramentas ==> Macros == > Organizar Macros ==> LibreOffice Basic . Abai...