kubeteach

command module
v0.2.4-alpha Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 3, 2022 License: Apache-2.0 Imports: 16 Imported by: 0

README

kubeteach logo

kubeteach

Go Report Card Licence Latest release Coverage Status Test status Build status

Kubeteach is an operator build with kubebuilder to learn kubernetes in kubernetes.

Kubeteach was created because I wanted to improve my golang and kubernetes operator knowledge. I came across kubebuilder and had the idea to learn kubernetes in kubernetes.

The idea is to get tasks as a kubernetes objects (custom resource) to learn how to interact with kubernetes/kubectl while solving tasks in the kubernetes cluster. Kubeteach checks whether a task has been completed successfully based on defined conditions.

Note: kubeteach is not designed to deploy it to a production cluster. I recommend to use kind to use kubeteach and learn kubernetes. There is no deletion job for created objects from exercises.

🚧 Kubeteach is still in a very early stage of development, which means it may not always be stable and major api changes are necessary.

Learn kubernetes with kubeteach

⚠ Unfortunately, only a few tasks are currently available. More tasks will be added soon.

Preparation

To install kubeteach you need a kubernetes cluster. I recommend kind as a local environment, checkout the kind quick start.

You need also kubectl to interact with your cluster and helm to install kubeteach to your cluster.

Installation
Add kubeteach helm repo

To be able to deploy kubeteach you need to add the kubeteach helm repo to your local helm installation.

helm repo add kubeteach https://dergeberl.github.io/kubeteach-charts
Install kubeteach with ExerciseSet

To deploy kubeteach with an ExerciseSet you can select one of this list.

With the following command you can install kubeteach with an ExerciseSet to your cluster. (Change <helm-chart to your selected helm chart. For example kubeteach/kubeteach-exerciseset1)

helm install exerciseset1 <helm-chart> --namespace exerciseset --create-namespace --render-subchart-notes

⚠ Don't use the helm flag --wait, because some deployments won't get ready and the helm install command will fail.

Enable kubeteach dashboard

⚠ The dashboard is an experimental feature. DO NOT MAKE IT AVAILABLE VIA INTERNET! ⚠

To enable the dashboard you need to add 2 settings for the helm install command (see above):

--set kubeteach.dashboard.enabled=true --set kubeteach.webterminal.enabled=true

Example:

helm install exerciseset1 <helm-chart> --namespace exerciseset --set kubeteach.dashboard.enabled=true --set kubeteach.webterminal.enabled=true --render-subchart-notes
...
You can use it with the following command (to forward a local port):
kubectl port-forward -n exerciseset service/kubeteach-core-dashboard 8080:80

Now you can access the dashboard via http://localhost:8080
Username: kubeteach
Password: <yourpassword>

The command will prompt a command (kubectl port-forward) and the credentials which are needed to log in into the dashboard.

Update kubeteach

To update kubeteach you can run the following commands.

helm repo update
helm upgrade exerciseset1 <helm-chart> --namespace exerciseset --render-subchart-notes

⚠ Don't use the helm flag --wait, because some deployments won't get ready and the helm install command will fail.

Usage

You can get the tasks that should be performed with kubectl get tasks -n exerciseset

kubectl get tasks
NAME    TITLE                           DESCRIPTION                                                                                                          STATUS
task01   Create namespace                Create a new namespace with the name kubeteach                                                                           active
task02   Create pod                      Create a pod in namespace kubeteach, name it pod1 and use nginx:latest as image                                         pending
...

To get more information of one task you can use kubectl describe task -n exerciseset <taskname>

In some task you can find a helpURL and/or a longDescription with more information about this task.

kubectl describe task task01   
Name:         task01
Namespace:    default
Labels:       <none>
Annotations:  <none>
API Version:  kubeteach.geberl.io/v1alpha1
Kind:         Task
Metadata:
  Creation Timestamp:  2021-03-14T18:35:49Z
  Generation:          1
  Owner References:
    API Version:     kubeteach.geberl.io/v1alpha1
    Kind:            TaskDefinition
    Name:            task1
    UID:             21b8853d-11d4-4930-bdfd-ea3c945ae536
  Resource Version:  633
  UID:               d392614d-6a42-4d97-8500-ee29f3121674
Spec:
  Description:  Create a new namespace with the name kubeteach
  Title:        Create namespace
Status:
  State:  active
Events:
  Type    Reason  Age   From  Message
  ----    ------  ----  ----  -------
  Normal  Active  12m   Task  Task has no pre required task, task is now active

Now you can solve tasks by doing what's described in the task.

For example task01: Create a new namespace with the name kubeteach

kubectl create namespace kubeteach

A few seconds later the task state is changed to successful.

kubectl get task task01            
NAME    TITLE              DESCRIPTION                                  STATUS
task01   Create namespace   Create a Namespace with the name kubeteach   successful

The task state pending shows that another task must be successfully done before.

If you need help you can take a look into the solution folder of the exercise set you use (for example dergeberl/kubeteach-charts/solutions/exerciseset1)

An update to a new status can take up to 5 seconds

List of ExerciseSets

name description link helm
kubeteach-exerciseset1 Example ExerciseSet to try out kubeteach with basic tasks for first steps in kubernetes dergeberl/kubeteach-charts/charts/exerciseset1 kubeteach/kubeteach-exerciseset1

How it works / How to write own exercises

Check out the docs/write-own-exercises.md

Contribution / Test setups

For more information about contribution and local test setup have a look at the contribution guideline.

New exercises or/and exercise sets are highly welcome, check out the helm repository.

If you have ideas feel free to open a PR or issue.

Documentation

Overview

Copyright 2021 Maximilian Geberl.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

main package from kubeteach

Directories

Path Synopsis
api
v1alpha1
Package v1alpha1 contains API Schema definitions for the kubeteach v1alpha1 API group +kubebuilder:object:generate=true +kubebuilder:validation:Required +groupName=kubeteach.geberl.io
Package v1alpha1 contains API Schema definitions for the kubeteach v1alpha1 API group +kubebuilder:object:generate=true +kubebuilder:validation:Required +groupName=kubeteach.geberl.io
Package controllers is a package of kubeteach and used for reconcile logic of kubernetes CRDs
Package controllers is a package of kubeteach and used for reconcile logic of kubernetes CRDs
condition
Package condition is used in kubeteach to run condition checks against kubernetes api
Package condition is used in kubeteach to run condition checks against kubernetes api
pkg
dashboard
Package dashboard for kubeteach
Package dashboard for kubeteach
metrics
Package metrics is a prometheus exporter for kubeteach
Package metrics is a prometheus exporter for kubeteach

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL