mirror of
https://github.com/rancher/k3k.git
synced 2026-03-02 17:50:36 +00:00
Compare commits
9 Commits
v0.0.0-alp
...
v0.0.0-alp
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dde877e285 | ||
|
|
0682b11100 | ||
|
|
1f2595edfb | ||
|
|
b0f1fc1184 | ||
|
|
8f5de4a5d2 | ||
|
|
46491a4310 | ||
|
|
a299353eca | ||
|
|
eb4e5dd099 | ||
|
|
420a784e01 |
2
.github/workflows/chart.yml
vendored
2
.github/workflows/chart.yml
vendored
@@ -3,7 +3,7 @@ name: Chart Release
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- k3k-chart
|
||||
- main
|
||||
|
||||
jobs:
|
||||
release:
|
||||
|
||||
1
.github/workflows/release.yml
vendored
1
.github/workflows/release.yml
vendored
@@ -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
50
README.md
Normal 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?
|
||||
|
||||

|
||||
|
||||
|
||||
## 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
|
||||
```
|
||||
@@ -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
|
||||
@@ -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" . }}
|
||||
@@ -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: ""
|
||||
|
||||
@@ -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
BIN
hack/becausewecan.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 137 KiB |
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,6 @@ set -e
|
||||
cd $(dirname $0)
|
||||
|
||||
./build
|
||||
./build-cli
|
||||
./test
|
||||
./validate
|
||||
./validate-ci
|
||||
|
||||
Reference in New Issue
Block a user