# Deploy Jarvix on Kubernetes ![](https://i.imgur.com/VQWLGaz.png) #### Kubernets prerequest: - kubernetes version - pv set up (nfs/cbs/so on ) - ingress nameing - namespaces - docker repo : reg.sis.ai:31443 - private docker repo :* Optional * ### Deployment: ├── algo-api-deployment.yaml ├── automl-deployment.yaml ├── external-api-deployment.yaml ├── frontend-deployment.yaml ├── h2o-deployment.yaml ├── nginx-deployment.yaml ├── private-api-deployment.yaml ├── public-api-deployment.yaml └── task-api-deployment.yaml :::info in order to pull docker images from reg.sis.ai:31443 please use secrets list below regcred created by kubectl with `kubectl create secret generic regcred \ --from-file=.dockerconfigjson=<path/to/.docker/config.json> \ --type=kubernetes.io/dockerconfigjson` ::: * for frontend/borabora needs configMap to addjust the config.js in volume etc : `kubectl create cm borabora-config --from-file=/tmp/config.js` code define in deployment for both borabora & frontend ``` spec: containers: - image: reg.sis.ai:8443/jarvix/frontend:release-v3.1.0 name: frontend ports: - containerPort: 8097 volumeMounts: - name: frontend-conf mountPath: /opt/sygps/borabora/dist/static/config.js subPath: config.js volumes: - name: frontend-conf configMap: name: frontend-config ``` --- ### Persistent Volume Claim . ├── elastic-pv.yaml ├── kafka-pv.yaml ├── postgres-pv.yaml └── sftp-pv.yaml :::warning the pvc are written in NFS usages only ::: --- ### Optional private docker repo please prepear a docker repo inorder to store and pull the docker images :::info if like to change to private docker registry may need to create secrets for imagePullSecrets: Ref: https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/pull-image-private-registry/ ::: ## install stpes ### 1 helm install * `https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash` * #### 1.1 helm repo add `helm repo add bitnami https://charts.bitnami.com/bitnami` `helm pull bitnami/kafka` `helm pull bitnami/postgresql-ha` `helm repo add emberstack https://emberstack.github.io/helm-charts` `helm pull emberstack/sftp` `helm repo add elastic https://helm.elastic.co` `helm pull elastic/elasticsearch-7.17.3` #### 1.2 untar the downloaded charts `tar -zxvf <charts-name>.tar.gz ` #### 1.3 install helm charts `kubectl create ns jarvix` `helm install "sis-sftp|postgres|kafka" -n jarvix . ` | charts | repo | version | | ------ | ---- | ----| | kafka/zookeeper | https://charts.bitnami.com/bitnami | kafka-18.0.3| | postgresql | https://charts.bitnami.com/bitnami | postgresql-11.6.19| | sis-sftp | https://emberstack.github.io/helm-charts | sftp-5.1.5| | elastic | https://helm.elastic.co | elasticsearch-7.17.3| #### Helm usage ref: https://helm.sh/docs/intro/install/ * :::danger may need to edit directly statefulset for postgres-postgresql / kafka/ kafka-zookeeper / elastaticsearch addjust terminationGracePeriodSeconds to '0', if would like to having auto-failover for statefulsets , please keep in mind the data consistency ::: #### step 2 delpoy each jarvix micro-services `kubectl apply -f deployments/ -n jarvix ` :::info it will apply and create all the deployment in deployment folder ::: #### step3 expose 3 deployment to NodePort service ``` kubectl expose deploy public-api --port=8081 --target-port=8081 --type=NodePort -n jarvix kubectl expose deploy frontend --port=8097 --target-port=8097 --type=NodePort -n jarvix kubectl expose deploy borabora --port=8090 --target-port=8090 --type=NodePort -n jarvix ``` :::warning Please refer to servicePort below and using kubectl to modify the services ::: ```NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR algo-api NodePort 10.244.86.253 <none> 8086:31019/TCP 32d app=algo-api automl NodePort 10.244.73.134 <none> 22:32396/TCP 31d app=automl elasticsearch NodePort 10.244.120.46 <none> 9200:32018/TCP 33d app=elasticsearch external-api NodePort 10.244.85.186 <none> 8080:32186/TCP 33d app=external-api frontend NodePort 10.244.112.41 <none> 8097:31964/TCP 33d app=frontend h2o NodePort 10.244.83.73 <none> 9000:30389/TCP 33d app=h2o kafka ClusterIP 10.244.87.207 <none> 9092/TCP 33d app.kubernetes.io/component=kafka,app.kubernetes.io/instance=kafka,app.kubernetes.io/name=kafka kafka-headless ClusterIP None <none> 9092/TCP,9093/TCP 33d app.kubernetes.io/component=kafka,app.kubernetes.io/instance=kafka,app.kubernetes.io/name=kafka kafka-zookeeper ClusterIP 10.244.83.72 <none> 2181/TCP,2888/TCP,3888/TCP 33d app.kubernetes.io/component=zookeeper,app.kubernetes.io/instance=kafka,app.kubernetes.io/name=zookeeper kafka-zookeeper-headless ClusterIP None <none> 2181/TCP,2888/TCP,3888/TCP 33d app.kubernetes.io/component=zookeeper,app.kubernetes.io/instance=kafka,app.kubernetes.io/name=zookeeper kubernetes ClusterIP 10.244.64.1 <none> 443/TCP 33d <none> nginx NodePort 10.244.116.239 <none> 8090:32658/TCP 33d app=nginx postgres-postgresql NodePort 10.244.67.0 <none> 5432:30432/TCP 32d app.kubernetes.io/component=primary,app.kubernetes.io/instance=postgres,app.kubernetes.io/name=postgresql postgres-postgresql-hl ClusterIP None <none> 5432/TCP 32d app.kubernetes.io/component=primary,app.kubernetes.io/instance=postgres,app.kubernetes.io/name=postgresql private-api NodePort 10.244.68.241 <none> 8082:30082/TCP 33d app=private-api public-api NodePort 10.244.109.122 <none> 8081:30081/TCP 4h22m app=public-api schedule-api NodePort 10.244.71.247 <none> 8086:31088/TCP 33d app=schedule-api sis-sftp NodePort 10.244.116.144 <none> 22:30601/TCP 5d4h app.kubernetes.io/instance=sis-sftp,app.kubernetes.io/name=sftp task-api NodePort 10.244.73.199 <none> 8083:30083/TCP 33d app=task-api ``` ### Service . ├── algo-api-service.yaml ├── automl-service.yaml ├── borabora-service.yaml ├── elasticsearch-service.yaml ├── external-api-service.yaml ├── frontend-service.yaml ├── h2o-service.yaml ├── private-api-service.yaml ├── public-api-service.yaml ├── schedule-api-service.yaml ├── sis-sftp-service.yaml └── task-api-service.yaml :::danger PostgreSQL needs to volume postgresql.conf / pg_hbd.conf inorder to using custom configs or connection will be faild ::: #### Postgres PV by appling postgres-pv.yaml to create a NFS volume to store configs and data which store in PostgreSQL before appling postgres-pv you may need to create nfs-share by nfs-utils and editing /etc/exports/ create a folder to place pg_hba.conf and postgresql.conf synergies privde in the share folder #### elasticsearch PV by appling elastic-pv.yaml to create a NFS volume to store configs and data which store in elasticsearch #### sis-sftp PV by appling sftp-pv.yaml to create a NFS volume to store configs and data which store in sis-sftp