Git Product home page Git Product logo

charts-10's Introduction

Realm Object Server Helm Chart

This directory includes a Helm chart suitable for deploying Realm Object Server in a Kubernetes Cluster.

Introduction

"Helm helps you manage Kubernetes applications โ€” Helm Charts helps you define, install, and upgrade even the most complex Kubernetes application." - helm.sh

Helm uses a "chart," which is simply a set of templates that define what Kubernetes resources should be present in order to provide the service it defines. Typically, a simple chart will include a template for:

  • ConfigMap
  • Secret
  • Deployment
  • Service
  • Ingress

These are all basic building blocks for running apps in Kubernetes, and you should be familiar with them before proceeding.

Getting Started

Minikube is currently not supported for local macOS deployments because they currently do not support RBAC in k8s. For local deployments please use Docker Edge with Kubernetes found here: https://docs.docker.com/v17.09/docker-for-mac/install/

Install Kubectl

On macOS (can be skipped if using Docker for Mac):

brew install kubectl

Other: Installing kubectl

Install Helm CLI

On macOS:

brew install kubernetes-helm

Other: Installing Helm

Install Tiller and Kubernetes Dashboard (if using Docker for Mac as a cluster)

If you're using Docker for Mac or an otherwise new cluster, you need to install tiller in the cluster:

helm init --upgrade --wait

You might also want to access the Kubernetes Dashboard. In order to do so, you need to install it:

helm install --kube-context=docker-for-desktop \
            --name kubernetes-dashboard --namespace kube-system \
            stable/kubernetes-dashboard -f - <<EOL
service:
    type: NodePort
    nodePort: 30443
EOL

After doing so, your dashboard will be accessible at https://127.0.0.1:30443/.

Or it will be accessible via the commands printed to the terminal. Copy and paste those commands and follow the http link a web browser.

Running the chart to create a release

The Realm Object Server Helm chart includes default values that are suitable for running ROS on any Kubernetes cluster, in a basic configuration:

helm upgrade --install my-ros ./helm/realm-object-server

If you need to customize your installation, you can override any values from values.yaml. For example, if you're using Docker for Mac and would like to use a custom image that you're developing locally (see below as well), write this to a new values.yaml file:

image:
  repository: realm-object-server
  tag: latest
  pullPolicy: Never

and run:

helm upgrade --install my-ros ./helm/realm-object-server -f values.yaml

Obviously, everybody's environment is different, and charts typically allow for customization of these resources in order to run the application effectively regardless of cloud provider.

Accessing ROS

When using the default values, ROS will not be exposed to the internet. Defining ingress to your ROS is something that is typically customized according to the cloud provider. Here are some ways you can expose your ROS:

Port Forward

Port forwarding is the quickest way to access a Kubernetes Pod for testing and development. First, find the name of the ROS Pod and start a proxy to it:

$ kubectl get pods -l app=realm-object-server,component=core
NAME                                          READY     STATUS        RESTARTS   AGE
my-ros-realm-object-server-75cd8f7c88-g6d2f   1/1       Running       0          6s
$ kubectl port-forward my-ros-realm-object-server-75cd8f7c88-g6d2f 9080:9080
Forwarding from 127.0.0.1:9080 -> 9080

Now you can access on http://127.0.0.1:9080 with this adminToken:

eyJhcHBfaWQiOiJpby5yZWFsbS5hdXRoIiwiaWRlbnRpdHkiOiJfX2FkbWluIiwiYWNjZXNzIjpbImRvd25sb2FkIiwidXBsb2FkIiwibWFuYWdlIl0sInNhbHQiOiIyOGMwNDgzMCJ9:c2S8hMDUua/zfizq3AqZFOB07Adow6JOUuSucyTyvhTtVdJBN3tGjxD/7FKL9CJ77JI8DqoNB/1grR9iXZlkGXU7aiPxttA+lYtoEU9Rbo85IyKN2Yf5C28U6X8gUrI6hGeTSCm1DPCInrW8ZcBKOfTb67IY9PLlAU/9gGap4LyguvejD/TEpsLSWgTSiS/UME5IzZa4Y5YjQ1f8G5bhFSDaIIN3yrS8O8VXHbZ/qpBXdmPku6Jn7q+L7W4usvgPxLf57Te3TfM5eqAvKtD/vx+SJAiAJifPdig0Xt1Zy2ZsoV5zrG4q+GP0E4sDQ/AYP4HVeeuoMkNgi2q58jmJuQ==

Set the ROS Service to use NodePort

If you have direct access to nodes in the cluster (such as with Docker for Mac), you can set the ROS Service to be a NodePort service:

service:
  type: NodePort
  # Omit the port to get kubernetes to choose one
  port: 30080

In which case you could access ROS at http://node-ip:30080 (http://localhost:30080 when using Docker for Mac).

Set the ROS Service to LoadBalancer

If you are using a cloud provider that can provide LoadBalancer functionality on services, using the LoadBalancer service type might be suitable for you (below is an example using AWS):

service:
  type: LoadBalancer
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: "http"
    service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "https"
    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: "arn:aws:acm:eu-west-1:774659224473:certificate/a143cde5-dc1f-4b35-b2b0-63cad2f9322e"
    external-dns.alpha.kubernetes.io/hostname: "my-ros.arena.k8s.realmlab.net"

Enable Ingress

If you have a Kubernetes Ingress Controller that you would like to use, you can enable it like so (using the nginx ingress controller in arena):

ingress:
  enabled: true
  annotations:
    kubernetes.io/ingress.class: nginx
  path: /
  hosts:
    - ignorant-cat.arena.realmlab.net

Configuring ROS

TODO

Accessing Stats

The realm-object-server Helm chart also includes stats collection as an option. To enable it:

prometheus:
  enabled: true
grafana:
  enabled: true
  # You can also configure the service and/or ingress, just as with
  # core services:
  service:
    type: NodePort
    port: 30081

This will ensure that Prometheus is installed alongside Realm Object Server. It will be configured to scrape ROS periodically for stats, which can be viewed in Grafana. The Grafana installation also includes a few canned dashboards.

Example values files

TODO: add examples of values files that will work with various cloud providers.

Local development

If you're planning on using a local Docker installation for testing and development, you should build the ROS docker image first:

./scripts/docker-build.sh

You will now have a local image named realm-object-server, which can be used by Kubernetes, using realm-object-server-local.values.yaml as a configuration:

helm upgrade --install my-ros ./helm/realm-object-server -f ./helm/realm-object-server-local.values.yaml

charts-10's People

Contributors

alebsack avatar fealebenpae avatar ianpward avatar realm-admin avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.