Compare commits

..

8 Commits

Author SHA1 Message Date
Hussein Galal
dde877e285 Fixes to the controller and cli (#33)
Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com>
2023-02-03 18:00:07 +02:00
Hussein Galal
0682b11100 Add version to cli (#32)
* Add version flag to cli

Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com>

* Add version to cluster spec

---------

Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com>
2023-02-03 14:36:06 +02:00
Hussein Galal
1f2595edfb Use new version scheme for the chart (#31) 2023-02-03 14:18:21 +02:00
Hussein Galal
b0f1fc1184 Remove cr.yaml file (#30) 2023-02-03 14:12:11 +02:00
Hussein Galal
8f5de4a5d2 Remove GITHUB_TOKEN from install helm (#29) 2023-02-03 14:09:42 +02:00
Hussein Galal
46491a4310 Fix charts and merge charts to main (#28) 2023-02-03 14:07:29 +02:00
Hussein Galal
a299353eca fix chart and github workflow (#27)
Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com>
2023-02-03 13:41:24 +02:00
Hussein Galal
eb4e5dd099 Add readme and fix release (#25)
Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com>
2023-02-03 06:38:50 +02:00
12 changed files with 88 additions and 31 deletions

View File

@@ -3,7 +3,7 @@ name: Chart Release
on:
push:
branches:
- k3k-chart
- main
jobs:
release:

View File

@@ -26,6 +26,7 @@ jobs:
overwrite: 'true'
files: |
${{ github.workspace }}/bin/k3k
${{ github.workspace }}/bin/k3kcli
- name: Docker Hub Login
uses: docker/login-action@v2
with:

50
README.md Normal file
View File

@@ -0,0 +1,50 @@
# K3K
A Kubernetes in Kubernetes tool, k3k provides a way to run multiple embedded isolated k3s clusters on your kubernetes cluster.
## Why?
![alt text](https://github.com/galal-hussein/k3k/blob/main/hack/becausewecan.jpg?raw=true)
## Usage
K3K consists of a controller and a cli tool, the controller can be deployed via a helm chart and the cli can be downloaded from the releases page.
### Deploy Controller
[Helm](https://helm.sh) must be installed to use the charts. Please refer to
Helm's [documentation](https://helm.sh/docs) to get started.
Once Helm has been set up correctly, add the repo as follows:
```
helm repo add k3k https://galal-hussein.github.io/k3k
```
If you had already added this repo earlier, run `helm repo update` to retrieve
the latest versions of the packages. You can then run `helm search repo
k3k` to see the charts.
To install the k3k chart:
helm install my-k3k k3k/k3k
To uninstall the chart:
helm delete my-k3k
### Create a new cluster
To create a new cluster you need to install and run the cli or create a cluster object, to install the cli:
```
wget https://github.com/galal-hussein/k3k/releases/download/v0.0.0-alpha2/k3kcli
chmod +x k3kcli
sudo cp k3kcli /usr/local/bin
```
To create a new cluster you can use:
```
k3k cluster create --name example-cluster --token test
```

View File

@@ -2,5 +2,5 @@ apiVersion: v2
name: k3k
description: A Helm chart for K3K
type: application
version: 0.1.0
appVersion: 0.1.0
version: 0.1.1-k3k1
appVersion: 0.0.0-alpha3

View File

@@ -23,12 +23,4 @@ spec:
- containerPort: 8080
name: https
protocol: TCP
livenessProbe:
httpGet:
path: /
port: https
readinessProbe:
httpGet:
path: /
port: https
serviceAccountName: {{ include "k3k.serviceAccountName" . }}

View File

@@ -5,7 +5,7 @@ image:
repository: husseingalal/k3k
pullPolicy: IfNotPresent
# Overrides the image tag whose default is the chart appVersion.
tag: ""
tag: "v0.0.0-alpha5"
imagePullSecrets: []
nameOverride: ""

View File

@@ -34,6 +34,7 @@ var (
agents int64
serverArgs cli.StringSlice
agentArgs cli.StringSlice
version string
clusterCreateFlags = []cli.Flag{
cli.StringFlag{
@@ -77,6 +78,12 @@ var (
Usage: "agents extra arguments",
Value: &agentArgs,
},
cli.StringFlag{
Name: "version",
Usage: "k3s version",
Destination: &version,
Value: "v1.26.1-k3s1",
},
}
)
@@ -146,6 +153,7 @@ func newCluster(name, token string, servers, agents int32, clusterCIDR, serviceC
ServiceCIDR: serviceCIDR,
ServerArgs: serverArgs,
AgentArgs: agentArgs,
Version: version,
},
}
}

BIN
hack/becausewecan.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

View File

@@ -19,7 +19,11 @@ func Resource(resource string) schema.GroupResource {
}
func addKnownTypes(s *runtime.Scheme) error {
s.AddKnownTypes(SchemeGroupVersion, &Cluster{}, &ClusterList{})
s.AddKnownTypes(SchemeGroupVersion,
&Cluster{},
&ClusterList{},
&CIDRAllocationPool{},
&CIDRAllocationPoolList{})
metav1.AddToGroupVersion(s, SchemeGroupVersion)
return nil
}

View File

@@ -28,7 +28,7 @@ type ClusterSpec struct {
ServerArgs []string `json:"serverArgs,omitempty"`
AgentArgs []string `json:"agentArgs,omitempty"`
Expose ExposeConfig `json:"expose,omitempty"`
Expose *ExposeConfig `json:"expose,omitempty"`
}
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object

View File

@@ -207,7 +207,11 @@ func (in *ClusterSpec) DeepCopyInto(out *ClusterSpec) {
*out = make([]string, len(*in))
copy(*out, *in)
}
in.Expose.DeepCopyInto(&out.Expose)
if in.Expose != nil {
in, out := &in.Expose, &out.Expose
*out = new(ExposeConfig)
(*in).DeepCopyInto(*out)
}
return
}

View File

@@ -64,13 +64,11 @@ func Add(ctx context.Context, mgr manager.Manager) error {
},
}
if err := reconciler.Client.Create(ctx, &cidrClusterPool); err != nil {
if !apierrors.IsConflict(err) {
if !apierrors.IsAlreadyExists(err) {
// return nil since the resource has
// already been created
return nil
return err
}
return err
}
clusterServiceSubnets, err := generateSubnets(defaultClusterServiceCIDR)
@@ -97,13 +95,11 @@ func Add(ctx context.Context, mgr manager.Manager) error {
},
}
if err := reconciler.Client.Create(ctx, &cidrServicePool); err != nil {
if !apierrors.IsConflict(err) {
if !apierrors.IsAlreadyExists(err) {
// return nil since the resource has
// already been created
return nil
return err
}
return err
}
// create a new controller and add it to the manager
@@ -202,15 +198,17 @@ func (c *ClusterReconciler) createCluster(ctx context.Context, cluster *v1alpha1
return util.WrapErr("failed to create servers and agents deployment", err)
}
if cluster.Spec.Expose.Ingress.Enabled {
serverIngress, err := server.Ingress(ctx, cluster, c.Client)
if err != nil {
return util.WrapErr("failed to create ingress object", err)
}
if cluster.Spec.Expose != nil {
if cluster.Spec.Expose.Ingress != nil {
serverIngress, err := server.Ingress(ctx, cluster, c.Client)
if err != nil {
return util.WrapErr("failed to create ingress object", err)
}
if err := c.Client.Create(ctx, serverIngress); err != nil {
if !apierrors.IsAlreadyExists(err) {
return util.WrapErr("failed to create server ingress", err)
if err := c.Client.Create(ctx, serverIngress); err != nil {
if !apierrors.IsAlreadyExists(err) {
return util.WrapErr("failed to create server ingress", err)
}
}
}
}