Skip to content
Snippets Groups Projects
Commit 13d1a12a authored by schnarkus's avatar schnarkus
Browse files

Update docs, move gke cluster to new project due to expired credits

parent 19111cb9
No related branches found
No related tags found
No related merge requests found
Pipeline #68411 passed
......@@ -5,21 +5,19 @@
Die Produktivumgebung des Webservice wird auf der Google Cloud Platform (GCP) gehostet:
- **Details zur Infrastruktur**:
- Maschinentyp: e2-small (1 vCPU, 2 GB RAM)
- Region: Berlin (wenn verfügbar, Europa)
- Betriebssystem: Ubuntu 22.04
- Festplatte: 20 GB
- Tags für Firewall: http-server,https-server
## Ressourcenmanagement
- **Maschinentyp**: e2-medium (2 vCPUs, 4 GB RAM)
- **Region**: Frankfurt
- **Betriebssystem**: Ubuntu 22.04
- **Festplatte**: 20 GB
- **Dynamische Zuweisung**: Ressourcen werden nach Bedarf zugewiesen und nach Nutzung entzogen, um Google Cloud-Credits effizient zu nutzen
- **Skalierung**: Compute Engine-Instanzen werden nach Ressourcenbedarf skaliert
## Bereitstellungsprozess
- **OpenTofu**: Deklarative Verwaltung der Cloud-Infrastruktur
- **Ansible**: Konfigurationsmanagement und Anwendungsbereitstellung
- **Erweiterte Umgebung**:
- **Google Kubernetes Engine Cluster**: `devops24-autopilot-cluster`
- **Netzwerk**: `devops24-network`
- **Subnetz**: `devops24-subnetwork`
- **Kubernetes Deployment**: Deployment mit drei Replikaten
- **LoadBalancer-Service**: Zugang über IPv4 und IPv6
- **Ingress-Controller**: Nginx
## Technologiewahl
......@@ -29,13 +27,13 @@ Die Produktivumgebung des Webservice wird auf der Google Cloud Platform (GCP) ge
## Umgebungen
- **Entwicklung**: Lokal mit Vagrant
- **Produktion**: Erweiterte Sicherheitsmaßnahmen und Monitoring
- **Entwicklung**: Lokal mit Podman-Containern
- **Produktion**: Global über Kubernetes-Cluster in GCP
## Dienste <a id="Dienste"></a>
- **Compute Engine**: Hostet VMs für Webservice und Redis-Datenbank
- **Cloud Monitoring**: Überwacht Leistung, bietet Einblicke in Logs, Metriken und Alarme
- **Kubernetes Engine**: Autopilot-Cluster für Webservice und Ingress-Controller
## Visuelle Hilfsmittel
......@@ -44,29 +42,24 @@ Die Produktivumgebung des Webservice wird auf der Google Cloud Platform (GCP) ge
### CI/CD Pipeline
Die Konfiguration für den Build des Webservices erfolgt in der GitLab CI/CD-Pipeline. Diese unterscheidet die Stages Test, Build und Publish. Bei Merge-Requests oder Pushes auf den `main`- oder `prod`-Branch wird die Pipeline aktiviert.
Die Konfiguration für den Build des Webservices erfolgt in der GitLab CI/CD-Pipeline. Diese Pipeline unterscheidet die Stages Test, Build und Publish und wird bei Merge-Requests oder Pushes auf die Branches `main`, `dev` oder `prod` aktiviert.
- **Test**: Tests mit golang:1.21 Docker-Image
- **Build**: Baut Webservice für linux_amd64-Systeme und speichert Artefakte in der Package Registry
- **Publish**: Veröffentlicht Docker-Container in der Container Registry
Abhängig vom Branch führt die Pipeline Tests aus, erstellt ein Static Binary und veröffentlicht einen Docker-Container, bei welchem die Versionierung auf der Pipeline-ID basiert.
- **Test**: Durchführung von Tests mit dem Docker-Image `golang:1.21`
- **Build**: Erstellung des Webservice-Binaries für `linux_amd64` und Speicherung der Artefakte in der Package Registry
- **Publish**: Veröffentlichung des Docker-Containers in der Container Registry mit Versionierung auf der Basis der Pipeline-ID und des `latest` Tags
## Persistenzschicht (Datenbank)
Für die Persistenz wird Redis verwendet, welches in einer separaten Compute Engine-Instanz innerhalb der GCP-Umgebung betrieben wird.
Die Einrichtung und Konfiguration erfolgt über Ansible.
Für die Persistenz wird Redis verwendet, das in einer separaten Compute Engine-Instanz innerhalb der GCP-Umgebung betrieben wird.
## Lifecycle
- **DEV: Workstation als GitLab Runner**: Deploy-Job auf der lokalen Workstation wird durch Registrierung der Workstation als GitLab Runner ausgeführt. Der Runner wird im Hochschul-GitLab registriert und bei Pushes auf den `dev`-Branch getriggert.
- **MAIN: Main to Prod**: Änderungen vom Hauptzweig (`main`) werden in die Produktionsumgebung (`prod`) übernommen
- **FEATURES: Feature to Prod**: Feature-Zweige werden in den Hauptzweig gemerged und schließlich in die Produktionsumgebung überführt
- **Pipeline Trigger**: Die Pipeline wird durch Merge-Requests oder Pushes auf `main`, `dev` oder `prod` aktiviert
- **DEV**: Commits auf den `dev`-Branch lösen den Build eines Containers aus, der lokal mit Podman ausgeführt und getestet werden kann.
- **FEATURES: Feature to Prod**: Feature-Branches werden in den Main-Branch gemerged und schließlich in die Test- und zuletzt in die Produktionsumgebung überführt.
- **Pipeline Trigger**: Die Pipeline wird durch Merge-Requests oder Pushes auf den Branches `main`, `dev` oder `prod` aktiviert.
## Weitere Konfigurationen
- **Monitoring**: Die Anwendung wird mithilfe von GCP (siehe [Dienste](#Dienste)) überwacht
- **Sicherheit**: TLS-Terminierung erfolgt durch ein selbstsigniertes Zertifikat in der Entwicklungsumgebung
- **DNS**: In der Entwicklungsumgebung wird die DNS-Auflösung in der `/etc/hosts`-Datei konfiguriert; es soll nachgewiesen werden, dass die Seite über einen Alias per HTTPS verfügbar ist
- **Monitoring**: Die Anwendung wird mithilfe von GCP-Monitoring überwacht.
- **Sicherheit**: TLS-Terminierung erfolgt durch ein selbstsigniertes Zertifikat in der Entwicklungsumgebung.
- **DNS**: In der Entwicklungsumgebung wird die DNS-Auflösung in der `/etc/hosts`-Datei konfiguriert; es wird überprüft, ob die Seite über einen Alias per HTTPS verfügbar ist.
......@@ -9,7 +9,7 @@ resource "google_compute_subnetwork" "default" {
name = "devops24-subnetwork"
ip_cidr_range = "10.0.0.0/16"
region = "europe-west1"
region = "europe-west3"
stack_type = "IPV4_IPV6"
ipv6_access_type = "EXTERNAL"
......@@ -29,7 +29,7 @@ resource "google_compute_subnetwork" "default" {
resource "google_container_cluster" "default" {
name = "devops24-autopilot-cluster"
location = "europe-west1"
location = "europe-west3"
enable_autopilot = true
enable_l4_ilb_subsetting = true
......
......@@ -11,25 +11,25 @@ tofu plan
tofu apply
#connect
gcloud container clusters get-credentials devops24-autopilot-cluster --region europe-west1 --project bht-devops24-ss
gcloud container clusters get-credentials devops24-autopilot-cluster --region europe-west3 --project devops24-sose
#debug
kubectl get pods --output wide
kubectl get services --output wide
kubectl get ingress --output wide
kubectl describe pod devops24-webservice-deployment-c4d7b6876-28srq
kubectl describe pod devops24-webservice-deployment-c4d7b6876-rdw6m
#hop in
kubectl exec --stdin --tty devops24-webservice-deployment-c4d7b6876-28srq -- bash
kubectl exec --stdin --tty devops24-webservice-deployment-c4d7b6876-rdw6m -- bash
#replace
kubectl delete pod devops24-webservice-deployment-c4d7b6876-28srq
kubectl delete pod devops24-webservice-deployment-c4d7b6876-rdw6m
kubectl get pods --watch
# get hello world
curl http://34.38.234.174/
curl http://34.38.234.174/health
curl http://104.199.1.99
curl http://104.199.1.99/health
#destroy
tofu destroy
\ No newline at end of file
provider "google" {
project = "bht-devops24-ss"
region = "europe-west1"
project = "devops24-sose"
region = "europe-west3"
credentials = file("/home/schnarkus/.gcp/keyfile.json")
}
2073 kubectl config set-context --current --namespace=default
2074 tofu init
2075 tofu plan
2076 tofu apply
2077 gcloud container clusters get-credentials devops24-autopilot-cluster --region europe-west1 --project bht-devops24-ss
2078 kubectl get pods --output wide
2079 kubectl get services --output wide
2080 kubectl get ingress --output wide
2081 kubectl describe pod devops24-webservice-deployment-c4d7b6876-28srq
2082 kubectl exec --stdin --tty devops24-webservice-deployment-c4d7b6876-28srq -- bash
2083 kubectl delete pod devops24-webservice-deployment-c4d7b6876-28srq
2084 kubectl get pods --watch
2085 curl http://34.38.234.174/
2086 curl http://34.38.234.174/health
2087 tofu destroy
\ No newline at end of file
......@@ -13,7 +13,7 @@ variable "gcpCredentialsFilePath" {
variable "projectID" {
type = string
description = "ID of a project within GCP"
default = "bht-devops24-ss"
default = "devops-sose-2024"
}
variable "zone" {
......
......@@ -9,7 +9,7 @@ resource "google_compute_subnetwork" "default" {
name = "devops24-subnetwork"
ip_cidr_range = "10.0.0.0/16"
region = "europe-west1"
region = "europe-west3"
stack_type = "IPV4_IPV6"
ipv6_access_type = "EXTERNAL"
......@@ -29,7 +29,7 @@ resource "google_compute_subnetwork" "default" {
resource "google_container_cluster" "default" {
name = "devops24-autopilot-cluster"
location = "europe-west1"
location = "europe-west3"
enable_autopilot = true
enable_l4_ilb_subsetting = true
......
provider "google" {
project = "bht-devops24-ss"
region = "europe-west1"
project = "devops-sose-2024"
region = "europe-west3"
credentials = file("/home/schnarkus/.gcp/keyfile.json")
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment