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