-
Notifications
You must be signed in to change notification settings - Fork 79
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add ChaosCenter developer guide docs locally #282
Merged
Merged
Changes from 5 commits
Commits
Show all changes
8 commits
Select commit
Hold shift + click to select a range
c571ca8
Added docs for Chaoscenter developer guide
kwx4957 d8c8b1f
Updated current version docs for developer guide
kwx4957 3a26cf8
CI embedmd check
kwx4957 e42f8e7
Update docs as per reviewer suggestion
kwx4957 60f6452
Merge branch 'litmuschaos:master' into master
kwx4957 463673e
Fix backend server name to GraphQL server
kwx4957 a300dfb
Add developer guide docs for 3.9.2
kwx4957 be32ed8
Add developer guide docs for 3.10.0
kwx4957 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
265 changes: 265 additions & 0 deletions
265
website/docs/developer-guide/chaoscenter-developer-guide.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,265 @@ | ||
--- | ||
id: chaoscenter-developer-guide | ||
title: ChaosCenter Developer Guide | ||
sidebar_label: ChaosCenter Developer Guide | ||
--- | ||
|
||
--- | ||
|
||
## **Prerequisites** | ||
:::note | ||
This document is intended to be implemented locally. Please do not use in dev or prod environments. | ||
::: | ||
|
||
- Kubernetes 1.17 or later | ||
- Helm3 or Kubectl | ||
- Node and npm | ||
- Docker | ||
- Golang | ||
- Local Kubernetes Cluster (via minikube, k3s or kind) | ||
|
||
## **Control Plane** | ||
Backend components consist of three microservices | ||
1. Backend server | ||
2. Authentication server | ||
3. MongoDB | ||
|
||
Frontend component | ||
1. React | ||
|
||
## **Steps to run the Control Plane** | ||
|
||
### 1. Run MongoDB | ||
|
||
Step-1: Pull and run the image | ||
|
||
```bash | ||
docker pull mongo:5 | ||
|
||
docker network create mongo-cluster | ||
|
||
docker run -d --net mongo-cluster -p 27015:27015 --name m1 mongo:4.2 mongod --replSet rs0 --port 27015 | ||
docker run -d --net mongo-cluster -p 27016:27016 --name m2 mongo:4.2 mongod --replSet rs0 --port 27016 | ||
docker run -d --net mongo-cluster -p 27017:27017 --name m3 mongo:4.2 mongod --replSet rs0 --port 27017 | ||
``` | ||
|
||
Step-2: Add hosts | ||
|
||
import Tabs from '@theme/Tabs'; | ||
import TabItem from '@theme/TabItem'; | ||
|
||
<Tabs groupId="operating-systems"> | ||
<TabItem value="win" label="Windows"> | ||
|
||
```bash | ||
# add hosts in hosts | ||
notepad C:\Windows\System32\drivers\etc\hosts | ||
|
||
# add the below line | ||
127.0.0.1 m1 m2 m3 | ||
``` | ||
|
||
</TabItem> | ||
<TabItem value="linux" label="macOS/Linux"> | ||
|
||
```bash | ||
# add hosts in hosts | ||
sudo vim /etc/hosts | ||
|
||
# add the below line | ||
127.0.0.1 m1 m2 m3 | ||
``` | ||
|
||
</TabItem> | ||
</Tabs> | ||
|
||
|
||
Step-3: Configure the mongoDB replica set | ||
|
||
```bash | ||
docker exec -it m1 mongo -port 27015 | ||
|
||
config={"_id":"rs0","members":[{"_id":0,"host":"m1:27015"},{"_id":1,"host":"m2:27016"},{"_id":2,"host":"m3:27017"}]} | ||
|
||
rs.initiate(config) | ||
|
||
db.getSiblingDB("admin").createUser({user:"admin",pwd:"1234",roles:[{role:"root",db:"admin"}]}); | ||
``` | ||
|
||
### 2. Run the Authentication Server | ||
|
||
:::note | ||
Make sure to run backend services before the frontend. If you haven’t already cloned the litmus project do so from the `litmuschaos/litmus` repository | ||
::: | ||
|
||
```bash | ||
git clone https://github.com/litmuschaos/litmus.git litmus --depth 1 | ||
``` | ||
|
||
|
||
Step-1: Export the following environment variables | ||
|
||
```bash | ||
export ADMIN_USERNAME=admin | ||
export ADMIN_PASSWORD=litmus | ||
export DB_SERVER="mongodb://m1:27015,m2:27016,m3:27017/?replicaSet=rs0" | ||
export DB_USER=admin | ||
export DB_PASSWORD=1234 | ||
export JWT_SECRET=litmus-portal@123 | ||
export PORTAL_ENDPOINT=http://localhost:8080 | ||
export LITMUS_SVC_ENDPOINT="" | ||
export SELF_AGENT=false | ||
export INFRA_SCOPE=cluster | ||
export INFRA_NAMESPACE=litmus | ||
export LITMUS_PORTAL_NAMESPACE=litmus | ||
export PORTAL_SCOPE=namespace | ||
export SUBSCRIBER_IMAGE=litmuschaos/litmusportal-subscriber:ci | ||
export EVENT_TRACKER_IMAGE=litmuschaos/litmusportal-event-tracker:ci | ||
export CONTAINER_RUNTIME_EXECUTOR=k8sapi | ||
export ARGO_WORKFLOW_CONTROLLER_IMAGE=argoproj/workflow-controller:v2.11.0 | ||
export ARGO_WORKFLOW_EXECUTOR_IMAGE=argoproj/argoexec:v2.11.0 | ||
export CHAOS_CENTER_SCOPE=cluster | ||
export WORKFLOW_HELPER_IMAGE_VERSION=3.0.0 | ||
export LITMUS_CHAOS_OPERATOR_IMAGE=litmuschaos/chaos-operator:3.0.0 | ||
export LITMUS_CHAOS_RUNNER_IMAGE=litmuschaos/chaos-runner:3.0.0 | ||
export LITMUS_CHAOS_EXPORTER_IMAGE=litmuschaos/chaos-exporter:3.0.0 | ||
export VERSION=ci | ||
export HUB_BRANCH_NAME=v2.0.x | ||
export INFRA_DEPLOYMENTS="[\"app=chaos-exporter\", \"name=chaos-operator\", \"app=event-tracker\",\"app=workflow-controller\"]" | ||
export INFRA_COMPATIBLE_VERSIONS='["0.2.0", "0.1.0","ci"]' | ||
export DEFAULT_HUB_BRANCH_NAME=master | ||
export ENABLE_INTERNAL_TLS=false | ||
export REST_PORT=3000 | ||
export GRPC_PORT=3030 | ||
``` | ||
|
||
<Tabs groupId="operating-systems"> | ||
<TabItem value="win" label="Windows"> | ||
|
||
Docker or Hyper-V is reserving that port range. You can use 3030 ports by running the command below | ||
|
||
```bash | ||
netsh interface ipv4 show excludedportrange protocol=tcp | ||
net stop winnat | ||
netsh int ipv4 add excludedportrange protocol=tcp startport=3030 numberofports=1 | ||
net start winnat | ||
``` | ||
|
||
</TabItem> | ||
</Tabs> | ||
|
||
Step-2: Run the go application | ||
|
||
```bash | ||
cd chaoscenter/authentication/api | ||
go run main.go | ||
``` | ||
|
||
### 3. Run the GraphQL Server | ||
|
||
Step-1: Export the following environment variables | ||
|
||
```bash | ||
export DB_SERVER="mongodb://m1:27015,m2:27016,m3:27017/?replicaSet=rs0" | ||
export DB_USER=admin | ||
export DB_PASSWORD=1234 | ||
export JWT_SECRET=litmus-portal@123 | ||
export PORTAL_ENDPOINT=http://localhost:8080 | ||
export LITMUS_SVC_ENDPOINT="" | ||
export SELF_AGENT=false | ||
export INFRA_SCOPE=cluster | ||
export INFRA_NAMESPACE=litmus | ||
export LITMUS_PORTAL_NAMESPACE=litmus | ||
export PORTAL_SCOPE=namespace | ||
export SUBSCRIBER_IMAGE=litmuschaos/litmusportal-subscriber:ci | ||
export EVENT_TRACKER_IMAGE=litmuschaos/litmusportal-event-tracker:ci | ||
export CONTAINER_RUNTIME_EXECUTOR=k8sapi | ||
export ARGO_WORKFLOW_CONTROLLER_IMAGE=argoproj/workflow-controller:v2.11.0 | ||
export ARGO_WORKFLOW_EXECUTOR_IMAGE=argoproj/argoexec:v2.11.0 | ||
export CHAOS_CENTER_SCOPE=cluster | ||
export WORKFLOW_HELPER_IMAGE_VERSION=3.0.0 | ||
export LITMUS_CHAOS_OPERATOR_IMAGE=litmuschaos/chaos-operator:3.0.0 | ||
export LITMUS_CHAOS_RUNNER_IMAGE=litmuschaos/chaos-runner:3.0.0 | ||
export LITMUS_CHAOS_EXPORTER_IMAGE=litmuschaos/chaos-exporter:3.0.0 | ||
export ADMIN_USERNAME=admin | ||
export ADMIN_PASSWORD=litmus | ||
export VERSION=ci | ||
export HUB_BRANCH_NAME=v2.0.x | ||
export INFRA_DEPLOYMENTS="[\"app=chaos-exporter\", \"name=chaos-operator\", \"app=event-tracker\",\"app=workflow-controller\"]" | ||
export INFRA_COMPATIBLE_VERSIONS='["0.2.0", "0.1.0","ci"]' | ||
export DEFAULT_HUB_BRANCH_NAME=master | ||
``` | ||
|
||
Step-2: Run the go application | ||
|
||
```bash | ||
cd chaoscenter/graphql/server | ||
go run server.go | ||
``` | ||
|
||
### 4. Run Frontend | ||
|
||
:::note | ||
Make sure to run backend services before the frontend. | ||
::: | ||
|
||
Step-1: Install all the dependencies | ||
|
||
```bash | ||
cd litmus/chaoscenter/web | ||
yarn | ||
``` | ||
|
||
Step-2: Generate the ssl certificate | ||
<Tabs groupId="operating-systems"> | ||
<TabItem value="win" label="Windows"> | ||
|
||
The command you run is in the script/generate-certificate.sh file, but it doesn't work in a Windows environment, so please run the script below instead | ||
|
||
```bash | ||
mkdir -p certificates | ||
|
||
openssl req -x509 -newkey rsa:4096 -keyout certificates/localhost-key.pem -out certificates/localhost.pem -days 365 -nodes -subj '//C=US' | ||
``` | ||
|
||
</TabItem> | ||
<TabItem value="linux" label="macOS/Linux"> | ||
|
||
```bash | ||
yarn generate-certificate | ||
``` | ||
|
||
</TabItem> | ||
</Tabs> | ||
|
||
Step-3: Run the frontend project | ||
|
||
```bash | ||
yarn dev | ||
``` | ||
|
||
> It’ll prompt you to start the development server at port `8185` or any other port than 3000 since it is already being used by the auth server. | ||
|
||
Once you are able to see the Login Screen of Litmus use the following default credentials | ||
|
||
``` | ||
Username: admin | ||
Password: litmus | ||
``` | ||
|
||
<img src={require('../assets/login.png').default} width="800" /> | ||
|
||
|
||
## **Steps to connect Chaos Infrastructure** | ||
### Using Litmusctl | ||
Use [litmusctl](https://github.com/litmuschaos/litmusctl) on the same box/local cluster and connect an ns infrastructure | ||
|
||
### Using Chaoscenter | ||
Use Chaoscenter to connect an Infrastructure, download the manifest and apply it on k3d/minikube. Once the pods are up(except the subscriber), run the following command: | ||
|
||
```bash | ||
cd subscriber | ||
|
||
INFRA_ID=<INFRA_ID> ACCESS_KEY=<ACCESS_KEY> INFRA_SCOPE=cluster SERVER_ADDR=http://localhost:8080/query INFRA_NAMESPACE=litmus IS_INFRA_CONFIRMED="false" COMPONENTS="DEPLOYMENTS: ["app=chaos-exporter", "name=chaos-operator", "app=workflow-controller"]" START_TIME=1631089756 VERSION="ci" AGENT_POD="subscriber-78f6bd4db5-ck5d9" SKIP_ | ||
SSL_VERIFY="false" go run subscriber.go -kubeconfig ~/.kube/config | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We have updated the envs in the wiki, can you update them here as well?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yes, sure. I'll update