> For the complete documentation index, see [llms.txt](https://jabardigitalservice.gitbook.io/sapawarga/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://jabardigitalservice.gitbook.io/sapawarga/documentation/deployment/kubernetes-webadmin.md).

# Kubernetes Webadmin

System Requirements

* Mengerti ci/cd di [Gitlab](https://docs.gitlab.com/ee/ci/).

&#x20;          Pada proses deployment untuk webadmin pada Kubernetes ialah lakukan create file `.gitlab-ci.yml` pada repository sapawarga-webadmin di Gitlab. Khusus untuk deployment webadmin oleh Kubernetes berada di stage `deploy_prod_eks` . Pada file dibawah hanya fokus di stage tersebut.&#x20;

{% tabs %}
{% tab title=".gitlab.ci.yml" %}

```yaml
deploy_prod_eks:
  stage: deploy_prod
  image: dtzar/helm-kubectl
  when: manual
  environment:
    name: production
  only:
    - master
  dependencies: 
    - versioning
  before_script:
    - export VERSION=$(cat ./version)
    - kubectl config set-cluster k8s --server="${EKS_SERVER}"
    - kubectl config set clusters.k8s.certificate-authority-data ${EKS_CA}
    - kubectl config set-credentials gitlab --token="${EKS_TOKEN}"
    - kubectl config set-context default --cluster=k8s --user=gitlab
    - kubectl config use-context default
    - kubectl cluster-info
  script:
    - cp kubernetes/webadmin-variables-sample.yaml kubernetes/webadmin-variables.yaml
    - sed -i "s/%VUE_APP_VERSION%/${VERSION}/g" kubernetes/webadmin-variables.yaml
    - sed -i "s/%VUE_APP_BASE_API%/${EKS_VUE_APP_BASE_API}/g" kubernetes/webadmin-variables.yaml
    - sed -i "s/%dockerconfigjson%/${dockerconfigjson}/g" kubernetes/webadmin-variables.yaml
    - sed -i "s/%SENTRY_DSN_API%/${SENTRY_DSN_API}/g" kubernetes/webadmin-variables.yaml
    - sed -i "s/%VERSION%/${VERSION}/g" kubernetes/webadmin-deployment.yaml
    - kubectl create --dry-run --validate -f kubernetes/webadmin-variables.yaml
        -f kubernetes/webadmin-deployment.yaml
        -f kubernetes/webadmin-service.yaml
    - kubectl apply -f kubernetes/webadmin-variables.yaml
        -f kubernetes/webadmin-deployment.yaml
        -f kubernetes/webadmin-service.yaml


```

{% endtab %}

{% tab title="Plain Text" %}

```
deploy_prod_eks_v2:
  stage: deploy_prod
  image: dtzar/helm-kubectl
  when: manual
  environment:
    name: production
  only:
    - master
  dependencies: 
    - versioning
  before_script:
    - export VERSION=$(cat ./version) 
    - kubectl config set-cluster k8s --server="${EKS_SERVER}"
    - kubectl config set clusters.k8s.certificate-authority-data ${EKS_CA}
    - kubectl config set-credentials gitlab-eks-admin --token="${EKS_TOKEN}"
    - kubectl config set-context default --cluster=k8s --user=gitlab-eks-admin
    - kubectl config use-context default
    - kubectl cluster-info
  script:
    - cp kubernetes/webadmin-variables-sample.yaml kubernetes/webadmin-variables.yaml
    - sed -i "s/%VUE_APP_VERSION%/${VERSION}/g" kubernetes/webadmin-variables.yaml
    - sed -i "s/%VUE_APP_BASE_API%/${EKS_VUE_APP_BASE_API}/g" kubernetes/webadmin-variables.yaml
    - sed -i "s/%dockerconfigjson%/${dockerconfigjson}/g" kubernetes/webadmin-variables.yaml
    - sed -i "s/%SENTRY_DSN_API%/${SENTRY_DSN_API}/g" kubernetes/webadmin-variables.yaml
    - sed -i "s/%VERSION%/${VERSION}/g" kubernetes/webadmin-deployment.yaml
    - kubectl create --dry-run --validate -f kubernetes/webadmin-variables.yaml
        -f kubernetes/webadmin-deployment.yaml
        -f kubernetes/webadmin-service.yaml
    - kubectl apply -f kubernetes/webadmin-variables.yaml
        -f kubernetes/webadmin-deployment.yaml
        -f kubernetes/webadmin-service.yaml

```

{% endtab %}
{% endtabs %}

Pada tahap scripting seperti file diatas. yang wajib di garis bawahi ialah tahap inisiasi  `kubectl config`. Merupakan langkah awal dari step deployment agar [*shared-runners* ](https://docs.gitlab.com/ee/ci/runners/README.html)pada Gitlab dapat berkomunikasi dengan cluster di AWS EKS.

Pertama kita akan membuat User dengan `roles` khusus untuk deployment production di AWS EKS, tujuannya adalah agar memuhdakan mapping hak akses pada sistem di kubernetes.

{% tabs %}
{% tab title="gitlab-admin.yaml" %}

```
apiVersion: v1
kind: ServiceAccount
metadata:
  name: gitlab-eks-admin
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: gitlab-eks-admin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: gitlab-eks-admin
  namespace: kube-system
```

{% endtab %}

{% tab title="Plain Text" %}

```
```

{% endtab %}
{% endtabs %}

lalu eksekusi command dibawah&#x20;

```
kubectl apply -f gitlab-admin.yaml
```
