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!!!!

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

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

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*

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...

AnduinOS 1.3.0

O AnduinOS é uma distribuição baseada no Ubuntu que oferece um ambiente de trabalho NOME com tema e estilo semelhantes aos do Windows 11. A versão mais recente do projeto, o AnduinOS 1.3.0, é baseada no Ubuntu 25.04 e vem com o GNOME 48.  "O AnduinOS 1.3 foi lançado. Esta versão é altamente recomendada porque adicionamos uma loja de aplicativos (baseada em Flatpak) a ela. Sistema básico atualizado - o sistema fundamental foi atualizado do Oracular (Ubuntu 24.10) para o Plucky (Ubuntu 25.04). Adicionado um novo atalho Super + V para alternar o histórico da área de transferência. Software GNOME pré-instalado para oferecer suporte à instalação de software da loja de software. Flatpak pré-instalado para oferecer suporte à instalação de software da loja de software. Problema de localização do Firefox corrigido. O GNOME foi atualizado para a versão 48 e o suporte a HDR adicionado. Agora está disponível para download para todos." Paraler a nota de lançamento clique aqui . Para baixa...

Famelix/BRLix

Continuando falando dos Sistemas Operacionais Linux apresento a vocês o Falemix/BRLix. O Famelix, foi criado em 2003 em um projeto da Faculdade Metropolitana de Guaramirim (FAMEG) de Santa Catarina. Famelix GNU/Linux é uma distribuição criada com a finalidade de oferecer um ambiente similar ao Windows XP e Vista, de tal maneira que facilite a migração de usuários do sistema operacional proprietário a um sistema livre, e que se possa aproveitar os conhecimentos já adquiridos pelos usuários. As versões até a 2.0 utilizam elementos presentes em outras distribuições como Debian, Knoppix e Kurumin. Segundo as pesquisas feitas a versão 2.1, utiliza em seu todo apenas a base do Sistema Operacional Debian GNU/Linux, e é suportado por uma empresa que assumiu o desenvolvimento e mudo o nome para BRLix. O BRLix é mantido pela Epidemus ltda, em Jaraguá do Sul - Santa Catarina.   C reio que as telas abaixo da uma ideia de como o sistema é, imagens essas retiradas do go...