Skip to content

GitHub Action to manage a K8s cluster using kubectl

License

Notifications You must be signed in to change notification settings

tale/kubectl-action

Use this GitHub action with your project
Add this Action to an existing workflow or create a new one
View on Marketplace

Repository files navigation

kubectl-action

GitHub Action to manage a K8s (Kubernetes) cluster using kubectl.

Usage

To use this action, add the following step to your GitHub Action workflow:

- uses: tale/kubectl-action@v1
  with:
    base64-kube-config: ${{ secrets.KUBE_CONFIG }}

Keep in mind that the action expects a base64 encoded string of your Kubernetes configuration. The simplest way to do that is to run cat $HOME/.kube/config | base64 and save that output as an action secret. It's additionally possible to generate a config file using the aws CLI for EKS or any other tools with other cloud providers.

It's also possible to specify the version of the kubectl CLI to use. The current default release used by this action is the latest version.

- uses: tale/kubectl-action@v1
  with:
    base64-kube-config: ${{ secrets.KUBE_CONFIG }}
    kubectl-version: v1.22.0

Once you've completed this setup, you have direct access to the kubectl binary and command in the rest of your actions. Here's a full example to give you some inspiration:

name: Kubectl Action

on:
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: tale/kubectl-action@v1
      with:
        base64-kube-config: ${{ secrets.KUBE_CONFIG }}
    - run: kubectl get pods

Here's an example using AWS EKS:

name: Kubectl Action

on:
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - name: Configure AWS Credentials
      uses: aws-actions/configure-aws-credentials@v4
      with:
        role-to-assume: arn:aws:iam::123456789100:role/my-github-actions-role
        aws-region: us-east-2
    - name: Generate kubeconfig
      run: |
        {
            echo 'EKS_CREDS<<EOF'
            aws eks update-kubeconfig --region us-east-2 --name my-cluster --dry-run | base64
            echo EOF
        } >> $GITHUB_ENV
    - uses: tale/kubectl-action@v1
      with:
        base64-kube-config: ${{ env.EKS_CREDS }}
    - run: kubectl get pods