Hướng dẫn triển khai trên môi trường Azure
Tổng quan
Hệ thống Kubernetes của nhóm được triển khai trên môi trường Azure với dịch vụ Azure Kubernetes Service (AKS). Nhóm sẽ triển khai hệ thống tự động với công cụ Terraform.
Công cụ
Hệ thống được kiểm tra & triển khai với cấu hình như sau:
Hệ điều hành: Ubuntu 22.10.
Terminal: zsh 5.9 (x86_64-ubuntu-linux-gnu).
Công cụ (terminal):
kubectl: Công cụ để triển khai Kubernetes resource$ kubectl version --short
Client Version: v1.27.3
Kustomize Version: v5.0.1
Server Version: v1.26.4+k3s1kustomize: Công cụ để cài đặt resource$ kustomize version
v5.0.3terraform: Công cụ để triển khai hệ thống tự động$ terraform --version
Terraform v1.5.2
on linux_amd64azure-cli: Công cụ để giao tiếp với Azure$ az --version
azure-cli 2.50.0
core 2.50.0
telemetry 1.0.8
Dependencies:
msal 1.22.0
azure-mgmt-resource 23.1.0b2helm: Công cụ để quản lý Kubernetes resource$ helm version
version.BuildInfo{Version:"v3.12.1", GitCommit:"f32a527a060157990e2aa86bf45010dfb3cc8b8d", GitTreeState:"clean", GoVersion:"go1.20.4"}helmfile: Công cụ để quản lý helm chart$ helmfile version
Version 0.154.0
Git Commit c498af3
Build Date 24 May 23 06:31 +07 (1 month ago)
Commit Date 24 May 23 06:29 +07 (1 month ago)
Dirty Build no
Go version 1.20.4
Compiler gc
Platform linux/amd64argocd: Công cụ để giao tiếp với ArgoCD server$ argocd version
argocd: v2.7.5+a2430af
BuildDate: 2023-06-16T15:00:03Z
GitCommit: a2430af1c356b283e5e3fc5bde1f5e2b5199f258
GitTreeState: clean
GoVersion: go1.19.10
Compiler: gc
Platform: linux/amd64Các công cụ phụ:
curl,wget,jq,gpg.
Cài đặt công cụ
Clone repo gitops về máy:
$ git clone https://github.com/the-company-tcus/gitops.git
Chuyển đến thư mục scripts/install-tools:
$ cd scripts/install-tools
Cài đặt tất cả các công cụ:
$ ./setup.sh
Cài đặt công cụ thủ công:
Cài đặt
kubectl:$ ./kubectl.setup.shCài đặt
kustomize:$ ./kustomize.setup.shCài đặt
terraform:$ ./terraform.setup.shCài đặt
azure-cli:$ ./azure.setup.shCài đặt
helm:$ ./helm.setup.shCài đặt
helmfile:$ ./helmfile.setup.shCài đặt
argocd:$ ./argocd.setup.sh
Triển khai hệ thống
Tổng quan
Để triển khai nhóm sẽ làm theo các bước sau:
Tạo Azure Kubernetes Service (AKS) cluster bằng
terraform.Cài đặt helm chart bằng
helmfile.Cài đặt và cấu hình
vault.Cài đặt và cấu hình
argocd.
Khởi tạo Azure Kubernetes Service (AKS) cluster
Đăng nhập vào Azure:
$ az loginNgười dùng sẽ được yêu cầu truy cập vào đường dẫn và bắt đầu quá trình đăng nhập.
Truy cập thông tin của account:
Người dùng sẽ cần hai thông tin sau để xác thực với Terraform:
Subscription ID: ID của subscription mà người dùng muốn triển khai hệ thống lên.
$ az account subscription list
[
{
"authorizationSource": "RoleBased",
"displayName": "Azure for Students",
"id": "/subscriptions/2ff486ee-879e-4387-8efa-e48e7801ab5f",
"state": "Enabled",
"subscriptionId": "2ff486ee-879e-4387-8efa-e48e7801ab5f",
"subscriptionPolicies": {
"locationPlacementId": "Public_2014-09-01",
"quotaId": "AzureForStudents_2018-01-01",
"spendingLimit": "On"
}
}
]Hoặc có thể truy cập vào
Home/Subscriptions/<SUBSCRIPTION-NAME>để lấy Subscription ID.
Tenant ID: ID của tenant mà người dùng muốn triển khai hệ thống lên.
$ az account show
{
"environmentName": "AzureCloud",
"homeTenantId": "40127cd4-45f3-49a3-b05d-315a43a9f033",
"id": "2ff486ee-879e-4387-8efa-e48e7801ab5f",
"isDefault": true,
"managedByTenants": [],
"name": "Azure for Students",
"state": "Enabled",
"tenantId": "40127cd4-45f3-49a3-b05d-315a43a9f033",
"user": {
"name": "19127631@student.hcmus.edu.vn",
"type": "user"
}
}Hoặc có thể truy cập vào
Home/Azure Active Directoryđể lấy Tenant ID.
Cập nhập thông tin xác thực cho Terraform:
Người triển khai sẽ cập nhật hai thông tin subscription_id và tenant_id vào
file terraform.tfvars trong thư mục terraform/azure:
subscription_id = "2ff486ee-879e-4387-8efa-e48e7801ab5f"
tenant_id = "40127cd4-45f3-49a3-b05d-315a43a9f033"
user_principal_names = [
"19127626@student.hcmus.edu.vn",
"19127373@student.hcmus.edu.vn",
"19127294@student.hcmus.edu.vn",
"19127607@student.hcmus.edu.vn",
"19127597@student.hcmus.edu.vn",
]
Ngoài ra, người triển khai cần cập nhật thông tin user_principal_names với
email của các thành viên trong nhóm.
Khởi tạo Terraform:
$ terraform initKiểm tra các tài nguyên sẽ được tạo ra:
$ terraform plan
Terraform sẽ tạo ra các tài nguyên sau:
Resource Group:
ethi-group.AKS Cluster:
ethi- Node pool:
agentpool. - Node Count:
1. - VM Size:
Standard_B2ms. - Kubernetes Version:
1.26.3.
- Node pool:
Role Assignment:
- Role Definition Name:
Azure Kubernetes Service RBAC Cluster Admin. - Principal ID: Các
Object IDcủa thành viên trong nhóm.
- Role Definition Name:
Triển khai hệ thống:
$ terraform apply
Cài đặt helm chart
Cài đặt các helm chart bằng helmfile:
$ helmfile sync
Cài đặt và cấu hình vault
Khởi tạo vault:
$ kubectl -n vault exec vault-0 -- vault operator init -key-shares=1 -key-threshold=1 -format=json > cluster-keys.jsonVault sẽ được khởi tạo với số lượng key-share là
1và key-threshold là1. Filecluster-keys.jsonsẽ chứa thông tin vềunseal keyvàroot tokencủa vault.Đăng nhập vào vault
$ kubectl -n vault exec vault-0 -- vault loginNgười triển khai sẽ được yêu cầu nhập
root_tokentrong filecluster-keys.jsonđể đăng nhập vào vault.Tạo secret path
$ kubectl -n vault exec vault-0 -- vault secrets enable -path=secret kv-v2Vault sẽ tạo ra một secret path có tên là
secretđể lưu trữ các secret.Tạo Kubernetes secret để lưu root token:
$ kubectl -n vault create secret generic vault-token \
--from-literal=token=<ROOT-TOKEN>Người triển khai sẽ cập nhật
<ROOT-TOKEN>bằngroot_tokentrong filecluster-keys.json.Import secret vào vault:
$ cd scripts/vault && make import-prod token="<ROOT-TOKEN>"Người triển khai sẽ cập nhật
<ROOT-TOKEN>bằngroot_tokentrong filecluster-keys.json.Vault sẽ được import các secret từ file
scripts/vault/import-secret-prod.yamlvào secret pathsecret, với công cụ medusa CLI.Note: Target
make import-prodsẽ yêu cầu người triển khai đã cài đặt Docker.
Cài đặt và cấu hình ArgoCD
Cài đặt ArgoCD với Kustomize:
$ kubectl apply -k ./registry/ethi/components/argocdCài đặt các ứng dụng của ArgoCD:
$ kubectl apply -f ./registry/ethi
Cài đặt hệ thống tự động
Người triển khai có thể dùng file script của nhóm để cài đặt hệ thống tự động các bước:
2. Cài đặt helm chart bằng helmfile.
3. Cài đặt và cấu hình vault.
4. Cài đặt và cấu hình argocd.
Người triển khai có thể chạy file script bootstrap-prod.sh để cài đặt hệ
thống:
$ ./bootstrap-prod.sh