Kubernetes

This is a hodge-podge of links and essays on using Kubernetes.

Running Commands Across Multiple k8s Clusters

This was a 5-minute session given to a cohort of Kubernetes admins at a Meetup event.  It explains how I ran a command across multiple clusters.

Setup Krew (Optional)

This is optional. Krew is a utility to install kubectl and OpenShift extensions. I run my kubectl and oc sessions in a container as this makes managing multiple versions of the client easier and also allows having multiple, discrete login sessions. Go to (https://krew.sigs.k8s.io/docs/user-guide/setup/install/) for a bash script that will install the krew binary. Don't forget to add the krew binary location to your path. Kubectl/oc can automatically run these extensions in the current context if these are named oc-<extension-name> or kubectl-<extension-name> and they are in the path. 

For example, naming a file oc-gimli will allow it to be called with "oc gimli".

Install mc

Second, install the mc utility. Go to (https://jonnylangefeld.com/blog/introducing-kubectl-mc) for instructions.

Prime The Configuration File

Next, create a configuration file that includes all (or a subset) of the clusters you would like to manage. This file, when in use, contains tokens to access the cluster so ensure that it is in a secure location. By default this is in ~/.kube/config but this can be overridden with the KUBECONFIG environnment vairable or the --kubeconfig parameter when running kubectl/oc.  I create separate configurations for multiple clusters and contexts.  This file is created if it doesn't exist once you login to the cluster. 

apiVersion: v1

clusters:

- cluster:

    insecure-skip-tls-verify: true

    server: https://api.kind-cluster-01.sn01.digitalhermit.com:6443

  name: api-kind-cluster-01-sn01-digitalhermit-com:6443

contexts:

- context:

    cluster: api-kind-cluster-01-sn01-digitalhermit-com:6443

    namespace: default

    user: adm-kwan/api-kind-cluster-01-sn01-digitalhermit-com:6443

  name: default/api-kind-cluster-01-sn01-digitalhermit-com:6443/adm-kwan

current-context: default/api-kind-cluster-01-sn01-digitalhermit-com:6443/adm-kwan

kind: Config

preferences: {}

users:

- name: adm-kwan/api-kind-cluster-01-sn01-digitalhermit-com:6443

  user:

    token: sha256~<xxx-SECRET-xxx>

Here is an example login:

export KUBECONFIG=~/.kube/test-clusters.conf

oc login --username=adm-kwan https://api.kind-cluster-01.sn01.digitahermit.com:6443

Do this for each cluster or use token-based authentication.  This will update the configuration file to include a clusters, contexts and users section in the file. 


Profit

At this point you can use the mc tool and your config file to run commands across  multiple clusters. Here is an example running against my OKD clusters:

[kwan@vm-rhel9-005 k8s-client]$ oc mc get nodes


default/api-kind-cluster-01-sn01-digitalhermit-com:6443/adm-kwan

-------------------------------------------------------------

NAME                              STATUS   ROLES    AGE    VERSION

okd-cluster-01-c4dbm-master-0       Ready    master   131d   v1.25.12+ba5cc25

okd-cluster-01-c4dbm-worker-rjd7p   Ready    worker   18d    v1.25.12+ba5cc25

okd-cluster-01-c4dbm-worker-rsk74   Ready    worker   18d    v1.25.12+ba5cc25


default/api-kind-cluster-01-sn01-digitalhermit-com:6443/adm-kwan

-------------------------------------------------------------

NAME                              STATUS   ROLES    AGE   VERSION

okd-cluster-02-c9fcb-master-0       Ready    master   40d   v1.23.5+012e945

okd-cluster-02-c9fcb-master-1       Ready    master   40d   v1.23.5+012e945

okd-cluster-02-c9fcb-master-2       Ready    master   40d   v1.23.5+012e945

okd-cluster-02-c9fcb-worker-ltvb5   Ready    worker   40d   v1.23.5+012e945

okd-cluster-02-c9fcb-worker-p5qzl   Ready    worker   14d   v1.23.5+012e945

okd-cluster-02-c9fcb-worker-w2qkt   Ready    worker   40d   v1.23.5+012e945


Introduction to Kubernetes

This was Flux presentation with an introduction to Kubernetes.

Example code: Github.com - Digital Hermit website 

Clone the above with: 

git clone https://github.com/kwanlowe/digitalhermit_website.git

Change to the digitalhermit_website/linux/kubernetes directory for the examples.



Kubernetes