[STRIMZI] Adding strimzi project 20/126820/25
authorefiacor <fiachra.corcoran@est.tech>
Thu, 27 Jan 2022 13:46:56 +0000 (13:46 +0000)
committerefiacor <fiachra.corcoran@est.tech>
Thu, 31 Mar 2022 12:12:16 +0000 (13:12 +0100)
Deploy a 2 node replica strimzi kafka cluster
Reduce MR kafka to 1 replica
Add kafka ready check to cps-temporal
Update readthedocs with strimzi prerequisite
Modify deploy.sh to deploy the strimzi kafka in advance

Signed-off-by: efiacor <fiachra.corcoran@est.tech>
Change-Id: I87e54ad69a174174cb86f096c07d58878e3ab14e
Issue-ID: DMAAP-1621

21 files changed:
.gitignore
docs/helm-search.txt
docs/oom_quickstart_guide.rst
docs/oom_setup_paas.rst
docs/oom_user_guide.rst
kubernetes/dmaap/components/message-router/components/message-router-kafka/values.yaml
kubernetes/dmaap/components/message-router/components/message-router-zookeeper/values.yaml
kubernetes/helm/plugins/deploy/deploy.sh
kubernetes/onap/Chart.yaml
kubernetes/onap/resources/overrides/onap-all-ingress-nginx-vhost.yaml
kubernetes/onap/resources/overrides/onap-all.yaml
kubernetes/onap/resources/overrides/onap-vfw.yaml
kubernetes/onap/resources/overrides/sm-onap.yaml
kubernetes/onap/values.yaml
kubernetes/strimzi/.helmignore [new file with mode: 0644]
kubernetes/strimzi/Chart.yaml [new file with mode: 0644]
kubernetes/strimzi/Makefile [new file with mode: 0644]
kubernetes/strimzi/templates/pv-kafka.yaml [new file with mode: 0644]
kubernetes/strimzi/templates/pv-zk.yaml [new file with mode: 0644]
kubernetes/strimzi/templates/strimzi-kafka.yaml [new file with mode: 0644]
kubernetes/strimzi/values.yaml [new file with mode: 0644]

index 71fed48..bb11f06 100644 (file)
@@ -14,7 +14,7 @@ kubernetes/config/onap-parameters.yaml
 kubernetes/dist/*
 kubernetes/common/dist/*
 Chart.lock
-#**/charts/*.tgz
+**/charts/*.tgz
 *.orig
 
 # AAI Schema
index 035b9a6..4e357b6 100644 (file)
@@ -35,6 +35,7 @@ local/sdnc                    10.0.0                    SDN Controller
 local/sdnc-prom               10.0.0                    ONAP SDNC Policy Driven Ownership Management
 local/sniro-emulator          10.0.0                    ONAP Mock Sniro Emulator
 local/so                      10.0.0                    ONAP Service Orchestrator
+local/strimzi                 10.0.0                    ONAP Strimzi Apache Kafka
 local/uui                     10.0.0                    ONAP uui
 local/vfc                     10.0.0                    ONAP Virtual Function Controller (VF-C)
 local/vid                     10.0.0                    ONAP Virtual Infrastructure Deployment
index 79a3056..a38c6f4 100644 (file)
@@ -53,6 +53,18 @@ where <BRANCH> can be an official release tag, such as
 
 More details can be found :doc:`here <oom_setup_paas>`.
 
+**Step 4.1** Install Strimzi Kafka Operator:
+
+- Add the helm repo::
+
+    > helm repo add strimzi https://strimzi.io/charts/
+
+- Install the operator::
+
+    > helm install strimzi-kafka-operator strimzi/strimzi-kafka-operator --namespace strimzi-system --version 0.28.0 --set watchAnyNamespace=true --create-namespace
+
+More details can be found :doc:`here <oom_setup_paas>`.
+
 **Step 5.** Customize the Helm charts like `oom/kubernetes/onap/values.yaml` or
 an override file like `onap-all.yaml`, `onap-vfw.yaml` or `openstack.yaml` file
 to suit your deployment with items like the OpenStack tenant information.
index ed632da..2dabcb1 100644 (file)
@@ -6,6 +6,7 @@
 .. Links
 .. _Cert-Manager Installation documentation: https://cert-manager.io/docs/installation/kubernetes/
 .. _Cert-Manager kubectl plugin documentation: https://cert-manager.io/docs/usage/kubectl-plugin/
+.. _Strimzi Apache Kafka Operator helm Installation documentation: https://strimzi.io/docs/operators/in-development/deploying.html#deploying-cluster-operator-helm-chart-str
 
 .. _oom_setup_paas:
 
@@ -15,17 +16,20 @@ ONAP PaaS set-up
 Starting from Honolulu release, Cert-Manager and Prometheus Stack are a part
 of k8s PaaS for ONAP operations and can be installed to provide
 additional functionality for ONAP engineers.
+Starting from Jakarta release, Strimzi Apache Kafka is deployed to provide
+Apache kafka as the default messaging bus for ONAP.
 
 The versions of PaaS components that are supported by OOM are as follows:
 
 .. table:: ONAP PaaS components
 
-  ==============     =============  =================
-  Release            Cert-Manager   Prometheus Stack
-  ==============     =============  =================
+  ==============     =============  =================  =======
+  Release            Cert-Manager   Prometheus Stack   Strimzi
+  ==============     =============  =================  =======
   honolulu           1.2.0          13.x
   istanbul           1.5.4          19.x
-  ==============     =============  =================
+  jakarta                                              0.28.0
+  ==============     =============  =================  =======
 
 This guide provides instructions on how to install the PaaS
 components for ONAP.
@@ -35,6 +39,40 @@ components for ONAP.
    :local:
 ..
 
+Strimzi Apache Kafka Operator
+=============================
+
+Strimzi provides a way to run an Apache Kafka cluster on Kubernetes
+in various deployment configurations by using kubernetes operators.
+Operators are a method of packaging, deploying, and managing a
+Kubernetes application.
+Strimzi Operators extend Kubernetes functionality, automating common
+and complex tasks related to a Kafka deployment. By implementing
+knowledge of Kafka operations in code, Kafka administration
+tasks are simplified and require less manual intervention.
+
+Installation steps
+------------------
+
+The recommended version of Strimzi for Kubernetes 1.19 is v0.28.0.
+The Strimzi cluster operator is deployed using helm to install the parent chart
+containing all of the required custom resource definitions. This should be done
+by a kubernetes administrator to allow for deployment of custom resources in to
+any kubernetes namespace within the cluster.
+
+Full installation instructions can be found in the
+`Strimzi Apache Kafka Operator helm Installation documentation`_.
+
+Installation can be as simple as:
+
+- Add the helm repo::
+
+    > helm repo add strimzi https://strimzi.io/charts/
+
+- Install the operator::
+
+    > helm install strimzi-kafka-operator strimzi/strimzi-kafka-operator --namespace strimzi-system --version 0.28.0 --set watchAnyNamespace=true --create-namespace
+
 Cert-Manager
 ============
 
index 019d843..10b57dc 100644 (file)
@@ -55,7 +55,7 @@ ONAP with a few simple commands.
 
 Pre-requisites
 --------------
-Your environment must have the Kubernetes `kubectl` with Cert-Manager
+Your environment must have the Kubernetes `kubectl` with Strimzi Apache Kafka, Cert-Manager
 and Helm setup as a one time activity.
 
 Install Kubectl
@@ -78,11 +78,6 @@ Verify that the Kubernetes config is correct::
 
 At this point you should see Kubernetes pods running.
 
-Install Cert-Manager
-~~~~~~~~~~~~~~~~~~~~
-Details on how to install Cert-Manager can be found
-:doc:`here <oom_setup_paas>`.
-
 Install Helm
 ~~~~~~~~~~~~
 Helm is used by OOM for package and configuration management. To install Helm,
@@ -96,6 +91,16 @@ Verify the Helm version with::
 
   > helm version
 
+Install Strimzi Apache Kafka Operator
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Details on how to install Strimzi Apache Kafka can be found
+:doc:`here <oom_setup_paas>`.
+
+Install Cert-Manager
+~~~~~~~~~~~~~~~~~~~~
+Details on how to install Cert-Manager can be found
+:doc:`here <oom_setup_paas>`.
+
 Install the Helm Repo
 ---------------------
 Once kubectl and Helm are setup, one needs to setup a local Helm server to
index be0de96..c998e9e 100644 (file)
@@ -60,7 +60,7 @@ pullPolicy: Always
 zookeeper:
   name: message-router-zookeeper
   port: 2181
-  replicaCount: 3
+  replicaCount: 1
 
 kafka:
   heapOptions: -Xmx5G -Xms1G
@@ -129,7 +129,7 @@ secrets:
 debugEnabled: false
 
 # default number of instances
-replicaCount: 3
+replicaCount: 1
 
 
 # To access Kafka outside cluster, this value must be set to hard and the number of nodes in K8S cluster must be equal or greater then replica count
index 13b0ed8..81bc413 100755 (executable)
@@ -87,6 +87,20 @@ resolve_deploy_flags() {
   echo "$DEPLOY_FLAGS"
 }
 
+
+check_for_dep() {
+    try=0
+    retries=30
+    until (kubectl get deployment -n $RELEASE | grep -P "\b$2\b") &>/dev/null; do
+        (( ++try > retries )) && exit 1
+        echo "$1 not found. Retry $try/$retries"
+        sleep 5
+    done
+    echo "$1 found. Waiting for pod intialisation"
+    sleep 15
+}
+
+
 deploy() {
   # validate params
   if [ -z "$1" ] || [ -z "$2" ]; then
@@ -219,6 +233,13 @@ deploy() {
   #“helm ls” is an expensive command in that it can take a long time to execute.
   #So cache the results to prevent repeated execution.
   ALL_HELM_RELEASES=$(helm ls -q)
+
+  #Deploy the srtimzi-kafka chart in advance. Dependent charts require the entity-operator
+  #for management of the strimzi crds
+  helm upgrade -i "${RELEASE}-strimzi" $CACHE_SUBCHART_DIR/strimzi
+  echo "waiting for ${RELEASE}-strimzi-entity-operator to be deployed"
+  check_for_dep ${RELEASE}-strimzi-entity-operator
+
   for subchart in * ; do
     SUBCHART_OVERRIDES=$CACHE_SUBCHART_DIR/$subchart/subchart-overrides.yaml
 
index 4754f9f..371bc71 100644 (file)
@@ -143,6 +143,10 @@ dependencies:
     version: ~10.x-0
     repository: '@local'
     condition: so.enabled
+  - name: strimzi
+    version: ~10.x-0
+    repository: '@local'
+    condition: strimzi.enabled
   - name: uui
     version: ~10.x-0
     repository: '@local'
index 9306985..6d08d01 100644 (file)
@@ -82,6 +82,8 @@ sdnc:
   enabled: true
 so:
   enabled: true
+strimzi:
+  enabled: true
 uui:
   enabled: true
 vfc:
index 181a1d1..f9da136 100644 (file)
@@ -57,5 +57,7 @@ sdnc:
   enabled: true
 so:
   enabled: true
+strimzi:
+  enabled: true
 vid:
   enabled: true
index b07b6d3..37080b8 100644 (file)
@@ -134,6 +134,8 @@ so:
     openStackKeyStoneUrl: "$OPENSTACK_KEYSTONE_URL"
     openStackServiceTenantName: "$OPENSTACK_TENANT_NAME"
     openStackEncryptedPasswordHere: "$OPENSTACK_ENCRYPTED_PASSWORD"
+strimzi:
+  enabled: false
 uui:
   enabled: false
 vid:
index f5b5c8e..0e8dd21 100755 (executable)
@@ -372,6 +372,8 @@ so:
   #   server:
   #     monitoring:
   #       password: demo123456!
+strimzi:
+  enabled: false
 uui:
   enabled: false
 vfc:
diff --git a/kubernetes/strimzi/.helmignore b/kubernetes/strimzi/.helmignore
new file mode 100644 (file)
index 0000000..0f976e9
--- /dev/null
@@ -0,0 +1,22 @@
+# Patterns to ignore when building packages.
+# This supports shell glob matching, relative path matching, and
+# negation (prefixed with !). Only one pattern per line.
+.DS_Store
+# Common VCS dirs
+.git/
+.gitignore
+.bzr/
+.bzrignore
+.hg/
+.hgignore
+.svn/
+# Common backup files
+*.swp
+*.bak
+*.tmp
+*~
+# Various IDEs
+.project
+.idea/
+*.tmproj
+Chart.lock
diff --git a/kubernetes/strimzi/Chart.yaml b/kubernetes/strimzi/Chart.yaml
new file mode 100644 (file)
index 0000000..6ce866b
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright © 2022 Nordix Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+apiVersion: v2
+description: ONAP Strimzi kafka
+name: strimzi
+version: 10.0.0
+
+dependencies:
+  - name: common
+    version: ~10.x-0
+    # local reference to common chart, as it is
+    # a part of this chart's package and will not
+    # be published independently to a repo (at this point)
+    repository: '@local'
+  - name: repositoryGenerator
+    version: ~10.x-0
+    repository: '@local'
+  - name: serviceAccount
+    version: ~10.x-0
+    repository: '@local'
+
diff --git a/kubernetes/strimzi/Makefile b/kubernetes/strimzi/Makefile
new file mode 100644 (file)
index 0000000..51d7de1
--- /dev/null
@@ -0,0 +1,51 @@
+# Copyright © 2020 Samsung Electronics
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+ROOT_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
+OUTPUT_DIR := $(ROOT_DIR)/../dist
+PACKAGE_DIR := $(OUTPUT_DIR)/packages
+SECRET_DIR := $(OUTPUT_DIR)/secrets
+
+EXCLUDES := dist resources templates charts docker
+HELM_BIN := helm
+HELM_CHARTS := $(filter-out $(EXCLUDES), $(sort $(patsubst %/.,%,$(wildcard */.))))
+
+.PHONY: $(EXCLUDES) $(HELM_CHARTS)
+
+all: $(HELM_CHARTS)
+
+$(HELM_CHARTS):
+       @echo "\n[$@]"
+       @make package-$@
+
+make-%:
+       @if [ -f $*/Makefile ]; then make -C $*; fi
+
+dep-%: make-%
+       @if [ -f $*/Chart.yaml ]; then $(HELM_BIN) dep up $*; fi
+
+lint-%: dep-%
+       @if [ -f $*/Chart.yaml ]; then $(HELM_BIN) lint $*; fi
+
+package-%: lint-%
+       @mkdir -p $(PACKAGE_DIR)
+       @if [ -f $*/Chart.yaml ]; then $(HELM_BIN) package -d $(PACKAGE_DIR) $*; fi
+       @$(HELM_BIN) repo index $(PACKAGE_DIR)
+
+clean:
+       @rm -f */Chart.lock
+       @rm -f *tgz */charts/*tgz
+       @rm -rf $(PACKAGE_DIR)
+%:
+       @:
diff --git a/kubernetes/strimzi/templates/pv-kafka.yaml b/kubernetes/strimzi/templates/pv-kafka.yaml
new file mode 100644 (file)
index 0000000..616f03e
--- /dev/null
@@ -0,0 +1,16 @@
+{{/*
+# Copyright © 2022 Nordix Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+*/}}
+{{ include "common.replicaPV" (dict "dot" . "suffix" "kafka" "persistenceInfos" .Values.persistenceKafka) }}
diff --git a/kubernetes/strimzi/templates/pv-zk.yaml b/kubernetes/strimzi/templates/pv-zk.yaml
new file mode 100644 (file)
index 0000000..60f4ca6
--- /dev/null
@@ -0,0 +1,17 @@
+{{/*
+# Copyright © 2022 Nordix Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+*/}}
+
+{{ include "common.replicaPV" (dict "dot" . "suffix" "zk" "persistenceInfos" .Values.persistenceZk) }}
diff --git a/kubernetes/strimzi/templates/strimzi-kafka.yaml b/kubernetes/strimzi/templates/strimzi-kafka.yaml
new file mode 100644 (file)
index 0000000..4ca53a2
--- /dev/null
@@ -0,0 +1,90 @@
+{{/*
+# Copyright © 2022 Nordix Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+*/}}
+apiVersion: kafka.strimzi.io/v1beta2
+kind: Kafka
+metadata:
+  name: {{ include "common.fullname" . }}
+  namespace: {{ include "common.namespace" . }}
+  labels:
+    app: {{ include "common.name" . }}
+    chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
+    release: {{ include "common.release" . }}
+    heritage: {{ .Release.Service }}
+spec:
+  kafka:
+    version: {{ .Values.version }}
+    replicas: {{ .Values.replicaCount }}
+    listeners:
+      - name: plain
+        port: {{ .Values.kafkaInternalPort }}
+        type: internal
+        tls: false
+        authentication:
+          type: {{ .Values.saslMechanism }}
+      - name: tls
+        port: 9093
+        type: internal
+        tls: true
+        authentication:
+          type: tls
+      - name: external
+        port: 9094
+        type: nodeport
+        tls: true
+        authentication:
+          type: tls
+    authorization:
+      type: simple
+      superUsers:
+        - {{ include "common.release" . }}-{{ .Values.kafkaStrimziAdminUser }}
+    template:
+      pod:
+        securityContext:
+          runAsUser: 0
+          fsGroup: 0
+    config:
+      offsets.topic.replication.factor: {{ .Values.replicaCount }}
+      transaction.state.log.replication.factor: {{ .Values.replicaCount }}
+      transaction.state.log.min.isr: 2
+      log.message.format.version: "3.0"
+      inter.broker.protocol.version: "3.0"
+    storage:
+      type: jbod
+      class: {{ include "common.storageClass" (dict "dot" . "suffix" "kafka" "persistenceInfos" .Values.persistenceKafka) }}
+      volumes:
+      - id: 0
+        type: persistent-claim
+        size: {{ .Values.persistenceKafka.size }}
+        deleteClaim: false
+        class: {{ include "common.storageClass" (dict "dot" . "suffix" "kafka" "persistenceInfos" .Values.persistenceKafka) }}
+  zookeeper:
+    template:
+      pod:
+        securityContext:
+          runAsUser: 0
+          fsGroup: 0
+    replicas: {{ .Values.replicaCount }}
+    config:
+      ssl.hostnameVerification: false
+    storage:
+      type: persistent-claim
+      size: {{ .Values.persistenceZk.size }}
+      deleteClaim: false
+      class: {{ include "common.storageClass" (dict "dot" . "suffix" "zk" "persistenceInfos" .Values.persistenceZk) }}
+  entityOperator:
+    topicOperator: {}
+    userOperator: {}
+
diff --git a/kubernetes/strimzi/values.yaml b/kubernetes/strimzi/values.yaml
new file mode 100644 (file)
index 0000000..e8db803
--- /dev/null
@@ -0,0 +1,52 @@
+# Copyright © 2022 Nordix Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#################################################################
+# Global configuration defaults.
+#################################################################
+global:
+  nodePortPrefix: 302
+  persistence:
+    mountPath: /dockerdata-nfs
+
+#################################################################
+# Application configuration defaults.
+#################################################################
+replicaCount: 2
+kafkaInternalPort: 9092
+saslMechanism: scram-sha-512
+version: 3.0.0
+kafkaStrimziAdminUser: strimzi-kafka-admin
+persistence: {}
+
+persistenceKafka:
+  enabled: true
+  size: 2Gi
+  volumeReclaimPolicy: Retain
+  accessMode: ReadWriteOnce
+  mountPath: /dockerdata-nfs
+  mountSubPath: strimzi-kafka/kafka
+persistenceZk:
+  enabled: true
+  size: 2Gi
+  volumeReclaimPolicy: Retain
+  accessMode: ReadWriteOnce
+  mountPath: /dockerdata-nfs
+  mountSubPath: strimzi-kafka/zk
+
+#Pods Service Account
+serviceAccount:
+  nameOverride: strimzi-kafka
+  roles:
+    - read