⚠️ DEPRECATED: This operator is deprecated and will no longer receive updates with new features. Changes in this repository are only related to maintenance tasks. Users should migrate to alternative telemetry solutions.
Operator for the infra.watch smart gateway
Use the OperatorHub in OpenShift to deploy from the Community catalog for a released version of Smart Gateway Operator.
The easiest way to get everything deployed is with the Service Telemetry Framework (STF). You can deploy a development version with the stf-run-ci role
This snippet will deploy the master (future main) branch across all repositories related to STF.
git clone https://github.com/infrawatch/service-telemetry-operator
oc new-project service-telemetry
oc patch configs.imageregistry.operator.openshift.io/cluster --patch '{"spec":{"defaultRoute":true}}' --type=merge
ansible-playbook build/run-ci.yaml -e __service_telemetry_events_enabled=false -e __service_telemetry_storage_ephemeral_enabled=true
Alternatively you can deploy the latest published artifacts. Currently this is not the recommended method.
ansible-playbook build/run-ci.yaml -e __local_build_enabled=false
Use the generate_bundle.sh script.
./build/generate_bundle.sh
## Begin bundle creation
-- Generating operator version
---- Operator Version: 1.3.1620788433
-- Create working directory
---- Created working directory: /tmp/smart-gateway-operator-bundle-1.3.1620788433
-- Generate Dockerfile for bundle
---- Generated Dockerfile complete
-- Generate bundle
~/src/github.com/infrawatch/smart-gateway-operator ~/src/github.com/infrawatch/smart-gateway-operator
INFO[0000] Generating bundle manifests version 1.3.1620788433
INFO[0000] Bundle manifests generated successfully in /tmp/smart-gateway-operator-bundle-1.3.1620788433
INFO[0000] Building annotations.yaml
INFO[0000] Generating output manifests directory
INFO[0000] Writing annotations.yaml in /tmp/smart-gateway-operator-bundle-1.3.1620788433/metadata
INFO[0000] Building Dockerfile
INFO[0000] Writing bundle.Dockerfile in /home/lmadsen/src/github.com/infrawatch/smart-gateway-operator
~/src/github.com/infrawatch/smart-gateway-operator
---- Replacing variables in generated manifest
---- Generated bundle complete at /tmp/smart-gateway-operator-bundle-1.3.1620788433/manifests/smart-gateway-operator.clusterserviceversion.yaml
-- Commands to create a bundle build
docker build -t quay.io/infrawatch-operators/smart-gateway-operator-bundle:1.3.1620788433 -f /tmp/smart-gateway-operator-bundle-1.3.1620788433/Dockerfile /tmp/smart-gateway-operator-bundle-1.3.1620788433
docker push quay.io/infrawatch-operators/smart-gateway-operator-bundle:1.3.1620788433
NOTE: You'll need a Red Hat subscription to access CodeReady Containers. Access of the pull secret is available at https://cloud.redhat.com/openshift/install/crc/installer-provisioned. Upstream CodeReady development is available at https://github.com/code-ready/crc.
A procedure for testing in CodeReady Containers will be available soon.
- buildah
- 1.14.0
- kubernetes
- v1.16.2
- crc
- crc version: 1.6.0+8ef676f
- oc
- openshift-clients-4.2.0-201910041700
- operator-sdk
- v0.15.2 (!0.13.0 which causes regressions via
gen-csvcommand)
- v0.15.2 (!0.13.0 which causes regressions via
Setup CRC and then login with the kubeadmin user.
$ crc setup
$ crc start --memory=32768
$ crc console --credentials
Install buildah via dnf.
sudo dnf install buildah -y
REGISTRY=$(oc registry info)
TOKEN=$(oc whoami -t)
INTERNAL_REGISTRY=$(oc registry info --internal=true)
buildah login --tls-verify=false -u openshift -p "${TOKEN}" "${REGISTRY}"
Create a namespace for the application called service-telemetry.
oc new-project service-telemetry
buildah bud -f build/Dockerfile -t "${REGISTRY}/service-telemetry/smart-gateway-operator:latest" .
buildah push --tls-verify=false "${REGISTRY}/service-telemetry/smart-gateway-operator:latest"
Install required RBAC rules and service account.
oc apply \
-f deploy/role_binding.yaml \
-f deploy/role.yaml \
-f deploy/service_account.yaml \
-f deploy/operator_group.yaml
Pick a version from deploy/olm-catalog/smart-gateway-operator/ and run the
following commands. Adjust version to what you want to test. We'll be using
v1.0.0 as our example version.
CSV_VERSION=1.0.0
INTERNAL_REGISTRY=$(oc registry info --internal=true)
oc apply -f deploy/olm-catalog/smart-gateway-operator/${CSV_VERSION}/smartgateway.infra.watch_smartgateways_crd.yaml
oc create -f <(sed "\
s|image: .\+/smart-gateway-operator:.\+$|image: ${INTERNAL_REGISTRY}/service-telemetry/smart-gateway-operator:latest|g;
s|namespace: placeholder|namespace: service-telemetry|g"\
"deploy/olm-catalog/smart-gateway-operator/${CSV_VERSION}/smart-gateway-operator.v${CSV_VERSION}.clusterserviceversion.yaml")
Validate that installation of the ClusterServiceVersion is progressing via
the oc CLI console.
oc get csv --watch
If you see PHASE: Succeeded then your CSV has been properly imported and
your Operator should be running locally. You can validate this by running oc get pods and looking for the smart-gateway-operator and that it is
Running.
You can bring up the logs of the Smart Gateway Operator by running oc logs <<pod_name>> -c operator.
To create a Smart Gateway, you'll need to connect it to a compatible AMQP 1.x message bus. For demonstration purposes we're going to use the Red Hat AMQ Interconnect Operator, create an AMQ Interconnect instance, then create a Smart Gateway instance that connects to it.
Subscribe to the AMQ Interconnect Operator and AMQ Certificate Manager. After subscribing create a new Interconnect object.
oc apply -f - <<EOF
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: amq7-interconnect-operator
namespace: service-telemetry
spec:
channel: 1.2.0
installPlanApproval: Automatic
name: amq7-interconnect-operator
source: redhat-operators
sourceNamespace: openshift-marketplace
EOF
You can check the status of the AMQ Interconnect ClusterServiceVersion
installation with oc get csv. When complete you should see PHASE: Succeeded.
Create a simple Interconnect object to deploy AMQ Interconnect router.
apiVersion: interconnectedcloud.github.io/v1alpha1
kind: Interconnect
metadata:
name: amq-interconnect
namespace: smart-gateway
spec:
addresses:
- distribution: multicast
prefix: collectd
- distribution: multicast
prefix: ceilometer
deploymentPlan:
livenessPort: 8888
placement: AntiAffinity
resources: {}
role: interior
size: 1
edgeListeners:
- expose: true
port: 5671
saslMechanisms: ANONYMOUS
sslProfile: openstack
interRouterListeners:
- port: 55672
listeners:
- port: 5672
sslProfiles:
- generateCaCert: true
generateCredentials: true
name: openstack
users: amq-interconnect-users
Validate that you see an AMQ Interconnect router come up with oc get pods.
Create a Smart Gateway deployment.
oc apply -f - <<EOF
apiVersion: smartgateway.infra.watch/v2alpha1
kind: SmartGateway
metadata:
name: cloud1-metrics
namespace: service-telemetry
spec:
amqpUrl: amq-interconnect:5672/collectd/telemetry
debug: true
prefetch: 15000
serviceType: metrics
size: 1
EOF