AWS Solutions Architect Associate (SAA) 2018 – III

Topics covered: EC2, EBS

EC2

Classes of EC2

  • OnDemand: Pay a fixed rate per hour (or per second). Linux by the second, Windows per hour.
  • Reserved: 1 year or 3-year terms. Bigger discount.
  • Spot: cheaper than OnDemand, the price you want for instance capacity.
  • Dedicated Hosts: Physical EC2.

Continue reading

AWS RDS habilitar encriptación “at rest” en RDS existente

Tenemos una RDS en producción que por temas de cualquier índole, queremos convertir en RDS con encriptación “at rest”, es decir, los datos a nivel almacenamiento están encriptados. En un hipotético caso de robo de datos (algo practicamente imposible) los datos no podrían descifrarse sin la pertinente llave KMS.

Continue reading

Systemd o Upstart o System V

Rápido recordatorio de  encontrar fácilmente (no es 100% seguro, dependerá de las distros) si estamos usando systemd/upstart/systemV

 

if [[ `/sbin/init --version` =~ upstart ]]; then echo using upstart;
elif [[ `systemctl` =~ -\.mount ]]; then echo using systemd;
elif [[ -f /etc/init.d/cron && ! -h /etc/init.d/cron ]]; then echo using sysv-init;
else echo cannot tell; fi
strings /sbin/init | grep -q "/lib/systemd" && echo SYSTEMD
strings /sbin/init | grep -q "sysvinit" && echo SYSVINIT
strings /sbin/init | grep -q "upstart" && echo UPSTART

Máquina de pruebas es una Amazon Linux AMI release 2017.09

El primer test


# bash check_bash.sh
using upstart

El segundo test


UPSTART

El caso en  concreto para este Linux AWS AMI es que funciona con una mezcla de systemV y upstart y me despistó un poco. Un ejemplo de upstart script sería:


description "node-exporter from prometheus"
start on filesystem or runlevel [2345]
stop on runlevel [!2345]

respawn
umask 022
chdir /
# console log - uncomment log stdout/stderr to /var/log/upstart/
# console none # Ubuntu 12.04++ requires explicitly saying we don't want to log anything

exec /usr/local/bin/node_exporter

Listar servicios


# initctl list

Arrancar upstart service


# sudo initctl start node-export
node-export start/running, process 21704

Comprobar upstart service


# sudo initctl status node-export
node-export start/running, process 21704

El mismo caso pero en systemd


[Unit]
Description=Node Exporter

[Service]
User=prometheus
ExecStart=/usr/local/bin/node_exporter

[Install]
WantedBy=default.target

 


# systemctl daemon-reload
# systemctl enable node_exporter.service
# systemctl start node_exporter.service

Links

 

Terraform – deposed

Peleando con Terraform. Llamo a un módulo que crea un aws lc y un aws asg pero contiene un error, que hace actualizar el lc todo el rato. Me vuelvo loco y borro los recursos por la fuerza y Terraform se buggea. Obtengo este error:

- module.celery_asg.aws_launch_configuration.lc-app (deposed)

In essence terraform complains, if I understand it correctly, about not being able to remove non-existent resource that is a dependency for another non-existent resource.

Lo que pude hacer para resolverlo fue, primero lógicamente corregir los errores en las variables que le pasaba al módulo (condicionales en otro módulo) y luego

$ terraform plan
[...]
Plan: 20 to add, 0 to change, 1 to destroy.

Me detecta cosas a destruir que no existen

$ terraform state rm module.eks.aws_launch_configuration.eks
1 items removed.
Item removal successful.

$ terraform plan
[...]
Plan: 21 to add, 0 to change, 0 to destroy

Links
https://github.com/hashicorp/terraform/issues/18643

K8s / Kubernetes – notas de consulta rápida

Breves apuntes de consulta rápida, se irá actualizando poco a poco.

 

DaemonSet

DaemonSet ensures that all (or some) Nodes run a copy of a Pod. As nodes are added to the cluster, Pods are added to them. As nodes are removed from the cluster, those Pods are garbage collected. Deleting a DaemonSet will clean up the Pods it created.

Un caso práctico sería, desplegamos daemont Set que genera pod con un container de fluentd que monta los volumnes de /var/lib/docker/containers, fluentd lo envía a un Splunk. Con Daemon Set tendremos un pod en cada nodo.

Servicios

  • ClusterIP
    • Expone:
      • spec.clusterIp:spec.ports[*].port
    • Solo puedes acceder este servicio desde dentro del cluster. Accesible desde su spec.clusterIp port. Si hay configurado el spec.ports[*].targetPort enrutará desde el puerto al targetPort. La IP que recibes cuando llamas via kubectl get services es la IP asignada a ese servicio dentro del cluster, internamente.
  • NodePort
    • Expone:
      • <NodeIP>:spec.ports[*].nodePort
      • spec.clusterIP:spec.ports[*].port
    • Si se accede a este servicio con nodePort, desde la IP externa del nodo, enrutará la petición a spec.clusterIP:spec.ports[*].port, lo cual resultará en enrutarla hacia spec.ports[*].targetPort si está configurado. Este servicio también puede ser accedido en la misma forma que ClusterIP.
    • Tu NodeIPS son las direcciones IP externas de los nodos. Tú no puedes acceder al servicio desde ClusterIP:spec.ports[*].nodePort
  • LoadBalancer
    • Expone
      •  <spec.loadBalancerIp:spec.ports[*].port
      • <NodeIP>:spec.ports[*].nodePort
      • spec.clusterIp:spec.ports[*].port
    • Puedes acceder al servicio desde la IP de tu balanceador el cual enrutará tu petición al nodePort, el cual enrutará a su vez al puerto del ClusterIP. Puedes acceder a este servicio como harías en un NodePort o un ClusterIP.

¿Qué pasa cuando generamos recursos via yaml en AWS?

  • Se genera un ALB mediante service tipo node port e ingress
  • Se genera ELB mediante service tipo loadbalancer

Mapear puerto de namespace en local

Ejemplo práctico: un despliegue de blackbox exporter dentro del namespace production. Queremos poder acceder via http a ese pod:puerto localmente para consultar métricas. Mapeamos con port-forward como sigue:

kubectl port-forward blackbox-exporter-prometheus-blackbox-exporter-79c8455888-r57kx 9115:9115 -n production

Logs

pod multicontainer

kubectl logs apo-api-analitica-1560416400-7bf2l --all-containers

 Ordenar por consumo de ram

kubectl top pod --all-namespaces, pipe it to sort:

kubectl top pod --all-namespaces | sort --reverse --key 3 --numeric \
  | head -10
  • kubectl top pod --all-namespace Muestra la información de top de todos los pods en todos los namespaces.
  • sort --reverse --key 3 --numeric Ordena el input acorde con los valores numéricos encontrados en la columna 3 y orden descendiente.
  • head -10 Muestra solo las diez primeras líneas.

Herramientas

Links

Continue reading