Codificar:
$ echo -n "Palavra_a_codificar" | base64
UGFsYXZyYV9hX2NvZGlmaWNhcg==
Descodificar:
$echo -n "UGFsYXZyYV9hX2NvZGlmaWNhcg==" | base64 --decode
Palavra_a_codificar
Codificar:
$ echo -n "Palavra_a_codificar" | base64
UGFsYXZyYV9hX2NvZGlmaWNhcg==
Descodificar:
$echo -n "UGFsYXZyYV9hX2NvZGlmaWNhcg==" | base64 --decode
Palavra_a_codificar
Instalação da ferramenta de monitorização de recursos Metrics Server:
$git clone https://github.com/kodekloudhub/kubernetes-metrics-server.git
$ kubectl create -f kubernetes-metrics-server/
Exemplos:
$ kubectl top node
$ kubectl top pod
Em Kubernetes existem 3 tipos de objetos que é preciso conhecer bem:
Pod:
Deployment:
Service:
Não duvidem que a grande maioria das aplicações que acedemos via internet está assente em Kubernetes.
No seguimento do estudo que tenho vindo a fazer, deixo mais abaixo uma lista dos comandos mais usados e a sua função.
Nota:Esta lista estará em constante atualização.
Comandos relativos à criação do cluster com o Minikube:
$ minikube start#Cria um cluster com 1 nó.
$ minikube start --nodes 2 -p multinode-cluster$ minikube status$ minikube ip$ minikube ssh$ minikube dashboard #Dashboard web que mostra alguns dados.$ minikube logs$ minikube delete #Remove o cluster.$ minikube delete --purge #Remove o cluster e todos os ficheiros associados.$ minikube tunnel - Cria uma rota de rede para o IP do cluster como se fosse um gateway. Para testar por exemplo um serviço a correr em LB.
https://minikube.sigs.k8s.io/docs/
Comandos relativos à criação do cluster com o Kind:
$ kind create cluster$ kind create cluster --name NomeDoCluster$ kind get clusters #Visualisar os cluster.$ kind delete clusters $(kind get clusters) #Elimina todos os cluster.$ kind create cluster --name kind-3Nos --config 3Nos.yaml #Cria um cluster baseado no ficheiro yaml.
kubectl:
### Get informação
$ kubectl get pods
$kubectl get namespaces #Ver os vários NS existentes.$kubectl get namespaces$kubectl get pod -n Development #Ver os pods do NS Development.$ kubectl get pods -A #Ver todos$ kubectl get pods -A -o wide #Devolve mais informação como o IP, etc.$ kubectl get pods NOME_DO_POD -o yaml/json # ver dados do pod em yaml/json.
$ kubectl cluster-info
$ kubectl get nodes
$ kubectl get pod meuPod -o jsonpath='{.spec.containers[*].name}' #Devolve o nome dos containers que estão no Pod meuPod.
$ kubectl describe pod meuPod #Toda a informação sobre o Pod, numero de containers, estado, etc.
$ kubectl replace --force -f meuPod.yaml #Elimina e cria um novo pod.
### Logs
$ kubectl logs meuPod
$ kubectl logs meuPod -c meuContainer
### Criar um pod básico
$kubectl run meuNginx --image nginx #Cria um pod com um container a partir da imagem nginx.$kubectl delete pod meuNginx
### Criar pods a partir de um manifesto yaml$ kubectl apply -f podTemplate.yaml #Cria um pod a partir do manifesto yaml.$ kubectl delete -f podTemplate.yaml#Elimina o pod baseado no seu manifesto$ kubectl get pod meuPod -o yaml > podTemplate.yaml$ kubectl run meuNginx --image nginx --dry-run=client -o yaml > podTemplate.yaml#Cria um modelo yaml que servirá para criar um pod.$ kubectl run meuPod --image=redis --dry-run=client -o yaml #Outro exemplo$ kubectl run meuNginx --image nginx --port 80 --dry-run=client -o yaml > podTemplate.yaml #Cria um modelo yaml especificando o porto que fica à escuta no container.
$ kubectl expose pod meunginx #Este comando cria um Service, que é utilizado para expor o pod para ser acessivel externamente.
$ kubectl get services #Ver os serviços ativos com respectivos IP e portos.
### Mais Get:
$ kubectl get all $ kubectl get pod,service $ kubectl get pod,svc$ kubectl run hello-minikube
### Eliminar o que se criou:
$ kubectl delete -f podTemplate.yaml $ kubectl delete service meuNginx
$ kubectl get pods -o jsonpath="{..image}" #Lista todas as imagens usadas nos containers no Default NS
$ kubectl delete --all pods$ kubectl cluster-info dump
### Labels e Selectors
$ kubectl get all --show-labels
$ kubectl get pod --selector env=prod
### Mais comandos (ainda em organização)
$ kubectl delete pod pod-info-deployment-869667679b-6zbcd -n development
$ kubectl exec -it busybox-55fdb79844-chq95 -- /bin/sh #Entrar no Contentor busybox
$ kubectl logs pod-info-deployment-869667679b-sz786 -n development
$ kubectl get svc - devolve o IP externo do cluster, por exemplo.
$ kubectl get deployment nginx-deplyment -o yaml
$ kubectl api-resources
$ kubectl -n kube-system get pods #Pods de sistema.
$ kubectl logs NOME_DO_POD
$ kubectl logs -f NOME_DO_POD
https://kubernetes.io/docs/reference/kubectl/
Replicaset, Scaling
$ kubectl describe rs replica-set
$ kubectl create -f podTemplate.yml #Cria um replica set.
$ kubectl get replicaset
$ kubectl delete replicaset minhaApp-replicaset.
$ kubectl replace -f podTemplate.yml #Atualiza por exemplo o ReplicaSet no caso de pretendermos alterar o número de replicas.
$ kubectl scale --replicas=6 -f podTemplate.yaml #O mesmo que o anterior, mas não é preciso editar antes o podTemplate.yml.
$ kubectl scale replicaset meuApp-replicaset --replicas=6 #O mesmo que os anteriores.
$ kubectl explain replicaset #Mostra a documentação do resource replicaset.
$ kubectl edit rs meuApp-replicaset
Deployments
$ kubectl create deployment --help
$ kubectl create deployment nomeDeployment --image=nginx --replicas=3
$ kubectl get deploy
https://kubernetes.io/docs/home/
https://kubernetes.io/docs/reference/
https://www.redhat.com/en/topics/containers/what-is-kubernetes
Identificar o novo disco adicionado:
# fdisk -lCriar um volume físico no novo disco:
# pvcreate /dev/sde
Physical volume "/dev/sde" successfully created.
Verificar que o volume físico foi bem criado:
# lvmdiskscan
/dev/sda1 [ 512,00 MiB]
/dev/sdb [ 2,00 TiB] LVM physical volume
/dev/sdc [ 175,00 GiB] LVM physical volume
/dev/sdd1 [ <1024,00 GiB] LVM physical volume
/dev/sde [ 600,00 GiB] LVM physical volume
3 LVM physical volume whole disks
1 LVM physical volumeVerificar o volume group onde é para adicionar o novo volume:
# vgs
VG #PV #LV #SN Attr VSize VFree
vg0 3 1 0 wz--n- <3,00t 0Adicionar o novo volume ao Volume Group já existente que contém o volume lógico no qual é para adicionar mais espaço:
# vgextend vg0 /dev/sde
Volume group "vg0" successfully extended
# vgs
VG #PV #LV #SN Attr VSize VFree
vg0 3 1 0 wz--n- <3,59t 599,98g
Com o espaço atribuído ao volume group, agora já se pode estender o volume lógico:
# lvextend -l+100%FREE /dev/vg0/lv0
Size of logical volume vg0/lv0 changed from <3,00 TiB (196606 extents) to <3,59 TiB (235005 extents).
Logical volume vg0/lv0 successfully resized.Por fim aumentamos a partição com o espaço atribuído ao volume lógico:
# resize2fs -p /dev/vg0/lv0
resize2fs 1.45.5 (07-Jan-2020)
Sistema de ficheiros em /dev/vg0/lv0 está montado em /dados; requerido redimensionamento em linha
old_desc_blocks = 192, new_desc_blocks = 230
O sistema de ficheiros em /dev/vg0/lv0 tem agora 962580480 (4k) blocos.Fonte:
https://www.tutorialspoint.com/how-to-increase-the-size-of-a-linux-lvm-by-adding-a-new-disk
Em algumas VM centos tinha este erro "hv_kvp_daemon: sh: hv_get_dhcp_info: command not found" em /var/log/messages.
No meu caso resolvi instalando o seguinte pacote:
yum install hypervkvpd-0Obtive este erro algumas vezes ao forçar a subscrição RedHat. Resolvi limpando todos os detalhes e réstias da subscrição:
sudo subscription-manager cleanDepois já podem executar normalmente o comando de subscrição. Ver aqui.
Para tornar uma pasta imutável , ou seja, uma pasta em que apenas o utilizador root pode fazer alterações, usa-se o comando chattr:
chattr -R +i /pasta_imutavel
Para deixar de ser imutável:
chattr -R -i /pasta_imutavelIsto é muito útil para proteger dados, por exemplo, do famoso Ransom!
fonte: https://www.linuxforce.com.br/comandos-linux/comandos-linux-comando-chattr/
Com o abandono do Centos pela Redhat, e por sua vez com a disponibilização de 16 subscrições (licenças) Redhat gratuitas (mas sem suporte) comecei a usar esta distribuição Linux na instituição onde trabalho.
Como crio máquinas virtuais (VM) através de modelos já previamente instalados e configurados, tinha o problema de não conseguir fazer yum update, por não ter a subscrição ativa nesta nova instalação.
Assim, basta-me fazer o seguinte:
subscription-manager register --username "eu@qqcoisa.pt" --auto-attach --forceSe por acaso instalaram o Redhat e não fizeram a subscrição durante a instalação podem também usar este comando para tal, mas à partida não precisam do parâmetro --force.
Ver as subscrições atuais:
https://access.redhat.com/management
Fonte:
chattr -i /usr/bin/ssh
chattr -i /usr/sbin/sshd
chattr -a /usr/sbin/sshd
chattr -a /usr/bin/ssh
iptables -F
iptables --list
service iptables save
net.ipv6.conf.all.disable_ipv6 = 1net.ipv6.conf.default.disable_ipv6 = 1