diff --git a/PhamQuangBach/final/README.md b/PhamQuangBach/final/README.md new file mode 100644 index 0000000..e69de29 diff --git a/PhamQuangBach/final/img/argocd-empty-dashboard.png b/PhamQuangBach/final/img/argocd-empty-dashboard.png new file mode 100644 index 0000000..378da0e Binary files /dev/null and b/PhamQuangBach/final/img/argocd-empty-dashboard.png differ diff --git a/PhamQuangBach/final/img/argocd-hello-ui.png b/PhamQuangBach/final/img/argocd-hello-ui.png new file mode 100644 index 0000000..7693689 Binary files /dev/null and b/PhamQuangBach/final/img/argocd-hello-ui.png differ diff --git a/PhamQuangBach/final/img/get-nodes.png b/PhamQuangBach/final/img/get-nodes.png new file mode 100644 index 0000000..d090f1a Binary files /dev/null and b/PhamQuangBach/final/img/get-nodes.png differ diff --git a/PhamQuangBach/final/img/image.png b/PhamQuangBach/final/img/image.png new file mode 100644 index 0000000..62ae03e Binary files /dev/null and b/PhamQuangBach/final/img/image.png differ diff --git a/PhamQuangBach/final/img/nodeport-argocd.png b/PhamQuangBach/final/img/nodeport-argocd.png new file mode 100644 index 0000000..dac7a75 Binary files /dev/null and b/PhamQuangBach/final/img/nodeport-argocd.png differ diff --git a/PhamQuangBach/final/img/secrets.png b/PhamQuangBach/final/img/secrets.png new file mode 100644 index 0000000..80a4b52 Binary files /dev/null and b/PhamQuangBach/final/img/secrets.png differ diff --git a/PhamQuangBach/final/problems/problem1.md b/PhamQuangBach/final/problems/problem1.md new file mode 100644 index 0000000..4d2dea6 --- /dev/null +++ b/PhamQuangBach/final/problems/problem1.md @@ -0,0 +1,25 @@ +# Problem 1: Deploy a Kubernetes cluster with a master node and a worker node + +Chọn đề bài: **Triển khai được Kubernetes thông qua công cụ kubeadm hoặc kubespray lên 1 master node VM + 1 worker node VM: 1 điểm** + +## Network & Instances + +K8s cluster được triển khai trên GCP Compute Engine với configuration như sau: + +- Master node: 1 vCPU, 2GB RAM +- Worker node: 2 vCPU, 4GB RAM + +Hai VM được đặt trong subnet `10.0.0.0/29` của VPC và không có external IP. + +## Triển khai cluster bằng kubeadm + +1. Cài đặt containerd Debian trên cả hai node dùng tài liệu của [Docker Engine](https://github.com/containerd/containerd/blob/main/docs/man/containerd-config.toml.5.md). Tạo config.yaml và edit `systemdCgroup = true` dưới `[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]` +2. Trên cả hai node, cài đặt `kubeadm, kubelet, kubectl` theo [hướng dẫn](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/) +3. Trên master node, chạy `kubeadm init --pod-network-cidr=10.244.0.0/16`. Subnet này không overlap với subnet của instance nên sẽ không xảy ra xung đột IP. Làm theo hướng dẫn của kubeadm để `chown` kube config. +4. Cài đặt Flannel bằng `kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml` +5. Verify Flannel và CoreDNS đang chạy bằng `kubectl get pods --all-namespaces`: +![alt text](../img/image.png) +6. Trên worker node, paste lệnh join với token được cho sau khi chạy `kubeadm init.` +7. Sau khi join thành công, check trên master node bằng `kubectl get nodes`: +![alt text](../img/get-nodes.png) +(tên node được redacted). diff --git a/PhamQuangBach/final/problems/problem2.md b/PhamQuangBach/final/problems/problem2.md new file mode 100644 index 0000000..aa4e6c6 --- /dev/null +++ b/PhamQuangBach/final/problems/problem2.md @@ -0,0 +1,38 @@ +# Problem 2 + +## Yêu cầu 1 + +1. Trên cơ sở bài 1, cài đặt ArgoCD dùng lệnh `kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml` trên master node. +2. Viết manifest cho NodePort mới của ArgoCD: + +![alt text](../img/nodeport-argocd.png) + +3. Configure firewall của VPC để allow traffic từ `0.0.0.0/0` (internet) đến port 30007 của instance. + +![alt text](../img/argocd-hello-ui.png) + +4. Lấy default password trong secrets và enter dashboard. + +```bash +kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d +``` + +![alt text](../img/argocd-empty-dashboard.png) + +## Yêu cầu 2 + +### Tạo secrets + +![alt text](../img/secrets.png) + +```bash +kubectl create secret generic api-secrets \ + --from-literal=db_user=$(echo -n $DB_USER | base64) \ + --from-literal=db_password=$(echo -n $DB_PASSWORD | base64) \ + --from-literal=secret_key=$(echo -n $SECRET_KEY | base64) \ + --from-literal=db_prod=$(echo -n $DB_PROD | base64) +``` + +### Helm chart + +API server: https://github.com/jspbach/vdt-backend/blob/main/deployment/helm/api diff --git a/PhamQuangBach/midterm/README.md b/PhamQuangBach/midterm/README.md new file mode 100644 index 0000000..e450832 --- /dev/null +++ b/PhamQuangBach/midterm/README.md @@ -0,0 +1,31 @@ +# Nộp bài giữa kì + +## R1 + +- Frontend: https://github.com/jspbach/vdt-frontend +- Backend & Database service: https://github.com/jspbach/vdt-backend +- Test cases for API backend: https://github.com/jspbach/vdt-backend/blob/main/apiserver/members/tests.py + +Website accessible from `http://localhost:3000`: + +![Website image](img/image.png) + +## R2 + +- Frontend dockerfile: https://github.com/jspbach/vdt-frontend/blob/main/deployment/Dockerfile +![frontend-image](img/fe-dockerfile.png) +- Backend dockerfile: https://github.com/jspbach/vdt-backend/blob/main/deployment/Dockerfile +![backend-image](img/be-dockerfile.png) +- Docker compose file for all services: https://github.com/jspbach/vdt-backend/blob/main/docker-compose.yaml +- [BONUS] Ansible playbook already includes building steps for each service. Link in R4. + +## R3 + +- CI workflow: https://github.com/jspbach/vdt-backend/blob/main/.github/workflows/apiserver.yml +![ci](img/ci.png) + +## R4 + +- Ansible playbooks: https://github.com/jspbach/vdt-playbooks + +## R5: Research diff --git a/PhamQuangBach/midterm/img/be-dockerfile.png b/PhamQuangBach/midterm/img/be-dockerfile.png new file mode 100644 index 0000000..942e94c Binary files /dev/null and b/PhamQuangBach/midterm/img/be-dockerfile.png differ diff --git a/PhamQuangBach/midterm/img/ci.png b/PhamQuangBach/midterm/img/ci.png new file mode 100644 index 0000000..0bb2da8 Binary files /dev/null and b/PhamQuangBach/midterm/img/ci.png differ diff --git a/PhamQuangBach/midterm/img/fe-dockerfile.png b/PhamQuangBach/midterm/img/fe-dockerfile.png new file mode 100644 index 0000000..1538ae2 Binary files /dev/null and b/PhamQuangBach/midterm/img/fe-dockerfile.png differ diff --git a/PhamQuangBach/midterm/img/image.png b/PhamQuangBach/midterm/img/image.png new file mode 100644 index 0000000..9738d84 Binary files /dev/null and b/PhamQuangBach/midterm/img/image.png differ diff --git a/PhamQuangBach/midterm/research.pdf b/PhamQuangBach/midterm/research.pdf new file mode 100644 index 0000000..867c3b0 Binary files /dev/null and b/PhamQuangBach/midterm/research.pdf differ diff --git a/README.md b/README.md deleted file mode 100644 index 85c0b92..0000000 --- a/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# Viettel-Digital-Talent-2024 -Everything VDT2024