Skip to main content

Control Plane YAML Specification

potctl allows users to deploy Edge Compute Networks ('ECNs'). The various resources which constitute an ECN are specified within YAML files for potctl to consume.

Trying to use potctl v1.3.6 with an older ECN?

You can connect to an older ECN with potctl +v1.3.0 for view-only purposes. If you would like full control over the ECN with potctl +v1.3.0, you should delete the ECN with your older potctl and then redeploy with potctl +v1.3.0 .

Kubernetes Control Plane

The Kubernetes Control Plane specifies all the resources required to deploy the ioFog Control Plane on a Kubernetes cluster.

apiVersion: datasance.com/v3
kind: KubernetesControlPlane
metadata:
name: buffalo
namespace: default
spec:
iofogUser:
name: Foo
surname: Bar
email: user@domain.com
password: g9hr823rhuoi
config: ~/.kube/config
replicas:
controller: 2
database:
provider: mysql/postgres
user:
host:
port:
password:
databaseName: pot
auth:
url: https://example.com/
realm: realm-name
realmKey:
ssl: external
controllerClient: pot-controller
controllerSecret:
viewerClient: ecn-viewer
images:
pullSecret: pull-srect
operator: ghcr.io/datasance//operator:3.4.16
controller: ghcr.io/datasance/controller:3.4.9
portManager: ghcr.io/datasance/port-manager:3.1.6
proxy: ghcr.io/datasance/proxy:3.1.1
router: ghcr.io/datasance/router:3.2.5
services:
controller:
type: LoadBalancer/ClusterIP
# annotations:
# service.beta.kubernetes.io/azure-load-balancer-internal: "true"
proxy:
type: LoadBalancer/oadBalancer
annotations:
service.beta.kubernetes.io/azure-load-balancer-internal: "true"
router:
type: LoadBalancer/ClusterIP
# annotations:
# service.beta.kubernetes.io/azure-load-balancer-internal: "true"
controller:
ecnViewerUrl: https://
https: true
secretName:
ecnViewerPort: 8008
router:
internalSecret:
amqpsSecret:
requireSsl: "yes"
saslMechanisms: EXTERNAL
authenticatePeer: "yes"
proxy:
serverName:
transport: tls
ingresses:
controller:
annotations:
# cert-manager.io/cluster-issuer: letsencrypt
# nginx.ingress.kubernetes.io/proxy-buffer-size: "128k"
# nginx.ingress.kubernetes.io/backend-protocol: "https"
ingressClassName: nginx
host:
secretName:
router:
address:
messagePort: 5672
interiorPort: 55672
edgePort: 45672
httpProxy:
address:
tcpProxy:
address:
FieldDescription
iofogUserCredentials registered against ioFog Controller REST API.
configPath to the Kubernetes configuration file that potctl uses to install the Controller service to the Kubernetes cluster. (Note: The namespace used with potctl will be the Kubernetes namespace where your components are deployed.)
replicas.controllerDefines the number of controller replicas to be deployed.
databaseConfiguration for the database. Includes provider, user, host, port, password, and database name.
authAuthentication configuration for Keycloak. Includes realm, realm key, SSL type, and client/secret configurations.
imagesContains image references and pull secrets for various components like operator, controller, proxy, router, etc.
servicesSpecifies the service type (e.g., LoadBalancer or ClusterIP) and optional annotations for the controller, proxy, and router services.
controllerConfiguration for the Controller service, including the ECN Viewer URL, HTTPS settings, and secret names.
routerConfiguration for the Router, including secrets, SSL requirements, SASL mechanisms, and peer authentication settings.
proxyProxy server configuration, including transport protocol and server name.
ingressesIngress configuration for Controller and Router, including annotations, ingress class name, host, and secret name.
ingresses.controllerAnnotations and ingress settings specific to the Controller, including optional cert-manager and ingress controller configurations.
ingresses.routerAddress, message port, interior port, and edge port configurations for the Router.
ingresses.httpProxyAddress the http Proxy.
ingresses.tcpProxyAddress the tcp Proxy.
Router and Proxy Ingress

Above ingress configurations for Router and Proxy are not creating Ingress on Kubernetes, they are just for the configuring Router and Proxy ingress addresses for Controller

Remote Control Plane

The Remote Control Plane component specifies all the resources required to deploy the ioFog Control Plane on a set of remote hosts.

apiVersion: datasance.com/v3
kind: ControlPlane
metadata:
name: buffalo
namespace: default
spec:
iofogUser:
name: Foo
surname: Bar
email: user@domain.com
password: g9hr823rhuoi
auth:
url: https://example.com/
realm: realm-name
realmKey: realm-key
ssl: exter
controllerClient: pot-controller
controllerSecret:
viewerClient: ecn-viewer
controllers:
- name: vanilla
host: 30.40.50.3
ssh:
user: foo
keyFile: ~/.ssh/id_rsa
port: 22
package:
container:
image: ghcr.io/datasance/controller:3.4.9
systemAgent:
container:
image: ghcr.io/datasance/agent:3.3.2
FieldDescription
iofogUserCredentials registered against ioFog Controller REST API.
controllersList of Controller instances.
controller.nameUser-defined unique identifier of Controller instance within an potctl namespace. Must start and end with lowercase alphanumeric character. Can include '-' character.
controller.hostHostname of remote host that potctl must SSH into to install Controller service.
controller.ssh.userUsername of remote host that potctl must SSH into to install Controller service.
controller.ssh.keyFilePath to private SSH key that potctl must use to SSH into remote host to install Controller service.
controller.ssh.portPort to use with SSH. Optional (default: 22).
controller.package.container.imageRemote controller container image
controller.systemAgent.container.imageRemote controlplane Agent container image

Local Control Plane

The Local Control Plane component specifies all the resources required to deploy the ioFog Control Plane as a local docker container.

apiVersion: datasance.com/v3
kind: LocalControlPlane
metadata:
name: buffalo
namespace: default
spec:
iofogUser:
name: Foo
surname: Bar
email: user@domain.com
password: g9hr823rhuoi
auth:
url: https://example.com/
realm: realm-name
realmKey: realm-key
ssl: exter
controllerClient: pot-controller
controllerSecret:
viewerClient: ecn-viewer
controller:
container:
image: ghcr.io/datasance/controller:3.4.9
FieldDescription
iofogUserCredentials registered against ioFog Controller REST API.
controllerController specification.
controller.imageDocker image to use as the Controller.

Remote Controller

We can expand a Remote Control Plane by deploying a new Controller.

apiVersion: datasance.com/v3
kind: Controller
metadata:
name: alpaca
namespace: default
spec:
host: 30.40.50.5
ssh:
user: foo
keyFile: ~/.ssh/id_rsa
port: 22
FieldDescription
nameUser-defined unique identifier of Controller instance within an potctl namespace. Must start and end with lowercase alphanumeric character. Can include '-' character.
hostHostname of remote host that potctl must SSH into to install Controller service.
ssh.userUsername of remote host that potctl must SSH into to install Controller service.
ssh.keyFilePath to private SSH key that potctl must use to SSH into remote host to install Controller service.
ssh.portPort to use with SSH. Optional (default: 22)

Edge Compute Network

An entire ECN can be specified within a single YAML file.

Multiple resources can be incorporated into a single YAML file using --- as a separator.

---
apiVersion: datasance.com/v3
kind: ControlPlane
metadata:
name: buffalo
namespace: default
spec:
iofogUser:
name: John
surname: Doe
email: user@example.com
password: mysecretpw
auth:
url: https://example.com/
realm: realm-name
realmKey: realm-key
ssl: exter
controllerClient: pot-controller
controllerSecret:
viewerClient: ecn-viewer
controllers:
- name: alpaca-1
host: 30.40.50.3
ssh:
user: john
keyFile: ~/.ssh/id_rsa
- name: alpaca-2
host: 30.40.50.4
ssh:
user: john
keyFile: ~/.ssh/id_rsa
---
apiVersion: datasance.com/v3
kind: Agent
metadata:
name: hippo-1
namespace: default
spec:
host: 30.40.50.6
ssh:
user: john
keyFile: ~/.ssh/id_rsa
---
apiVersion: datasance.com/v3
kind: Agent
metadata:
name: hippo-2
namespace: default
spec:
host: 30.40.50.7
ssh:
user: john
keyFile: ~/.ssh/id_rsa
Group 3See anything wrong with the document? Help us improve it!