kubeshop / botkube

An app that helps you monitor your Kubernetes cluster, debug critical deployments & gives recommendations for standard practices
https://botkube.io
MIT License
2.11k stars 289 forks source link

Add support for KUBECONTEXT environment variable and --kubecontext option into botkube CLI #1456

Closed mickael-ange closed 3 months ago

mickael-ange commented 3 months ago

Overview

I'd like to be able to set the KUBECONTEXT when running botkube CLI in order to connect to a specific k8s cluster configured in my ~/.kube/config

Please add support for KUBECONTEXT environment variable and --kubecontext option into botkube CLI.

Related Slack discussion: https://botkube.slack.com/archives/C01CR1KS55K/p1718264010257599

Acceptance Criteria

Ideally we should be able to optionally set the KUBECONTEXT using a CLI option or an environment variable as follows:

export CLUSTER_NAME={cluster_name}
export ALLOW_KUBECTL={allow_kubectl}
export SLACK_CHANNEL_NAME={channel_name}

botkube install --version v1.12.0 \
--kubecontext {my_k8s_context} \ # to authenticate to a specific k8s cluster
--set communications.default-group.socketSlack.enabled=true \
--set communications.default-group.socketSlack.channels.default.name=${SLACK_CHANNEL_NAME} \
--set communications.default-group.socketSlack.appToken=${SLACK_API_APP_TOKEN} \
--set communications.default-group.socketSlack.botToken=${SLACK_API_BOT_TOKEN} \
--set settings.clusterName=${CLUSTER_NAME} \
--set 'executors.k8s-default-tools.botkube/kubectl.enabled'=${ALLOW_KUBECTL}
export CLUSTER_NAME={cluster_name}
export ALLOW_KUBECTL={allow_kubectl}
export SLACK_CHANNEL_NAME={channel_name}
export KUBECONTEXT={my_k8s_context} # to authenticate to a specific k8s cluster

botkube install --version v1.12.0 \
--set communications.default-group.socketSlack.enabled=true \
--set communications.default-group.socketSlack.channels.default.name=${SLACK_CHANNEL_NAME} \
--set communications.default-group.socketSlack.appToken=${SLACK_API_APP_TOKEN} \
--set communications.default-group.socketSlack.botToken=${SLACK_API_BOT_TOKEN} \
--set settings.clusterName=${CLUSTER_NAME} \
--set 'executors.k8s-default-tools.botkube/kubectl.enabled'=${ALLOW_KUBECTL}

Reason

It is very convenient to switch context in the default ~/.kube/config as we don't have to maintain several kubeconfig files.

We can switch context with kubectl as follows.

kubectl config use-context {my_k8s_context}

We can switch context with helm as follows.

helm --kube-context {my_k8s_context} ..

We can switch context with ansible as follows.

    kubernetes.core.k8s:
      state: "{{ k8s_state }}"
      apply: true
      context: "{{ k8s_context }}"  # switch context
      append_hash: true
      definition:
        apiVersion: v1
        kind: Secret
        type: Opaque
        metadata:
          labels: ..

Best regards Mickael