• Troubleshoot Kubernetes service not being resolved

    When you create a Kubernetes Service, pods from within the same namespace should be able to resolve it's IP by name. For example, if we create a service named ampa-votacions; any pod from the same namespace should be able to resolve it's IP. But sometimes it can't be resolved:

    $ kubectl exec -it ampa-install-ws7cw -- sh
    / $ nslookup ampa-votacions
    Server:   172.20.0.10
    Address:  172.20.0.10:53
    
    ** server can't find ampa-votacions.us-west-2.compute.internal: NXDOMAIN
    
    ** server can't find ampa-votacions.ampa.svc.cluster.local: NXDOMAIN
    
    ** server can't find ampa-votacions.svc.cluster.local: NXDOMAIN
    
    ** server can't find ampa-votacions.ampa.svc.cluster.local: NXDOMAIN
    
    ** server can't find ampa-votacions.cluster.local: NXDOMAIN
    
    ** server can't find ampa-votacions.svc.cluster.local: NXDOMAIN
    
    ** server can't find ampa-votacions.cluster.local: NXDOMAIN
    
    ** server can't find ampa-votacions.us-west-2.compute.internal: NXDOMAIN
    

    19/04/2021

    Read more...
  • Terraform output values

    To be able to save data generated using terraform to be able to import the terraform state somewhere else using terraform_remote_state or retrieving it using the CLI we need to use the output directive:

    output "alb_dns_name" {
      description = "ALB DNS name"
      value       = aws_alb.jenkins-alb.dns_name
    }
    

    16/04/2021

    Read more...
  • JVM heap options: Xmx and Xms

    The Xmx and Xms settings are most commonly overlooked settings but yet quite critical for the JVM to perform as expected. They control the JVM's heap: the memory area where objects are instantiated.

    15/04/2021

    Read more...
  • kubectl drain: prepare node for maintenance

    You can use kubectl drain to evict pods from a node and mark it as unschedulable to prevent new pods from arriving. It will allow the pod's containers to gracefully terminate and respecting the PodDisruptionBudgets with a few exceptions. Let's test it suing the following nodes:

    $ kubectl get nodes
    NAME                    STATUS   ROLES                  AGE   VERSION
    nauvoo.pet2cattle.com   Ready    control-plane,master   19d   v1.20.4+k3s1
    tycho.pet2cattle.com    Ready    <none>                 26s   v1.20.4+k3s1
    

    14/04/2021

    Read more...
  • How kubernetes hides away the volumeMounts complexity

    If we try compare volumeMounts with the actual mounts that we have on a pod using, for example, df it can be quite confusing due to the usage of the overlay filesystem

    Let's consider the volumeMounts section of a deploy:

    $ kubectl get deploy pet2cattle -o yaml
    (...)
              volumeMounts:
              - mountPath: /opt/pet2cattle/conf
                name: config
              - mountPath: /opt/pet2cattle/data
                name: pet2cattle
                subPath: data
              - mountPath: /opt/pet2cattle/lib
                name: pet2cattle
                subPath: lib
              - mountPath: /tmp
                name: tmp-dir
    (...)
    

    And compare it with the filesystem we see on the pod:

    $ kubectl exec pet2cattle-8475d6697-jbmsm -- df -hP
    Filesystem      Size  Used Avail Use% Mounted on
    overlay         100G  9.7G   91G  10% /
    tmpfs            64M     0   64M   0% /dev
    tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
    /dev/xvda1      100G  9.7G   91G  10% /tmp
    shm              64M     0   64M   0% /dev/shm
    /dev/xvdcu       20G  2.5G   18G  13% /opt/pet2cattle/lib
    tmpfs           3.9G   12K  3.9G   1% /run/secrets/kubernetes.io/serviceaccount
    tmpfs           3.9G     0  3.9G   0% /proc/acpi
    tmpfs           3.9G     0  3.9G   0% /proc/scsi
    tmpfs           3.9G     0  3.9G   0% /sys/firmware
    

    13/04/2021

    Read more...

Older content...