# Development Guides
###### tags: `Installation`
## Outline
This is a guide that you to develop the components in the k8s cluster.
First of all, you need to install **golang**.
And you may also need to the account of [Docker hub](https://hub.docker.com/) to store your own image.
Let's get started!
- [ ] golang
- [ ] the account of Docker hub
Please choose the version you want.
---
## Install Golang
Command
```bash=
$ wget https://lsalab.cs.nthu.edu.tw/~riya/deploy/go/install_golang.sh
$ sh ./install_golang.sh
```
Script
```bash=
#!/bin/bash
wget https://golang.org/dl/go1.14.7.linux-amd64.tar.gz
tar -C /usr/local -xzf ./go1.14.7.linux-amd64.tar.gz
echo 'export PATH="$PATH:/usr/local/go/bin"' >> ~/.bashrc
echo 'export GOPATH="$HOME"' >> ~/.bashrc
echo 'export GOBIN="$GOPATH/bin"' >> ~/.bashrc
source ~/.bashrc
mkdir -p $GOPATH/src
go version
echo $PATH
go env
```
## kubernetes in docker(kind)
If you have a existing k8s cluster that its version does not meet the requirement, you can create the k8s cluster by kind.
+ Installation
```bash=
$ wget https://lsalab.cs.nthu.edu.tw/~riya/deploy/kubernetes/kind/kind
$ chmod +x ./kind
$ mv ./kind /some-dir-in-your-PATH/kind
```
+ Creating a Cluster
**You can modify the yaml to meet the version you expected**
```bash=
$ wget https://lsalab.cs.nthu.edu.tw/~riya/deploy/kubernetes/kind/kind-config.yaml
$ sudo ./kind create cluster --name ganbatte --config kind-config.yaml
```
+ Deleting a Cluster
```bash=
$ kind delete cluster --name Ganbatte
```
+ Recover the oringnal k8s cluster
:::warning
If you didn't want to keep the cluster of kind that you create, please delete it.
:::
```
$ sudo cp /etc/kubernetes/admin.conf ~/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
$ export KUBECONFIG=$HOME/.kube/config
```
> See more: https://kind.sigs.k8s.io/docs/user/quick-start/
## kube-prometheus
Download the repository
```bash=
$ git clone https://github.com/coreos/kube-prometheus.git
$ cd kube-prometheus
```
Kubernetes compatibility matrix

If you want to change the version
```bash=
$ git checkout release-0.3
```
If you want to expose the port,
you can add nodePort to the prometheus-service.yaml and grafana-service.yaml
```yaml=
apiVersion: v1
kind: Service
metadata:
labels:
prometheus: k8s
name: prometheus-k8s
namespace: monitoring
spec:
ports:
- name: web
port: 9090
targetPort: web
nodePort: 30093
type: NodePort
selector:
app: prometheus
prometheus: k8s
sessionAffinity: ClientIP
```
```yaml=
apiVersion: v1
kind: Service
metadata:
labels:
app: grafana
name: grafana
namespace: monitoring
spec:
ports:
- name: http
port: 3000
targetPort: http
nodePort: 32222
type: NodePort
selector:
app: grafana
```
Install
```bash=
$ kubectl create -f manifests/setup
$ kubectl create -f manifests/
```
The Defalut account & passwd: admin
> See more: https://github.com/prometheus-operator/kube-prometheus/tree/master