Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

lordmathis/dev-cluster

Repository files navigation

Dev-Cluster

Cluster Health Monitor

Provisioning, configuration and manifests for my Kubernetes dev cluster on Hetzner Cloud, set up for GitOps with Flux CD.

Prerequisites

  • OpenTofu
  • SOPS
  • Age
  • A Hetzner Cloud account and API token
  • Cloudflare DNS API token
  • A GitHub account and personal access token (for Flux)
  • S3 compatible storage credentials

Deployment

  1. Generate an Age key:

    age-keygen -o key.txt
    
  2. Edit .sops.yaml file in project root:

    creation_rules:
     - unencrypted_regex: "^(apiVersion|metadata|kind|type)$"
     age: <your-age-public-key>

    Replace <your-age-public-key> with the public key from your key.txt file.

  3. Create a secrets.yaml file with your sensitive data:

    cd provisioning
    username: <your-username>
    user_hashed_password: <your-hashed-password>
    user_ssh_public_keys: |
     <your-ssh-public-key>
    domain_name: <your-domain-name>
  4. Encrypt the secrets file:

    sops -e secrets.yaml > secrets.enc.yaml
    
  5. Create a terraform.tfvars file for your Hetzner Cloud token and Cloudflare Token:

    hcloud_token = "your-hetzner-cloud-token"
    cloudflare_api_token = "your-cloudflare-token
  6. Create s3_env.yaml file with your S3 compatible storage credentials

    AWS_ENDPOINT_URL_S3 AWS_ACCESS_KEY_ID AWS_REGION AWS_SECRET_ACCESS_KEY

  7. Encrypt the s3_env.yaml file:

    sops -e s3_env.yaml > s3_env.enc.yaml
  8. Run OpenTofu:

    sops exec-env s3_env.enc.yaml 'tofu init'
    sops exec-env s3_env.enc.yaml 'tofu apply'

Post Deployment

  1. Connect to the server

    Replace username with your username and public ip with the output value of tofu apply

    ssh ${username}@${public_ip}
  2. Create sops secret

    Use the key generated in step 1. of the deployment

    kubectl create ns flux-system
    echo 'AGE-SECRET-KEY-...' | kubectl create secret generic sops-age \
    --namespace=flux-system \
    --from-file=age.agekey=/dev/stdin
  3. Create GitHub access token

    https://fluxcd.io/flux/installation/bootstrap/github/

  4. Bootstrap flux

    export GITHUB_TOKEN=your_github_token
    export GITHUB_USERNAME=your_github_username
    export GITHUB_REPO=your_github_repo
    flux bootstrap github \
     --owner=$GITHUB_USERNAME \
     --repository=$GITHUB_REPO \
     --components-extra=image-reflector-controller,image-automation-controller \
     --path=clusters/prod --personal

About

Small kubernetes cluster managed by Flux

Topics

Resources

License

Stars

Watchers

Forks

Contributors 2

AltStyle によって変換されたページ (->オリジナル) /