SkyCluster Configuration#

SkyCluster Secret#

You need to create a secret containing a public key and a private key for the skycluster to authenticate itself with its components. The secret should be created in the skycluster namespace.

First export your public and private keys (adjust the paths to your keys):

export PUBLIC_KEY=$(cat ~/.ssh/id_rsa.pub)
export PRIVATE_KEY=$(cat ~/.ssh/id_rsa | base64 -w0)

And then run the following command to generate the secret:

curl -s https://skycluster.io/configs/skysecret-cfg.sh | bash

Alternatively, you can create a secret using a YAML file below:

skysecret-example.yaml

 1apiVersion: v1
 2kind: Secret
 3metadata:
 4  namespace: skycluster
 5  name: public-private-key
 6  labels:
 7    skycluster.io/managed-by: skycluster
 8    skycluster.io/secret-type: keypair
 9type: Opaque
10stringData:
11  config: |
12    {
13      "publicKey": "ssh-rsa AAAAB3NzaC1yc...fKEgCExt6YjE= ubuntu@cluster-dev1",
14      "privateKey": "LS0tLS1CRUdJTiBPUEVOU1..gS0VZLS0tLS0K"
15    }

SkyCluster Private Image Reposity#

You can use your private registry when deploying Kubernetes clusters using SkyCluster. To do so, you need to create a secret containing the credentials for the private registry. The secret should be created in the skycluster namespace.

First export your registry credentials, you need to first run sudo docker login <registry> to login to your private registry. Then use the credentials created in the ~/.docker/config.json or /root/.docker/config.json file to create the secret:

# in this example we use /root/.docker/config.json
kubectl create secret generic regcred  \
  --from-file=.dockerconfigjson=/root/.docker/config.json \
  --type=kubernetes.io/dockerconfigjson \
  -n skycluster

# Make sure to label the secret
kubectl label secret regcred \
  skycluster.io/secret-type=registry \
  skycluster.io/managed-by=skycluster \
  -n skycluster

SkyCluster Post-installation Configuration#

After installing SkyCluster, you need to configure the providers you want to use. This includes setting up OpenStack providers and setting the latencies between registered regions and zones.

SkyCluster AWS Configuration#

Note

This step is only required if you are using AWS and have enalbed it during the installation of SkyCluster.

You need to create a YAML file containing the essential mapping information for the provider. Below you can find an exmaple YAML file for the AWS provider configuration.

aws-provider-setting.yaml

 1providerMappings:
 2  aws:
 3    # global field is reserved for future use anf global settings
 4    global:
 5    regions:
 6      - name: aws_us-east-1_cloud_VI
 7        region: us-east-1
 8        continent: NorthAmerica
 9        regionAlias: us-east
10        zones:
11          # We need to ensure for each region, there is one zone
12          # with defaultZone set to true
13          - name: use1-az1
14            locationName: Virginia
15            defaultZone: true
16            type: cloud
17            defaults:
18              flavor: 2vCPU-4GB
19              min-vCPU: 1vCPU-2GB
20              max-vCPU: 8vCPU-32GB
21              image: ubuntu-24.04
22            storage:
23              - name: BlockStorage
24                type: EBS
25                min: 10GB
26                step: 10GB
27                price: 0.8
28            flavors:
29              - flavor: 1vCPU-2GB
30                name: t2.small
31                vcpus: 1
32                ram: 2GB
33                price: 0.032
34              - flavor: 2vCPU-4GB
35                name: t3.medium
36                vcpus: 2
37                ram: 4GB
38                price: 0.0416
39            egressDataTransfer:
40              - name: Internet
41                # type refers to the destination type of the traffic.
42                # possible options are "Internet" for egres traffic
43                # through Internet and "Provider" for direct traffic
44                # to another provider.
45                # Currently only "Internet" is supported
46                type: Internet
47                price: 0.09
48        # images specifies the mapping between the image names
49        # and the actual image names in the OpenStack provider
50        # within this <region>. We assume images are available
51        # in all zones within the region.
52        images:
53          ubuntu-24.04: ami-0980c117fa7ebaffd
54          ubuntu-22.04: ami-07543813a68cc4fe9
55          ubuntu-20.04: ami-0f81732f07ce19b1c

SkyCluster OpenStack Configuration#

Note

This step is only required if you are using OpenStack and have enalbed it during the installation of SkyCluster.

For each OpenStack provider, you need to create a YAML file containing the essential mapping information for the provider. Use the YAML template below and provide the appropriate values for each field:

os-provider-setting.yaml

 1providerMappings:
 2  openstack:
 3    regions:
 4      - name:  # Name of the region
 5        region: # Name of the region
 6        regionAlias: # Alias of the region
 7        continent: NorthAmerica
 8        zones:
 9          # There should be at least one zone specified as default for each region
10          - name: zone-1
11            locationName: Toronto
12            # the default zone is identified by setting
13            # the defaultZone to true
14            defaultZone: true
15            type: cloud
16            defaults:
17              flavor: p2.large
18              image: ubuntu-22.04
19              min-vCPU: 1vCPU-2GB
20              max-vCPU: 12vCPU-32GB
21            egressDataTransfer:
22              - name: Internet
23                type: Internet
24                price: 0.02
25            storage:
26              - name: BlockStorage
27                type: EBS
28                min: 10GB
29                step: 10GB
30                price: 0.8
31            # flavors specifies the mapping between the flavor names
32            # and the actual machine types in the OpenStack provider
33            # within this <zone>.
34            flavors:
35                # name of the flavor in the provider
36              - name: m1.small
37                # flavor is the name of the flavor used in the SkyCluster
38                flavor: 1vCPU-2GB
39                vcpus: 1
40                ram: 2GB
41                price: 0.032
42              - name: m1.medium
43                flavor: 2vCPU-4GB
44                vcpus: 2
45                ram: 4GB
46                price: 0.02
47        # images specifies the mapping between the image names
48        # and the actual image names in the OpenStack provider
49        # within this <region>. We assume images are available
50        # in all zones within the region.
51        images:
52          ubuntu-24.04: ubuntu-24.04
53          ubuntu-22.04: ubuntu-22.04
54          ubuntu-20.04: ubuntu-20.04
55          ubuntu-18.04: ubuntu-18.04

We use the following settings for the SAVI testbed.

os-provider-setting.yaml

 1providerMappings:
 2  openstack:
 3    regions:
 4      - name: SCINET
 5        region: SCINET
 6        regionAlias: SCINET
 7        subnetCidr: 10.30.10.0/24
 8        gatewayIp: 10.30.10.1
 9        zones:
10          - name: default
11            locationName: Toronto
12            defaultZone: true
13            type: cloud
14            flavors:
15              small:  n1.small
16              medium: o1.medium
17              large:  p1.medium
18              xlarge: p3.large
19              x.8G:   n1.medium
20              x.16G:  o1.medium
21              x.32G:  p1.medium
22        images:
23          ubuntu-22.04: Ubuntu-22-04-Jammy
24          ubuntu-20.04: Ubuntu-20-04-focal
25          ubuntu-18.04: Ubuntu-18-04-bionic
26      - name: VAUGHAN
27        region: VAUGHAN
28        regionAlias: VAUGHAN
29        subnetCidr: 10.29.10.0/24
30        gatewayIp: 10.29.10.1
31        zones:
32          - name: default
33            locationName: Toronto
34            defaultZone: true
35            type: cloud
36            flavors:
37              small:  n1.small
38              medium: o1.medium
39              large:  p1.medium
40              xlarge: p1.medium
41              x.8G:   n1.medium
42              x.16G:  o1.medium
43              x.32G:  p1.medium
44        images:
45          ubuntu-22.04: Ubuntu-22-04-Jammy
46          ubuntu-20.04: Ubuntu-20-04-focal
47          ubuntu-18.04: Ubuntu-18-04-bionic

After creating the YAML file above, run the following command to configure the OpenStack provider:

helm install skycluster skycluster/skycluster \
  --set postInstall=true -f os-provider-setting.yaml

Latency Configuration#

Currently, SkyCluster automatically configures the latencies between regions and zones. The calculated latencies depends on the type and location of the provider. Table below summarizes how the latencies is calculated between different regions and zones based on our experiments and measurements from AWS. We will introduce automatic latency measurement in future releases.

Latency Calculations

Same Continents:

Source

Destination

Latency

Cloud

Cloud

100ms

Cloud

NTE

25ms

Edge

Edge

6ms

NTE

NTE

10ms

NTE

Edge

8ms

Different Continents, traffic between different continents is routed through the Cloud region.

Source

Destination

Latency

Cloud

Cloud

200ms

Crossplane Configuration#

SkyCluster utilizes Crossplane to manage the cloud resources. We create a series of composition and XRDs and use them to build our abstraction system on top of them. To install all required compositions and XRDs, run the following command:

curl -s http://skycluster.io:8000/crossplane/lists.txt | \
  while read url; do \
    curl -s "$url" | kubectl apply -f - ; done