Skip to content

devopscorner/k8s-context

Folders and files

NameName
Last commit message
Last commit date

Latest commit

214c993 · Feb 23, 2025
Apr 1, 2023
May 21, 2024
Mar 4, 2023
Mar 4, 2023
Oct 22, 2023
Oct 22, 2023
Oct 22, 2023
Oct 22, 2023
Oct 22, 2023
Oct 22, 2023
Mar 4, 2023
Oct 22, 2023
Oct 24, 2023
Feb 23, 2025
Mar 7, 2023
Mar 4, 2023
Mar 4, 2023
Mar 4, 2023
Mar 4, 2023
Mar 4, 2023
Mar 4, 2023
Mar 4, 2023
Mar 4, 2023
Mar 4, 2023
Oct 22, 2023

Repository files navigation

Kubernetes Change Context (k8s-context)

Customize Kubernetes Change Context (KUBECONFIG)

goreport all contributors tags docker pulls download all download latest view clone issues pull requests forks stars license


Available Tags

Alpine

Image name Size
devopscorner/k8s-context:latest docker image size default-aws-cli latest-aws-cli
devopscorner/k8s-context:alpine docker image size
devopscorner/k8s-context:alpine-latest docker image size
devopscorner/k8s-context:1.1.9 docker image size latest-1.1.9
devopscorner/k8s-context:go1.21-alpine3.18 docker image size
devopscorner/k8s-context:go1.21.3-alpine3.18 docker image size

Alpine (Depreciated)

Image name Size
devopscorner/k8s-context:1.1.8 docker image size
devopscorner/k8s-context:1.1.7 docker image size
devopscorner/k8s-context:1.1.6 docker image size
devopscorner/k8s-context:1.1.5 docker image size
devopscorner/k8s-context:1.1.4 docker image size
devopscorner/k8s-context:1.1.3 docker image size
devopscorner/k8s-context:alpine-3.15 docker image size
devopscorner/k8s-context:go1.19-alpine3.15 docker image size
devopscorner/k8s-context:go1.19.3-alpine3.15 docker image size
devopscorner/k8s-context:alpine-3.16 docker image size
devopscorner/k8s-context:go1.19-alpine3.16 docker image size
devopscorner/k8s-context:go1.19.5-alpine3.16 docker image size
devopscorner/k8s-context:alpine-3.17 docker image size
devopscorner/k8s-context:go1.19-alpine3.17 docker image size
devopscorner/k8s-context:go1.19.5-alpine3.17 docker image size

K8S-Context


 _    ___                            _            _
| | _( _ ) ___        ___ ___  _ __ | |_ _____  _| |_
| |/ / _ \/ __|_____ / __/ _ \| '_ \| __/ _ \ \/ / __|
|   < (_) \__ \_____| (_| (_) | | | | ||  __/>  <| |_
|_|\_\___/|___/      \___\___/|_| |_|\__\___/_/\_\\__|


===================================
[[  K8S-CONTEXT (K8C)  ]] - v1.1.9
===================================
Usage:
  k8c [command]

Available Commands:
  completion  Generate the autocompletion script for the specified shell
  get         Get Kubernetes resources (ns, svc, deploy, po)
  help        Help about any command
  list        List all available Kubernetes contexts
  load        Load a kubeconfig file
  merge       Merge multiple kubeconfig files
  show        Describe / show kubernetes resources (po, logs, port, node)
  switch      Switch to different context
  version     Print the version number of k8s-context

Flags:
  -h, --help                help for k8s-context
      --kubeconfig string   Path to kubeconfig file (default "/home/devopscorner/.kube/config")

Use "k8c [command] --help" for more information about a command.

How to Use

  • Clone this repository

    git clone https://github.com/devopscorner/k8s-context.git
    
    -- or --
    
    git clone git@github.com:devopscorner/k8s-context.git
    
  • Run Initialize

    make init
    
    -- or --
    
    cd src
    go mod tidy
    
  • Set Environment

    export GO_APP=k8s-context
    export SOURCES=$(sh find . -name '*.go' | grep -v /vendor/)
    export VERSION=$(sh git describe --tags --always --dirty)
    export GOPKGS=$(sh go list ./ | grep -v /vendor/)
    export GO111MODULE=on
    export LDFLAGS=-X github.com/devopscorner/k8s-context/config.Version=$(VERSION) -w -s
    
    # Linux x86
    export GOARCH=amd64
    export GOOS=linux
    
    # Mac Intel
    export GOOS=darwin
    export GOARCH=amd64
    
    # Mac M1/M2 (Arm)
    export GOOS=darwin
    export GOARCH=arm64
    
  • Build Binary

    # Linux x86
    make build
    
    # Mac Intel
    make build-mac-amd
    
    # Mac M1/M2 (Arm)
    make build-mac-arm
    
    -- or --
    
    cd src
    GO111MODULE=$(GO111MODULE) GOOS=$(GOOS) GOARCH=$(GOARCH) CGO_ENABLED=0 go build -o build/$(GO_APP) $(BUILD_FLAGS) -ldflags "$(LDFLAGS)" ./main.go
    
  • Running Binary

    cd src/build
    ./k8c
    
  • Autocompletion Script

    ./k8c completion bash|fish|powershell|zsh
    
  • Using Contexts

    • Merge Multi Config

      ./k8c merge [new-config] [config-1] [config-2] ... [config-n]
      ---
      eg: (merge into single file $HOME/.kube/config)
      
      ./k8c merge $HOME/.kube/config  $HOME/.kube/config-staging-dev $HOME/.kube/config-staging-uat $HOME/.kube/config-staging-qa
      
    • Discovery All KUBECONFIG Files Inside ~/.kube Folder --- Interactive Mode

      ./k8c load
      ---
      Select a kubeconfig file:  [Use arrows to move, type to filter]
      > /home/devopscorner/.kube/.switch_tmp/config.1072356766.tmp
      /home/devopscorner/.kube/.switch_tmp/config.3841581520.tmp
      
      Available Kubernetes contexts:
      arn:aws:eks:ap-southeast-1:YOUR_AWS_ACCOUNT:cluster/devopscorner-lab
      arn:aws:eks:ap-southeast-1:YOUR_AWS_ACCOUNT:cluster/devopscorner-dev-staging
      arn:aws:eks:ap-southeast-1:YOUR_AWS_ACCOUNT:cluster/devopscorner-uat-staging
      arn:aws:eks:ap-southeast-1:YOUR_AWS_ACCOUNT:cluster/devopscorner-production
      
    • List Context(s)

      KUBECONFIG=$HOME/.kube/config
      kubectl config get-contexts
      
      -- or --
      
      ## Default KUBECONFIG path (`/.kube/config`) ##
      ./k8c list
      ---
      arn:aws:eks:ap-southeast-1:YOUR_AWS_ACCOUNT:cluster/devopscorner-lab
      
      ## Spesific Kubeconfig ##
      ./k8c list -f $HOME/.kube/config-cluster
      ---
      Available Kubernetes contexts:
      arn:aws:eks:ap-southeast-1:YOUR_AWS_ACCOUNT:cluster/devopscorner-dev-staging
      arn:aws:eks:ap-southeast-1:YOUR_AWS_ACCOUNT:cluster/devopscorner-uat-staging
      
    • Switch (select) Context(s) --- Interactive Mode

      ## Default KUBECONFIG path (`/.kube/config`) ##
      ./k8c switch
      ---
      ? Select a context  [Use arrows to move, type to filter]
      > arn:aws:eks:ap-southeast-1:YOUR_AWS_ACCOUNT:cluster/devopscorner-lab
      
      > Changed context to: arn:aws:eks:ap-southeast-1:YOUR_AWS_ACCOUNT:cluster/devopscorner-dev-staging
      
      ## Spesific Kubeconfig ##
      ./k8c switch - $HOME/.kube/config-cluster
      ---
      ? Select a context  [Use arrows to move, type to filter]
      > arn:aws:eks:ap-southeast-1:YOUR_AWS_ACCOUNT:cluster/devopscorner-dev-staging
      arn:aws:eks:ap-southeast-1:YOUR_AWS_ACCOUNT:cluster/devopscorfner-uat-staging
      
      > Changed context to: arn:aws:eks:ap-southeast-1:YOUR_AWS_ACCOUNT:cluster/devopscorner-dev-staging
      
    • Run Spesific KUBECONFIG

      KUBECONFIG=$HOME/.kube/config-new-cluster
      kubectl config use [cluster_name]
      
      -- or --
      
      ./k8c switch -f $HOME/.kube/config-new-cluster
      
  • Get Resources Kubernetes

    • Namespaces

      ./k8c get namespace
      
      -- or --
      
      ./k8c get ns
      
    • Services

      ./k8c get services
      
      -- or --
      
      ./k8c get svc
      
    • Deployments

      ./k8c get deployments
      
      -- or --
      
      ./k8c get deploy
      
    • Pods

      ./k8c get pods
      
      -- or --
      
      ./k8c get po
      
    • Endpoints

      ./k8c get endpoints
      
      -- or --
      
      ./k8c get ep
      
  • Get Resources By Filtering Namespace (Comma-Separated)

    • Namespaces

      ./k8c get namespace -n ns1,ns2,ns3 --kubeconfig=$HOME/.kube/config
      ./k8c get namespace --namespace ns1,ns2,ns3 --kubeconfig=$HOME/.kube/config
      
      -- or --
      
      ./k8c get ns -n ns1,ns2,ns3 --kubeconfig=$HOME/.kube/config
      ./k8c get ns --namespace ns1,ns2,ns3 --kubeconfig=$HOME/.kube/config
      
    • Services

      ./k8c get services -n ns1,ns2,ns3 --kubeconfig=$HOME/.kube/config
      ./k8c get services --namespace ns1,ns2,ns3 --kubeconfig=$HOME/.kube/config
      
      -- or --
      
      ./k8c get svc -n ns1,ns2,ns3 --kubeconfig=$HOME/.kube/config
      ./k8c get svc --namespace ns1,ns2,ns3 --kubeconfig=$HOME/.kube/config
      
    • Deployments

      ./k8c get deployments -n ns1,ns2,ns3 --kubeconfig=$HOME/.kube/config
      ./k8c get deployments --namespace ns1,ns2,ns3 --kubeconfig=$HOME/.kube/config
      
      -- or --
      
      ./k8c get deploy -n ns1,ns2,ns3 --kubeconfig=$HOME/.kube/config
      ./k8c get deploy --namespace ns1,ns2,ns3 --kubeconfig=$HOME/.kube/config
      
    • Pods

      ./k8c get pods -n ns1,ns2,ns3 --kubeconfig=$HOME/.kube/config
      ./k8c get pods --namespace ns1,ns2,ns3 --kubeconfig=$HOME/.kube/config
      
      -- or --
      
      ./k8c get po -n ns1,ns2,ns3 --kubeconfig=$HOME/.kube/config
      ./k8c get po --namespace ns1,ns2,ns3 --kubeconfig=$HOME/.kube/config
      
    • Endpoints

      ./k8c get endpoints -n ns1,ns2,ns3 --kubeconfig=$HOME/.kube/config
      
      -- or --
      
      ./k8c get ep -n ns1,ns2,ns3 --kubeconfig=$HOME/.kube/config
      
  • Show (Describe) Resources from Nodes, Pods, Logs & Port Forward

    • Pods

      ./k8c show po [pods_name] -n [namespace]
      ./k8c show po [pods_name] --namespace [namespace]
      
    • Logs

      ./k8c show logs [pods_name] -n [namespace]
      ./k8c show logs [pods_name] --namespace [namespace]
      
    • Port Forward

      ./k8c show port [pods_name] -n [namespace]
      ./k8c show port [pods_name] --namespace [namespace]
      
    • Node

      ./k8c show node [node_name]
      
  • Integrated with CI/CD Dockerfile Pipeline

    # Dockerfile
    COPY --from=devopscorner/k8s-context:latest /usr/local/bin/k8c /usr/local/bin/k8c
    

Tested Environment

Versioning

  • Docker version

    docker version
    
    Client:
      Cloud integration: v1.0.22
      Version:           20.10.17-rd
      API version:       1.41
      Go version:        go1.17.11
      Git commit:        c2e4e01
      Built:             Fri Jul 22 18:31:17 2022
      OS/Arch:           darwin/amd64
      Context:           default
      Experimental:      true
    
  • Docker-Compose version

    docker-compose -v
    ---
    Docker Compose version v2.11.1
    
  • Golang Version Manager (GVM)

    gvm version
    ---
    Go Version Manager v1.0.22 installed at /Users/devopscorner/.gvm
    
  • Golang Version

    go version
    ---
    go version go1.21.3 darwin/arm64
    

Security Check

Make sure that you didn't push sensitive information in this repository

  • AWS Credentials (AWS_ACCESS_KEY, AWS_SECRET_KEY)
  • AWS Account ID
  • AWS Resources ARN
  • Username & Password
  • Private (id_rsa) & Public Key (id_rsa.pub)
  • DNS Zone ID
  • APP & API Key

Copyright

  • Author: Dwi Fahni Denni (@zeroc0d3)
  • Vendor: DevOps Corner Indonesia (devopscorner.id)
  • License: Apache v2