Kubernetes Custom Resources
SiteWhere uses Kubernetes custom resources for almost all aspects of configuration. When the custom resources are added/updated/deleted, the SiteWhere Kubernetes operator reacts to the changes in order to realize the components at runtime. The core SiteWhere custom resource model is documented below.
SiteWhereInstance
Declare and Configure a SiteWhere Instance
This custom resource is scoped at the cluster level and defines properties of a SiteWhere instance including:
- Instance Id - Unique name for the instance which is also used as the Kubernetes
Namespace
for all components in the instance. - Configuration Template - Reference to an
InstanceConfigurationTemplate
which contains the instance configuration that will be loaded into the instance when it is initially created. - Dataset Template - Reference to an
InstanceDatasetTemplate
which has scripts that are used to bootstrap the new instance. This includes populating the initial list of users and creating any default tenants in the system. - Configuration - The active configuration data for the instance. This data is initially copied from the configuration template, but may be edited directly via yaml or via the SiteWhere administrative user interface.
- Docker Spec - Default Docker settings used if not specified at the microservice level. This allows aspects such as the Docker repository and microservice version identifier to be set globally and overridden locally in the services.
- Microservices - The list of microservice specifications that will be managed by the instance. Each entry has the same content as the
spec
section of the declaration of aSiteWhereMicroservice
. The SiteWhere operator automatically createsSiteWhereMicroservice
resources for each entry in this list.
Istio Ingress for Instances
When a SiteWhereInstance
resource is added, the SiteWhere operator automatically creates an Istio VirtualService
that routes a subpath of the ingress gateway to the REST APIs made available by the instance-management
microservice. It also exposes the OpenAPI spec and Swagger UI for interacting with the REST APIs for the instance.
Common kubectl
Commands for Instances
The kubectl
CLI may be used to interact with the SiteWhereInstance
resources in a cluster. Below are some commonly used commands:
List Instances in a Cluster
kubectl get swi
or kubectl get instances
NAME CONFIG DATASET TENANT MNG USER MNG
sitewhere default default Bootstrapped Bootstrapped
Instance YAML
Below is an example of the yaml format of a SiteWhereInstance
:
apiVersion: sitewhere.io/v1alpha4
kind: SiteWhereInstance
metadata:
creationTimestamp: "2021-01-26T17:18:15Z"
generation: 2
managedFields: {}
name: sitewhere
resourceVersion: "54134856"
selfLink: /apis/sitewhere.io/v1alpha4/instances/sitewhere
uid: 7c98450b-8b6e-4c8e-8926-4684611366f0
spec:
configuration:
infrastructure:
grpc:
backoffMultiplier: 1.5
initialBackoffSeconds: 10
maxBackoffSeconds: 600
maxRetryCount: 6
resolveFQDN: false
kafka:
defaultTopicPartitions: 8
defaultTopicReplicationFactor: 3
hostname: sitewhere-kafka-kafka-bootstrap
port: 9092
metrics:
enabled: true
httpPort: 9090
namespace: sitewhere-system
redis:
hostname: sitewhere-redis-headless.sitewhere-system
port: 6379
persistenceConfigurations:
rdbConfigurations:
postgres:
configuration:
hostname: sitewhere-db-postgresql.sitewhere-system
maxConnections: 5
password: sitewhere
port: 5432
username: sitewhere
type: postgres95
timeSeriesConfigurations:
influxdb:
configuration:
databaseName: tenant_${tenant.id}
hostname: sitewhere-influxdb.sitewhere-system
port: 8086
type: influxdb
configurationTemplate: default
datasetTemplate: default
dockerSpec:
registry: docker.io
repository: sitewhere
tag: 3.0.1
microservices:
- debug:
jdwpPort: 8006
jmxPort: 1106
description: Provides APIs for managing assets associated with device assignments
functionalArea: asset-management
icon: devices_other
logging:
overrides:
- level: info
logger: com.sitewhere
- level: info
logger: com.sitewhere.grpc.client
- level: info
logger: com.sitewhere.microservice.grpc
- level: info
logger: com.sitewhere.microservice.kafka
- level: info
logger: org.redisson
- level: info
logger: com.sitewhere.asset
- level: info
logger: com.sitewhere.asset
multitenant: true
name: Asset Management
podSpec:
dockerSpec:
registry: docker.io
repository: sitewhere
tag: 3.0.1
env:
- name: sitewhere.config.k8s.name
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
- name: sitewhere.config.k8s.namespace
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
- name: sitewhere.config.k8s.pod.ip
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.podIP
- name: sitewhere.config.product.id
value: sitewhere
- name: sitewhere.config.keycloak.service.name
value: sitewhere-keycloak-http
- name: sitewhere.config.keycloak.api.port
value: "80"
- name: sitewhere.config.keycloak.realm
value: sitewhere
- name: sitewhere.config.keycloak.master.realm
value: master
- name: sitewhere.config.keycloak.master.username
value: sitewhere
- name: sitewhere.config.keycloak.master.password
value: sitewhere
- name: sitewhere.config.keycloak.oidc.secret
valueFrom:
secretKeyRef:
key: client-secret
name: sitewhere
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9000
protocol: TCP
- containerPort: 9090
protocol: TCP
replicas: 1
serviceSpec:
ports:
- name: grpc-api
port: 9000
protocol: TCP
targetPort: 9000
- name: http-metrics
port: 9090
protocol: TCP
targetPort: 9090
type: ClusterIP
- debug:
jdwpPort: 8011
jmxPort: 1111
description: Handles processing of operations which affect a large number of devices
functionalArea: batch-operations
icon: view_module
logging:
overrides:
- level: info
logger: com.sitewhere
- level: info
logger: com.sitewhere.grpc.client
- level: info
logger: com.sitewhere.microservice.grpc
- level: info
logger: com.sitewhere.microservice.kafka
- level: info
logger: org.redisson
- level: info
logger: com.sitewhere.asset
- level: info
logger: com.sitewhere.batch
multitenant: true
name: Batch Operations
podSpec:
dockerSpec:
registry: docker.io
repository: sitewhere
tag: 3.0.1
env:
- name: sitewhere.config.k8s.name
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
- name: sitewhere.config.k8s.namespace
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
- name: sitewhere.config.k8s.pod.ip
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.podIP
- name: sitewhere.config.product.id
value: sitewhere
- name: sitewhere.config.keycloak.service.name
value: sitewhere-keycloak-http
- name: sitewhere.config.keycloak.api.port
value: "80"
- name: sitewhere.config.keycloak.realm
value: sitewhere
- name: sitewhere.config.keycloak.master.realm
value: master
- name: sitewhere.config.keycloak.master.username
value: sitewhere
- name: sitewhere.config.keycloak.master.password
value: sitewhere
- name: sitewhere.config.keycloak.oidc.secret
valueFrom:
secretKeyRef:
key: client-secret
name: sitewhere
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9000
protocol: TCP
- containerPort: 9090
protocol: TCP
replicas: 1
serviceSpec:
ports:
- name: grpc-api
port: 9000
protocol: TCP
targetPort: 9000
- name: http-metrics
port: 9090
protocol: TCP
targetPort: 9090
type: ClusterIP
- debug:
jdwpPort: 8012
jmxPort: 1112
description: Manages delivery of commands in various formats based on invocation
events
functionalArea: command-delivery
icon: call_made
logging:
overrides:
- level: info
logger: com.sitewhere
- level: info
logger: com.sitewhere.grpc.client
- level: info
logger: com.sitewhere.microservice.grpc
- level: info
logger: com.sitewhere.microservice.kafka
- level: info
logger: org.redisson
- level: info
logger: com.sitewhere.asset
- level: info
logger: com.sitewhere.commands
multitenant: true
name: Command Delivery
podSpec:
dockerSpec:
registry: docker.io
repository: sitewhere
tag: 3.0.1
env:
- name: sitewhere.config.k8s.name
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
- name: sitewhere.config.k8s.namespace
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
- name: sitewhere.config.k8s.pod.ip
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.podIP
- name: sitewhere.config.product.id
value: sitewhere
- name: sitewhere.config.keycloak.service.name
value: sitewhere-keycloak-http
- name: sitewhere.config.keycloak.api.port
value: "80"
- name: sitewhere.config.keycloak.realm
value: sitewhere
- name: sitewhere.config.keycloak.master.realm
value: master
- name: sitewhere.config.keycloak.master.username
value: sitewhere
- name: sitewhere.config.keycloak.master.password
value: sitewhere
- name: sitewhere.config.keycloak.oidc.secret
valueFrom:
secretKeyRef:
key: client-secret
name: sitewhere
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9000
protocol: TCP
- containerPort: 9090
protocol: TCP
replicas: 1
serviceSpec:
ports:
- name: grpc-api
port: 9000
protocol: TCP
targetPort: 9000
- name: http-metrics
port: 9090
protocol: TCP
targetPort: 9090
type: ClusterIP
- debug:
jdwpPort: 8004
jmxPort: 1104
description: Provides APIs for managing the device object model
functionalArea: device-management
icon: developer_board
logging:
overrides:
- level: info
logger: com.sitewhere
- level: info
logger: com.sitewhere.grpc.client
- level: info
logger: com.sitewhere.microservice.grpc
- level: info
logger: com.sitewhere.microservice.kafka
- level: info
logger: org.redisson
- level: info
logger: com.sitewhere.asset
- level: info
logger: com.sitewhere.device
multitenant: true
name: Device Management
podSpec:
dockerSpec:
registry: docker.io
repository: sitewhere
tag: 3.0.1
env:
- name: sitewhere.config.k8s.name
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
- name: sitewhere.config.k8s.namespace
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
- name: sitewhere.config.k8s.pod.ip
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.podIP
- name: sitewhere.config.product.id
value: sitewhere
- name: sitewhere.config.keycloak.service.name
value: sitewhere-keycloak-http
- name: sitewhere.config.keycloak.api.port
value: "80"
- name: sitewhere.config.keycloak.realm
value: sitewhere
- name: sitewhere.config.keycloak.master.realm
value: master
- name: sitewhere.config.keycloak.master.username
value: sitewhere
- name: sitewhere.config.keycloak.master.password
value: sitewhere
- name: sitewhere.config.keycloak.oidc.secret
valueFrom:
secretKeyRef:
key: client-secret
name: sitewhere
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9000
protocol: TCP
- containerPort: 9090
protocol: TCP
replicas: 1
serviceSpec:
ports:
- name: grpc-api
port: 9000
protocol: TCP
targetPort: 9000
- name: http-metrics
port: 9090
protocol: TCP
targetPort: 9090
type: ClusterIP
- debug:
jdwpPort: 8013
jmxPort: 1113
description: Handles registration of new devices with the system
functionalArea: device-registration
icon: add_box
logging:
overrides:
- level: info
logger: com.sitewhere
- level: info
logger: com.sitewhere.grpc.client
- level: info
logger: com.sitewhere.microservice.grpc
- level: info
logger: com.sitewhere.microservice.kafka
- level: info
logger: org.redisson
- level: info
logger: com.sitewhere.asset
- level: info
logger: com.sitewhere.registration
multitenant: true
name: Device Registration
podSpec:
dockerSpec:
registry: docker.io
repository: sitewhere
tag: 3.0.1
env:
- name: sitewhere.config.k8s.name
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
- name: sitewhere.config.k8s.namespace
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
- name: sitewhere.config.k8s.pod.ip
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.podIP
- name: sitewhere.config.product.id
value: sitewhere
- name: sitewhere.config.keycloak.service.name
value: sitewhere-keycloak-http
- name: sitewhere.config.keycloak.api.port
value: "80"
- name: sitewhere.config.keycloak.realm
value: sitewhere
- name: sitewhere.config.keycloak.master.realm
value: master
- name: sitewhere.config.keycloak.master.username
value: sitewhere
- name: sitewhere.config.keycloak.master.password
value: sitewhere
- name: sitewhere.config.keycloak.oidc.secret
valueFrom:
secretKeyRef:
key: client-secret
name: sitewhere
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9000
protocol: TCP
- containerPort: 9090
protocol: TCP
replicas: 1
serviceSpec:
ports:
- name: grpc-api
port: 9000
protocol: TCP
targetPort: 9000
- name: http-metrics
port: 9090
protocol: TCP
targetPort: 9090
type: ClusterIP
- debug:
jdwpPort: 8014
jmxPort: 1114
description: Provides device state management features such as device shadows
functionalArea: device-state
icon: warning
logging:
overrides:
- level: info
logger: com.sitewhere
- level: info
logger: com.sitewhere.grpc.client
- level: info
logger: com.sitewhere.microservice.grpc
- level: info
logger: com.sitewhere.microservice.kafka
- level: info
logger: org.redisson
- level: info
logger: com.sitewhere.asset
- level: info
logger: com.sitewhere.devicestate
multitenant: true
name: Device State
podSpec:
dockerSpec:
registry: docker.io
repository: sitewhere
tag: 3.0.1
env:
- name: sitewhere.config.k8s.name
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
- name: sitewhere.config.k8s.namespace
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
- name: sitewhere.config.k8s.pod.ip
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.podIP
- name: sitewhere.config.product.id
value: sitewhere
- name: sitewhere.config.keycloak.service.name
value: sitewhere-keycloak-http
- name: sitewhere.config.keycloak.api.port
value: "80"
- name: sitewhere.config.keycloak.realm
value: sitewhere
- name: sitewhere.config.keycloak.master.realm
value: master
- name: sitewhere.config.keycloak.master.username
value: sitewhere
- name: sitewhere.config.keycloak.master.password
value: sitewhere
- name: sitewhere.config.keycloak.oidc.secret
valueFrom:
secretKeyRef:
key: client-secret
name: sitewhere
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9000
protocol: TCP
- containerPort: 9090
protocol: TCP
replicas: 1
serviceSpec:
ports:
- name: grpc-api
port: 9000
protocol: TCP
targetPort: 9000
- name: http-metrics
port: 9090
protocol: TCP
targetPort: 9090
type: ClusterIP
- debug:
jdwpPort: 8005
jmxPort: 1105
description: Provides APIs for persisting and accessing events generated by devices
functionalArea: event-management
icon: dynamic_feed
logging:
overrides:
- level: info
logger: com.sitewhere
- level: info
logger: com.sitewhere.grpc.client
- level: info
logger: com.sitewhere.microservice.grpc
- level: info
logger: com.sitewhere.microservice.kafka
- level: info
logger: org.redisson
- level: info
logger: com.sitewhere.asset
- level: info
logger: com.sitewhere.event
multitenant: true
name: Event Management
podSpec:
dockerSpec:
registry: docker.io
repository: sitewhere
tag: 3.0.1
env:
- name: sitewhere.config.k8s.name
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
- name: sitewhere.config.k8s.namespace
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
- name: sitewhere.config.k8s.pod.ip
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.podIP
- name: sitewhere.config.product.id
value: sitewhere
- name: sitewhere.config.keycloak.service.name
value: sitewhere-keycloak-http
- name: sitewhere.config.keycloak.api.port
value: "80"
- name: sitewhere.config.keycloak.realm
value: sitewhere
- name: sitewhere.config.keycloak.master.realm
value: master
- name: sitewhere.config.keycloak.master.username
value: sitewhere
- name: sitewhere.config.keycloak.master.password
value: sitewhere
- name: sitewhere.config.keycloak.oidc.secret
valueFrom:
secretKeyRef:
key: client-secret
name: sitewhere
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9000
protocol: TCP
- containerPort: 9090
protocol: TCP
replicas: 1
serviceSpec:
ports:
- name: grpc-api
port: 9000
protocol: TCP
targetPort: 9000
- name: http-metrics
port: 9090
protocol: TCP
targetPort: 9090
type: ClusterIP
- debug:
jdwpPort: 8008
jmxPort: 1108
description: Handles inbound device data from various sources, protocols, and
formats
functionalArea: event-sources
icon: forward
logging:
overrides:
- level: info
logger: com.sitewhere
- level: info
logger: com.sitewhere.grpc.client
- level: info
logger: com.sitewhere.microservice.grpc
- level: info
logger: com.sitewhere.microservice.kafka
- level: info
logger: org.redisson
- level: info
logger: com.sitewhere.asset
- level: info
logger: com.sitewhere.sources
multitenant: true
name: Event Sources
podSpec:
dockerSpec:
registry: docker.io
repository: sitewhere
tag: 3.0.1
env:
- name: sitewhere.config.k8s.name
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
- name: sitewhere.config.k8s.namespace
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
- name: sitewhere.config.k8s.pod.ip
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.podIP
- name: sitewhere.config.product.id
value: sitewhere
- name: sitewhere.config.keycloak.service.name
value: sitewhere-keycloak-http
- name: sitewhere.config.keycloak.api.port
value: "80"
- name: sitewhere.config.keycloak.realm
value: sitewhere
- name: sitewhere.config.keycloak.master.realm
value: master
- name: sitewhere.config.keycloak.master.username
value: sitewhere
- name: sitewhere.config.keycloak.master.password
value: sitewhere
- name: sitewhere.config.keycloak.oidc.secret
valueFrom:
secretKeyRef:
key: client-secret
name: sitewhere
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9000
protocol: TCP
- containerPort: 9090
protocol: TCP
replicas: 1
serviceSpec:
ports:
- name: grpc-api
port: 9000
protocol: TCP
targetPort: 9000
- name: http-metrics
port: 9090
protocol: TCP
targetPort: 9090
type: ClusterIP
- debug:
jdwpPort: 8007
jmxPort: 1107
description: Common processing logic applied to enrich and direct inbound events
functionalArea: inbound-processing
icon: input
logging:
overrides:
- level: info
logger: com.sitewhere
- level: info
logger: com.sitewhere.grpc.client
- level: info
logger: com.sitewhere.microservice.grpc
- level: info
logger: com.sitewhere.microservice.kafka
- level: info
logger: org.redisson
- level: info
logger: com.sitewhere.asset
- level: info
logger: com.sitewhere.inbound
multitenant: true
name: Inbound Processing
podSpec:
dockerSpec:
registry: docker.io
repository: sitewhere
tag: 3.0.1
env:
- name: sitewhere.config.k8s.name
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
- name: sitewhere.config.k8s.namespace
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
- name: sitewhere.config.k8s.pod.ip
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.podIP
- name: sitewhere.config.product.id
value: sitewhere
- name: sitewhere.config.keycloak.service.name
value: sitewhere-keycloak-http
- name: sitewhere.config.keycloak.api.port
value: "80"
- name: sitewhere.config.keycloak.realm
value: sitewhere
- name: sitewhere.config.keycloak.master.realm
value: master
- name: sitewhere.config.keycloak.master.username
value: sitewhere
- name: sitewhere.config.keycloak.master.password
value: sitewhere
- name: sitewhere.config.keycloak.oidc.secret
valueFrom:
secretKeyRef:
key: client-secret
name: sitewhere
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9000
protocol: TCP
- containerPort: 9090
protocol: TCP
replicas: 1
serviceSpec:
ports:
- name: grpc-api
port: 9000
protocol: TCP
targetPort: 9000
- name: http-metrics
port: 9090
protocol: TCP
targetPort: 9090
type: ClusterIP
- configuration:
userManagement:
jwtExpirationInMinutes: 60
syncopeHost: sitewhere-syncope.sitewhere-system.cluster.local
syncopePort: 8080
debug:
jdwpPort: 8001
jmxPort: 1101
description: Handles APIs for managing global aspects of an instance
functionalArea: instance-management
icon: language
logging:
overrides:
- level: info
logger: com.sitewhere
- level: info
logger: com.sitewhere.grpc.client
- level: info
logger: com.sitewhere.microservice.grpc
- level: info
logger: com.sitewhere.microservice.kafka
- level: info
logger: org.redisson
- level: info
logger: com.sitewhere.asset
- level: info
logger: com.sitewhere.instance
- level: info
logger: com.sitewhere.web
name: Instance Management
podSpec:
dockerSpec:
registry: docker.io
repository: sitewhere
tag: 3.0.1
env:
- name: sitewhere.config.k8s.name
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
- name: sitewhere.config.k8s.namespace
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
- name: sitewhere.config.k8s.pod.ip
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.podIP
- name: sitewhere.config.product.id
value: sitewhere
- name: sitewhere.config.keycloak.service.name
value: sitewhere-keycloak-http
- name: sitewhere.config.keycloak.api.port
value: "80"
- name: sitewhere.config.keycloak.realm
value: sitewhere
- name: sitewhere.config.keycloak.master.realm
value: master
- name: sitewhere.config.keycloak.master.username
value: sitewhere
- name: sitewhere.config.keycloak.master.password
value: sitewhere
- name: sitewhere.config.keycloak.oidc.secret
valueFrom:
secretKeyRef:
key: client-secret
name: sitewhere
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9000
protocol: TCP
- containerPort: 9090
protocol: TCP
- containerPort: 8080
protocol: TCP
replicas: 1
serviceSpec:
ports:
- name: grpc-api
port: 9000
protocol: TCP
targetPort: 9000
- name: http-metrics
port: 9090
protocol: TCP
targetPort: 9090
- name: http-rest
port: 8080
protocol: TCP
targetPort: 8080
type: ClusterIP
- debug:
jdwpPort: 8009
jmxPort: 1109
description: Supports generating labels such as bar codes and QR codes for devices
functionalArea: label-generation
icon: label
logging:
overrides:
- level: info
logger: com.sitewhere
- level: info
logger: com.sitewhere.grpc.client
- level: info
logger: com.sitewhere.microservice.grpc
- level: info
logger: com.sitewhere.microservice.kafka
- level: info
logger: org.redisson
- level: info
logger: com.sitewhere.asset
- level: info
logger: com.sitewhere.labels
multitenant: true
name: Label Generation
podSpec:
dockerSpec:
registry: docker.io
repository: sitewhere
tag: 3.0.1
env:
- name: sitewhere.config.k8s.name
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
- name: sitewhere.config.k8s.namespace
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
- name: sitewhere.config.k8s.pod.ip
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.podIP
- name: sitewhere.config.product.id
value: sitewhere
- name: sitewhere.config.keycloak.service.name
value: sitewhere-keycloak-http
- name: sitewhere.config.keycloak.api.port
value: "80"
- name: sitewhere.config.keycloak.realm
value: sitewhere
- name: sitewhere.config.keycloak.master.realm
value: master
- name: sitewhere.config.keycloak.master.username
value: sitewhere
- name: sitewhere.config.keycloak.master.password
value: sitewhere
- name: sitewhere.config.keycloak.oidc.secret
valueFrom:
secretKeyRef:
key: client-secret
name: sitewhere
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9000
protocol: TCP
- containerPort: 9090
protocol: TCP
replicas: 1
serviceSpec:
ports:
- name: grpc-api
port: 9000
protocol: TCP
targetPort: 9000
- name: http-metrics
port: 9090
protocol: TCP
targetPort: 9090
type: ClusterIP
- debug:
jdwpPort: 8016
jmxPort: 1116
description: Allows event streams to be delivered to external systems for additional
processing
functionalArea: outbound-connectors
icon: label
logging:
overrides:
- level: info
logger: com.sitewhere
- level: info
logger: com.sitewhere.grpc.client
- level: info
logger: com.sitewhere.microservice.grpc
- level: info
logger: com.sitewhere.microservice.kafka
- level: info
logger: org.redisson
- level: info
logger: com.sitewhere.asset
- level: info
logger: com.sitewhere.connectors
multitenant: true
name: Outbound Connectors
podSpec:
dockerSpec:
registry: docker.io
repository: sitewhere
tag: 3.0.1
env:
- name: sitewhere.config.k8s.name
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
- name: sitewhere.config.k8s.namespace
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
- name: sitewhere.config.k8s.pod.ip
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.podIP
- name: sitewhere.config.product.id
value: sitewhere
- name: sitewhere.config.keycloak.service.name
value: sitewhere-keycloak-http
- name: sitewhere.config.keycloak.api.port
value: "80"
- name: sitewhere.config.keycloak.realm
value: sitewhere
- name: sitewhere.config.keycloak.master.realm
value: master
- name: sitewhere.config.keycloak.master.username
value: sitewhere
- name: sitewhere.config.keycloak.master.password
value: sitewhere
- name: sitewhere.config.keycloak.oidc.secret
valueFrom:
secretKeyRef:
key: client-secret
name: sitewhere
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9000
protocol: TCP
- containerPort: 9090
protocol: TCP
replicas: 1
serviceSpec:
ports:
- name: grpc-api
port: 9000
protocol: TCP
targetPort: 9000
- name: http-metrics
port: 9090
protocol: TCP
targetPort: 9090
type: ClusterIP
- debug:
jdwpPort: 8018
jmxPort: 1118
description: Supports scheduling of various system operations
functionalArea: schedule-management
icon: label
logging:
overrides:
- level: info
logger: com.sitewhere
- level: info
logger: com.sitewhere.grpc.client
- level: info
logger: com.sitewhere.microservice.grpc
- level: info
logger: com.sitewhere.microservice.kafka
- level: info
logger: org.redisson
- level: info
logger: com.sitewhere.asset
- level: info
logger: com.sitewhere.schedule
multitenant: true
name: Schedule Management
podSpec:
dockerSpec:
registry: docker.io
repository: sitewhere
tag: 3.0.1
env:
- name: sitewhere.config.k8s.name
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
- name: sitewhere.config.k8s.namespace
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
- name: sitewhere.config.k8s.pod.ip
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.podIP
- name: sitewhere.config.product.id
value: sitewhere
- name: sitewhere.config.keycloak.service.name
value: sitewhere-keycloak-http
- name: sitewhere.config.keycloak.api.port
value: "80"
- name: sitewhere.config.keycloak.realm
value: sitewhere
- name: sitewhere.config.keycloak.master.realm
value: master
- name: sitewhere.config.keycloak.master.username
value: sitewhere
- name: sitewhere.config.keycloak.master.password
value: sitewhere
- name: sitewhere.config.keycloak.oidc.secret
valueFrom:
secretKeyRef:
key: client-secret
name: sitewhere
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9000
protocol: TCP
- containerPort: 9090
protocol: TCP
replicas: 1
serviceSpec:
ports:
- name: grpc-api
port: 9000
protocol: TCP
targetPort: 9000
- name: http-metrics
port: 9090
protocol: TCP
targetPort: 9090
type: ClusterIP
status:
tenantManagementBootstrapState: Bootstrapped
userManagementBootstrapState: Bootstrapped
SiteWhereMicroservice
Declare and Configure a SiteWhere Microservice within an Instance
This custom resource is scoped at the instance namespace level and defines properties of a SiteWhere microservice including:
- Name - Name displayed in user interfaces when referencing the microservice.
- Description - A short description of functionality provided by the service.
- Functional Area - Short name used internally for resource naming. Should be unique across all microservices.
- Icon - Icon displayed in user interfaces for the microservice.
- Multitenant - Flag for whether the given microservice has multitenant capabilities.
- Pod Spec - The
Pod
specification that will be used when creating aDeployment
for the microservice. - Replicas - The number of replicas which will be used by the
Deployment
for the microservice. - Service Spec - The
Service
specification used when making the microservice available to external entities. - Logging - Logger settings that will be applied to the service to affect which content is included in the microservice logs.
- Debug - Debugger settings used to expose ports for external debuggers to connect to.
Microservice Resource Lifecycle
The SiteWhereMicroservice
resource is not normally created manually, but rather as a side-effect of an instance being deployed. The SiteWhereInstance
resource contains a list of microservice metadata which is used by the operator to create all of the microservices associated with the instance. When a SiteWhereMicroservice
resource is added, the SiteWhere operator takes care of creating the Kubernetes Deployment
and Service
based on metadata from the microservice spec. This is intended to work much like the relationship of Deployment
that create Pod
resources based on the pod spec in the deployment.
Common kubectl
Commands for Microservices
The kubectl
CLI may be used to interact with the SiteWhereMicroservice
resources. Below are some commonly used commands:
List Microservices in an Instance
kubectl -n sitewhere get swm
or kubectl -n sitewhere get microservices
. Note that namespace is required in order to limit the microservices returned to a specific instance.
NAME AREA
asset-management asset-management
batch-operations batch-operations
command-delivery command-delivery
device-management device-management
device-registration device-registration
device-state device-state
event-management event-management
event-sources event-sources
inbound-processing inbound-processing
instance-management instance-management
label-generation label-generation
outbound-connectors outbound-connectors
schedule-management schedule-management
Microservice YAML
Below is an example of the yaml format of a SiteWhereMicroservice
:
apiVersion: sitewhere.io/v1alpha4
kind: SiteWhereMicroservice
metadata:
creationTimestamp: "2021-01-26T17:18:15Z"
generation: 1
labels:
sitewhere.io/functional-area: asset-management
sitewhere.io/instance: sitewhere
managedFields: {}
name: asset-management
namespace: sitewhere
ownerReferences:
- apiVersion: sitewhere.io/v1alpha4
blockOwnerDeletion: true
controller: true
kind: SiteWhereInstance
name: sitewhere
uid: 7c98450b-8b6e-4c8e-8926-4684611366f0
resourceVersion: "54134283"
selfLink: /apis/sitewhere.io/v1alpha4/namespaces/sitewhere/microservices/asset-management
uid: 6203b362-36d4-4ece-9ebc-2cf43898e77a
spec:
debug:
jdwpPort: 8006
jmxPort: 1106
description: Provides APIs for managing assets associated with device assignments
functionalArea: asset-management
icon: devices_other
logging:
overrides:
- level: info
logger: com.sitewhere
- level: info
logger: com.sitewhere.grpc.client
- level: info
logger: com.sitewhere.microservice.grpc
- level: info
logger: com.sitewhere.microservice.kafka
- level: info
logger: org.redisson
- level: info
logger: com.sitewhere.asset
- level: info
logger: com.sitewhere.asset
multitenant: true
name: Asset Management
podSpec:
dockerSpec:
registry: docker.io
repository: sitewhere
tag: 3.0.1
env:
- name: sitewhere.config.k8s.name
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
- name: sitewhere.config.k8s.namespace
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
- name: sitewhere.config.k8s.pod.ip
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.podIP
- name: sitewhere.config.product.id
value: sitewhere
- name: sitewhere.config.keycloak.service.name
value: sitewhere-keycloak-http
- name: sitewhere.config.keycloak.api.port
value: "80"
- name: sitewhere.config.keycloak.realm
value: sitewhere
- name: sitewhere.config.keycloak.master.realm
value: master
- name: sitewhere.config.keycloak.master.username
value: sitewhere
- name: sitewhere.config.keycloak.master.password
value: sitewhere
- name: sitewhere.config.keycloak.oidc.secret
valueFrom:
secretKeyRef:
key: client-secret
name: sitewhere
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9000
protocol: TCP
- containerPort: 9090
protocol: TCP
replicas: 1
serviceSpec:
ports:
- name: grpc-api
port: 9000
protocol: TCP
targetPort: 9000
- name: http-metrics
port: 9090
protocol: TCP
targetPort: 9090
type: ClusterIP
status:
deployment: asset-management
services:
- asset-management