Kubernetes Object Management

In deze post worden de volgende onderdelen behandeld: hoe kubectl gebruikt kan worden om Kubernetes objecten op te halen, aan te maken, aan te passen, te verwijderen en commando’s binnen containers uit te voeren; het beheer van toegangsrechten via RBAC, waarbij zowel roles als cluster roles en de bijbehorende bindings aan bod komen; het aanmaken en inzetten van service accounts voor authenticatie bij de Kubernetes API; en het monitoren van resource usage met behulp van de Kubernetes Metrics Server.

Commando’s

Kubectl is een CLI tool die gebruik maakt van de K8S API om te communiceren met een Kubernetes cluster.

GET

Kubectl get <object type> <object name> -o <output> --sort-by <JSONPath> --selector <selector> 
  • -O kan gebruikt worden om de output format te bepalen, dit kan bijvoorbeeld JSON of YAML zijn.
  • –sort-by is in staat om op basis van een JSONPath de get command te sorteren op bijv grootte.
  • –Selector kan gebruikt worden om te filteren op een specifiek label

CREATE

Kubectl create kan worden gebruikt om objecten zoals een deployment of een pod aan te maken. Dit wordt gedaan op basis van een YAML file, die wordt aangegeven met de -f flag. Wanneer kubctl create gebruikt wordt op een al bestaand object, komt er een error uit.

kubectl create -f <file name>

APPLY

kubectl apply wordt gebruikt om een al bestaand object aan te passen, ook is deze in staat om net zoals create een object aan te maken.

kubectl apply -f <file name> 

DELETE

kubectl delete wordt gebruikt om objecten te verwijderen uit een cluster.

kubectl delete <object type> <object name> 

EXEC

kubectl EXEC kan gebruikt worden om commando’s uit te voeren in een container, en is dus erg handig voor trouble shooting.

kubectl exec <pod name> -c container name> -- <command>

RBAC

Role Based Access Control (RBAC) kan gebruikt worden om de toegang van gebruikers in te stellen binnen een cluster. Hierbij wordt onderscheid gemaakt tussen Roles en ClusterRoles.

Roles

Een Role definieerd de permissies van een gebruiker binnen een namespace

ClusterRole

Een ClusterRole beheert zoals de naam al zegt, de permissies van een gebruiker binnen het cluster.

Ook kan er gebruik gemaakt worden van RoleBinding en ClusterRoleBinding. Deze worden gebruikt om een user aan de bijbehorende Role toe te voegen. Zowel Roles, ClusterRoles, RoleBinding en ClusterRoleBindings worden aangemaakt op basis van een YAML file:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "watch", "list"]
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: secret-reader
rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get", "watch", "list"]
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods
  namespace: default
subjects:
- kind: User
  name: jane
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: read-secrets-global
subjects:
- kind: Group
  name: manager
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: secret-reader
  apiGroup: rbac.authorization.k8s.io

Service Accounts

een serviceaccount is een account dat gebruikt kan worden door containers binnen pods om zich te authenticeren bij de Kubernetes API. een Service Account kan gemaakt worden met de volgende YAML:

apiVersion: v1
kind: ServiceAccount
metadata:
  annotations:
    kubernetes.io/enforce-mountable-secrets: "true"
  name: my-serviceaccount
  namespace: my-namespace

Een service account kan gekoppeld worden met RoleBindings of ClusterRoleBindings.

subject:
- kind: ServiceAccount
  name: my-serviceaccount
  namespace: default

Resource Usage

Om metrics betreffende resources van pods en containers te bekijken, zal er een Metrics Server gebruikt moeten worden, bijvoorbeeld de Kubernetes Metrics Server.

Wanneer een Kubernetes Cluster beschikt over de Kubernetes Metrics Server kan kubectl top gebruikt worden om data betreffende resource gebruik bekeken worden.

kubectl top pod --sort-by <JSONPATH> --selector <selector>