Kubernetes

Kubernetes (also known as K8s) is an open source system for automating deployment, scaling, and management of containerized applications. Amplify the power of Kubernetes’s scaled container applications with env0’s unique benefits such as Pull Request Plans and Drift Detection.

Kubernetes uses YAML or JSON files to declare the resources it manages.

Environment Deployment

  1. Create a Kubernetes Template
  2. Follow our guide to Connect Your Kubernetes Cluster
  3. Create an environment. env0 will label the resources for each environment separately, so no collisions will occur when using the same template several times.

📘

Cluster Authentication

Cluster authentication varies from one provider to another. Please refer to the Connect Your Kubernetes Cluster guide to learn more.

Execution Steps

In addition to the common steps such as Clone, Loading Variables, etc., a Kubernetes environment in env0 has the following features:

  1. K8s Label Resources - in order to manage resources per environment env0 uses Kustomize for labeling relevant resources so the user won't need to change files.
    kustomize create --autodetect
    kustomize edit remove resource metadatLabelTransformer.yaml
    kustomize edit add transformer metadatLabelTransformer.yaml

  2. K8s Diff -
    kubectl apply -k . --prune --dry-run=server -l env0-environment-id=<environmentId>
    kubectl diff -k . -l env0-environment-id=<environmentId>

  3. K8s Apply - kubectl apply -k . --prune -l env0-environment-id=<environmentId>

  4. K8s Delete - kubectl delete "$(kubectl api-resources --verbs=delete -o name | tr "\n" "," | sed -e 's/,$//')" --ignore-not-found -l env0-environment-id=<environmentId>

📘

Labels description

The following labels are added to each resource created by env0:

  • env0-environment-id=<environmentId>. All resources created for a certain environment are labeled with the environment's ID.
  • app.kubernetes.io/managed-by: env0. Regardless of the environment, every resource is labeled with the recommended label managed-by

🚧

Supported versions

The kubectl version is 1.23, and the kustomize version is 4.5.4.
It is recommended for the remote cluster not to be more than one minor version ahead or behind the client's.
Kubernetes's documentation goes back to version 1.20, therefore older versions won't be supported.