Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Learn about components to setup local development environment here.

...

Kubernetes Environment-Creates base environment required to execute and maintain Bots. Kubernetes spawn docker image with base Ubuntu 16.04 with additional software's like NodeJS,CoffeeScript,npm e.tc.
Elastic Search-Holds logs,metrics related information
MongoDB - Used to maintain Approval flow. Generates and Maintain Ticket related information.
MiddleWare Application - Act as a interceptor to read admin response and manages communication between various
Bots.

This section will help you to setup Environment for OnBot. Browse various categories provided below:

Expand
titleHardware Configuration 

Kubernetes Master & Node configuration
No. of instances 4 (1 – Master & Bot Framework; 3- Nodes) AWS Instance type m3.xlarge
OS Ubuntu 16.04 Xenial (64bit) Storage 100 GB
Mem (GiB) 16GB
vCPU 4
Software configuration
Kubernetes version: 1.7.3
Docker version Required: 1.12.6
Npm Version: 3.5.2
Node Version: 4.2.6
Elasticsearch Version: 5.4.1

...

Expand
titleInstallation of Kubernetes Cluster

Step 1: Installing kubelet and kubeadm on your hosts(to be followed in both Master and Slave)

  1. apt-get update && apt-get install -y apt-transport-https
  2. curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
  3. cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
  4. deb http://apt.kubernetes.io/ kubernetes-xenial main EOF
  5. apt-get update
  6. apt-get install docker.io
  7. apt-get install -y kubelet kubeadm kubectl kubernetes-cni
Tip

apt-get install for kubernete utilities(kubeadm,kubectl,kubelet,kubernetes-cni) without specifying version will take the latest version. To Install a specific version refer the following example commands:
apt-get install -y kubeadm=1.6.4-00 kubectl=1.6.4-00 kubelet=1.6.4-00 kubernetes-cni

apt-get install -y kubeadm=1.7.3-01 kubectl=1.7.3-01 kubelet=1.7.3-01 kubernetes-cni


Panel
titleCheck available Versions:

curl -sL https://apt.kubernetes.io/dists/kubernetes-xenial/main/binary-amd64/Packages | grep -E 'Package|Version'

Step 2: Initializing the master (Below Commands applicable only for master)

To initialize the master, pick one of the machines you previously installed kubeadm on, and run:

1. # kubeadm init
In case, kubernetes cluster configuration located in $HOME/.kube/config then run the following command
To start using your cluster, you need to run (as a regular user):
  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

  sudo chown $(id -u):$(id -g) $HOME/.kube/config

  export KUBECONFIG=$HOME/.kube/config

Note

Add "export KUBECONFIG=$HOME/.kube/config" to ~/.bashrc file in order to export the conf file. If this is not added, the export will be applicable only to the current putty session. For a new session, the Kubernetes API will be unreachable.

In case, kubernetes configuration located in $HOME/admin.conf then run the following commands:
To start using your cluster, run below commands as root user or prefix with sudo:
    cp /etc/kubernetes/admin.conf $HOME/

    chown $(id -u):$(id -g) $HOME/admin.conf

    export KUBECONFIG=$HOME/admin.conf

Note
iconfalse

Add "export KUBECONFIG=$HOME/admin.conf" to ~/.bashrc file in order to export the conf file. If this is not added, the export will be applicable only to the current putty session. For a new session, the Kubernetes API will be unreachable.


2. Kubernetes dashboard is an optional step. To create Kubernetes dashboard, run  refer "Deploying the Dashboard UI" in https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/ to know the correct kubernetes-dashboard.yaml  github url.

Run the following commands: -

          # kubectl create -

f

https://raw.githubusercontent.com/kubernetes/dashboard/master/

src

aio/deploy/recommended/kubernetes-dashboard.yaml 

Note
iconfalse

Dashboard will run as a Kube service either in the Master or in any one of the Slaves. Run “kubectl get svc --all-namespaces” to identify the PORT number of the dashboard. Access the dashboard through https://IP:PORT.

3. Create a cluster role and bind all services then allow anonymous user to access Kube API
     If the below kubectl commands are not executed, you will get an error -U'ser "system:serviceaccount:default:default" cannot list pods in the namespace "default"'

    1. kubectl create clusterrolebinding serviceaccounts-cluster-admin --clusterrole=cluster-admin --group=system:serviceaccounts
    2. kubectl create rolebinding bob-admin-binding --clusterrole=admin --user=system:anonymous --namespace=default

Execute the following commands in the Slave machines to connect to the Master machine:
    1. After kubeadm init, you will obtain a token as shown below-

      # kubeadm join --token <token id> <Primary IP>:6443

Above token helps slave to join master node. Token should run in all slaves once step 3 completes.

Master Isolation:

By default, your cluster will not schedule pods on the master for security reasons. If you want to be able to schedule pods on the master, e.g. a single-machine Kubernetes cluster for development, run:

This will remove the node-role.kubernetes.io/master taint from any nodes that have it, including the master node, meaning that the scheduler will then be able to schedule pods everywhere

Step 3: Installing a pod network(Below Commands applicable only for master)

You must install a pod network add-on so that your pods can communicate with each other.

go to addon hyperlink and get weave.net

    kubectl apply -f https://git.io/weave-kube-1.6

Step 4: Adding Slaves to Master node(Below Commands applicable only for slaves)

Run the obtained token given below from Step 2 in all slave nodes not needed to run in add-on server:

    kubeadm join --token <token id> <Primary IP>:6443
1. Post execution, go to the Master machine and run"kubectl get nodes", and verify if the nodes have joined the cluster.
2. Verify if all pods are up and running.
     #kubectl get pods --all-namespaces

You will get an output similar to the one shown below -

...