diff --git a/.github/smol_k8s_lab_config_k3s.yaml b/.github/smol_k8s_lab_config_k3s.yaml new file mode 100644 index 000000000..4ab9a37af --- /dev/null +++ b/.github/smol_k8s_lab_config_k3s.yaml @@ -0,0 +1,1108 @@ +--- +smol_k8s_lab: + # Terminal User Interface with clickable buttons. + # Useful for learning smol-k8s-lab or verifying your configuration + tui: + # if set to true, we'll always launch smol-k8s-lab in interactive mode :) + # else you need to pass in --interactive or -i to use the TUI + enabled: false + # show bottom footer help bar + show_footer: true + # accessibility options for users that benefit from TTS and Bell sounds + accessibility: + bell: + # ring the built in terminal bell on focus to new elements on the screen + on_focus: true + # ring the built in terminal bell when something is wrong + on_error: true + text_to_speech: + # use a specific program for text to speech - needs to be a full path + # macOS default: say + speech_program: say + # read aloud the screen title and description + screen_titles: true + # read aloud the element id, value, and tooltip each time you switch focus + on_focus: false + # press f5 to read the element id and selected row of DataTables + on_key_press: true + + # enable text to speech + # k9s is a terminal UI dashboard and interface for interacting with Kubernetes + k9s: + # when set to true, if smol-k8s-lab is in interactive mode, it runs k9s + # immediately after the cluster is up and enabled apps have been installed + enabled: false + # default command to run when k9s launches. Defaults to application.argoproj.io + # so that you can view the status of all of your argo apps immediately. This + # default results in running: k9s --command applications.argoproj.io + command: applications.argoproj.io + + # logging config for the smol-k8s-lab CLI + log: + # path of file to log to if console logging is NOT desired + file: "" + # logging level, Options: debug, info, warn, error + level: info + + # store your password and tokens directly in your local password manager + local_password_manager: + enabled: false + # enable the use of Bitwarden as your password manager. + # To use Bitwarden, you must export the following environment variables: + # BW_PASSWORD, BW_CLIENTID, BW_CLIENTSECRET, BW_SESSION + # If you're missing any of these, smol-k8s-lab will prompt for them + name: bitwarden + # if existing items are found in your password manager, do one of: + # + # ask: (default in tui mode) display a dialog window asking you how to proceed + # edit: edit item, if there's one item found, ask if multiple found + # duplicate: create an additional item with the same name + # no_action: don't do anything, just continue on with the script + duplicate_strategy: ask + +# which distros of Kubernetes to deploy. Options: kind, k3s, k3d +# NOTE: only kind and k3d are available on macOS at this time +k8s_distros: + k3s: + # set to true to enable deploying a Kubernetes cluster using k3s + enabled: true + # if k8s_distro set to k3s/k3d, you can add an array of extra arguments to pass + # to the k3s install script as a k3s.yaml file. If you enable cilium, we + # automatically pass in flannel-backend: none and disable-network-policy: true + k3s_yaml: + # if you enable MetalLB, we automatically add servicelb to the disable list + # enables encryption at rest for Kubernetes secrets + secrets-encryption: true + # disables traefik so we can enable ingress-nginx, remove if you're using traefik + disable: + - "traefik" + node-label: + - "ingress-ready=true" + kubelet-arg: + - "max-pods=150" + # not yet adjustable on k3s at this time + nodes: + control_plane: 1 + workers: 0 + + k3d: + # set to true to enable deploying a Kubernetes cluster using k3d + enabled: false + # if k8s_distro set to k3s/k3d, you can add an array of extra arguments to pass + # to the k3s install script as a k3s.yaml file. if you enable cilium, we + # automatically pass in flannel-backend: none and disable-network-policy: true + k3s_yaml: + # if you enable MetalLB, we automatically add servicelb to the disable list + # enables encryption at rest for Kubernetes secrets + secrets-encryption: true + # disables traefik so we can enable ingress-nginx, remove if you're using traefik + disable: + - "traefik" + kubelet-arg: + - "max-pods=150" + node-label: + - "ingress-ready=true" + # how many dockerized k3s nodes to deploy + nodes: + control_plane: 1 + workers: 0 + + kind: + # set to true to enable deploying a Kubernetes cluster using kind + enabled: false + # change the kubelet config for this node in k3s, feel free to add more values + kubelet_extra_args: + node-labels: "ingress-ready=true" + max-pods: 110 + pods-per-core: 0 + resolv-conf: "/etc/resolv.conf" + networking_args: + ipFamily: "ipv4" + disableDefaultCNI: false + apiServerAddress: "127.0.0.1" + podSubnet: "10.244.0.0/16" + # how many dockerized kind nodes to deploy + nodes: + control_plane: 1 + workers: 0 + +# anything here gets set for all apps if you're using our default repos +apps_global_config: + # setting this changes all the below domains to use the following cluster_issuer + # change to letsencrypt-prod when you're ready to go live with your infra + cluster_issuer: "letsencrypt-staging" + # change to your tz: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List + time_zone: "Europe/Amsterdam" + # always deploy external secrets. *Must be a string of "" (don't use external secrets) or "bitwarden" to use bitwarden for external secrets* + external_secrets: "none" + +# --------------------------------------------------------------------------- +# Argo CD deployed and maintained Applications to run on Kubernetes +# --------------------------------------------------------------------------- +apps: + argo_cd: + # Set to false if you you just want a bare cluster with only the above apps" + enabled: true + description: | + [link=https://argo-cd.readthedocs.io/en/stable/]Argo CD[/link] is a declarative, GitOps continuous delivery tool for Kubernetes. + + smol-k8s-lab installs Argo CD with helm initially to support initial configuration of your admin user and disabling of dex. After your OIDC provider is configured, Argo CD begins managing itself using the below configured Argo CD repo. + + The Appset Secret Plugin is required if you want to use the default [link="https://github.com/small-hack/argocd-apps"]small-hack/argocd-apps[/link] [gold3]argo.repo[/gold3] and default enabled if Argo CD is enabled, so we can create a k8s Secret with your more private info such as hostnames, IP addresses, and emails in a deployment that runs alongside Argo CD to provide Argo CD ApplicationSets This plugin has no ingress and cannot be reached from outside the cluster. + + To disable Appset Secret Plugin, please set directory recursion to false. + + Learn more: [link=https://github.com/small-hack/appset-secret-plugin]https://github.com/small-hack/appset-secret-plugin[/link] + argo: + # secrets keys to make available to Argo CD ApplicationSets + secret_keys: + # FQDN hostname for accessing the Argo CD web interface + hostname: "argocd.test.com" + # which oidc provider to use for Argo CD: defaults to Zitadel + oidc_provider: "zitadel" + # git repo to install the Argo CD app from + repo: "https://github.com/small-hack/argocd-apps" + # path in the argo repo to point to. Trailing slash very important! + # change to argocd/argocd to not use app of apps with secret plugin + path: "argocd/app_of_apps/" + # either the branch or tag to point at in the argo repo above + revision: main + # namespace to install the k8s app in + namespace: "argocd" + # recurse directories in the provided git repo, if true, we also deploy the appset secret plugin + directory_recursion: true + # source repos for Argo CD argo-cd Project (in addition to argo_cd.argo.repo) + project: + source_repos: + - https://argoproj.github.io/argo-helm + - https://small-hack.github.io/appset-secret-plugin + destination: + # automatically includes the app's namespace and argocd's namespace + namespaces: + - prometheus + + # This app is installed with helm or manifests depending on what is recommended + # for your k8s distro. Becomes managed by Argo CD if you enable it below + cert_manager: + # ! NOTE: you currently can't set this to false. It is necessary to deploy + # most of our supported Argo CD apps since they often have TLS enabled either + # for pod connectivity or ingress + enabled: true + description: | + [link=https://cert-manager.io/]cert-manager[/link] let's you use LetsEncrypt to generate TLS certs for all your apps with ingress. + + smol-k8s-lab supports initialization by creating two [link=https://cert-manager.io/docs/concepts/issuer/]ClusterIssuers[/link] for both staging and production using a provided email address as the account ID for acme. + + # Initialize of the app through smol-k8s-lab + init: + # Deploys staging and prod ClusterIssuers and prompts you for + # cert-manager.argo.secret_keys if they were not set. Switch to false if + # you don't want to deploy any ClusterIssuers + enabled: true + argo: + secret_keys: + # Used for letsencrypt-staging, to generate certs + email: "cicdtest@test.com" + # git repo to install the Argo CD app from + repo: "https://github.com/small-hack/argocd-apps" + # path in the argo repo to point to. Trailing slash very important! + path: "cert-manager/" + # either the branch or tag to point at in the argo repo above + revision: main + # namespace to install the k8s app in + namespace: "cert-manager" + # recurse directories in the provided git repo + directory_recursion: false + # source repos for cert-manager CD App Project (in addition to argo.repo) + project: + source_repos: + - https://charts.jetstack.io + destination: + # automatically includes the app's namespace and argocd's namespace + namespaces: + - kube-system + + # This app is installed with helm or manifests depending on what is recommended + # for your k8s distro. Becomes managed by Argo CD if you enable it below + cilium: + enabled: false + description: | + [link=https://cilium.io/]Cilium[/link] is an open source, cloud native solution for providing, securing, and observing network connectivity between workloads, fueled by the revolutionary Kernel technology eBPF. + # Initialize of the app through smol-k8s-lab + init: + enabled: true + argo: + secret_keys: + hostname: "" + # git repo to install the Argo CD app from + repo: "https://github.com/small-hack/argocd-apps" + # path in the argo repo to point to. Trailing slash very important! + path: "demo/cilium/" + # either the branch or tag to point at in the argo repo above + revision: main + # namespace to install the k8s app in + namespace: "cilium" + # recurse directories in the provided git repo + directory_recursion: false + # source repos for Argo CD cilium Project + project: + source_repos: + - "https://helm.cilium.io/" + destination: + # automatically includes the app's namespace and argocd's namespace + namespaces: [] + + cnpg_operator: + description: | + CloudNative PostgeSQL Operator for Kubernetes. This lets you create an + manage many clusters of postgresql, including backups to s3. + # default disabled while a helm chart is being actively developed + enabled: false + argo: + # secret keys to provide for the argocd secret plugin app, none by default + secret_keys: {} + # git repo to install the Argo CD app from + repo: https://github.com/small-hack/argocd-apps + # path in the argo repo to point to. Trailing slash very important! + path: postgres/operators/cloud-native-postgres/ + # either the branch or tag to point at in the argo repo above + revision: main + # namespace to install the k8s app in + namespace: cnpg-system + # recurse directories in the provided git repo + directory_recursion: false + # source repos for Argo CD App Project (in addition to argo.repo) + project: + source_repos: + - https://github.com/small-hack/argocd-apps + - https://cloudnative-pg.github.io/charts + destination: + # automatically includes the app's namespace and argocd's namespace + namespaces: [] + + external_secrets_operator: + enabled: true + description: | + [link=https://external-secrets.io/latest/]External Secrets Operator[/link] is a Kubernetes operator that integrates external secret management systems like HashiCorp Vault, CyberArk Conjur, Bitwarden, Gitlab, and many more. The operator reads information from external APIs and automatically injects the values into a Kubernetes Secret. + + To deploy the Bitwarden provider, please set apps_global_config.external_secrets to "bitwarden". + + The [link="https://github.com/jessebot/bitwarden-eso-provider/"]Bitwarden External Secrets Provider[/link] is used to store k8s secrets in Bitwarden®. This deployment has no ingress and can't be connected to from outside the cluster. There is a networkPolicy that only allows the pod to communicate with the External Secrets Operator in the same namespaces. + + smol-k8s-lab support initialization by creating a Kubernetes secret with your Bitwarden credentials so that the provider can unlock your vault. You will need to setup an [link=https://bitwarden.com/help/personal-api-key/]API key[/link] ahead of time. You can pass these credentials in by setting the following environment variables: + + BITWARDEN_PASSWORD, BITWARDEN_CLIENTSECRET, BITWARDEN_CLIENTID + # Initialization of the app through smol-k8s-lab + init: + enabled: false + argo: + # git repo to install the Argo CD app from + repo: https://github.com/small-hack/argocd-apps + # path in the argo repo to point to. Trailing slash very important! + # change to external-secrets-operator/external-secrets-operator/ to deploy + # ONLY the external-secrets-operator, so this will not use app of apps and + # therefore we will not deploy the Bitwarden ESO provider. Use if you want to use + # a different provider + path: external-secrets-operator/app_of_apps/ + # either the branch or tag to point at in the argo repo above + revision: main + # namespace to install the k8s app in + namespace: external-secrets + # recurse directories in the provided git repo + directory_recursion: false + # secret keys to provide for the Argo CD Appset secret plugin, none by default + secret_keys: {} + # source repos for Argo CD App Project (in addition to app.argo.repo) + project: + source_repos: + - https://charts.external-secrets.io + # you can remove this one if you're not using bitwarden to store your k8s secrets + - https://small-hack.github.io/bitwarden-eso-provider + destination: + # automatically includes the app's namespace and argocd's namespace + namespaces: [] + + infisical: + enabled: false + description: | + ⚠️ [magenta]demo Status[/magenta] + + [link=https://infisical.com/]Infisical[/link] is an open-source, end-to-end encrypted secret management platform that enables teams to easily manage and sync their env vars. + + This app will remain in demo status till there is a way to create an initial user easily. + # Initialization of the app through smol-k8s-lab + init: + enabled: true + argo: + secret_keys: + hostname: "" + # git repo to install the Argo CD app from + repo: "https://github.com/small-hack/argocd-apps" + # path in the argo repo to point to. Trailing slash very important! + path: "demo/infisical/" + # either the branch or tag to point at in the argo repo above + revision: main + # namespace to install the k8s app in + namespace: "infisical" + # recurse directories in the provided git repo + directory_recursion: false + # source repos for Argo CD App Project (in addition to app.argo.repo) + project: + source_repos: + - "registry-1.docker.io" + - "https://dl.cloudsmith.io/public/infisical/helm-charts/helm/charts/" + destination: + # automatically includes the app's namespace and argocd's namespace + namespaces: [] + + # This app is installed with helm or manifests depending on what is recommended + # for your k8s distro. Becomes managed by Argo CD if you enable it below + ingress_nginx: + enabled: true + description: | + Dedefault deploys [link=https://github.com/kubernetes/ingress-nginx]ingress-nginx[/link] and cert-manager as one argocd app of apps and project in the same namespace + Ingress-nginx cannot be disabled unless you provide your own ingress controller app + argo: + # git repo to install the Argo CD app from + repo: "https://github.com/small-hack/argocd-apps" + # path in the argo repo to point to. Trailing slash very important! + # change to "ingress/ingress-nginx/" to not use app of apps + path: "ingress-nginx/" + # either the branch or tag to point at in the argo repo above + revision: main + # namespace to install the k8s app in + namespace: "ingress-nginx" + # recurse directories in the provided git repo + directory_recursion: false + # secret keys to provide for the Argo CD Appset secret plugin, none by default + secret_keys: {} + # source repos for Argo CD App Project (in addition to argo.repo) + project: + source_repos: + - https://charts.jetstack.io + - "https://kubernetes.github.io/ingress-nginx" + - "https://jessebot.github.io/vouch-helm-chart" + - "https://github.com/kubernetes/ingress-nginx" + destination: + # automatically includes the app's namespace and argocd's namespace + namespaces: [] + + k8tz: + enabled: false + description: | + [link=https://github.com/k8tz/k8tz]k8tz[/link] is a Kubernetes admission controller and a CLI tool to inject timezones into Pods and CronJobs. This solves the issue of the default timezone for most images being UTC, yet not being guaranteed from container to container. + + smol-k8s-lab will use your globally defined timezone to set k8tz's timezone. You can view and change the default value of Europe/Amsterdam by clicking the [cornflower_blue]Modify Globals[/] button above. You can find your timezone identifier on [link=https://wikipedia.org/wiki/List_of_tz_database_time_zones#List]this wikipedia list[/link]. + init: + enabled: true + argo: + secret_keys: [] + # git repo to install the Argo CD app from + repo: "https://github.com/small-hack/argocd-apps" + # path in the argo repo to point to. Trailing slash very important! + path: "k8tz/" + # either the branch or tag to point at in the argo repo above + revision: main + # namespace to install the k8s app in + namespace: "k8tz" + # recurse directories in the provided git repo + directory_recursion: false + # source repos for Argo CD App Project (in addition to app.argo.repo) + project: + source_repos: + - "https://k8tz.github.io/k8tz/" + destination: + # automatically includes the app's namespace and argocd's namespace + namespaces: [] + + k8up: + enabled: false + description: | + [link=https://k8up.io]K8up[/link] ([i]pronounced "ketchup?"[/]) is a Kubernetes Operator based on Restic for backups of Persistent Volumes in k8s into S3 compatible storage like MinIO. Backs up all PVCs marked as ReadWriteMany, ReadWriteOnce or with a specific label. Can also perform "Application Aware" backups, containing the output of any tool capable of writing to stdout. You can also perform individual, on-demand backups, and restores from the k8up CLI tool. + + smol-k8s-lab will use your globally defined timezone to set k8up's timezone. You can view and change the default value of Europe/Amsterdam by clicking the [cornflower_blue]Modify Globals[/] button above. You can find your timezone identifier on [link=https://wikipedia.org/wiki/List_of_tz_database_time_zones#List]this wikipedia list[/link]. + init: + enabled: true + argo: + secret_keys: [] + # git repo to install the Argo CD app from + repo: "https://github.com/small-hack/argocd-apps" + # path in the argo repo to point to. Trailing slash very important! + path: "k8up/" + # either the branch or tag to point at in the argo repo above + revision: main + # namespace to install the k8s app in + namespace: "k8up" + # recurse directories in the provided git repo + directory_recursion: false + # source repos for Argo CD App Project (in addition to app.argo.repo) + project: + source_repos: + - "https://k8up-io.github.io/k8up" + - "https://github.com/k8up-io/k8up.git" + destination: + # automatically includes the app's namespace and argocd's namespace + namespaces: [] + + kepler: + description: | + [link=https://github.com/sustainable-computing-io/kepler]Kepler[/link] (Kubernetes Efficient Power Level Exporter) uses eBPF to probe energy-related system stats and exports them as Prometheus metrics. + enabled: false + # Initialization of the app through smol-k8s-lab + init: + enabled: false + argo: + # secret keys to provide for the argocd secret plugin app, none by default + secret_keys: {} + # git repo to install the Argo CD app from + repo: "https://github.com/small-hack/argocd-apps" + # path in the argo repo to point to. Trailing slash very important! + path: "demo/kepler/" + # either the branch or tag to point at in the argo repo above + revision: main + # namespace to install the k8s app in + namespace: "kepler" + # recurse directories in the provided git repo + directory_recursion: false + # source repos for Argo CD App Project (in addition to argo.repo) + project: + source_repos: + - "https://sustainable-computing-io.github.io/kepler-helm-chart" + destination: + # automatically includes the app's namespace and argocd's namespace + namespaces: [] + + kubevirt: + description: | + [link=https://kubevirt.io/]kubevirt[/link] lets you manage virtual machines via Kubernetes. + + # default disabled while a helm chart is being actively developed + enabled: false + argo: + # secret keys to provide for the argocd secret plugin app, none by default + secret_keys: {} + # git repo to install the Argo CD app from + repo: "https://github.com/small-hack/argocd-apps" + # path in the argo repo to point to. Trailing slash very important! + path: "kubevirt/" + # either the branch or tag to point at in the argo repo above + revision: main + # namespace to install the k8s app in + namespace: "kubevirt" + # recurse directories in the provided git repo + directory_recursion: false + # source repos for Argo CD App Project (in addition to argo.repo) + project: + source_repos: + - "https://github.com/small-hack/argocd-apps" + destination: + # automatically includes the app's namespace and argocd's namespace + namespaces: [] + + kyverno: + description: | + [link=https://kyverno.io/]Kyverno[/link] is a native policy manager for Kubernetes. + enabled: false + argo: + # secret keys to provide for the argocd secret plugin app, none by default + secret_keys: {} + # git repo to install the Argo CD app from + repo: "https://github.com/small-hack/argocd-apps" + # path in the argo repo to point to. Trailing slash very important! + path: "kyverno/" + # either the branch or tag to point at in the argo repo above + revision: main + # namespace to install the k8s app in + namespace: "kyvero" + # recurse directories in the provided git repo + directory_recursion: false + # source repos for Argo CD App Project (in addition to argo.repo) + project: + source_repos: [] + destination: + # automatically includes the app's namespace and argocd's namespace + namespaces: [] + + mastodon: + description: | + [link=https://joinmastodon.org/]Mastodon[/link] is an open source self hosted social media network. + + smol-k8s-lab supports initializing mastodon, by setting up your hostname, SMTP credentials, redis credentials, postgresql credentials, and an admin user credentials. We pass all credentials as secrets in the namespace and optionally save them to Bitwarden. + + smol-k8s-lab also creates a local s3 endpoint and as well as S3 bucket and credentials if you enable set mastodon.argo.secret_keys.s3_provider to "minio" or "seaweedfs". Both seaweedfs and minio require you to specify a remote s3 endpoint, bucket, region, and accessID/secretKey so that we can make sure you have remote backups. + + To provide sensitive values via environment variables to smol-k8s-lab use: + - MASTODON_SMTP_PASSWORD + - MASTODON_S3_BACKUP_ACCESS_ID + - MASTODON_S3_BACKUP_SECRET_KEY + - MASTODON_RESTIC_REPO_PASSWORD + enabled: false + init: + enabled: true + values: + # admin user + admin_user: "tootadmin" + # admin user's email + admin_email: "" + # mail server to send verification and notification emails + smtp_host: "change@me-to-enable.mail" + # mail user for smtp host + smtp_user: "change me to enable mail" + sensitive_values: + # these can be passed in as env vars if you pre-pend MASTODON_ to each one + - SMTP_PASSWORD + - S3_BACKUP_ACCESS_ID + - S3_BACKUP_SECRET_KEY + - RESTIC_REPO_PASSWORD + argo: + # secrets keys to make available to Argo CD ApplicationSets + secret_keys: + admin_user: tootadmin + # hostname that users go to in the browser + hostname: "" + # set the local s3 provider for mastodon's public data in one bucket + # and private database backups in another. can be minio or seaweedfs + s3_provider: seaweedfs + # how large the backing pvc's capacity should be for minio or seaweedfs + s3_pvc_capacity: 120Gi + # local s3 endpoint for postgresql backups, backed up constantly + s3_endpoint: "" + s3_region: eu-west-1 + # Remote S3 configuration, for pushing remote backups of your local postgresql backups + # these are done only nightly right now, for speed and cost optimization + s3_backup_endpoint: "" + s3_backup_region: "" + s3_backup_bucket: "" + # git repo to install the Argo CD app from + repo: https://github.com/small-hack/argocd-apps + # path in the argo repo to point to. Trailing slash very important! + path: mastodon/small-hack/app_of_apps/ + # either the branch or tag to point at in the argo repo above + revision: main + # namespace to install the k8s app in + namespace: mastodon + # recurse directories in the git repo + directory_recursion: false + # source repos for Argo CD App Project (in addition to argo.repo) + project: + # depending on if you use seaweedfs or minio, you can remove the other source repo + source_repos: + - registry-1.docker.io + - https://small-hack.github.io/cloudnative-pg-cluster-chart + - https://operator.min.io/ + - https://seaweedfs.github.io/seaweedfs/helm + - https://small-hack.github.io/mastodon-helm-chart + destination: + # automatically includes the app's namespace and argocd's namespace + namespaces: [] + + matrix: + description: | + [link=https://matrix.org/]Matrix[/link] is an open protocol for decentralised, secure communications. + This deploys a matrix synapse server, element (web frontend), and turn server (voice) + + smol-k8s-lab supports initialization by creating initial secrets for your: + - matrix, element, and federation hostnames, + - credentials for: postgresql, admin user, S3 storage, and SMTP + + smol-k8s-lab also sets up an OIDC application via Zitadel. + + To provide sensitive values via environment variables to smol-k8s-lab use: + - MATRIX_SMTP_PASSWORD + - MATRIX_S3_BACKUP_ACCESS_ID + - MATRIX_S3_BACKUP_SECRET_KEY + - MATRIX_RESTIC_REPO_PASSWORD + enabled: false + init: + enabled: true + values: + smtp_user: "change me to enable mail" + smtp_host: "change@me-to-enable.mail" + sensitive_values: + - SMTP_PASSWORD + - S3_BACKUP_ACCESS_ID + - S3_BACKUP_SECRET_KEY + - RESTIC_REPO_PASSWORD + argo: + # secrets keys to make available to Argo CD ApplicationSets + secret_keys: + # hostname of the synapse matrix server + hostname: "" + # the hostname of the element web interface + element_hostname: "" + # hostname for federation, that others can see you on the fediverse + federation_hostname: "" + # email for of the admin user + admin_email: "" + # choose S3 as the local primary object store from either: seaweedfs, or minio + # SeaweedFS - deploy SeaweedFS filer/s3 gateway + # MinIO - deploy MinIO vanilla helm chart + s3_provider: seaweedfs + # local s3 provider bucket name + s3_bucket: matrix + # the endpoint you'd like to use for your minio or SeaweedFS instance + s3_endpoint: "" + # how large the backing pvc's capacity should be for minio or seaweedfs + s3_pvc_capacity: 100Gi + s3_region: eu-west-1 + # these are for pushing remote backups of your local s3 storage, for speed and cost optimization + s3_backup_endpoint: "" + s3_backup_bucket: "" + s3_backup_region: "" + # git repo to install the Argo CD app from + repo: https://github.com/small-hack/argocd-apps + # path in the argo repo to point to. Trailing slash very important! + path: matrix/app_of_apps/ + # either the branch or tag to point at in the argo repo above + revision: main + # namespace to install the k8s app in + namespace: matrix + # recurse directories in the git repo + directory_recursion: false + # source repos for Argo CD App Project (in addition to argo.repo) + project: + source_repos: + - https://small-hack.github.io/cloudnative-pg-cluster-chart + - https://small-hack.github.io/matrix-chart + - https://operator.min.io/ + - https://seaweedfs.github.io/seaweedfs/helm + destination: + # automatically includes the app's namespace and argocd's namespace + namespaces: [] + + # This app is installed with helm or manifests depending on what is recommended + # for your k8s distro. Becomes managed by Argo CD if you enable it below + metallb: + enabled: false + description: | + [link=https://metallb.org/]MetalLB[/link] Helps expose IP addresses for loadbalancers on metal if you're on a vm or container where you can't get an IP. + + smol-k8s-lab support initialization by deploying a default l2Advertisement and IPAddressPool. + + Cloud Compatibility: [link=https://metallb.org/installation/clouds/]https://metallb.org/installation/clouds/[/link] + + # Initialize of the app through smol-k8s-lab + init: + enabled: true + values: + address_pool: [] + argo: + # secret keys to provide for the argocd secret plugin app, none by default + secret_keys: {} + # git repo to install the Argo CD app from + repo: "https://github.com/small-hack/argocd-apps" + # path in the argo repo to point to. Trailing slash very important! + path: "metallb/" + # either the branch or tag to point at in the argo repo above + revision: main + # namespace to install the k8s app in + namespace: "metallb-system" + # recurse directories in the provided git repo + directory_recursion: false + # source repos for Argo CD metallb Project (in addition to metallb.argo.repo) + project: + source_repos: + - "https://github.com/metallb/metallb.git" + destination: + # automatically includes the app's namespace and argocd's namespace + namespaces: [] + + minio_operator: + enabled: false + description: | + [link=https://min.io/]MinIO®️[/link] is a high-performance, self hosted S3 compatible object store. MinIO is dual-licensed under open source GNU AGPL v3 and a commercial enterprise license. + + smol-k8s-lab deploys MinIO Operator and admin Console. The operator creates Custom Resource Definitions for MinIO Tenants, which are isolated instances of minio with their own API and console endpoints. This is useful to isolate different teams, apps, regions, etc. Below we also have a default tenant to get you started, but keep in mind, if you're using the default social apps (Nextcloud, Matrix, and Mastodon), we already create tenants for those. + init: + enabled: true + argo: + # secrets keys to make available to Argo CD ApplicationSets + secret_keys: + admin_console_hostname: "" + # git repo to install the Argo CD app from + repo: "https://github.com/small-hack/argocd-apps" + # path in the argo repo to point to. Trailing slash very important! + path: "minio/operator/" + # either the branch or tag to point at in the argo repo above + revision: main + # namespace to install the k8s app in + namespace: "minio" + # recurse directories in the provided git repo + directory_recursion: false + # source repos for Argo CD App Project (in addition to argo.repo) + project: + source_repos: + - https://operator.min.io/ + destination: + # automatically includes the app's namespace and argocd's namespace + namespaces: [] + + minio_tenant: + enabled: false + description: | + [link=https://min.io/]MinIO®️[/link] is a high-performance, self hosted S3 compatible object store. MinIO is dual-licensed under open source GNU AGPL v3 and a commercial enterprise license. + + smol-k8s-lab deploys the MinIO API and User Console for a tenant, along with an OIDC app provided by Zitadel. + init: + enabled: true + values: + # this is the admin user for the tenant + root_user: "minio-admin" + argo: + # secrets keys to make available to Argo CD ApplicationSets + secret_keys: + tenant_name: "" + api_hostname: "" + user_console_hostname: "" + # options: "local" or "s3". local is for a local filesystem mount. s3 is for using an s3 bucket + backup_method: "local" + s3_backup_endpoint: "none" + s3_backup_bucket: "set me to your bucket name" + # git repo to install the Argo CD app from + repo: "https://github.com/small-hack/argocd-apps" + # path in the argo repo to point to. Trailing slash very important! + path: "minio/tenant/" + # either the branch or tag to point at in the argo repo above + revision: main + # namespace to install the k8s app in + namespace: "minio" + # recurse directories in the provided git repo + directory_recursion: false + # source repos for Argo CD App Project (in addition to argo.repo) + project: + source_repos: + - https://operator.min.io/ + destination: + # automatically includes the app's namespace and argocd's namespace + namespaces: [] + + nextcloud: + enabled: false + description: | + [link=https://nextcloud.com/]Nextcloud Hub[/link] is the industry-leading, fully open-source, on-premises content collaboration platform. Teams access, share and edit their documents, chat and participate in video calls and manage their mail and calendar and projects across mobile, desktop and web interfaces + + smol-k8s-lab supports initialization by setting up your admin username, password, and SMTP username and password, as well as your redis and postgresql credentials. + + To avoid providing sensitive values everytime you run smol-k8s-lab, consider exporting the following environment variables before running smol-k8s-lab: + - NEXTCLOUD_SMTP_PASSWORD + - NEXTCLOUD_S3_BACKUP_ACCESS_KEY + - NEXTCLOUD_S3_BACKUP_ACCESS_ID + - NEXTCLOUD_RESTIC_REPO_PASSWORD + + Note: smol-k8s-lab is not affiliated with Nextcloud GmbH. This is a community-supported-only install method. + # initialize the app by setting up new k8s secrets and/or bitwarden items + init: + enabled: true + values: + # change the name of your admin user to whatever you like. This is used in an admin credentials k8s secret + admin_user: "nextcloud_admin" + smtp_user: "change me to enable mail" + smtp_host: "change-me-to-real-email@to-enable.mail" + sensitive_values: + - SMTP_PASSWORD + - S3_BACKUP_ACCESS_KEY + - S3_BACKUP_ACCESS_ID + - RESTIC_REPO_PASSWORD + argo: + # secrets keys to make available to Argo CD ApplicationSets + secret_keys: + hostname: "" + # choose S3 as the local primary object store from either: seaweedfs, or minio + # SeaweedFS - deploy SeaweedFS filer/s3 gateway + # MinIO - deploy MinIO vanilla helm chart + s3_provider: seaweedfs + # the endpoint you'd like to use for your minio or SeaweedFS instance + s3_endpoint: "" + # how large the backing pvc's capacity should be for minio or seaweedfs + s3_pvc_capacity: 100Gi + s3_region: eu-west-1 + # these are for pushing remote backups of your local s3 storage, for speed and cost optimization + s3_backup_endpoint: "" + s3_backup_bucket: "" + s3_backup_region: "" + # git repo to install the Argo CD app from + repo: https://github.com/small-hack/argocd-apps + # path in the argo repo to point to. Trailing slash very important! + path: nextcloud/app_of_apps/ + # either the branch or tag to point at in the argo repo above + revision: main + # namespace to install the k8s app in + namespace: nextcloud + # recurse directories in the provided git repo + directory_recursion: false + # source repos for Argo CD App Project (in addition to argo.repo) + project: + source_repos: + - registry-1.docker.io + - https://nextcloud.github.io/helm + - https://small-hack.github.io/cloudnative-pg-cluster-chart + - https://seaweedfs.github.io/seaweedfs/helm + - https://github.com/seaweedfs/seaweedfs + destination: + # automatically includes the app's namespace and argocd's namespace + namespaces: [] + + prometheus: + description: | + Full monitoring stack with [link=https://prometheus.io/docs/introduction/overview/]Prometheus[/link], grafana, loki, and alert manager. + + smol-k8s-lab supports initialization by setting up your ingress hostnames. + + enabled: false + argo: + # secrets keys to make available to Argo CD ApplicationSets + secret_keys: + # FQDN to use for Prometheus web interface + hostname: "" + # FQDN to use for grafana + grafana_hostname: "" + # FQDN to use for Alert Manager web interface + alert_manager_hostname: "" + # FQDN to use for the prometheus push gateway + push_gateway_hostname: "" + # git repo to install the Argo CD app from + repo: https://github.com/small-hack/argocd-apps + # path in the argo repo to point to. Trailing slash very important! This + # is an app of apps. Change to "monitoring/kube-prometheus-stack/" to + # only install kube-prometheus-stack (foregoing loki and push gateway) + path: prometheus/ + # either the branch or tag to point at in the argo repo above + revision: main + # namespace to install the k8s app in + namespace: "prometheus" + # recurse directories in the provided git repo + directory_recursion: false + # source repos for Argo CD App Project (in addition to argo.repo) + project: + source_repos: + - "registry-1.docker.io" + - "https://github.com/prometheus-community/helm-charts.git" + - "https://prometheus-community.github.io/helm-charts" + destination: + # automatically includes the app's namespace and argocd's namespace + namespaces: + - kube-system + + seaweedfs: + enabled: false + description: | + [link=https://github.com/seaweedfs/seaweedfs]seaweedfs[/link] is a filesystem with an exposable S3 endpoint. + + This is mostly meant to be for testing, but have at it :D + + If directory_recursion is set to true, we will also deploy the csi driver. + init: + enabled: true + values: + root_user: admin + argo: + # secrets keys to make available to Argo CD ApplicationSets + secret_keys: + hostname: "" + s3_endpoint: "" + s3_region: eu-west-1 + # git repo to install the Argo CD app from + repo: https://github.com/small-hack/argocd-apps + # path in the argo repo to point to. Trailing slash very important! + path: seaweedfs/app_of_apps/ + # either the branch or tag to point at in the argo repo above + revision: main + # namespace to install the k8s app in + namespace: seaweedfs + # recurse directories in the provided git repo + # if set to false, we will not deploy the CSI driver + directory_recursion: true + # source repos for Argo CD App Project (in addition to argo.repo) + project: + source_repos: + - https://seaweedfs.github.io/seaweedfs/helm + - https://seaweedfs.github.io/seaweedfs-csi-driver/helm + - https://github.com/seaweedfs/seaweedfs + destination: + # automatically includes the app's namespace and argocd's namespace + namespaces: [] + + seaweedfs_csi_driver: + enabled: false + description: | + [link=https://github.com/seaweedfs/seaweedfs]seaweedfs[/link] is a filesystem with an exposable S3 endpoint. This app deploys ONLY the CSI driver. + + init: + enabled: true + argo: + # secrets keys to make available to Argo CD ApplicationSets + secret_keys: [] + # git repo to install the Argo CD app from + repo: https://github.com/small-hack/argocd-apps + # path in the argo repo to point to. Trailing slash very important! + path: demo/seaweedfs/app_of_apps/csi_driver/ + # either the branch or tag to point at in the argo repo above + revision: main + # namespace to install the k8s app in + namespace: seaweedfs + # recurse directories in the provided git repo + # if set to false, we will not deploy the CSI driver + directory_recursion: false + # source repos for Argo CD App Project (in addition to argo.repo) + project: + source_repos: + - https://seaweedfs.github.io/seaweedfs-csi-driver/helm + destination: + # automatically includes the app's namespace and argocd's namespace + namespaces: [] + + vault: + description: | + [link=https://www.hashicorp.com/products/vault]Vault[/link] is a secrets management tool by Hashicorp. + + Legal Disclaimer: Vault is open source, but does not use a standard FOSS license. smol-k8s-lab is not afilitated with Hashicorp and does not offer any kind of paid support for anything Hashicorp publishes. If you'd like help with Hashicorp's Vault, you can ask for support via the smol-k8s-lab community, or via official Hashicorp sources, such as via their paid support contracts. Keep in mind though, smol-k8s-lab is not supported by Hashicorp. + enabled: false + # Initialization of the app through smol-k8s-lab using bitwarden and/or k8s secrets + init: + enabled: true + argo: + # secrets keys to make available to Argo CD ApplicationSets + secret_keys: + # name of the cluster that vault is associated with, can be any unique name + cluster_name: my-cool-cluster + repo: https://github.com/small-hack/argocd-apps + # path in the argo repo to point to. Trailing slash very important! + path: demo/vault/ + # either the branch or tag to point at in the argo repo above + revision: main + # namespace to install the k8s app in + namespace: vault + # recurse directories in the provided git repo + directory_recursion: false + # source repos for Argo CD App Project (in addition to argo.repo) + project: + source_repos: + - https://helm.releases.hashicorp.com + destination: + # automatically includes the app's namespace and argocd's namespace + namespaces: [] + + vouch: + description: | + [link=https://github.com/vouch/vouch-proxy]vouch-proxy[/link] can help you forward requests for OIDC authentication to any ingress source that doesn't already have it. Super useful for web pages like prometheus's UI. + + smol-k8s-lab supports the initialization of vouch if you also enable zitadel by creating OIDC applications and credentials and your vouch-proxy Kubernetes Secret. + enabled: false + # Initialization of the app through smol-k8s-lab using bitwarden and/or k8s secrets + init: + enabled: true + values: + # list of domains allowed to be behind vouch such as example.com + domains: [] + # - example.com + # email addresses allowed to authenticate via vouch + emails: [] + # - beep@boop.com + argo: + # secrets keys to make available to Argo CD ApplicationSets + secret_keys: + # FQDN to use for vouch + hostname: "" + # repo to install the Argo CD app from + # git repo to install the Argo CD app from + repo: "https://github.com/small-hack/argocd-apps" + # path in the argo repo to point to. Trailing slash very important! + path: "vouch-proxy/app_of_apps/" + # either the branch or tag to point at in the argo repo above + revision: main + # namespace to install the k8s app in + namespace: "vouch" + # recurse directories in the provided git repo + directory_recursion: false + # source repos for Argo CD App Project (in addition to argo.repo) + project: + source_repos: + - https://jessebot.github.io/vouch-helm-chart + destination: + # automatically includes the app's namespace and argocd's namespace + namespaces: [] + + zitadel: + enabled: false + description: | + [link=https://zitadel.com/opensource]ZITADEL[/link] is an open source self hosted IAM platform for the cloud era + + smol-k8s-lab supports initialization of: + - an admin service account + - a human admin user (including an autogenerated password) + - a project with a name of your chosing + - 2 OIDC applications for Argo CD and Vouch + - 2 Argo CD groups (admins and users), 1 vouch groups + - groupsClaim action to enforce group roles on authentication + - updates your appset_secret_plugin secret and refreshes the pod + + The default app will also deploy SeaweedFS to backup your database which in turn is backed up to a remote s3 provider of your choice. + + To provide sensitive values via environment variables to smol-k8s-lab use: + - ZITADEL_S3_BACKUP_ACCESS_ID + - ZITADEL_S3_BACKUP_SECRET_KEY + - ZITADEL_RESTIC_REPO_PASSWORD + init: + # Switch to false if you don't want to create intial secrets or use the + # API via a service acocunt to create the above described resources + enabled: true + values: + # initial human user's usename + username: "" + # initial human user's email + email: "" + # initial human's first name + first_name: "" + # initial human's last name + last_name: "" + # options: GENDER_UNSPECIFIED, GENDER_MALE, GENDER_FEMALE, GENDER_DIVERSE + # more coming soon, see: https://github.com/zitadel/zitadel/issues/6355 + gender: GENDER_UNSPECIFIED + # name of the default project to create OIDC applications in + project: core + sensitive_values: + # sensitive values to provide via environment variables or via the TUI + - S3_BACKUP_ACCESS_ID + - S3_BACKUP_SECRET_KEY + - RESTIC_REPO_PASSWORD + # coming soon after we refactor a bit + # - SMTP_PASSWORD + argo: + # secrets keys to make available to Argo CD ApplicationSets + secret_keys: + # FQDN to use for zitadel + hostname: "" + # set the local s3 provider for zitadel's database backups. can be minio or seaweedfs + s3_provider: seaweedfs + # local s3 endpoint for postgresql backups, backed up constantly + s3_endpoint: "" + # capacity for the PVC backing your local s3 instance + s3_pvc_capacity: 2Gi + # Remote S3 configuration, for pushing remote backups of your local postgresql backups + # these are done only nightly right now, for speed and cost optimization + s3_backup_endpoint: "" + s3_backup_region: "" + s3_backup_bucket: "" + # repo to install the Argo CD app from + # git repo to install the Argo CD app from + repo: "https://github.com/small-hack/argocd-apps" + # path in the argo repo to point to. Trailing slash very important! + # if you want to use cockroachdb, change to zitadel/zitadel_and_cockroachdb + path: "zitadel/app_of_apps/" + # either the branch or tag to point at in the argo repo above + revision: main + # namespace to install the k8s app in + namespace: "zitadel" + # recurse directories in the provided git repo + directory_recursion: true + # source repos for Argo CD App Project (in addition to argo.repo) + project: + source_repos: + - https://charts.zitadel.com + - https://zitadel.github.io/zitadel-charts + - https://small-hack.github.io/cloudnative-pg-cluster-chart + - https://operator.min.io/ + - https://seaweedfs.github.io/seaweedfs/helm + destination: + # automatically includes the app's namespace and argocd's namespace + namespaces: [] diff --git a/.github/smol_k8s_lab_config.yaml b/.github/smol_k8s_lab_config_kind.yaml similarity index 100% rename from .github/smol_k8s_lab_config.yaml rename to .github/smol_k8s_lab_config_kind.yaml diff --git a/.github/workflows/test-smol-k8s-lab.yml b/.github/workflows/test-smol-k8s-lab.yml index c94354e24..dfd05b0be 100644 --- a/.github/workflows/test-smol-k8s-lab.yml +++ b/.github/workflows/test-smol-k8s-lab.yml @@ -1,20 +1,18 @@ --- name: Test smol-k8s-lab on: - push: - branches-ignore: - - "main" + pull_request: paths-ignore: - ".github/**" - "README.md" - "docs/**" jobs: - smol_k8s_lab_kind: + smol_k8s_lab_test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - name: Set up python + - name: Set up Python id: setup-python uses: actions/setup-python@v4 with: @@ -30,13 +28,18 @@ jobs: - name: Install smol-k8s-lab via poetry run: poetry install - - name: Install Argo CD + - name: Install Argo CD cli run: | curl -sSL -o argocd-linux-amd64 https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64 sudo install -m 555 argocd-linux-amd64 /usr/local/bin/argocd rm argocd-linux-amd64 - - name: source virtual env and test smol-k8s-lab + - name: test smol-k8s-lab with kind run: | source .venv/bin/activate - smol-k8s-lab -c .github/smol_k8s_lab_config.yaml + smol-k8s-lab -c .github/smol_k8s_lab_config_kind.yaml + + - name: test smol-k8s-lab with k3s + run: | + source .venv/bin/activate + smol-k8s-lab -c .github/smol_k8s_lab_config_k3s.yaml diff --git a/docs/assets/images/screenshots/add_k3s_option_screen.svg b/docs/assets/images/screenshots/add_k3s_option_screen.svg index 12699d230..f0d9b88b8 100644 --- a/docs/assets/images/screenshots/add_k3s_option_screen.svg +++ b/docs/assets/images/screenshots/add_k3s_option_screen.svg @@ -19,297 +19,295 @@ font-weight: 700; } - .terminal-604711906-matrix { + .terminal-508506324-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-604711906-title { + .terminal-508506324-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-604711906-r1 { fill: #e0e0e0 } -.terminal-604711906-r2 { fill: #656565 } -.terminal-604711906-r3 { fill: #474747 } -.terminal-604711906-r4 { fill: #c5c8c6 } -.terminal-604711906-r5 { fill: #646464 } -.terminal-604711906-r6 { fill: #304070 } -.terminal-604711906-r7 { fill: #2f5b70 } -.terminal-604711906-r8 { fill: #587040 } -.terminal-604711906-r9 { fill: #18181c } -.terminal-604711906-r10 { fill: #0b3a5f } -.terminal-604711906-r11 { fill: #3e3e3e } -.terminal-604711906-r12 { fill: #656566 } -.terminal-604711906-r13 { fill: #4e4e50 } -.terminal-604711906-r14 { fill: #304050;font-weight: bold } -.terminal-604711906-r15 { fill: #304070;font-style: italic; } -.terminal-604711906-r16 { fill: #2f5b70;font-style: italic; } -.terminal-604711906-r17 { fill: #151519 } -.terminal-604711906-r18 { fill: #566170 } -.terminal-604711906-r19 { fill: #5b5c5d } -.terminal-604711906-r20 { fill: #5f87ff } -.terminal-604711906-r21 { fill: #304070;font-weight: bold } -.terminal-604711906-r22 { fill: #ffaff9 } -.terminal-604711906-r23 { fill: #5cc9fd } -.terminal-604711906-r24 { fill: #5cc9fd;font-style: italic; } -.terminal-604711906-r25 { fill: #c1ff87 } -.terminal-604711906-r26 { fill: #2d3041 } -.terminal-604711906-r27 { fill: #e1e1e3 } -.terminal-604711906-r28 { fill: #1e1e2d } -.terminal-604711906-r29 { fill: #181824 } -.terminal-604711906-r30 { fill: #2e3047 } -.terminal-604711906-r31 { fill: #1e1e1e } -.terminal-604711906-r32 { fill: #7a7c86 } -.terminal-604711906-r33 { fill: #c9cace } -.terminal-604711906-r34 { fill: #5e7aba;font-weight: bold } -.terminal-604711906-r35 { fill: #24242f } -.terminal-604711906-r36 { fill: #aea8f8 } -.terminal-604711906-r37 { fill: #242632 } -.terminal-604711906-r38 { fill: #3b4b6d;font-weight: bold } -.terminal-604711906-r39 { fill: #1c1c1f } -.terminal-604711906-r40 { fill: #504e6e } -.terminal-604711906-r41 { fill: #504e6e;font-weight: bold } -.terminal-604711906-r42 { fill: #181820;font-weight: bold } -.terminal-604711906-r43 { fill: #3b4b6d } + .terminal-508506324-r1 { fill: #e0e0e0 } +.terminal-508506324-r2 { fill: #656565 } +.terminal-508506324-r3 { fill: #474747 } +.terminal-508506324-r4 { fill: #c5c8c6 } +.terminal-508506324-r5 { fill: #646464 } +.terminal-508506324-r6 { fill: #304070 } +.terminal-508506324-r7 { fill: #2f5b70 } +.terminal-508506324-r8 { fill: #587040 } +.terminal-508506324-r9 { fill: #18181c } +.terminal-508506324-r10 { fill: #0b3a5f } +.terminal-508506324-r11 { fill: #3e3e3e } +.terminal-508506324-r12 { fill: #656566 } +.terminal-508506324-r13 { fill: #4e4e50 } +.terminal-508506324-r14 { fill: #304050;font-weight: bold } +.terminal-508506324-r15 { fill: #304070;font-style: italic; } +.terminal-508506324-r16 { fill: #2f5b70;font-style: italic; } +.terminal-508506324-r17 { fill: #151519 } +.terminal-508506324-r18 { fill: #566170 } +.terminal-508506324-r19 { fill: #5b5c5d } +.terminal-508506324-r20 { fill: #5f87ff } +.terminal-508506324-r21 { fill: #ffaff9 } +.terminal-508506324-r22 { fill: #5cc9fd } +.terminal-508506324-r23 { fill: #5cc9fd;font-style: italic; } +.terminal-508506324-r24 { fill: #c1ff87 } +.terminal-508506324-r25 { fill: #304070;font-weight: bold } +.terminal-508506324-r26 { fill: #2d3041 } +.terminal-508506324-r27 { fill: #e1e1e3 } +.terminal-508506324-r28 { fill: #1e1e2d } +.terminal-508506324-r29 { fill: #181824 } +.terminal-508506324-r30 { fill: #2e3047 } +.terminal-508506324-r31 { fill: #1e1e1e } +.terminal-508506324-r32 { fill: #7a7c86 } +.terminal-508506324-r33 { fill: #c9cace } +.terminal-508506324-r34 { fill: #5e7aba;font-weight: bold } +.terminal-508506324-r35 { fill: #24242f } +.terminal-508506324-r36 { fill: #aea8f8 } +.terminal-508506324-r37 { fill: #1c1c1f } +.terminal-508506324-r38 { fill: #242632 } +.terminal-508506324-r39 { fill: #3b4b6d;font-weight: bold } +.terminal-508506324-r40 { fill: #504e6e } +.terminal-508506324-r41 { fill: #504e6e;font-weight: bold } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - BaseApp + BaseApp - - - - ʕ ᵔᴥᵔʔ smol k8s lab — Kubernetes distro config - - - 🌱 Select a k8s distro────────────────────────────────────────────────────── - -▔▔▔▔▔▔▔▔▔▔▔▔▔kind runs k8s clusters using Docker containers as nodes.  -kindDesigned for testing k8s itself. Learn more: kind.sigs.k8s.io -▁▁▁▁▁▁▁▁▁▁▁▁▁ - -───────────────────────────────────────────────────Inputs below are optional - - -Adjust how many of each node type to deploy ───────────────────────────────── - -▔▔▔▔▔▔▔▔▔▔▔▔ -control plane:1workers:0 -▁▁▁▁▁▁▁▁▁▁▁▁ - -─────────────────────────────────────────────────────────────────────────────── - - -────────────────────────────────────────────────────────────────────── - Ad─── - -NeAddnewkind networking option. -━━━━━ - - -A▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -new kind networking option➕ add option -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - -i -─────────────────────────────────────────────────────────────cancel - -disableDefaultCNI▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -:False🚮 -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -apiServerAddress:127.0.0.1🚮 -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -podSubnet:10.244.0.0/16🚮 -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - - - - -──────────────────────────────────────────────────────────────➕ kind option - - - - ?  Help  c  Config  f  Toggle footer  esc  Cancel  f5  Speak  n  New Cluster  + + + + ʕ ᵔᴥᵔʔ smol k8s lab — Kubernetes distro config + + + 🌱 Select a k8s distro────────────────────────────────────────────────────── + +▔▔▔▔▔▔▔▔▔▔▔▔▔kind runs k8s clusters using Docker containers as nodes.  +kindDesigned for testing k8s itself. Learn more: kind.sigs.k8s.io +▁▁▁▁▁▁▁▁▁▁▁▁▁ + +───────────────────────────────────────────────────Inputs below are optional + + +Adjust how many of each node type to deploy ───────────────────────────────── + +▔▔▔▔▔▔▔▔▔▔▔▔ +control plane:1workers:0 +▁▁▁▁▁▁▁▁▁▁▁▁ + + +─────────────────────────────────────────────────────────────────────────────── + +────────────────────────────────────────────────────────────────────── + + Ad─── +Addnewkind networking option. +Ne +━━━━━ + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +Anew kind networking option➕ add option +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + + +i─────────────────────────────────────────────────────────────cancel +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + +disableDefaultCNI▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +:False🚮 +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +apiServerAddress:127.0.0.1🚮 +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +podSubnet:10.244.0.0/16🚮 +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + + + + +───────────────────────────────────────────────────────────── ➕ kind option + + + diff --git a/docs/assets/images/screenshots/apps_screen.svg b/docs/assets/images/screenshots/apps_screen.svg index 5c2c0b3d2..cdc0695ac 100644 --- a/docs/assets/images/screenshots/apps_screen.svg +++ b/docs/assets/images/screenshots/apps_screen.svg @@ -19,286 +19,283 @@ font-weight: 700; } - .terminal-4276780417-matrix { + .terminal-3729650202-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-4276780417-title { + .terminal-3729650202-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-4276780417-r1 { fill: #c5c8c6 } -.terminal-4276780417-r2 { fill: #e3e3e3 } -.terminal-4276780417-r3 { fill: #989898 } -.terminal-4276780417-r4 { fill: #e1e1e1 } -.terminal-4276780417-r5 { fill: #5f87ff } -.terminal-4276780417-r6 { fill: #5cc9fd } -.terminal-4276780417-r7 { fill: #ffaff9 } -.terminal-4276780417-r8 { fill: #5cc9fd;font-style: italic; } -.terminal-4276780417-r9 { fill: #c1ff87 } -.terminal-4276780417-r10 { fill: #21212c } -.terminal-4276780417-r11 { fill: #363953 } -.terminal-4276780417-r12 { fill: #f289f9;font-weight: bold } -.terminal-4276780417-r13 { fill: #5cc9fd;font-weight: bold } -.terminal-4276780417-r14 { fill: #e2e2e3 } -.terminal-4276780417-r15 { fill: #df81e8;font-weight: bold } -.terminal-4276780417-r16 { fill: #bdd8ff } -.terminal-4276780417-r17 { fill: #7aa2f7 } -.terminal-4276780417-r18 { fill: #212130;font-weight: bold } -.terminal-4276780417-r19 { fill: #1b1b24 } -.terminal-4276780417-r20 { fill: #adc5e9 } -.terminal-4276780417-r21 { fill: #cacbce } -.terminal-4276780417-r22 { fill: #e3e3e4 } -.terminal-4276780417-r23 { fill: #3a3a3a } -.terminal-4276780417-r24 { fill: #dd7ee4 } -.terminal-4276780417-r25 { fill: #7c7e86 } -.terminal-4276780417-r26 { fill: #3f455e } -.terminal-4276780417-r27 { fill: #7aa2f7;font-weight: bold } -.terminal-4276780417-r28 { fill: #2c2c2c } -.terminal-4276780417-r29 { fill: #e1e1e2 } -.terminal-4276780417-r30 { fill: #5f87af } -.terminal-4276780417-r31 { fill: #7d8ea7 } -.terminal-4276780417-r32 { fill: #232336;font-weight: bold } + .terminal-3729650202-r1 { fill: #c5c8c6 } +.terminal-3729650202-r2 { fill: #e3e3e3 } +.terminal-3729650202-r3 { fill: #989898 } +.terminal-3729650202-r4 { fill: #e1e1e1 } +.terminal-3729650202-r5 { fill: #5f87ff } +.terminal-3729650202-r6 { fill: #5cc9fd } +.terminal-3729650202-r7 { fill: #ffaff9 } +.terminal-3729650202-r8 { fill: #5cc9fd;font-style: italic; } +.terminal-3729650202-r9 { fill: #c1ff87 } +.terminal-3729650202-r10 { fill: #21212c } +.terminal-3729650202-r11 { fill: #363953 } +.terminal-3729650202-r12 { fill: #f289f9;font-weight: bold } +.terminal-3729650202-r13 { fill: #5cc9fd;font-weight: bold } +.terminal-3729650202-r14 { fill: #e2e2e3 } +.terminal-3729650202-r15 { fill: #df81e8;font-weight: bold } +.terminal-3729650202-r16 { fill: #bdd8ff } +.terminal-3729650202-r17 { fill: #7aa2f7 } +.terminal-3729650202-r18 { fill: #212130;font-weight: bold } +.terminal-3729650202-r19 { fill: #1b1b24 } +.terminal-3729650202-r20 { fill: #adc5e9 } +.terminal-3729650202-r21 { fill: #cacbce } +.terminal-3729650202-r22 { fill: #e3e3e4 } +.terminal-3729650202-r23 { fill: #3a3a3a } +.terminal-3729650202-r24 { fill: #3f455e } +.terminal-3729650202-r25 { fill: #7aa2f7;font-weight: bold } +.terminal-3729650202-r26 { fill: #2c2c2c } +.terminal-3729650202-r27 { fill: #e1e1e2 } +.terminal-3729650202-r28 { fill: #5f87af } +.terminal-3729650202-r29 { fill: #7d8ea7 } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - BaseApp + BaseApp - - - - ʕ ᵔᴥᵔʔ smol k8s lab — Apps Configuration (now with more 🦑) - - -selectapps──────── 🔧 configure parameters for Argo Cd───────────── -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -argo-cd -cert-managerArgo CD Application Configuration -cilium -cnpg-operator -external-secret…▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -infisicalrepo:https://github.com/small-hack -ingress-nginx▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ -k8tz -k8up▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -keplerpath:argocd/app_of_apps/ -kubevirt▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ -kyverno -mastodon▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -matrixrevision:main -metallb▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ -minio-operator -minio-tenant▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -nextcloudnamespace:argocd -prometheus▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ -seaweedfs -seaweedfs-csi-d…directory ▔▔▔▔▔▔▔▔ -vaultrecursion: -vouch▁▁▁▁▁▁▁▁ -zitadel▇▇ -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ -───────────✨ newapp -Template values for Argo CD ApplicationSet  - - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -hostname:Enter a hostname -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ -✏️ Modify Globals -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁oidc ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -provider:zitadel -─────────────────────────────────────────────────── - - 📓 Argo Cd notes──────────────────────────────────────────────────────────── - -Argo CD is a declarative, GitOps continuous delivery tool for Kubernetes. -▃▃ -smol-k8s-lab installs Argo CD with helm initially to support initial  -configuration of your admin user and disabling of dex. After your OIDC  -provider is configured, Argo CD begins managing itself using the below  -configured Argo CD repo. -─────────────────────────────────────────────────────────────────────────────── - - - - ?  Help  c  Config  f  Toggle footer  b  Back  f5  Speak  n  Next  a  New App  + + + + ʕ ᵔᴥᵔʔ smol k8s lab — Apps Configuration (now with more 🦑) + + +selectapps──────── 🔧 configure parameters for Argo Cd───────────── +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +argo-cd +cert-managerArgo CD Application Configuration +cilium +cnpg-operator +external-secret…▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +infisicalrepo:https://github.com/small-hack +ingress-nginx▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +k8tz +k8up▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +keplerpath:argocd/app_of_apps/ +kubevirt▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +kyverno +mastodon▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +matrixrevision:main +metallb▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +minio-operator +minio-tenant▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +nextcloudnamespace:argocd +prometheus▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +seaweedfs +seaweedfs-csi-d…directory ▔▔▔▔▔▔▔▔ +vaultrecursion: +vouch▁▁▁▁▁▁▁▁ +zitadel +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▄▄ +───────────✨ newapp +Template values for Argo CD ApplicationSet  + + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +hostname:argo.test.com +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +✏️ Modify Globalsoidc ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁provider:zitadel +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +─────────────────────────────────────────────────── + + 📓 Argo Cd notes──────────────────────────────────────────────────────────── + +Argo CD is a declarative, GitOps continuous delivery tool for Kubernetes. +▃▃ +smol-k8s-lab installs Argo CD with helm initially to support initial  +configuration of your admin user and disabling of dex. After your OIDC  +provider is configured, Argo CD begins managing itself using the below  +configured Argo CD repo. +─────────────────────────────────────────────────────────────────────────────── + + + diff --git a/docs/assets/images/screenshots/distro_config_screen.svg b/docs/assets/images/screenshots/distro_config_screen.svg index ba0938882..b9b9b118a 100644 --- a/docs/assets/images/screenshots/distro_config_screen.svg +++ b/docs/assets/images/screenshots/distro_config_screen.svg @@ -19,283 +19,285 @@ font-weight: 700; } - .terminal-2362879852-matrix { + .terminal-2709441486-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-2362879852-title { + .terminal-2709441486-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-2362879852-r1 { fill: #c5c8c6 } -.terminal-2362879852-r2 { fill: #e3e3e3 } -.terminal-2362879852-r3 { fill: #989898 } -.terminal-2362879852-r4 { fill: #e1e1e1 } -.terminal-2362879852-r5 { fill: #5f87ff } -.terminal-2362879852-r6 { fill: #5cc9fd } -.terminal-2362879852-r7 { fill: #c1ff87 } -.terminal-2362879852-r8 { fill: #21212c } -.terminal-2362879852-r9 { fill: #0178d4 } -.terminal-2362879852-r10 { fill: #808080 } -.terminal-2362879852-r11 { fill: #e3e3e4 } -.terminal-2362879852-r12 { fill: #a9a9ad } -.terminal-2362879852-r13 { fill: #5f87af;font-weight: bold } -.terminal-2362879852-r14 { fill: #5f87ff;font-style: italic; } -.terminal-2362879852-r15 { fill: #5cc9fd;font-style: italic; } -.terminal-2362879852-r16 { fill: #e2e2e3 } -.terminal-2362879852-r17 { fill: #1b1b24 } -.terminal-2362879852-r18 { fill: #bdd8ff } -.terminal-2362879852-r19 { fill: #cacbce } -.terminal-2362879852-r20 { fill: #20202a } -.terminal-2362879852-r21 { fill: #1a1a22 } -.terminal-2362879852-r22 { fill: #404563 } -.terminal-2362879852-r23 { fill: #cacace } -.terminal-2362879852-r24 { fill: #7aa2f7;font-weight: bold } -.terminal-2362879852-r25 { fill: #2d2d32 } -.terminal-2362879852-r26 { fill: #aea8f8 } -.terminal-2362879852-r27 { fill: #aea8f8;font-weight: bold } -.terminal-2362879852-r28 { fill: #232336;font-weight: bold } -.terminal-2362879852-r29 { fill: #7aa2f7 } + .terminal-2709441486-r1 { fill: #c5c8c6 } +.terminal-2709441486-r2 { fill: #e3e3e3 } +.terminal-2709441486-r3 { fill: #989898 } +.terminal-2709441486-r4 { fill: #e1e1e1 } +.terminal-2709441486-r5 { fill: #5f87ff } +.terminal-2709441486-r6 { fill: #5cc9fd } +.terminal-2709441486-r7 { fill: #c1ff87 } +.terminal-2709441486-r8 { fill: #21212c } +.terminal-2709441486-r9 { fill: #0178d4 } +.terminal-2709441486-r10 { fill: #808080 } +.terminal-2709441486-r11 { fill: #e3e3e4 } +.terminal-2709441486-r12 { fill: #a9a9ad } +.terminal-2709441486-r13 { fill: #5f87af;font-weight: bold } +.terminal-2709441486-r14 { fill: #5f87ff;font-style: italic; } +.terminal-2709441486-r15 { fill: #5cc9fd;font-style: italic; } +.terminal-2709441486-r16 { fill: #e2e2e3 } +.terminal-2709441486-r17 { fill: #1b1b24 } +.terminal-2709441486-r18 { fill: #bdd8ff } +.terminal-2709441486-r19 { fill: #cacbce } +.terminal-2709441486-r20 { fill: #5f87ff;font-weight: bold } +.terminal-2709441486-r21 { fill: #405495 } +.terminal-2709441486-r22 { fill: #565f89 } +.terminal-2709441486-r23 { fill: #e2e2e4 } +.terminal-2709441486-r24 { fill: #222231 } +.terminal-2709441486-r25 { fill: #1b1b28 } +.terminal-2709441486-r26 { fill: #414665 } +.terminal-2709441486-r27 { fill: #cacbcf } +.terminal-2709441486-r28 { fill: #7aa2f7;font-weight: bold } +.terminal-2709441486-r29 { fill: #2e2e35 } +.terminal-2709441486-r30 { fill: #aea8f8 } +.terminal-2709441486-r31 { fill: #aea8f8;font-weight: bold } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - BaseApp + BaseApp - - - - ʕ ᵔᴥᵔʔ smol k8s lab — Kubernetes distro config - - - 🌱 Select a k8s distro────────────────────────────────────────────────────── - -▔▔▔▔▔▔▔▔▔▔▔▔▔k3d is a lightweight wrapper to run k3s (Rancher Lab’s  -k3dminimal Kubernetes distribution) in Docker containers. Learn  -▁▁▁▁▁▁▁▁▁▁▁▁▁more: k3d.io. - -───────────────────────────────────────────────────Inputs below are optional - - -Adjust how many of each node type to deploy ───────────────────────────────── - -▔▔▔▔▔▔▔▔▔▔▔▔ -control plane:1workers:0 -▁▁▁▁▁▁▁▁▁▁▁▁ - -─────────────────────────────────────────────────────────────────────────────── - - - -Addextra options for the k3s install script ──────────────────────────────── - - -Add extra k3s options to pass to the k3s install script via a config file -stored in /Users/jesse/.cache/smol-k8s-lab/k3s.yaml - - - -secrets ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -encryption:true🚮 -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -disable:traefik🚮 -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -kubelet arg:max_pods=150🚮 -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -node label:ingress-ready=true🚮 -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - - - - - -───────────────────────────────────────────────────────────────➕ k3s option - - - - ?  Help  c  Config  f  Toggle footer  b  Back  f5  Speak  n  Next  a  add new option  + + + + ʕ ᵔᴥᵔʔ smol k8s lab — Kubernetes distro config + + + 🌱 Select a k8s distro────────────────────────────────────────────────────── + +▔▔▔▔▔▔▔▔▔▔▔▔▔k3d is a lightweight wrapper to run k3s (Rancher Lab’s  +k3dminimal Kubernetes distribution) in Docker containers. Learn  +▁▁▁▁▁▁▁▁▁▁▁▁▁more: k3d.io. + +───────────────────────────────────────────────────Inputs below are optional + + +Adjust how many of each node type to deploy ───────────────────────────────── + +▔▔▔▔▔▔▔▔▔▔▔▔ +control plane:1workers:0 +▁▁▁▁▁▁▁▁▁▁▁▁ + + +─────────────────────────────────────────────────────────────────────────────── + + + +Add extra options for the k3s install script ──────────────────────────────── + +k3s.yamlKubelet Config Options +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + + + +Add extra k3s options to pass to the k3s install script via a config  +file stored in /home/friend/.cache/smol-k8s-lab/k3s.yaml. Please use  +the second tab for extra kubelet args. + +secrets ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +encryption:true🚮 +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +disable:traefik🚮 +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +node label:ingress-ready=true🚮 +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + + + + + + +────────────────────────────────────────────────────────────── ➕ k3s option + + + diff --git a/docs/assets/images/screenshots/help_text.svg b/docs/assets/images/screenshots/help_text.svg index 01d193174..25304d535 100644 --- a/docs/assets/images/screenshots/help_text.svg +++ b/docs/assets/images/screenshots/help_text.svg @@ -1,4 +1,4 @@ - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - term + term - + - -                           🧸smol k8s lab - -Install slim Kubernetes distros + plus all your apps via Argo CD. - -Usage:smol-k8s-lab[OPTIONS] - -╭─ ʕ ᵔᴥᵔʔ Options ─────────────────────────────────────────────────────────────────────────────╮ - --c--config CONFIG_FILEFull path and name of the YAML config file to parse.  -Defaults to $XDG_CONFIG_HOME/smol-k8s-lab/config.yaml - --D--delete CLUSTER_NAMEDelete an existing cluster by name.                   - --i--interactiveNew! ⚙️ Interactively configures  smol-k8s-lab - --v--versionPrint the version of smol-k8s-lab (v2.0.1)            - --h--helpShow this message and exit.                           -╰───────────────────────────────────────────────── ♥ docs: github.com/small-hack/smol-k8s-lab─╯ + +                           🧸smol k8s lab + +Install slim Kubernetes distros + plus all your apps via Argo CD. + +Usage:smol-k8s-lab[OPTIONS] + +╭─ ʕ ᵔᴥᵔʔ Options ────────────────────────────────────────────────────────────────────────╮ + +-c--config CONFIG_FILEFull path and name of the YAML config file to parse.  +Defaults to $XDG_CONFIG_HOME/smol-k8s-lab/config.yaml + +-D--delete CLUSTER_NAMEDelete an existing cluster by name.                   + +-i--interactiveNew! ⚙️ Interactively configures  smol-k8s-lab + +-v--versionPrint the version of smol-k8s-lab (v2.0.2)            + +-h--helpShow this message and exit.                           +╰──────────────────────────────────────────── ♥ docs: github.com/small-hack/smol-k8s-lab─╯ diff --git a/docs/assets/images/screenshots/kind_config_screen.svg b/docs/assets/images/screenshots/kind_config_screen.svg index 4f35541a6..d78bb0de1 100644 --- a/docs/assets/images/screenshots/kind_config_screen.svg +++ b/docs/assets/images/screenshots/kind_config_screen.svg @@ -19,284 +19,282 @@ font-weight: 700; } - .terminal-2537165465-matrix { + .terminal-3166293807-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-2537165465-title { + .terminal-3166293807-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-2537165465-r1 { fill: #c5c8c6 } -.terminal-2537165465-r2 { fill: #e3e3e3 } -.terminal-2537165465-r3 { fill: #989898 } -.terminal-2537165465-r4 { fill: #e1e1e1 } -.terminal-2537165465-r5 { fill: #5f87ff } -.terminal-2537165465-r6 { fill: #5cc9fd } -.terminal-2537165465-r7 { fill: #c1ff87 } -.terminal-2537165465-r8 { fill: #21212c } -.terminal-2537165465-r9 { fill: #0178d4 } -.terminal-2537165465-r10 { fill: #808080 } -.terminal-2537165465-r11 { fill: #e3e3e4 } -.terminal-2537165465-r12 { fill: #a9a9ad } -.terminal-2537165465-r13 { fill: #5f87af;font-weight: bold } -.terminal-2537165465-r14 { fill: #e2e2e3 } -.terminal-2537165465-r15 { fill: #5f87ff;font-style: italic; } -.terminal-2537165465-r16 { fill: #5cc9fd;font-style: italic; } -.terminal-2537165465-r17 { fill: #1b1b24 } -.terminal-2537165465-r18 { fill: #bdd8ff } -.terminal-2537165465-r19 { fill: #cacbce } -.terminal-2537165465-r20 { fill: #5f87ff;font-weight: bold } -.terminal-2537165465-r21 { fill: #405495 } -.terminal-2537165465-r22 { fill: #565f89 } -.terminal-2537165465-r23 { fill: #5f87af } -.terminal-2537165465-r24 { fill: #404663 } -.terminal-2537165465-r25 { fill: #7aa2f7;font-weight: bold } -.terminal-2537165465-r26 { fill: #2d2d33 } -.terminal-2537165465-r27 { fill: #aea8f8 } -.terminal-2537165465-r28 { fill: #aea8f8;font-weight: bold } -.terminal-2537165465-r29 { fill: #232336;font-weight: bold } -.terminal-2537165465-r30 { fill: #7aa2f7 } + .terminal-3166293807-r1 { fill: #c5c8c6 } +.terminal-3166293807-r2 { fill: #e3e3e3 } +.terminal-3166293807-r3 { fill: #989898 } +.terminal-3166293807-r4 { fill: #e1e1e1 } +.terminal-3166293807-r5 { fill: #5f87ff } +.terminal-3166293807-r6 { fill: #5cc9fd } +.terminal-3166293807-r7 { fill: #c1ff87 } +.terminal-3166293807-r8 { fill: #21212c } +.terminal-3166293807-r9 { fill: #0178d4 } +.terminal-3166293807-r10 { fill: #808080 } +.terminal-3166293807-r11 { fill: #e3e3e4 } +.terminal-3166293807-r12 { fill: #a9a9ad } +.terminal-3166293807-r13 { fill: #5f87af;font-weight: bold } +.terminal-3166293807-r14 { fill: #e2e2e3 } +.terminal-3166293807-r15 { fill: #5f87ff;font-style: italic; } +.terminal-3166293807-r16 { fill: #5cc9fd;font-style: italic; } +.terminal-3166293807-r17 { fill: #1b1b24 } +.terminal-3166293807-r18 { fill: #bdd8ff } +.terminal-3166293807-r19 { fill: #cacbce } +.terminal-3166293807-r20 { fill: #5f87ff;font-weight: bold } +.terminal-3166293807-r21 { fill: #405495 } +.terminal-3166293807-r22 { fill: #565f89 } +.terminal-3166293807-r23 { fill: #5f87af } +.terminal-3166293807-r24 { fill: #404663 } +.terminal-3166293807-r25 { fill: #7aa2f7;font-weight: bold } +.terminal-3166293807-r26 { fill: #2d2d33 } +.terminal-3166293807-r27 { fill: #aea8f8 } +.terminal-3166293807-r28 { fill: #aea8f8;font-weight: bold } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - BaseApp + BaseApp - - - - ʕ ᵔᴥᵔʔ smol k8s lab — Kubernetes distro config - - - 🌱 Select a k8s distro────────────────────────────────────────────────────── - -▔▔▔▔▔▔▔▔▔▔▔▔▔kind runs k8s clusters using Docker containers as nodes.  -kindDesigned for testing k8s itself. Learn more: kind.sigs.k8s.io -▁▁▁▁▁▁▁▁▁▁▁▁▁ - -───────────────────────────────────────────────────Inputs below are optional - - -Adjust how many of each node type to deploy ───────────────────────────────── - -▔▔▔▔▔▔▔▔▔▔▔▔ -control plane:1workers:0 -▁▁▁▁▁▁▁▁▁▁▁▁ - -─────────────────────────────────────────────────────────────────────────────── - - - - Add extra options for kind config files ───────────────────────────────────── - -Networking optionsKubelet Config Options -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - - -Add key value pairs to kind networking config. - - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -ipFamily:ipv4🚮 -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - -disableDefaultCNI▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -:False🚮 -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -apiServerAddress:127.0.0.1🚮 -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -podSubnet:10.244.0.0/16🚮 -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - - - - -──────────────────────────────────────────────────────────────➕ kind option - - - - ?  Help  c  Config  f  Toggle footer  b  Back  f5  Speak  n  Next  a  add new option  + + + + ʕ ᵔᴥᵔʔ smol k8s lab — Kubernetes distro config + + + 🌱 Select a k8s distro────────────────────────────────────────────────────── + +▔▔▔▔▔▔▔▔▔▔▔▔▔kind runs k8s clusters using Docker containers as nodes.  +kindDesigned for testing k8s itself. Learn more: kind.sigs.k8s.io +▁▁▁▁▁▁▁▁▁▁▁▁▁ + +───────────────────────────────────────────────────Inputs below are optional + + +Adjust how many of each node type to deploy ───────────────────────────────── + +▔▔▔▔▔▔▔▔▔▔▔▔ +control plane:1workers:0 +▁▁▁▁▁▁▁▁▁▁▁▁ + + +─────────────────────────────────────────────────────────────────────────────── + + + + Add extra options for kind config files ───────────────────────────────────── + +Networking optionsKubelet Config Options +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + + +Add key value pairs to kind networking config. + + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +ipFamily:ipv4🚮 +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + +disableDefaultCNI▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +:False🚮 +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +apiServerAddress:127.0.0.1🚮 +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +podSubnet:10.244.0.0/16🚮 +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + + + + +───────────────────────────────────────────────────────────── ➕ kind option + + + diff --git a/docs/assets/images/screenshots/kind_config_screen2.svg b/docs/assets/images/screenshots/kind_config_screen2.svg index 98529b0b8..c843aa5af 100644 --- a/docs/assets/images/screenshots/kind_config_screen2.svg +++ b/docs/assets/images/screenshots/kind_config_screen2.svg @@ -19,282 +19,280 @@ font-weight: 700; } - .terminal-3013892574-matrix { + .terminal-1262153450-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-3013892574-title { + .terminal-1262153450-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-3013892574-r1 { fill: #c5c8c6 } -.terminal-3013892574-r2 { fill: #e3e3e3 } -.terminal-3013892574-r3 { fill: #989898 } -.terminal-3013892574-r4 { fill: #e1e1e1 } -.terminal-3013892574-r5 { fill: #5f87ff } -.terminal-3013892574-r6 { fill: #5cc9fd } -.terminal-3013892574-r7 { fill: #c1ff87 } -.terminal-3013892574-r8 { fill: #21212c } -.terminal-3013892574-r9 { fill: #808080 } -.terminal-3013892574-r10 { fill: #e3e3e4 } -.terminal-3013892574-r11 { fill: #a9a9ad } -.terminal-3013892574-r12 { fill: #5f87af;font-weight: bold } -.terminal-3013892574-r13 { fill: #e2e2e3 } -.terminal-3013892574-r14 { fill: #5f87ff;font-style: italic; } -.terminal-3013892574-r15 { fill: #5cc9fd;font-style: italic; } -.terminal-3013892574-r16 { fill: #1b1b24 } -.terminal-3013892574-r17 { fill: #bdd8ff } -.terminal-3013892574-r18 { fill: #cacbce } -.terminal-3013892574-r19 { fill: #405495 } -.terminal-3013892574-r20 { fill: #5f87ff;font-weight: bold } -.terminal-3013892574-r21 { fill: #565f89 } -.terminal-3013892574-r22 { fill: #404663 } -.terminal-3013892574-r23 { fill: #7aa2f7;font-weight: bold } -.terminal-3013892574-r24 { fill: #2d2d33 } -.terminal-3013892574-r25 { fill: #aea8f8 } -.terminal-3013892574-r26 { fill: #aea8f8;font-weight: bold } -.terminal-3013892574-r27 { fill: #232336;font-weight: bold } -.terminal-3013892574-r28 { fill: #7aa2f7 } + .terminal-1262153450-r1 { fill: #c5c8c6 } +.terminal-1262153450-r2 { fill: #e3e3e3 } +.terminal-1262153450-r3 { fill: #989898 } +.terminal-1262153450-r4 { fill: #e1e1e1 } +.terminal-1262153450-r5 { fill: #5f87ff } +.terminal-1262153450-r6 { fill: #5cc9fd } +.terminal-1262153450-r7 { fill: #c1ff87 } +.terminal-1262153450-r8 { fill: #21212c } +.terminal-1262153450-r9 { fill: #808080 } +.terminal-1262153450-r10 { fill: #e3e3e4 } +.terminal-1262153450-r11 { fill: #a9a9ad } +.terminal-1262153450-r12 { fill: #5f87af;font-weight: bold } +.terminal-1262153450-r13 { fill: #e2e2e3 } +.terminal-1262153450-r14 { fill: #5f87ff;font-style: italic; } +.terminal-1262153450-r15 { fill: #5cc9fd;font-style: italic; } +.terminal-1262153450-r16 { fill: #1b1b24 } +.terminal-1262153450-r17 { fill: #bdd8ff } +.terminal-1262153450-r18 { fill: #cacbce } +.terminal-1262153450-r19 { fill: #405495 } +.terminal-1262153450-r20 { fill: #5f87ff;font-weight: bold } +.terminal-1262153450-r21 { fill: #565f89 } +.terminal-1262153450-r22 { fill: #404663 } +.terminal-1262153450-r23 { fill: #7aa2f7;font-weight: bold } +.terminal-1262153450-r24 { fill: #2d2d33 } +.terminal-1262153450-r25 { fill: #aea8f8 } +.terminal-1262153450-r26 { fill: #aea8f8;font-weight: bold } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - BaseApp + BaseApp - - - - ʕ ᵔᴥᵔʔ smol k8s lab — Kubernetes distro config - - - 🌱 Select a k8s distro────────────────────────────────────────────────────── - -▔▔▔▔▔▔▔▔▔▔▔▔▔kind runs k8s clusters using Docker containers as nodes.  -kindDesigned for testing k8s itself. Learn more: kind.sigs.k8s.io -▁▁▁▁▁▁▁▁▁▁▁▁▁ - -───────────────────────────────────────────────────Inputs below are optional - - -Adjust how many of each node type to deploy ───────────────────────────────── - -▔▔▔▔▔▔▔▔▔▔▔▔ -control plane:1workers:0 -▁▁▁▁▁▁▁▁▁▁▁▁ - -─────────────────────────────────────────────────────────────────────────────── - - - - Add extra options for kind config files ───────────────────────────────────── - -Networking optionsKubelet Config Options -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - - -Add key value pairs to pass to your kubeletconfiguration. - - - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -node-labels:ingress-ready=true🚮 -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -max-pods:110🚮 -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -pods-per-core:0🚮 -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -resolv-conf:/etc/resolv.conf🚮 -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - - - -──────────────────────────────────────────────────────────────➕ kind option - - - - ?  Help  c  Config  f  Toggle footer  b  Back  f5  Speak  n  Next  a  add new option  + + + + ʕ ᵔᴥᵔʔ smol k8s lab — Kubernetes distro config + + + 🌱 Select a k8s distro────────────────────────────────────────────────────── + +▔▔▔▔▔▔▔▔▔▔▔▔▔kind runs k8s clusters using Docker containers as nodes.  +kindDesigned for testing k8s itself. Learn more: kind.sigs.k8s.io +▁▁▁▁▁▁▁▁▁▁▁▁▁ + +───────────────────────────────────────────────────Inputs below are optional + + +Adjust how many of each node type to deploy ───────────────────────────────── + +▔▔▔▔▔▔▔▔▔▔▔▔ +control plane:1workers:0 +▁▁▁▁▁▁▁▁▁▁▁▁ + + +─────────────────────────────────────────────────────────────────────────────── + + + + Add extra options for kind config files ───────────────────────────────────── + +Networking optionsKubelet Config Options +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + + +Add key value pairs to pass to your kubeletconfiguration. + + + + + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +node-labels:ingress-ready=true🚮 +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +resolv-conf:etc/resolv.conf🚮 +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +max-pods:110🚮 +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + + + + + +───────────────────────────────────────────────────────────── ➕ kind option + + + diff --git a/docs/assets/images/screenshots/modify_global_parameters_modal_screen.svg b/docs/assets/images/screenshots/modify_global_parameters_modal_screen.svg index 619f2a219..e697257d8 100644 --- a/docs/assets/images/screenshots/modify_global_parameters_modal_screen.svg +++ b/docs/assets/images/screenshots/modify_global_parameters_modal_screen.svg @@ -19,298 +19,297 @@ font-weight: 700; } - .terminal-74387819-matrix { + .terminal-3319265729-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-74387819-title { + .terminal-3319265729-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-74387819-r1 { fill: #e0e0e0 } -.terminal-74387819-r2 { fill: #656565 } -.terminal-74387819-r3 { fill: #474747 } -.terminal-74387819-r4 { fill: #c5c8c6 } -.terminal-74387819-r5 { fill: #646464 } -.terminal-74387819-r6 { fill: #304070 } -.terminal-74387819-r7 { fill: #2f5b70 } -.terminal-74387819-r8 { fill: #70506e } -.terminal-74387819-r9 { fill: #2f5b70;font-style: italic; } -.terminal-74387819-r10 { fill: #587040 } -.terminal-74387819-r11 { fill: #18181c } -.terminal-74387819-r12 { fill: #20212c } -.terminal-74387819-r13 { fill: #6b416e;font-weight: bold } -.terminal-74387819-r14 { fill: #2f5b70;font-weight: bold } -.terminal-74387819-r15 { fill: #643e67;font-weight: bold } -.terminal-74387819-r16 { fill: #566170 } -.terminal-74387819-r17 { fill: #3b4b6d } -.terminal-74387819-r18 { fill: #18181e;font-weight: bold } -.terminal-74387819-r19 { fill: #151519 } -.terminal-74387819-r20 { fill: #505968 } -.terminal-74387819-r21 { fill: #5b5c5d } -.terminal-74387819-r22 { fill: #5f87ff } -.terminal-74387819-r23 { fill: #ffaff9 } -.terminal-74387819-r24 { fill: #5cc9fd } -.terminal-74387819-r25 { fill: #5cc9fd;font-style: italic; } -.terminal-74387819-r26 { fill: #c1ff87 } -.terminal-74387819-r27 { fill: #e1e1e3 } -.terminal-74387819-r28 { fill: #1e1e2d } -.terminal-74387819-r29 { fill: #181824 } -.terminal-74387819-r30 { fill: #bdd8ff } -.terminal-74387819-r31 { fill: #c9cace } -.terminal-74387819-r32 { fill: #222222 } -.terminal-74387819-r33 { fill: #2e3047 } -.terminal-74387819-r34 { fill: #5e7aba;font-weight: bold } -.terminal-74387819-r35 { fill: #7a7c86 } -.terminal-74387819-r36 { fill: #1e2027 } -.terminal-74387819-r37 { fill: #24242f } -.terminal-74387819-r38 { fill: #19181b;font-weight: bold } -.terminal-74387819-r39 { fill: #191919 } -.terminal-74387819-r40 { fill: #aea8f8 } -.terminal-74387819-r41 { fill: #646465 } -.terminal-74387819-r42 { fill: #304050 } -.terminal-74387819-r43 { fill: #3c434d } -.terminal-74387819-r44 { fill: #181820;font-weight: bold } + .terminal-3319265729-r1 { fill: #e0e0e0 } +.terminal-3319265729-r2 { fill: #656565 } +.terminal-3319265729-r3 { fill: #474747 } +.terminal-3319265729-r4 { fill: #c5c8c6 } +.terminal-3319265729-r5 { fill: #646464 } +.terminal-3319265729-r6 { fill: #304070 } +.terminal-3319265729-r7 { fill: #2f5b70 } +.terminal-3319265729-r8 { fill: #70506e } +.terminal-3319265729-r9 { fill: #2f5b70;font-style: italic; } +.terminal-3319265729-r10 { fill: #587040 } +.terminal-3319265729-r11 { fill: #18181c } +.terminal-3319265729-r12 { fill: #20212c } +.terminal-3319265729-r13 { fill: #6b416e;font-weight: bold } +.terminal-3319265729-r14 { fill: #2f5b70;font-weight: bold } +.terminal-3319265729-r15 { fill: #643e67;font-weight: bold } +.terminal-3319265729-r16 { fill: #566170 } +.terminal-3319265729-r17 { fill: #3b4b6d } +.terminal-3319265729-r18 { fill: #18181e;font-weight: bold } +.terminal-3319265729-r19 { fill: #151519 } +.terminal-3319265729-r20 { fill: #505968 } +.terminal-3319265729-r21 { fill: #5b5c5d } +.terminal-3319265729-r22 { fill: #5f87ff } +.terminal-3319265729-r23 { fill: #ffaff9 } +.terminal-3319265729-r24 { fill: #5cc9fd } +.terminal-3319265729-r25 { fill: #5cc9fd;font-style: italic; } +.terminal-3319265729-r26 { fill: #c1ff87 } +.terminal-3319265729-r27 { fill: #e1e1e3 } +.terminal-3319265729-r28 { fill: #1e1e2d } +.terminal-3319265729-r29 { fill: #181824 } +.terminal-3319265729-r30 { fill: #bdd8ff } +.terminal-3319265729-r31 { fill: #c9cace } +.terminal-3319265729-r32 { fill: #222222 } +.terminal-3319265729-r33 { fill: #2e3047 } +.terminal-3319265729-r34 { fill: #5e7aba;font-weight: bold } +.terminal-3319265729-r35 { fill: #7a7c86 } +.terminal-3319265729-r36 { fill: #24242f } +.terminal-3319265729-r37 { fill: #242630 } +.terminal-3319265729-r38 { fill: #1c1c1f;font-weight: bold } +.terminal-3319265729-r39 { fill: #1c1c1c } +.terminal-3319265729-r40 { fill: #aea8f8 } +.terminal-3319265729-r41 { fill: #646465 } +.terminal-3319265729-r42 { fill: #304050 } +.terminal-3319265729-r43 { fill: #3c434d } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - BaseApp + BaseApp - - - - ʕ ᵔᴥᵔʔ smol k8s lab — Apps Configuration (now with more 🦑) - - -selectapps──────── 🔧 configure parameters for Argo Cd───────────── -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -argo-cd -cert-managerArgo CD Application Configuration -cilium -cnpg-operator -external-secret…▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -infisicalrepo:https://github.com/small-hack -ingress-nginx▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ -k8tz -────────────────────────────────────────────────────────────────────── - - -Modifyglobally available Argo CD ApplicationSet templating values. - - - - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -cluster issuer:letsencrypt-staging -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -time zone:Europe/Amsterdam -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ -▇▇ -▁▁▁external ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -────secrets:bitwarden -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -new key name -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - - - -──────────────────────────────────────────────────────────────close── - - 📓 Argo Cd notes──────────────────────────────────────────────────────────── - -Argo CD is a declarative, GitOps continuous delivery tool for Kubernetes. -▃▃ -smol-k8s-lab installs Argo CD with helm initially to support initial  -configuration of your admin user and disabling of dex. After your OIDC  -provider is configured, Argo CD begins managing itself using the below  -configured Argo CD repo. -─────────────────────────────────────────────────────────────────────────────── - - - - ?  Help  c  Config  f  Toggle footer  b  Back  f5  Speak  n  New Cluster  + + + + ʕ ᵔᴥᵔʔ smol k8s lab — Apps Configuration (now with more 🦑) + + +selectapps──────── 🔧 configure parameters for Argo Cd───────────── +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +argo-cd +cert-managerArgo CD Application Configuration +cilium +cnpg-operator +external-secret…▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +infisicalrepo:https://github.com/small-hack +ingress-nginx▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +k8tz +────────────────────────────────────────────────────────────────────── + + +Modifyglobally available Argo CD ApplicationSet templating values. + + + + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +cluster issuer:letsencrypt-staging +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +time zone:Europe/Amsterdam +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + +▁▁▁external ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▄▄ +────secrets:none +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +new key name +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + + + +──────────────────────────────────────────────────────────────close +─────────────────────────────────────────────────── + + 📓 Argo Cd notes──────────────────────────────────────────────────────────── + +Argo CD is a declarative, GitOps continuous delivery tool for Kubernetes. +▃▃ +smol-k8s-lab installs Argo CD with helm initially to support initial  +configuration of your admin user and disabling of dex. After your OIDC  +provider is configured, Argo CD begins managing itself using the below  +configured Argo CD repo. +─────────────────────────────────────────────────────────────────────────────── + + + diff --git a/docs/assets/images/screenshots/new_app_modal_screen.svg b/docs/assets/images/screenshots/new_app_modal_screen.svg index c52c082e1..ebf2b50e0 100644 --- a/docs/assets/images/screenshots/new_app_modal_screen.svg +++ b/docs/assets/images/screenshots/new_app_modal_screen.svg @@ -19,297 +19,296 @@ font-weight: 700; } - .terminal-645239681-matrix { + .terminal-2468213436-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-645239681-title { + .terminal-2468213436-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-645239681-r1 { fill: #e0e0e0 } -.terminal-645239681-r2 { fill: #656565 } -.terminal-645239681-r3 { fill: #474747 } -.terminal-645239681-r4 { fill: #c5c8c6 } -.terminal-645239681-r5 { fill: #646464 } -.terminal-645239681-r6 { fill: #304070 } -.terminal-645239681-r7 { fill: #2f5b70 } -.terminal-645239681-r8 { fill: #70506e } -.terminal-645239681-r9 { fill: #2f5b70;font-style: italic; } -.terminal-645239681-r10 { fill: #587040 } -.terminal-645239681-r11 { fill: #18181c } -.terminal-645239681-r12 { fill: #20212c } -.terminal-645239681-r13 { fill: #6b416e;font-weight: bold } -.terminal-645239681-r14 { fill: #2f5b70;font-weight: bold } -.terminal-645239681-r15 { fill: #643e67;font-weight: bold } -.terminal-645239681-r16 { fill: #566170 } -.terminal-645239681-r17 { fill: #3b4b6d } -.terminal-645239681-r18 { fill: #18181e;font-weight: bold } -.terminal-645239681-r19 { fill: #151519 } -.terminal-645239681-r20 { fill: #505968 } -.terminal-645239681-r21 { fill: #5b5c5d } -.terminal-645239681-r22 { fill: #5f87ff } -.terminal-645239681-r23 { fill: #5cc9fd } -.terminal-645239681-r24 { fill: #5cc9fd;font-style: italic; } -.terminal-645239681-r25 { fill: #c1ff87 } -.terminal-645239681-r26 { fill: #e1e1e3 } -.terminal-645239681-r27 { fill: #1e1e2d } -.terminal-645239681-r28 { fill: #181824 } -.terminal-645239681-r29 { fill: #1e1e1e } -.terminal-645239681-r30 { fill: #7a7c86 } -.terminal-645239681-r31 { fill: #c9cace } -.terminal-645239681-r32 { fill: #222222 } -.terminal-645239681-r33 { fill: #2e3047 } -.terminal-645239681-r34 { fill: #5e7aba;font-weight: bold } -.terminal-645239681-r35 { fill: #242630 } -.terminal-645239681-r36 { fill: #24242f } -.terminal-645239681-r37 { fill: #3b4b6d;font-weight: bold } -.terminal-645239681-r38 { fill: #1c1c1c } -.terminal-645239681-r39 { fill: #aea8f8 } -.terminal-645239681-r40 { fill: #646465 } -.terminal-645239681-r41 { fill: #304050 } -.terminal-645239681-r42 { fill: #3c434d } -.terminal-645239681-r43 { fill: #181820;font-weight: bold } + .terminal-2468213436-r1 { fill: #e0e0e0 } +.terminal-2468213436-r2 { fill: #656565 } +.terminal-2468213436-r3 { fill: #474747 } +.terminal-2468213436-r4 { fill: #c5c8c6 } +.terminal-2468213436-r5 { fill: #646464 } +.terminal-2468213436-r6 { fill: #304070 } +.terminal-2468213436-r7 { fill: #2f5b70 } +.terminal-2468213436-r8 { fill: #70506e } +.terminal-2468213436-r9 { fill: #2f5b70;font-style: italic; } +.terminal-2468213436-r10 { fill: #587040 } +.terminal-2468213436-r11 { fill: #18181c } +.terminal-2468213436-r12 { fill: #20212c } +.terminal-2468213436-r13 { fill: #6b416e;font-weight: bold } +.terminal-2468213436-r14 { fill: #2f5b70;font-weight: bold } +.terminal-2468213436-r15 { fill: #643e67;font-weight: bold } +.terminal-2468213436-r16 { fill: #566170 } +.terminal-2468213436-r17 { fill: #3b4b6d } +.terminal-2468213436-r18 { fill: #18181e;font-weight: bold } +.terminal-2468213436-r19 { fill: #151519 } +.terminal-2468213436-r20 { fill: #505968 } +.terminal-2468213436-r21 { fill: #5b5c5d } +.terminal-2468213436-r22 { fill: #5f87ff } +.terminal-2468213436-r23 { fill: #5cc9fd } +.terminal-2468213436-r24 { fill: #5cc9fd;font-style: italic; } +.terminal-2468213436-r25 { fill: #c1ff87 } +.terminal-2468213436-r26 { fill: #e1e1e3 } +.terminal-2468213436-r27 { fill: #1e1e2d } +.terminal-2468213436-r28 { fill: #181824 } +.terminal-2468213436-r29 { fill: #1e1e1e } +.terminal-2468213436-r30 { fill: #7a7c86 } +.terminal-2468213436-r31 { fill: #c9cace } +.terminal-2468213436-r32 { fill: #222222 } +.terminal-2468213436-r33 { fill: #2e3047 } +.terminal-2468213436-r34 { fill: #5e7aba;font-weight: bold } +.terminal-2468213436-r35 { fill: #24242f } +.terminal-2468213436-r36 { fill: #242630 } +.terminal-2468213436-r37 { fill: #3b4b6d;font-weight: bold } +.terminal-2468213436-r38 { fill: #1c1c1c } +.terminal-2468213436-r39 { fill: #aea8f8 } +.terminal-2468213436-r40 { fill: #646465 } +.terminal-2468213436-r41 { fill: #304050 } +.terminal-2468213436-r42 { fill: #3c434d } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - BaseApp + BaseApp - - - - ʕ ᵔᴥᵔʔ smol k8s lab — Apps Configuration (now with more 🦑) - - -selectapps──────── 🔧 configure parameters for Argo Cd───────────── -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -argo-cd -cert-managerArgo CD Application Configuration -cilium -cnpg-operator -external-secret…▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -infisicalrepo:https://github.com/small-hack -ingress-nginx▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ -k8tz -k8up▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -keplerpath:argocd/app_of_apps/ -────────────────────────────────────────────────────────────────────── - - -Please enter a name and description for your Argo CD Application. - - - - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -Name of your Argo CD Application -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▇▇ -▁▁▁(optional) Description of your Argo CD Application -──── -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -submit -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - - -─────────────────────────────────────────────────────────────cancel -─────────────────────────────────────────────────── - - 📓 Argo Cd notes──────────────────────────────────────────────────────────── - -Argo CD is a declarative, GitOps continuous delivery tool for Kubernetes. -▃▃ -smol-k8s-lab installs Argo CD with helm initially to support initial  -configuration of your admin user and disabling of dex. After your OIDC  -provider is configured, Argo CD begins managing itself using the below  -configured Argo CD repo. -─────────────────────────────────────────────────────────────────────────────── - - - - ?  Help  c  Config  f  Toggle footer  b  Back  f5  Speak  n  New Cluster  + + + + ʕ ᵔᴥᵔʔ smol k8s lab — Apps Configuration (now with more 🦑) + + +selectapps──────── 🔧 configure parameters for Argo Cd───────────── +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +argo-cd +cert-managerArgo CD Application Configuration +cilium +cnpg-operator +external-secret…▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +infisicalrepo:https://github.com/small-hack +ingress-nginx▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +k8tz +k8up▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +keplerpath:argocd/app_of_apps/ +────────────────────────────────────────────────────────────────────── + + +Please enter a name and description for your Argo CD Application. + + + + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +Name of your Argo CD Application +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +▁▁▁(optional) Description of your Argo CD Application▄▄ +──── +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +submit +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + + +─────────────────────────────────────────────────────────────cancel +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +─────────────────────────────────────────────────── + + 📓 Argo Cd notes──────────────────────────────────────────────────────────── + +Argo CD is a declarative, GitOps continuous delivery tool for Kubernetes. +▃▃ +smol-k8s-lab installs Argo CD with helm initially to support initial  +configuration of your admin user and disabling of dex. After your OIDC  +provider is configured, Argo CD begins managing itself using the below  +configured Argo CD repo. +─────────────────────────────────────────────────────────────────────────────── + + + diff --git a/docs/assets/images/screenshots/start_screen.svg b/docs/assets/images/screenshots/start_screen.svg index 4b8a2df78..d73c6be7b 100644 --- a/docs/assets/images/screenshots/start_screen.svg +++ b/docs/assets/images/screenshots/start_screen.svg @@ -19,237 +19,239 @@ font-weight: 700; } - .terminal-752128070-matrix { + .terminal-2580435511-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-752128070-title { + .terminal-2580435511-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-752128070-r1 { fill: #e1e1e1 } -.terminal-752128070-r2 { fill: #c5c8c6 } -.terminal-752128070-r3 { fill: #c1ff87 } -.terminal-752128070-r4 { fill: #5f87ff } -.terminal-752128070-r5 { fill: #5cc9fd } -.terminal-752128070-r6 { fill: #ffaff9 } -.terminal-752128070-r7 { fill: #5cc9fd;font-style: italic; } -.terminal-752128070-r8 { fill: #e2e2e4 } -.terminal-752128070-r9 { fill: #232336 } -.terminal-752128070-r10 { fill: #80bb4d } -.terminal-752128070-r11 { fill: #414767 } -.terminal-752128070-r12 { fill: #cbcbd0 } -.terminal-752128070-r13 { fill: #1e1e1e } -.terminal-752128070-r14 { fill: #7aa2f7;font-weight: bold } -.terminal-752128070-r15 { fill: #2e2e38 } + .terminal-2580435511-r1 { fill: #e1e1e1 } +.terminal-2580435511-r2 { fill: #c5c8c6 } +.terminal-2580435511-r3 { fill: #c1ff87 } +.terminal-2580435511-r4 { fill: #5f87ff } +.terminal-2580435511-r5 { fill: #5cc9fd } +.terminal-2580435511-r6 { fill: #ffaff9 } +.terminal-2580435511-r7 { fill: #5cc9fd;font-style: italic; } +.terminal-2580435511-r8 { fill: #e2e2e4 } +.terminal-2580435511-r9 { fill: #232336 } +.terminal-2580435511-r10 { fill: #80bb4d } +.terminal-2580435511-r11 { fill: #414767 } +.terminal-2580435511-r12 { fill: #cbcbd0 } +.terminal-2580435511-r13 { fill: #1e1e1e } +.terminal-2580435511-r14 { fill: #7aa2f7;font-weight: bold } +.terminal-2580435511-r15 { fill: #2e2e38 } +.terminal-2580435511-r16 { fill: #232336;font-weight: bold } +.terminal-2580435511-r17 { fill: #7aa2f7 } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - BaseApp + BaseApp - - - - - - - - - - - - - - - - - - -                     _       _    ___            _       _      - ___ _ __ ___   ___ | |     | | _( _ ) ___      | | __ _| |__   -/ __| '_ ` _ \ / _ \| |_____| |/ / _ \/ __|_____| |/ _` | '_ \  -\__ \ | | | | | (_) | |_____|   < (_) \__ \_____| | (_| | |_) | -|___/_| |_| |_|\___/|_|     |_|\_\___/|___/     |_|\__,_|_.__/  - - - -────────────Create a newcluster with the name below ───────────── - - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -lovely-knuffel✨ New Cluster -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - -─────────────────────────────────────────────────────────────────── - - - - - - - - - - - - - - - - + + + + + + +                     _       _    ___            _       _      + ___ _ __ ___   ___ | |     | | _( _ ) ___      | | __ _| |__   +/ __| '_ ` _ \ / _ \| |_____| |/ / _ \/ __|_____| |/ _` | '_ \  +\__ \ | | | | | (_) | |_____|   < (_) \__ \_____| | (_| | |_) | +|___/_| |_| |_|\___/|_|     |_|\_\___/|___/     |_|\__,_|_.__/  + + + + + + + + + + + + + + + + + + + + + +────────────Create a newcluster with the name below ───────────── + + + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +leuke-raccoon✨ New Cluster +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + + +─────────────────────────────────────────────────────────────────── + + + + + + + + ?  Help  c  Config  f  Toggle footer  f5  Speak  n  New Cluster  diff --git a/docs/assets/images/screenshots/tui_config_screen.svg b/docs/assets/images/screenshots/tui_config_screen.svg index e6b864ed7..b8175c690 100644 --- a/docs/assets/images/screenshots/tui_config_screen.svg +++ b/docs/assets/images/screenshots/tui_config_screen.svg @@ -19,238 +19,240 @@ font-weight: 700; } - .terminal-2017889349-matrix { + .terminal-3155865908-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-2017889349-title { + .terminal-3155865908-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-2017889349-r1 { fill: #c5c8c6 } -.terminal-2017889349-r2 { fill: #e3e3e3 } -.terminal-2017889349-r3 { fill: #989898 } -.terminal-2017889349-r4 { fill: #e1e1e1 } -.terminal-2017889349-r5 { fill: #5f87ff } -.terminal-2017889349-r6 { fill: #5cc9fd } -.terminal-2017889349-r7 { fill: #5cc9fd;font-style: italic; } -.terminal-2017889349-r8 { fill: #c1ff87 } -.terminal-2017889349-r9 { fill: #7e8eaa } -.terminal-2017889349-r10 { fill: #e2e2e3 } -.terminal-2017889349-r11 { fill: #21212c } -.terminal-2017889349-r12 { fill: #0178d4 } -.terminal-2017889349-r13 { fill: #bdd8ff } -.terminal-2017889349-r14 { fill: #e3e3e4 } -.terminal-2017889349-r15 { fill: #1b1b24 } -.terminal-2017889349-r16 { fill: #cacbce } + .terminal-3155865908-r1 { fill: #c5c8c6 } +.terminal-3155865908-r2 { fill: #e3e3e3 } +.terminal-3155865908-r3 { fill: #989898 } +.terminal-3155865908-r4 { fill: #e1e1e1 } +.terminal-3155865908-r5 { fill: #5f87ff } +.terminal-3155865908-r6 { fill: #5cc9fd } +.terminal-3155865908-r7 { fill: #5cc9fd;font-style: italic; } +.terminal-3155865908-r8 { fill: #c1ff87 } +.terminal-3155865908-r9 { fill: #7e8eaa } +.terminal-3155865908-r10 { fill: #e2e2e3 } +.terminal-3155865908-r11 { fill: #21212c } +.terminal-3155865908-r12 { fill: #0178d4 } +.terminal-3155865908-r13 { fill: #bdd8ff } +.terminal-3155865908-r14 { fill: #e3e3e4 } +.terminal-3155865908-r15 { fill: #1b1b24 } +.terminal-3155865908-r16 { fill: #cacbce } +.terminal-3155865908-r17 { fill: #232336;font-weight: bold } +.terminal-3155865908-r18 { fill: #7aa2f7 } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - BaseApp + BaseApp - - - - ʕ ᵔᴥᵔʔ smol k8s lab — Screen title: Configure Terminal UI and Access… - - - - - 🖥️ ConfigureTerminal UI──────────────────────────────────────────────── - - -These parameters are all related to the TUI itself. - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -enabled:footer:k9s: -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -k9s command:applications.argoproj.io -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - - -────────────────────────────────────────────────────────────────────────── - - - ♿️ ConfigureAccessibility───────────────────────────────────────────── - - - - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -bell on focus:bell on error: -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - - -TTS ▔▔▔▔▔▔▔▔TTS on ▔▔▔▔▔▔▔▔TTS on ▔▔▔▔▔▔▔▔ -screen key focus: -titles:▁▁▁▁▁▁▁▁press:▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - - - -speech ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -program:say -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - -────────────────────────────────────────────────────────────────────────── - - - + + + + ʕ ᵔᴥᵔʔ smol k8s lab — Screen title: Configure Terminal UI and Access… + + + + + 🖥️ ConfigureTerminal UI──────────────────────────────────────────────── + + +These parameters are all related to the TUI itself. + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +enabled:footer:k9s: +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +k9s command:applications.argoproj.io +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + + +────────────────────────────────────────────────────────────────────────── + + + ♿️ ConfigureAccessibility───────────────────────────────────────────── + + + + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +bell on focus:bell on error: +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + + +TTS ▔▔▔▔▔▔▔▔TTS on ▔▔▔▔▔▔▔▔TTS on ▔▔▔▔▔▔▔▔ +screen key focus: +titles:▁▁▁▁▁▁▁▁press:▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + + +speech ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +program:say +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + + +────────────────────────────────────────────────────────────────────────── + + + + ?  Help  c  Config  f  Toggle footer  b  Back  f5  Speak  diff --git a/docs/assets/images/screenshots/tui_help_screen.svg b/docs/assets/images/screenshots/tui_help_screen.svg index 0c10284e6..973eb8335 100644 --- a/docs/assets/images/screenshots/tui_help_screen.svg +++ b/docs/assets/images/screenshots/tui_help_screen.svg @@ -19,235 +19,237 @@ font-weight: 700; } - .terminal-3470232756-matrix { + .terminal-3887548701-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-3470232756-title { + .terminal-3887548701-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-3470232756-r1 { fill: #646464 } -.terminal-3470232756-r2 { fill: #c5c8c6 } -.terminal-3470232756-r3 { fill: #4f6fcf } -.terminal-3470232756-r4 { fill: #5cc9fd } -.terminal-3470232756-r5 { fill: #5cc9fd;font-style: italic; } -.terminal-3470232756-r6 { fill: #5f87af } -.terminal-3470232756-r7 { fill: #808080 } -.terminal-3470232756-r8 { fill: #e2e2e4 } -.terminal-3470232756-r9 { fill: #bdd8ff;font-weight: bold } -.terminal-3470232756-r10 { fill: #5f87ff } -.terminal-3470232756-r11 { fill: #7aa2f7 } -.terminal-3470232756-r12 { fill: #3a3a3a } -.terminal-3470232756-r13 { fill: #5f87af;font-style: italic; } + .terminal-3887548701-r1 { fill: #646464 } +.terminal-3887548701-r2 { fill: #c5c8c6 } +.terminal-3887548701-r3 { fill: #4f6fcf } +.terminal-3887548701-r4 { fill: #5cc9fd } +.terminal-3887548701-r5 { fill: #5cc9fd;font-style: italic; } +.terminal-3887548701-r6 { fill: #5f87af } +.terminal-3887548701-r7 { fill: #808080 } +.terminal-3887548701-r8 { fill: #e2e2e4 } +.terminal-3887548701-r9 { fill: #bdd8ff;font-weight: bold } +.terminal-3887548701-r10 { fill: #5f87ff } +.terminal-3887548701-r11 { fill: #7aa2f7 } +.terminal-3887548701-r12 { fill: #3a3a3a } +.terminal-3887548701-r13 { fill: #5f87af;font-style: italic; } +.terminal-3887548701-r14 { fill: #181820;font-weight: bold } +.terminal-3887548701-r15 { fill: #3b4b6d } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - BaseApp + BaseApp - - - - - -Welcome to smol-k8s-lab─────────────────────────────────────────────────── - -Use your 🐁 to click anything in the UI ✨ Or use the following key  -bindings. For additional help, check out the docs - - - Key Binding  Description                                         - - ➡            complete suggestion in input field                  - - - ⬆/⬇          navigate up and down the app selection list         - - - tab          focus next element                                  - - - shift+tab    focus previous element                              - - - ↩ enter      save input and/or press button                      - - - ?,h          toggle help screen                                  - - - spacebar     select selection option                             - - - meta+click   open link; terminal dependent, so meta can be shift -  option, windowsKey, command, or control            - - - escape,q     leave current screen and go home                    -▂▂ - - c            launch the config screen                            - - - - -─────────────────────────────────────────────── made with 💙 + 🐍 + textual - - - + + + + + +Welcome to smol-k8s-lab─────────────────────────────────────────────────── + +Use your 🐁 to click anything in the UI ✨ Or use the following key  +bindings. For additional help, check out the docs + + + Key Binding  Description                                         + + ➡            complete suggestion in input field                  + + + ⬆/⬇          navigate up and down the app selection list         + + + tab          focus next element                                  + + + shift+tab    focus previous element                              + + + ↩ enter      save input and/or press button                      + + + ?,h          toggle help screen                                  + + + spacebar     select selection option                             + + + meta+click   open link; terminal dependent, so meta can be shift +  option, windowsKey, command, or control            + + + escape,q     leave current screen and go home                    +▂▂ + + c            launch the config screen                            + + + + +─────────────────────────────────────────────── made with 💙 + 🐍 + textual + + + q  Exit Help Screen  ?  Help  c  Config  f  Toggle footer  f5  Speak  diff --git a/docs/config_file.md b/docs/config_file.md index 20d59c915..215284f66 100644 --- a/docs/config_file.md +++ b/docs/config_file.md @@ -98,7 +98,7 @@ k8s_distros: node-label: - "ingress-ready=true" kubelet-arg: - - "max_pods=150" + - "max-pods=150" # not yet adjustable on k3s at this time nodes: control_plane: 1 @@ -123,7 +123,7 @@ k8s_distros: disable: - "traefik" kubelet-arg: - - "max_pods=150" + - "max-pods=150" node-label: - "ingress-ready=true" # how many dockerized k3s nodes to deploy @@ -143,9 +143,9 @@ k8s_distros: kubelet_extra_args: # all these options are defaults node-labels: "ingress-ready=true" - maxPods: 110 - podsPerCore: 0 - resolvConf: "/etc/resolv.conf" + max-pods: 110 + pods-per-core: 0 + resolv-conf: "/etc/resolv.conf" networking_args: # all these options are defaults ipFamily: "ipv4" @@ -229,6 +229,6 @@ apps_global_config: cluster_issuer: "letsencrypt-staging" # change to your tz: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List time_zone: "Europe/Amsterdam" - # always deploy external secrets. *Must be a string of "" (don't use external secrets) or "bitwarden" to use bitwarden for external secrets* + # always deploy external secrets. *Must be a string of "none" (don't use external secrets) or "bitwarden" to use bitwarden for external secrets* external_secrets: "bitwarden" ``` diff --git a/docs/tui/distro_screen.md b/docs/tui/distro_screen.md index 42e26e0a5..ac0b30342 100644 --- a/docs/tui/distro_screen.md +++ b/docs/tui/distro_screen.md @@ -1,6 +1,6 @@ The "k8s distro config" screen is the first screen you will see in the TUI when creating a new cluster: -[terminal screenshot of smol-k8s-lab k8s distro configuration screen . Features three vertically stacked boxes. Box 1: title: 🌱 Select a k8s distro. Contains a drop down menu on the left hand side that defaults to k3d on macOS and k3s on Linux. On the right hand side there is a description of the distro, which in this case is k3d is a lightweight wrapper to run k3s (Rancher Lab's minimal Kubernetes distro) in Docker containers. Subtitle: Inputs below are optional. Box 2: Title: Adjust how many of each node type to deploy. Contains two input fields: input 1: control plane is set to 1. input 2: workers is set to 0. Box 3: Title: Add extra options for the k3s install script. Contains text: Add extra k3s options to pass to the k3s install script via a config file stored in $XDG_CACHE_HOME/smol-k8s-lab/k3s.yml. Box 3 also contains input fields for: secrets encryption: true, disable: traefik, kubelet arg: max_pods=150, node label: ingress-ready=true. Each input field has a 🚮 button next to it. Box 3 subtitle: ➕ k3s option](../../assets/images/screenshots/distro_config_screen.svg) +[terminal screenshot of smol-k8s-lab k8s distro configuration screen . Features three vertically stacked boxes. Box 1: title: 🌱 Select a k8s distro. Contains a drop down menu on the left hand side that defaults to k3d on macOS and k3s on Linux. On the right hand side there is a description of the distro, which in this case is k3d is a lightweight wrapper to run k3s (Rancher Lab's minimal Kubernetes distro) in Docker containers. Subtitle: Inputs below are optional. Box 2: Title: Adjust how many of each node type to deploy. Contains two input fields: input 1: control plane is set to 1. input 2: workers is set to 0. Box 3: There are two tabs: k3s.yaml and Kubelet config Options. k3s.yaml is selected and the help text reads Add extra options for the k3s install script. Contains text: Add extra k3s options to pass to the k3s install script via a config file stored in $XDG_CACHE_HOME/smol-k8s-lab/k3s.yaml. Please use the second tab for extra kubelet args. Box 3 also contains input fields for: secrets encryption: true, disable: traefik, kubelet arg: max_pods=150, node label: ingress-ready=true. Each input field has a 🚮 button next to it. Box 3 subtitle: ➕ k3s option](../../assets/images/screenshots/distro_config_screen.svg) ![type:video](../../assets/videos/tour_of_distros.mov) diff --git a/poetry.lock b/poetry.lock index 9de0e2ee2..866c05716 100644 --- a/poetry.lock +++ b/poetry.lock @@ -627,13 +627,13 @@ dev = ["flake8", "markdown", "twine", "wheel"] [[package]] name = "google-auth" -version = "2.26.1" +version = "2.26.2" description = "Google Authentication Library" optional = false python-versions = ">=3.7" files = [ - {file = "google-auth-2.26.1.tar.gz", hash = "sha256:54385acca5c0fbdda510cd8585ba6f3fcb06eeecf8a6ecca39d3ee148b092590"}, - {file = "google_auth-2.26.1-py2.py3-none-any.whl", hash = "sha256:2c8b55e3e564f298122a02ab7b97458ccfcc5617840beb5d0ac757ada92c9780"}, + {file = "google-auth-2.26.2.tar.gz", hash = "sha256:97327dbbf58cccb58fc5a1712bba403ae76668e64814eb30f7316f7e27126b81"}, + {file = "google_auth-2.26.2-py2.py3-none-any.whl", hash = "sha256:3f445c8ce9b61ed6459aad86d8ccdba4a9afed841b2d1451a11ef4db08957424"}, ] [package.dependencies] @@ -672,13 +672,13 @@ files = [ [[package]] name = "jinja2" -version = "3.1.2" +version = "3.1.3" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" files = [ - {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, - {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, + {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"}, + {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"}, ] [package.dependencies] @@ -740,6 +740,7 @@ description = "Powerful and Pythonic XML processing library combining libxml2/li optional = false python-versions = ">=3.6" files = [ + {file = "lxml-5.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:704f5572ff473a5f897745abebc6df40f22d4133c1e0a1f124e4f2bd3330ff7e"}, {file = "lxml-5.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9d3c0f8567ffe7502d969c2c1b809892dc793b5d0665f602aad19895f8d508da"}, {file = "lxml-5.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5fcfbebdb0c5d8d18b84118842f31965d59ee3e66996ac842e21f957eb76138c"}, {file = "lxml-5.1.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f37c6d7106a9d6f0708d4e164b707037b7380fcd0b04c5bd9cae1fb46a856fb"}, @@ -749,6 +750,7 @@ files = [ {file = "lxml-5.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:82bddf0e72cb2af3cbba7cec1d2fd11fda0de6be8f4492223d4a268713ef2147"}, {file = "lxml-5.1.0-cp310-cp310-win32.whl", hash = "sha256:b66aa6357b265670bb574f050ffceefb98549c721cf28351b748be1ef9577d93"}, {file = "lxml-5.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:4946e7f59b7b6a9e27bef34422f645e9a368cb2be11bf1ef3cafc39a1f6ba68d"}, + {file = "lxml-5.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:14deca1460b4b0f6b01f1ddc9557704e8b365f55c63070463f6c18619ebf964f"}, {file = "lxml-5.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ed8c3d2cd329bf779b7ed38db176738f3f8be637bb395ce9629fc76f78afe3d4"}, {file = "lxml-5.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:436a943c2900bb98123b06437cdd30580a61340fbdb7b28aaf345a459c19046a"}, {file = "lxml-5.1.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:acb6b2f96f60f70e7f34efe0c3ea34ca63f19ca63ce90019c6cbca6b676e81fa"}, @@ -758,6 +760,7 @@ files = [ {file = "lxml-5.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f4c9bda132ad108b387c33fabfea47866af87f4ea6ffb79418004f0521e63204"}, {file = "lxml-5.1.0-cp311-cp311-win32.whl", hash = "sha256:bc64d1b1dab08f679fb89c368f4c05693f58a9faf744c4d390d7ed1d8223869b"}, {file = "lxml-5.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:a5ab722ae5a873d8dcee1f5f45ddd93c34210aed44ff2dc643b5025981908cda"}, + {file = "lxml-5.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:9aa543980ab1fbf1720969af1d99095a548ea42e00361e727c58a40832439114"}, {file = "lxml-5.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6f11b77ec0979f7e4dc5ae081325a2946f1fe424148d3945f943ceaede98adb8"}, {file = "lxml-5.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a36c506e5f8aeb40680491d39ed94670487ce6614b9d27cabe45d94cd5d63e1e"}, {file = "lxml-5.1.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f643ffd2669ffd4b5a3e9b41c909b72b2a1d5e4915da90a77e119b8d48ce867a"}, @@ -783,8 +786,8 @@ files = [ {file = "lxml-5.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8f52fe6859b9db71ee609b0c0a70fea5f1e71c3462ecf144ca800d3f434f0764"}, {file = "lxml-5.1.0-cp37-cp37m-win32.whl", hash = "sha256:d42e3a3fc18acc88b838efded0e6ec3edf3e328a58c68fbd36a7263a874906c8"}, {file = "lxml-5.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:eac68f96539b32fce2c9b47eb7c25bb2582bdaf1bbb360d25f564ee9e04c542b"}, + {file = "lxml-5.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ae15347a88cf8af0949a9872b57a320d2605ae069bcdf047677318bc0bba45b1"}, {file = "lxml-5.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c26aab6ea9c54d3bed716b8851c8bfc40cb249b8e9880e250d1eddde9f709bf5"}, - {file = "lxml-5.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cfbac9f6149174f76df7e08c2e28b19d74aed90cad60383ad8671d3af7d0502f"}, {file = "lxml-5.1.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:342e95bddec3a698ac24378d61996b3ee5ba9acfeb253986002ac53c9a5f6f84"}, {file = "lxml-5.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:725e171e0b99a66ec8605ac77fa12239dbe061482ac854d25720e2294652eeaa"}, {file = "lxml-5.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d184e0d5c918cff04cdde9dbdf9600e960161d773666958c9d7b565ccc60c45"}, @@ -792,6 +795,7 @@ files = [ {file = "lxml-5.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6d48fc57e7c1e3df57be5ae8614bab6d4e7b60f65c5457915c26892c41afc59e"}, {file = "lxml-5.1.0-cp38-cp38-win32.whl", hash = "sha256:7ec465e6549ed97e9f1e5ed51c657c9ede767bc1c11552f7f4d022c4df4a977a"}, {file = "lxml-5.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:b21b4031b53d25b0858d4e124f2f9131ffc1530431c6d1321805c90da78388d1"}, + {file = "lxml-5.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:52427a7eadc98f9e62cb1368a5079ae826f94f05755d2d567d93ee1bc3ceb354"}, {file = "lxml-5.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6a2a2c724d97c1eb8cf966b16ca2915566a4904b9aad2ed9a09c748ffe14f969"}, {file = "lxml-5.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:843b9c835580d52828d8f69ea4302537337a21e6b4f1ec711a52241ba4a824f3"}, {file = "lxml-5.1.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9b99f564659cfa704a2dd82d0684207b1aadf7d02d33e54845f9fc78e06b7581"}, @@ -824,13 +828,13 @@ source = ["Cython (>=3.0.7)"] [[package]] name = "markdown" -version = "3.5.1" +version = "3.5.2" description = "Python implementation of John Gruber's Markdown." optional = false python-versions = ">=3.8" files = [ - {file = "Markdown-3.5.1-py3-none-any.whl", hash = "sha256:5874b47d4ee3f0b14d764324d2c94c03ea66bee56f2d929da9f2508d65e722dc"}, - {file = "Markdown-3.5.1.tar.gz", hash = "sha256:b65d7beb248dc22f2e8a31fb706d93798093c308dc1aba295aedeb9d41a813bd"}, + {file = "Markdown-3.5.2-py3-none-any.whl", hash = "sha256:d43323865d89fc0cb9b20c75fc8ad313af307cc087e84b657d9eec768eddeadd"}, + {file = "Markdown-3.5.2.tar.gz", hash = "sha256:e1ac7b3dc550ee80e602e71c1d168002f062e49f1b11e26a36264dafd4df2ef8"}, ] [package.extras] @@ -1340,43 +1344,43 @@ files = [ [[package]] name = "pycryptodome" -version = "3.19.1" +version = "3.20.0" description = "Cryptographic library for Python" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ - {file = "pycryptodome-3.19.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:694020d2ff985cd714381b9da949a21028c24b86f562526186f6af7c7547e986"}, - {file = "pycryptodome-3.19.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:4464b0e8fd5508bff9baf18e6fd4c6548b1ac2ce9862d6965ff6a84ec9cb302a"}, - {file = "pycryptodome-3.19.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:420972f9c62978e852c74055d81c354079ce3c3a2213a92c9d7e37bbc63a26e2"}, - {file = "pycryptodome-3.19.1-cp27-cp27m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1bc0c49d986a1491d66d2a56570f12e960b12508b7e71f2423f532e28857f36"}, - {file = "pycryptodome-3.19.1-cp27-cp27m-musllinux_1_1_aarch64.whl", hash = "sha256:e038ab77fec0956d7aa989a3c647652937fc142ef41c9382c2ebd13c127d5b4a"}, - {file = "pycryptodome-3.19.1-cp27-cp27m-win32.whl", hash = "sha256:a991f8ffe8dfe708f86690948ae46442eebdd0fff07dc1b605987939a34ec979"}, - {file = "pycryptodome-3.19.1-cp27-cp27m-win_amd64.whl", hash = "sha256:2c16426ef49d9cba018be2340ea986837e1dfa25c2ea181787971654dd49aadd"}, - {file = "pycryptodome-3.19.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:6d0d2b97758ebf2f36c39060520447c26455acb3bcff309c28b1c816173a6ff5"}, - {file = "pycryptodome-3.19.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:b8b80ff92049fd042177282917d994d344365ab7e8ec2bc03e853d93d2401786"}, - {file = "pycryptodome-3.19.1-cp27-cp27mu-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd4e7e8bf0fc1ada854688b9b309ee607e2aa85a8b44180f91021a4dd330a928"}, - {file = "pycryptodome-3.19.1-cp27-cp27mu-musllinux_1_1_aarch64.whl", hash = "sha256:8cf5d3d6cf921fa81acd1f632f6cedcc03f5f68fc50c364cd39490ba01d17c49"}, - {file = "pycryptodome-3.19.1-cp35-abi3-macosx_10_9_universal2.whl", hash = "sha256:67939a3adbe637281c611596e44500ff309d547e932c449337649921b17b6297"}, - {file = "pycryptodome-3.19.1-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:11ddf6c9b52116b62223b6a9f4741bc4f62bb265392a4463282f7f34bb287180"}, - {file = "pycryptodome-3.19.1-cp35-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3e6f89480616781d2a7f981472d0cdb09b9da9e8196f43c1234eff45c915766"}, - {file = "pycryptodome-3.19.1-cp35-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27e1efcb68993b7ce5d1d047a46a601d41281bba9f1971e6be4aa27c69ab8065"}, - {file = "pycryptodome-3.19.1-cp35-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c6273ca5a03b672e504995529b8bae56da0ebb691d8ef141c4aa68f60765700"}, - {file = "pycryptodome-3.19.1-cp35-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:b0bfe61506795877ff974f994397f0c862d037f6f1c0bfc3572195fc00833b96"}, - {file = "pycryptodome-3.19.1-cp35-abi3-musllinux_1_1_i686.whl", hash = "sha256:f34976c5c8eb79e14c7d970fb097482835be8d410a4220f86260695ede4c3e17"}, - {file = "pycryptodome-3.19.1-cp35-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:7c9e222d0976f68d0cf6409cfea896676ddc1d98485d601e9508f90f60e2b0a2"}, - {file = "pycryptodome-3.19.1-cp35-abi3-win32.whl", hash = "sha256:4805e053571140cb37cf153b5c72cd324bb1e3e837cbe590a19f69b6cf85fd03"}, - {file = "pycryptodome-3.19.1-cp35-abi3-win_amd64.whl", hash = "sha256:a470237ee71a1efd63f9becebc0ad84b88ec28e6784a2047684b693f458f41b7"}, - {file = "pycryptodome-3.19.1-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:ed932eb6c2b1c4391e166e1a562c9d2f020bfff44a0e1b108f67af38b390ea89"}, - {file = "pycryptodome-3.19.1-pp27-pypy_73-win32.whl", hash = "sha256:81e9d23c0316fc1b45d984a44881b220062336bbdc340aa9218e8d0656587934"}, - {file = "pycryptodome-3.19.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:37e531bf896b70fe302f003d3be5a0a8697737a8d177967da7e23eff60d6483c"}, - {file = "pycryptodome-3.19.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd4e95b0eb4b28251c825fe7aa941fe077f993e5ca9b855665935b86fbb1cc08"}, - {file = "pycryptodome-3.19.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c22c80246c3c880c6950d2a8addf156cee74ec0dc5757d01e8e7067a3c7da015"}, - {file = "pycryptodome-3.19.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e70f5c839c7798743a948efa2a65d1fe96bb397fe6d7f2bde93d869fe4f0ad69"}, - {file = "pycryptodome-3.19.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6c3df3613592ea6afaec900fd7189d23c8c28b75b550254f4bd33fe94acb84b9"}, - {file = "pycryptodome-3.19.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08b445799d571041765e7d5c9ca09c5d3866c2f22eeb0dd4394a4169285184f4"}, - {file = "pycryptodome-3.19.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:954d156cd50130afd53f8d77f830fe6d5801bd23e97a69d358fed068f433fbfe"}, - {file = "pycryptodome-3.19.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b7efd46b0b4ac869046e814d83244aeab14ef787f4850644119b1c8b0ec2d637"}, - {file = "pycryptodome-3.19.1.tar.gz", hash = "sha256:8ae0dd1bcfada451c35f9e29a3e5db385caabc190f98e4a80ad02a61098fb776"}, + {file = "pycryptodome-3.20.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:f0e6d631bae3f231d3634f91ae4da7a960f7ff87f2865b2d2b831af1dfb04e9a"}, + {file = "pycryptodome-3.20.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:baee115a9ba6c5d2709a1e88ffe62b73ecc044852a925dcb67713a288c4ec70f"}, + {file = "pycryptodome-3.20.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:417a276aaa9cb3be91f9014e9d18d10e840a7a9b9a9be64a42f553c5b50b4d1d"}, + {file = "pycryptodome-3.20.0-cp27-cp27m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2a1250b7ea809f752b68e3e6f3fd946b5939a52eaeea18c73bdab53e9ba3c2dd"}, + {file = "pycryptodome-3.20.0-cp27-cp27m-musllinux_1_1_aarch64.whl", hash = "sha256:d5954acfe9e00bc83ed9f5cb082ed22c592fbbef86dc48b907238be64ead5c33"}, + {file = "pycryptodome-3.20.0-cp27-cp27m-win32.whl", hash = "sha256:06d6de87c19f967f03b4cf9b34e538ef46e99a337e9a61a77dbe44b2cbcf0690"}, + {file = "pycryptodome-3.20.0-cp27-cp27m-win_amd64.whl", hash = "sha256:ec0bb1188c1d13426039af8ffcb4dbe3aad1d7680c35a62d8eaf2a529b5d3d4f"}, + {file = "pycryptodome-3.20.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:5601c934c498cd267640b57569e73793cb9a83506f7c73a8ec57a516f5b0b091"}, + {file = "pycryptodome-3.20.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:d29daa681517f4bc318cd8a23af87e1f2a7bad2fe361e8aa29c77d652a065de4"}, + {file = "pycryptodome-3.20.0-cp27-cp27mu-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3427d9e5310af6680678f4cce149f54e0bb4af60101c7f2c16fdf878b39ccccc"}, + {file = "pycryptodome-3.20.0-cp27-cp27mu-musllinux_1_1_aarch64.whl", hash = "sha256:3cd3ef3aee1079ae44afaeee13393cf68b1058f70576b11439483e34f93cf818"}, + {file = "pycryptodome-3.20.0-cp35-abi3-macosx_10_9_universal2.whl", hash = "sha256:ac1c7c0624a862f2e53438a15c9259d1655325fc2ec4392e66dc46cdae24d044"}, + {file = "pycryptodome-3.20.0-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:76658f0d942051d12a9bd08ca1b6b34fd762a8ee4240984f7c06ddfb55eaf15a"}, + {file = "pycryptodome-3.20.0-cp35-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f35d6cee81fa145333137009d9c8ba90951d7d77b67c79cbe5f03c7eb74d8fe2"}, + {file = "pycryptodome-3.20.0-cp35-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76cb39afede7055127e35a444c1c041d2e8d2f1f9c121ecef573757ba4cd2c3c"}, + {file = "pycryptodome-3.20.0-cp35-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49a4c4dc60b78ec41d2afa392491d788c2e06edf48580fbfb0dd0f828af49d25"}, + {file = "pycryptodome-3.20.0-cp35-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:fb3b87461fa35afa19c971b0a2b7456a7b1db7b4eba9a8424666104925b78128"}, + {file = "pycryptodome-3.20.0-cp35-abi3-musllinux_1_1_i686.whl", hash = "sha256:acc2614e2e5346a4a4eab6e199203034924313626f9620b7b4b38e9ad74b7e0c"}, + {file = "pycryptodome-3.20.0-cp35-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:210ba1b647837bfc42dd5a813cdecb5b86193ae11a3f5d972b9a0ae2c7e9e4b4"}, + {file = "pycryptodome-3.20.0-cp35-abi3-win32.whl", hash = "sha256:8d6b98d0d83d21fb757a182d52940d028564efe8147baa9ce0f38d057104ae72"}, + {file = "pycryptodome-3.20.0-cp35-abi3-win_amd64.whl", hash = "sha256:9b3ae153c89a480a0ec402e23db8d8d84a3833b65fa4b15b81b83be9d637aab9"}, + {file = "pycryptodome-3.20.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:4401564ebf37dfde45d096974c7a159b52eeabd9969135f0426907db367a652a"}, + {file = "pycryptodome-3.20.0-pp27-pypy_73-win32.whl", hash = "sha256:ec1f93feb3bb93380ab0ebf8b859e8e5678c0f010d2d78367cf6bc30bfeb148e"}, + {file = "pycryptodome-3.20.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:acae12b9ede49f38eb0ef76fdec2df2e94aad85ae46ec85be3648a57f0a7db04"}, + {file = "pycryptodome-3.20.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f47888542a0633baff535a04726948e876bf1ed880fddb7c10a736fa99146ab3"}, + {file = "pycryptodome-3.20.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e0e4a987d38cfc2e71b4a1b591bae4891eeabe5fa0f56154f576e26287bfdea"}, + {file = "pycryptodome-3.20.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:c18b381553638414b38705f07d1ef0a7cf301bc78a5f9bc17a957eb19446834b"}, + {file = "pycryptodome-3.20.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a60fedd2b37b4cb11ccb5d0399efe26db9e0dd149016c1cc6c8161974ceac2d6"}, + {file = "pycryptodome-3.20.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:405002eafad114a2f9a930f5db65feef7b53c4784495dd8758069b89baf68eab"}, + {file = "pycryptodome-3.20.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ab6ab0cb755154ad14e507d1df72de9897e99fd2d4922851a276ccc14f4f1a5"}, + {file = "pycryptodome-3.20.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:acf6e43fa75aca2d33e93409f2dafe386fe051818ee79ee8a3e21de9caa2ac9e"}, + {file = "pycryptodome-3.20.0.tar.gz", hash = "sha256:09609209ed7de61c2b560cc5c8c4fbf892f8b15b1faf7e4cbffac97db1fffda7"}, ] [[package]] diff --git a/pyproject.toml b/pyproject.toml index 1cad367a1..664f0adbd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "smol_k8s_lab" -version = "2.0.1" +version = "2.0.2" description = "CLI and TUI to quickly install slimmer Kubernetes distros and then manage apps declaratively using Argo CD" authors = ["Jesse Hitch ", "Max Roby "] diff --git a/smol_k8s_lab/config/default_config.yaml b/smol_k8s_lab/config/default_config.yaml index ad62eb101..75ccc7342 100644 --- a/smol_k8s_lab/config/default_config.yaml +++ b/smol_k8s_lab/config/default_config.yaml @@ -79,7 +79,7 @@ k8s_distros: node-label: - "ingress-ready=true" kubelet-arg: - - "max_pods=150" + - "max-pods=150" # not yet adjustable on k3s at this time nodes: control_plane: 1 @@ -99,7 +99,7 @@ k8s_distros: disable: - "traefik" kubelet-arg: - - "max_pods=150" + - "max-pods=150" node-label: - "ingress-ready=true" # how many dockerized k3s nodes to deploy diff --git a/smol_k8s_lab/tui/css/k3s.tcss b/smol_k8s_lab/tui/css/k3s.tcss index 7dd3c8b47..7508aa983 100644 --- a/smol_k8s_lab/tui/css/k3s.tcss +++ b/smol_k8s_lab/tui/css/k3s.tcss @@ -18,13 +18,32 @@ $navy: rgb(35,35,54); .k3s-config-container { align: center middle; background: rgb(35,35,54) 50%; + link-background-hover: $navy; + link-color-hover: $orange; + padding: 2; + grid-rows: 0.25fr 1fr; +} + +/* TabbedContent box for the kind widget */ +#k3s-tabbed-content { border: round $cornflower; border-title-color: $sky_blue; border-subtitle-color: $lavender; + background: $navy 60%; + width: 100%; + height: 100%; link-background-hover: $navy; link-color-hover: $orange; - padding: 2; - grid-rows: 0.25fr 1fr; +} + +/* tabpane 1 */ +#k3s-yaml-tab { + height: auto; +} + +/* tabpane 2 */ +#k3s-kubelet-tab { + height: auto; } /* k3s container itself */ diff --git a/smol_k8s_lab/tui/css/kind.tcss b/smol_k8s_lab/tui/css/kind.tcss index baf02f584..9dc00d02a 100644 --- a/smol_k8s_lab/tui/css/kind.tcss +++ b/smol_k8s_lab/tui/css/kind.tcss @@ -57,13 +57,13 @@ KubeletConfig { } /* kubelet config container */ -#kubelet-config-container { +.kubelet-config-container { padding: 1; grid-rows: 0.25fr 1fr; align: center middle; } -#kubelet-config-scroll { +.kubelet-config-scroll { align: center middle; scrollbar-background: $dark_gray; scrollbar-background-active: $dark_gray; diff --git a/smol_k8s_lab/tui/distro_screen.py b/smol_k8s_lab/tui/distro_screen.py index cd1608789..e29fabe70 100755 --- a/smol_k8s_lab/tui/distro_screen.py +++ b/smol_k8s_lab/tui/distro_screen.py @@ -2,10 +2,9 @@ # smol-k8s-lab libraries from smol_k8s_lab.constants import DEFAULT_DISTRO_OPTIONS from smol_k8s_lab.env_config import process_k8s_distros -from smol_k8s_lab.tui.distro_widgets.k3s_config import K3sConfig -from smol_k8s_lab.tui.distro_widgets.kind_networking import KindNetworkingConfig -from smol_k8s_lab.tui.distro_widgets.kubelet_config import KubeletConfig -from smol_k8s_lab.tui.distro_widgets.node_adjustment import NodeAdjustmentBox +from smol_k8s_lab.tui.distro_widgets.k3s_config import K3sConfigWidget +from smol_k8s_lab.tui.distro_widgets.kind_config import (KindNetworkingConfig, + KindConfigWidget) from smol_k8s_lab.tui.util import NewOptionModal # external libraries @@ -14,8 +13,7 @@ from textual.binding import Binding from textual.containers import Grid from textual.screen import Screen -from textual.widgets import (Footer, Header, Label, Select, TabbedContent, - TabPane, Static) +from textual.widgets import Footer, Header, Label, Select # the description of the k8s distro @@ -137,6 +135,9 @@ def on_mount(self) -> None: @on(Select.Changed) def update_k8s_distro(self, event: Select.Changed) -> None: + """ + changed currently enabled kubernetes distro in the TUI + """ distro = str(event.value) # disable display on previous distro @@ -178,129 +179,67 @@ def update_k8s_distro(self, event: Select.Changed) -> None: self.current_distro = distro def action_launch_new_option_modal(self) -> None: + """ + callable action via link and key binding to display a modal for adding + a new option to the currently selected tab of the distro's config screen + """ def add_new_row(option: str): - if option and self.current_distro != 'kind': - k3s_widget = self.get_widget_by_id(f"{self.current_distro}-widget") - k3s_widget.generate_row(option) - elif option and self.current_distro == 'kind': - if self.query_one(TabbedContent).active == "kind-networking-tab": - kind_widget = self.query_one(KindNetworkingConfig) - kind_widget.generate_row(option) - else: - kind_widget = self.query_one(KubeletConfig) - kind_widget.generate_row(option) + """ + DistroConfigScreen.action_launch_new_option_modal.add_new_row + called when user's input for a new option validates and is submitted + + Takes option (str) to add new row to the tui for the active tab of + current distro + """ + distro = self.current_distro + + if option: + # if the distro is kind + if distro == 'kind': + # use tab for kind networking, which is the default tab + tabbed_content = self.get_widget_by_id("kind-tabbed-content") + if tabbed_content.active == "kind-networking-tab": + widget = self.query_one(KindNetworkingConfig) + + # if the distro is k3s OR k3d + elif distro.startswith('k3'): + tabbed_content = self.get_widget_by_id("k3s-tabbed-content") + # use tab for k3s yaml options, EXCEPT for kubelet config args + if tabbed_content.active == "k3s-yaml-tab": + if option == "kubelet-arg": + self.query_one(K3sConfigWidget).action_show_tab("k3s-kubelet-tab") + return + else: + widget = self.get_widget_by_id(f"{distro}-widget") + + if "kubelet" in tabbed_content.active: + widget = self.get_widget_by_id(f"kubelet-config-{distro}") + + widget.generate_row(option) + else: return - if self.current_distro != 'kind': - existing_keys = self.cfg[self.current_distro]['k3s_yaml'].keys() - trigger = "k3s" - else: + if self.current_distro == 'kind': kind_cfg = self.cfg['kind'] - if self.query_one(TabbedContent).active == "kind-networking-tab": + kind_tabbed_content = self.get_widget_by_id("kind-tabbed-content") + if kind_tabbed_content.active == "kind-networking-tab": existing_keys = kind_cfg['networking_args'].keys() trigger = "kind networking" else: existing_keys = kind_cfg['kubelet_extra_args'].keys() trigger = "kind kubelet" - self.app.push_screen(NewOptionModal(trigger, existing_keys), add_new_row) - - -class KindConfigWidget(Static): - """ - a widget representing the entire kind configuration - """ - def __init__(self, - metadata: dict = DEFAULT_DISTRO_OPTIONS['kind'], - id="kind-pseudo-screen") -> None: - self.metadata = metadata - super().__init__(id=id) - - def compose(self) -> ComposeResult: - with Grid(classes="k8s-distro-config", id="kind-box"): - # take number of nodes from config and make string - nodes = self.metadata.get('nodes', {'control_plane': 1, - 'workers': 0}) - control_nodes = str(nodes.get('control_plane', '1')) - worker_nodes = str(nodes.get('workers', '0')) - - # node input row - yield NodeAdjustmentBox('kind', control_nodes, worker_nodes) - - kubelet_args = self.metadata['kubelet_extra_args'] - networking_args = self.metadata['networking_args'] - - # Add the TabbedContent widget for kind config - with TabbedContent(initial="kind-networking-tab", - id="kind-tabbed-content"): - # tab 1 - networking options - with TabPane("Networking options", - id="kind-networking-tab"): - # kind networking section - yield KindNetworkingConfig(networking_args) - - # tab 2 - kubelet options - with TabPane("Kubelet Config Options", - id="kind-kubelet-tab"): - # kubelet config section for kind only - yield KubeletConfig('kind', kubelet_args) - - def on_mount(self) -> None: - """ - screen and box border styling - """ - # update tabbed content box - tabbed_content = self.query_one(TabbedContent) - - tabbed_content.border_title = ( - "Add [i]extra[/] options for [#C1FF87]kind[/] config files" - ) - - subtitle = ( - "[b][@click=screen.launch_new_option_modal()] ➕ kind option[/][/]" - ) - - tabbed_content.border_subtitle = subtitle - - for tab in self.query("Tab"): - tab.add_class('header-tab') - - def action_show_tab(self, tab: str) -> None: - """Switch to a new tab.""" - self.get_child_by_type(TabbedContent).active = tab - - @on(TabbedContent.TabActivated) - def speak_when_tab_selected(self, event: TabbedContent.TabActivated) -> None: - if self.app.speak_on_focus: - self.app.action_say(f"Selected tab is {event.tab.id}") - - -class K3sConfigWidget(Static): - """ - a widget representing the entire kind configuration - """ - def __init__(self, distro: str, metadata: dict, id: str = "") -> None: - self.distro = distro - self.metadata = metadata - super().__init__(id=id) - - def compose(self) -> ComposeResult: - if not self.metadata: - self.metadata = DEFAULT_DISTRO_OPTIONS[self.distro] - - with Grid(classes="k8s-distro-config", id=f"{self.distro}-box"): - - # take number of nodes from config and make string - nodes = self.metadata.get('nodes', - {'control_plane': 1, 'workers': 0}) - control_nodes = str(nodes.get('control_plane', '1')) - worker_nodes = str(nodes.get('workers', '0')) - - # node input row - yield NodeAdjustmentBox(self.distro, control_nodes, worker_nodes) + # if the current_distro is k3s or k3d + else: + k3s_tabbed_content = self.get_widget_by_id("k3s-tabbed-content") + if k3s_tabbed_content.active == "k3s-kubelet-tab": + existing_keys = self.cfg[self.current_distro]['k3s_yaml'].get( + "kubelet-arg", [] + ) + trigger = "k3s kubelet" + else: + existing_keys = self.cfg[self.current_distro]['k3s_yaml'].keys() + trigger = "k3s k3s_yaml" - # take extra k3s args if self.distro is k3s or k3d - yield K3sConfig(self.distro, - self.metadata['k3s_yaml'], - id=f"{self.distro}-widget") + self.app.push_screen(NewOptionModal(trigger, existing_keys), add_new_row) diff --git a/smol_k8s_lab/tui/distro_widgets/k3s_config.py b/smol_k8s_lab/tui/distro_widgets/k3s_config.py index 19194e083..1f6611fc7 100644 --- a/smol_k8s_lab/tui/distro_widgets/k3s_config.py +++ b/smol_k8s_lab/tui/distro_widgets/k3s_config.py @@ -1,6 +1,8 @@ #!/usr/bin/env python3.11 # internal library -from smol_k8s_lab.constants import XDG_CACHE_DIR +from smol_k8s_lab.constants import XDG_CACHE_DIR, DEFAULT_DISTRO_OPTIONS +from smol_k8s_lab.tui.distro_widgets.kubelet_config import KubeletConfig +from smol_k8s_lab.tui.distro_widgets.node_adjustment import NodeAdjustmentBox from smol_k8s_lab.tui.util import create_sanitized_list from smol_k8s_lab.tui.validators.already_exists import CheckIfNameAlreadyInUse @@ -11,7 +13,7 @@ from textual.screen import ModalScreen from textual.suggester import SuggestFromList from textual.validation import Length -from textual.widgets import Input, Button, Label, Static +from textual.widgets import Input, Button, Label, Static, TabbedContent, TabPane CFG_FILE = XDG_CACHE_DIR + "/k3s.yaml" @@ -43,14 +45,85 @@ "none", "wireguard-native", "true", - "max_pods=", - "podsPerCore=", - "featureGates=", + "max-pods=", + "pods-per-Core=", + "feature-gates=", )) LIST_KEYS = ["disable", "node-label", "kubelet-arg"] +class K3sConfigWidget(Static): + """ + a widget representing the entire kind configuration + """ + def __init__(self, distro: str, metadata: dict, id: str = "") -> None: + self.distro = distro + self.metadata = metadata + super().__init__(id=id) + + def compose(self) -> ComposeResult: + if not self.metadata: + self.metadata = DEFAULT_DISTRO_OPTIONS[self.distro] + + with Grid(classes="k8s-distro-config", id=f"{self.distro}-box"): + + # take number of nodes from config and make string + nodes = self.metadata.get('nodes', + {'control_plane': 1, 'workers': 0}) + control_nodes = str(nodes.get('control_plane', '1')) + worker_nodes = str(nodes.get('workers', '0')) + + # node input row + yield NodeAdjustmentBox(self.distro, control_nodes, worker_nodes) + + + # Add the TabbedContent widget for kind config + with TabbedContent(initial="k3s-yaml-tab", id="k3s-tabbed-content"): + # tab 1 - networking options + with TabPane("k3s.yaml", id="k3s-yaml-tab"): + # take extra k3s args if self.distro is k3s or k3d + yield K3sConfig(self.distro, + self.metadata['k3s_yaml'], + id=f"{self.distro}-widget") + + # tab 2 - kubelet options + with TabPane("Kubelet Config Options", id="k3s-kubelet-tab"): + # kubelet config section for kind only + kubelet_args = self.metadata['k3s_yaml'].get('kubelet-arg', '') + yield KubeletConfig('k3s', kubelet_args) + + def on_mount(self) -> None: + """ + screen and box border styling + """ + # update tabbed content box + tabbed_content = self.query_one(TabbedContent) + + tabbed_content.border_title = ( + "[i]Add extra[/] options for the [#C1FF87]k3s[/] install script" + ) + + subtitle = ( + "[b][@click=screen.launch_new_option_modal()] ➕ k3s option[/][/]" + ) + + tabbed_content.border_subtitle = subtitle + + for tab in self.query("Tab"): + tab.add_class('header-tab') + + def action_show_tab(self, tab: str) -> None: + """Switch to a new tab.""" + self.get_widget_by_id("k3s-tabbed-content").show_tab(tab) + self.get_widget_by_id("k3s-tabbed-content").active = tab + + @on(TabbedContent.TabActivated) + def speak_when_tab_selected(self, event: TabbedContent.TabActivated) -> None: + if self.app.speak_on_focus: + self.app.action_say(f"Selected tab is {event.tab.id}") + + class K3sConfig(Static): """ k3s args config @@ -69,7 +142,8 @@ def compose(self) -> ComposeResult: "Add extra [steel_blue][b][link=https://docs.k3s.io/cli/server]" "k3s options[/][/][/] to pass to the k3s install script via a " "[steel_blue][b][link=https://docs.k3s.io/installation/configuration#" - f"configuration-file]config file[/][/][/] stored in {CFG_FILE}", + f"configuration-file]config file[/][/][/] stored in {CFG_FILE}. " + "Please use the second tab for extra kubelet args.", classes="help-text" ) @@ -81,19 +155,10 @@ def on_mount(self) -> None: """ box border styling """ - # k3s arg config styling - k3s_title = ("[i]Add[/] [i]extra[/] options for the [#C1FF87]k3s[/] " - "install script") - k3s_container = self.get_widget_by_id(f"{self.distro}-base-grid") - k3s_container.border_title = k3s_title - subtitle = ("[b][@click=screen.launch_new_option_modal()]" - "➕ k3s option[/][/]") - k3s_container.border_subtitle = subtitle - # if we've been passed k3s args already, generate rows if self.k3s_args: for arg, value in self.k3s_args.items(): - if arg: + if arg and arg != "kubelet-arg": self.generate_row(arg, value) def on_button_pressed(self, event: Button.Pressed) -> None: @@ -133,7 +198,10 @@ def update_base_yaml(self, event: Input.Changed) -> None: # if there's a comma, it's a list elif ',' in input_value or input_name in LIST_KEYS: - yaml[input_name] = create_sanitized_list(input_value) + # don't create a list if there's a = in the value. catches issues + # with kube-reserved=cpu=1,memory=2Gi which shouldn't be a list + if "=" not in input_value: + yaml[input_name] = create_sanitized_list(input_value) # else it's a normal string and should be saved like one else: diff --git a/smol_k8s_lab/tui/distro_widgets/kind_networking.py b/smol_k8s_lab/tui/distro_widgets/kind_config.py similarity index 55% rename from smol_k8s_lab/tui/distro_widgets/kind_networking.py rename to smol_k8s_lab/tui/distro_widgets/kind_config.py index 755555cfc..40f7825aa 100644 --- a/smol_k8s_lab/tui/distro_widgets/kind_networking.py +++ b/smol_k8s_lab/tui/distro_widgets/kind_config.py @@ -1,11 +1,17 @@ #!/usr/bin/env python3.11 +# smol-k8s-lab libraries +from smol_k8s_lab.constants import DEFAULT_DISTRO_OPTIONS +from smol_k8s_lab.tui.distro_widgets.kubelet_config import KubeletConfig +from smol_k8s_lab.tui.distro_widgets.node_adjustment import NodeAdjustmentBox + +# external libraries from textual import on from textual.app import ComposeResult from textual.containers import VerticalScroll, Grid from textual.suggester import SuggestFromList from textual.validation import Length from textual.widget import Widget -from textual.widgets import Input, Button, Label +from textual.widgets import Input, Button, Label, TabbedContent, TabPane, Static VALUE_SUGGESTIONS = SuggestFromList(("true", "ipv4", "ipv6")) @@ -16,6 +22,76 @@ ) +class KindConfigWidget(Static): + """ + a widget representing the entire kind configuration + """ + def __init__(self, + metadata: dict = DEFAULT_DISTRO_OPTIONS['kind'], + id="kind-pseudo-screen") -> None: + self.metadata = metadata + super().__init__(id=id) + + def compose(self) -> ComposeResult: + with Grid(classes="k8s-distro-config", id="kind-box"): + # take number of nodes from config and make string + nodes = self.metadata.get('nodes', + {'control_plane': 1, 'workers': 0} + ) + control_nodes = str(nodes.get('control_plane', '1')) + worker_nodes = str(nodes.get('workers', '0')) + + # node input row + yield NodeAdjustmentBox('kind', control_nodes, worker_nodes) + + kubelet_args = self.metadata['kubelet_extra_args'] + networking_args = self.metadata['networking_args'] + + # Add the TabbedContent widget for kind config + with TabbedContent(initial="kind-networking-tab", + id="kind-tabbed-content"): + # tab 1 - networking options + with TabPane("Networking options", + id="kind-networking-tab"): + # kind networking section + yield KindNetworkingConfig(networking_args) + + # tab 2 - kubelet options + with TabPane("Kubelet Config Options", + id="kind-kubelet-tab"): + # kubelet config section for kind only + yield KubeletConfig('kind', kubelet_args) + + def on_mount(self) -> None: + """ + screen and box border styling + """ + # update tabbed content box + tabbed_content = self.query_one(TabbedContent) + + tabbed_content.border_title = ( + "Add [i]extra[/] options for [#C1FF87]kind[/] config files" + ) + + subtitle = ( + "[b][@click=screen.launch_new_option_modal()] ➕ kind option[/][/]" + ) + + tabbed_content.border_subtitle = subtitle + + for tab in self.query("Tab"): + tab.add_class('header-tab') + + def action_show_tab(self, tab: str) -> None: + """Switch to a new tab.""" + self.get_child_by_type(TabbedContent).active = tab + + @on(TabbedContent.TabActivated) + def speak_when_tab_selected(self, event: TabbedContent.TabActivated) -> None: + if self.app.speak_on_focus: + self.app.action_say(f"Selected tab is {event.tab.id}") + + class KindNetworkingConfig(Widget): """ Container for extra args for kind networking configuration diff --git a/smol_k8s_lab/tui/distro_widgets/kubelet_config.py b/smol_k8s_lab/tui/distro_widgets/kubelet_config.py index 95f82cb00..38480f27e 100644 --- a/smol_k8s_lab/tui/distro_widgets/kubelet_config.py +++ b/smol_k8s_lab/tui/distro_widgets/kubelet_config.py @@ -10,7 +10,9 @@ VALUE_SUGGESTIONS = SuggestFromList(("ingress-ready=true", "pods-per-core", "resolv-conf", - "max-pods")) + "max-pods", + "system-reserved", + "kube-reserved")) kubelet_help = ( "Add key value pairs to pass to your [steel_blue][b][link=https://kubernetes.io/docs/" @@ -27,17 +29,37 @@ class KubeletConfig(Widget): def __init__(self, distro: str, kubelet_extra_args: list = []) -> None: self.distro = distro self.kubelet_extra_args = kubelet_extra_args - super().__init__() + super().__init__(id=f"kubelet-config-{distro}") def compose(self) -> ComposeResult: - with Grid(id="kubelet-config-container"): + with Grid(id=f"kubelet-config-container-{self.distro}", + classes="kubelet-config-container"): yield Label(kubelet_help, classes="help-text") - yield VerticalScroll(id="kubelet-config-scroll") + yield VerticalScroll(id=f"kubelet-config-scroll-{self.distro}", + classes="kubelet-config-scroll") def on_mount(self) -> None: if self.kubelet_extra_args: - for key, value in self.kubelet_extra_args.items(): - self.generate_row(key, str(value)) + if self.distro == "kind": + for key, value in self.kubelet_extra_args.items(): + self.generate_row(key, str(value)) + + if self.distro == "k3s": + for item in self.kubelet_extra_args: + if "kube-reserved" in item: + key = "kube-reserved" + value = item.replace("kube-reserved=", "") + + elif "system-reserved" in item: + key = "system-reserved" + value = item.replace("system-reserved=", "") + + else: + key_value_pair = item.split('=') + key = key_value_pair[0] + value = key_value_pair[1] + + self.generate_row(key, str(value)) def on_button_pressed(self, event: Button.Pressed) -> None: """ @@ -46,26 +68,61 @@ def on_button_pressed(self, event: Button.Pressed) -> None: # lets you delete a kubelet-arg row parent_row = event.button.parent input_key = parent_row.children[1].name - app_yaml = self.app.cfg['k8s_distros'][self.distro]['kubelet_extra_args'] - if input_key and app_yaml.get(input_key, False): - app_yaml.pop(input_key) - self.app.write_yaml() - parent_row.remove() + + app_yaml = self.app.cfg['k8s_distros'][self.distro] + + if self.distro == "kind": + kind_args = app_yaml['kubelet_extra_args'] + + if input_key and kind_args.get(input_key, False): + kind_args.pop(input_key) + self.app.write_yaml() + + parent_row.remove() + + # this isn't beautiful, but should get the job done + if self.distro == "k3s": + k3s_args = app_yaml['k3s_yaml']['kubelet-arg'] + pop_item = None + + if input_key: + for item in k3s_args: + if input_key in item: + pop_item = item + + if pop_item: + k3s_args.pop[pop_item] + self.app.write_yaml() + + parent_row.remove() @on(Input.Submitted) @on(Input.Changed) def update_base_yaml(self, event: Input.Changed | Input.Submitted) -> None: if event.validation_result.is_valid: # grab the user's yaml file from the parent app - args = self.app.cfg['k8s_distros'][self.distro]['kubelet_extra_args'] + distro_cfg = self.app.cfg['k8s_distros'][self.distro] + + # kind uses a different schema than k3s for kubelet args. uses dict + if self.distro == "kind": + args = distro_cfg['kubelet_extra_args'] + # convert this to an int if its possible + try: + int_value = int(event.input.value) + args[event.input.name] = int_value + # if value can't an int, just set it normally. uses list + except ValueError: + args[event.input.name] = event.input.value + + # k3s uses a list + if self.distro == "k3s": + args = distro_cfg["k3s_yaml"]['kubelet-arg'] - # convert this to an int if its possible - try: - int_value = int(event.input.value) - args[event.input.name] = int_value - # if value can't an int, just set it normally - except ValueError: - args[event.input.name] = event.input.value + kubelet_arg = f"{event.input.name}={event.input.value}" + if isinstance(args, list) and kubelet_arg not in args: + args.append(kubelet_arg) + elif not isinstance(args, list) and kubelet_arg not in args: + args = [f"{event.input.name}={event.input.value}"] self.app.write_yaml() @@ -91,7 +148,7 @@ def generate_row(self, param: str = "", value: str = "") -> Grid: del_button = Button("🚮", id=f"kind-kubelet-delete-{param}-button") del_button.tooltip = "Delete this kubelet parameter" - self.get_widget_by_id("kubelet-config-scroll").mount( + self.get_widget_by_id(f"kubelet-config-scroll-{self.distro}").mount( Grid(label, param_value_input, del_button, classes="label-input-delete-row") ) diff --git a/smol_k8s_lab/tui/util.py b/smol_k8s_lab/tui/util.py index 4b60e51db..4a4d465ad 100644 --- a/smol_k8s_lab/tui/util.py +++ b/smol_k8s_lab/tui/util.py @@ -14,10 +14,12 @@ KUBELET_SUGGESTIONS = SuggestFromList(( - "podsPerCore", - "maxPods", + "pods-per-core", + "max-pods", "node-labels", - "featureGates" + "feature-gates", + "system-reserved", + "kube-reserved" )) @@ -115,29 +117,34 @@ class NewOptionModal(ModalScreen): "./css/new_option_modal.tcss" ] - def __init__(self, trigger: str, in_use_args: list = []) -> None: + def __init__(self, tab: str, in_use_args: list = []) -> None: self.in_use_args = in_use_args - self.trigger = trigger + self.tab = tab super().__init__() def compose(self) -> ComposeResult: - # base screen grid - question = f"[#ffaff9]Add[/] [i]new[/] [#C1FF87]{self.trigger} option[/]." + """ + base screen grid + """ + question = f"[#ffaff9]Add[/] [i]new[/] [#C1FF87]{self.tab} option[/]." tooltip = ( "Start typing an option to show suggestions. Use the right arrow " "key to complete the suggestion. Hit enter to submit." ) - if self.trigger.startswith("k3"): + + if self.tab.startswith("k3s k3s_yaml"): tooltip += ( "Note: If [dim][#C1FF87]cilium[/][/] is [i]enabled[/], we " "add flannel-backend: none and disable-network-policy: true." ) suggestions = K3S_SUGGESTIONS - elif "network" in self.trigger: + + elif "network" in self.tab: tooltip += ("Note: If [dim][#C1FF87]cilium[/][/] is [i]enabled[/]," "we pass in disableDefaultCNI=true.") suggestions = NETWORKING_SUGGESTIONS - elif "kubelet" in self.trigger: + + elif "kubelet" in self.tab: suggestions = KUBELET_SUGGESTIONS with Grid(id="new-option-modal-screen"): @@ -147,7 +154,7 @@ def compose(self) -> ComposeResult: with Grid(id='new-option-grid'): input = Input(id='new-option-input', - placeholder=f"new {self.trigger} option", + placeholder=f"new {self.tab} option", suggester=suggestions, validators=[ Length(minimum=4), diff --git a/smol_k8s_lab/tui/validators/already_exists.py b/smol_k8s_lab/tui/validators/already_exists.py index f18db53b9..8603406f6 100644 --- a/smol_k8s_lab/tui/validators/already_exists.py +++ b/smol_k8s_lab/tui/validators/already_exists.py @@ -10,7 +10,7 @@ def __init__(self, global_params: list) -> None: def validate(self, value: str) -> ValidationResult: """Check if a string is already in use as an app name.""" - if value in self.params: + if value in self.params and value != "kubelet-arg": return self.failure("That name is already in use 🫨") else: return self.success()