A better CV #4

Merged
allanger merged 1 commits from better-cv into main 2026-02-11 16:24:31 +00:00
31 changed files with 800 additions and 106 deletions

View File

@@ -74,6 +74,34 @@ themenbereiche
änderungen
auszuführen
zeitraum
GitOps
FluxCD
gitlab
restic
vaultwarden
standort
höchstleistungen
Fähigkeiten
docker
Golang
Datenbankverwaltung
Einführung
selbstverwalteten
Entwicklungsteams
Zugriffsmanagement
Ausführung
Deployments
größeren
kundenorientierter
Datenbank-Lifecycle-Managements
Refactoring
Ablösung
CD-Lösung
Preview-Environments
Daten-Streaming
JavaScript
Zugriffsrechten
Repositories
- index.md
Rodionov
db-operator
@@ -126,3 +154,16 @@ Blue-Green-RabbitMQ-Deployments
Kubernetes-Backends
Faro
Minio-Bucket
Open-Source-Kubernetes-Operators
Deployment-Workflows
Selenoid-Backends
db-operator
Terraform-Codebasis
Downtime
Cross-Cloud-Backup-Strategien
Federated-Prometheus-Cluster
- ./english/index.md
Golang
selenoid
golang
db-operator

View File

@@ -20,6 +20,8 @@ steps:
securityContext:
privileged: true
commands:
- mkdir -p ~/.local/share/fonts
- cp ./fonts/fira_sans/* ~/.local/share/fonts/
- apt-get update
- |-
apt-get install -y libx11-xcb1 libxcomposite1 libasound2 \

144
css/nord_dark.css Normal file
View File

@@ -0,0 +1,144 @@
/* ===============================
Nord Dark Compact Markdown
github-markdown-css compatible
=============================== */
.markdown-body {
background: #2E3440;
color: #D8DEE9;
font-family: "Fira Sans";
font-size: 15px;
line-height: 1.55;
padding-top: 2.0rem;
padding-bottom: 1.0rem;
padding-right: 3.0rem;
padding-left: 3.0rem;
}
/* Headings */
.markdown-body h1,
.markdown-body h2,
.markdown-body h3,
.markdown-body h4,
.markdown-body h5,
.markdown-body h6 {
border: none;
margin-top: 1.2em;
margin-bottom: 0.4em;
font-weight: 700;
color: #ECEFF4;
}
.markdown-body h1 { font-size: 1.9em; }
.markdown-body h2 { font-size: 1.6em; }
.markdown-body h3 { font-size: 1.35em; }
.markdown-body h4 { font-size: 1.15em; }
.markdown-body h5 { font-size: 1.02em; }
.markdown-body h6 { font-size: 0.95em; }
/* Paragraphs */
.markdown-body p {
margin: 0.55em 0;
}
/* Blockquotes SAME vertical spacing as paragraphs */
.markdown-body blockquote {
margin: 0.55em 0;
padding: 0.55em 0.8em;
border-left: 3px solid #8FBCBB;
background: #3B4252;
color: #D8DEE9;
font-style: italic;
}
.markdown-body blockquote > :first-child { margin-top: 0; }
.markdown-body blockquote > :last-child { margin-bottom: 0; }
/* Links */
.markdown-body a {
color: #ECEFF4; /* same as headings → bold-text feel */
font-weight: 700; /* bold */
text-decoration: none;
border-bottom: 0.5px dotted #88C0D0; /* underline = link signal */
}
.markdown-body a:hover {
color: #8FBCBB; /* subtle Nord accent on hover */
border-bottom-color: #8FBCBB;
}
/* Code */
.markdown-body code {
background: #3B4252;
color: #EBCB8B;
padding: 0.1em 0.3em;
border-radius: 3px;
font-size: 0.92em;
}
.markdown-body pre {
background: #3B4252;
color: #ECEFF4;
padding: 0.75em 0.9em;
border-radius: 5px;
overflow-x: auto;
border-left: 3px solid #81A1C1;
margin: 0.7em 0;
}
.markdown-body pre code {
background: none;
padding: 0;
}
/* Lists */
.markdown-body ul,
.markdown-body ol {
padding-left: 1.3em;
margin: 0.5em 0;
}
.markdown-body ul li::marker,
.markdown-body ol li::marker {
color: #88C0D0;
}
/* HR */
.markdown-body hr {
border: none;
border-top: 1px dashed #4C566A;
margin: 1.2em 0;
}
/* Tables */
.markdown-body table {
border-collapse: collapse;
width: 100%;
margin: 0.7em 0;
font-size: 0.92em;
}
.markdown-body th,
.markdown-body td {
border: 1px solid #4C566A;
padding: 0.35em 0.6em;
}
.markdown-body th {
background: #3B4252;
}
/* Images */
.markdown-body img {
max-width: 100%;
background: #2E3440;
border: 0px solid #4C566A;
padding: 0.2em;
border-radius: 0px;
}
/* Hide anchor icons */
.markdown-body a.anchor {
display: none;
}

141
css/nord_light.css Normal file
View File

@@ -0,0 +1,141 @@
/* ===============================
Nord Light Compact Markdown
github-markdown-css compatible
=============================== */
.markdown-body {
background: #ECEFF4;
color: #2E3440;
font-family: "JetBrains Mono", "Fira Code", Menlo, Consolas, monospace;
font-size: 15px;
line-height: 1.55;
padding: 4.0rem;
}
/* Headings */
.markdown-body h1,
.markdown-body h2,
.markdown-body h3,
.markdown-body h4,
.markdown-body h5,
.markdown-body h6 {
border: none;
margin-top: 1.2em;
margin-bottom: 0.4em;
font-weight: 700;
color: #3B4252;
}
.markdown-body h1 { font-size: 1.9em; }
.markdown-body h2 { font-size: 1.6em; }
.markdown-body h3 { font-size: 1.35em; }
.markdown-body h4 { font-size: 1.15em; }
.markdown-body h5 { font-size: 1.02em; }
.markdown-body h6 { font-size: 0.95em; color: #4C566A; }
/* Paragraphs */
.markdown-body p {
margin: 0.55em 0;
}
/* Blockquotes SAME vertical spacing as paragraphs */
.markdown-body blockquote {
margin: 0.55em 0;
padding: 0.55em 0.8em;
border-left: 3px solid #81A1C1;
background: #E5E9F0;
color: #4C566A;
font-style: italic;
}
/* Remove extra spacing inside blockquotes */
.markdown-body blockquote > :first-child { margin-top: 0; }
.markdown-body blockquote > :last-child { margin-bottom: 0; }
/* Links */
.markdown-body a {
color: #5E81AC;
text-decoration: none;
border-bottom: 1px dotted #81A1C1;
}
.markdown-body a:hover {
color: #81A1C1;
border-bottom-style: solid;
}
/* Code */
.markdown-body code {
background: #E5E9F0;
color: #BF616A;
padding: 0.1em 0.3em;
border-radius: 3px;
font-size: 0.92em;
}
.markdown-body pre {
background: #E5E9F0;
color: #2E3440;
padding: 0.75em 0.9em;
border-radius: 5px;
overflow-x: auto;
border-left: 3px solid #88C0D0;
margin: 0.7em 0;
}
.markdown-body pre code {
background: none;
padding: 0;
}
/* Lists */
.markdown-body ul,
.markdown-body ol {
padding-left: 1.3em;
margin: 0.5em 0;
}
.markdown-body ul li::marker,
.markdown-body ol li::marker {
color: #5E81AC;
}
/* HR */
.markdown-body hr {
border: none;
border-top: 1px dashed #D8DEE9;
margin: 1.2em 0;
}
/* Tables */
.markdown-body table {
border-collapse: collapse;
width: 100%;
margin: 0.7em 0;
font-size: 0.92em;
}
.markdown-body th,
.markdown-body td {
border: 1px solid #D8DEE9;
padding: 0.35em 0.6em;
}
.markdown-body th {
background: #E5E9F0;
}
/* Images */
.markdown-body img {
max-width: 100%;
background: #E5E9F0;
border: 1px solid #D8DEE9;
padding: 0.2em;
border-radius: 3px;
}
/* Hide anchor icons */
.markdown-body a.anchor {
display: none;
}

140
css/solarized_light.css Normal file
View File

@@ -0,0 +1,140 @@
/* ===============================
Solarized Light Compact Markdown
github-markdown-css compatible
=============================== */
.markdown-body {
background: #FDF6E3; /* base3 */
color: #657B83; /* base00 */
font-family: "JetBrains Mono", "Fira Code", Menlo, Consolas, monospace;
font-size: 15px;
line-height: 1.55;
padding: 4.0rem;
}
/* Headings */
.markdown-body h1,
.markdown-body h2,
.markdown-body h3,
.markdown-body h4,
.markdown-body h5,
.markdown-body h6 {
border: none;
margin-top: 1.2em;
margin-bottom: 0.4em;
font-weight: 700;
color: #586E75; /* base01 */
}
.markdown-body h1 { font-size: 1.9em; }
.markdown-body h2 { font-size: 1.6em; }
.markdown-body h3 { font-size: 1.35em; }
.markdown-body h4 { font-size: 1.15em; }
.markdown-body h5 { font-size: 1.02em; }
.markdown-body h6 { font-size: 0.95em; color: #839496; /* base0 */ }
/* Paragraphs */
.markdown-body p {
margin: 0.55em 0;
}
/* Blockquotes SAME vertical spacing as paragraphs */
.markdown-body blockquote {
margin: 0.55em 0;
padding: 0.55em 0.8em;
border-left: 3px solid #268BD2; /* blue */
background: #EEE8D5; /* base2 */
color: #839496; /* base0 */
font-style: italic;
}
/* Remove extra spacing inside blockquotes */
.markdown-body blockquote > :first-child { margin-top: 0; }
.markdown-body blockquote > :last-child { margin-bottom: 0; }
/* Links */
.markdown-body a {
color: #268BD2; /* blue */
text-decoration: none;
border-bottom: 1px dotted #2AA198; /* cyan */
}
.markdown-body a:hover {
color: #2AA198; /* cyan */
border-bottom-style: solid;
}
/* Code */
.markdown-body code {
background: #EEE8D5; /* base2 */
color: #DC322F; /* red */
padding: 0.1em 0.3em;
border-radius: 3px;
font-size: 0.92em;
}
.markdown-body pre {
background: #EEE8D5; /* base2 */
color: #586E75; /* base01 */
padding: 0.75em 0.9em;
border-radius: 5px;
overflow-x: auto;
border-left: 3px solid #2AA198; /* cyan */
margin: 0.7em 0;
}
.markdown-body pre code {
background: none;
padding: 0;
}
/* Lists */
.markdown-body ul,
.markdown-body ol {
padding-left: 1.3em;
margin: 0.5em 0;
}
.markdown-body ul li::marker,
.markdown-body ol li::marker {
color: #268BD2; /* blue */
}
/* HR */
.markdown-body hr {
border: none;
border-top: 1px dashed #DDD6C1; /* subtle base2/base1 mix */
margin: 1.2em 0;
}
/* Tables */
.markdown-body table {
border-collapse: collapse;
width: 100%;
margin: 0.7em 0;
font-size: 0.92em;
}
.markdown-body th,
.markdown-body td {
border: 1px solid #DDD6C1;
padding: 0.35em 0.6em;
}
.markdown-body th {
background: #EEE8D5; /* base2 */
}
/* Images */
.markdown-body img {
max-width: 100%;
background: #EEE8D5;
border: 1px solid #DDD6C1;
padding: 0.2em;
border-radius: 3px;
}
/* Hide anchor icons */
.markdown-body a.anchor {
display: none;
}

180
css/spacing.css Normal file
View File

@@ -0,0 +1,180 @@
.markdown-body {
font-family: "JetBrains Mono", "Fira Code", Menlo, Consolas, monospace;
font-size: 16px;
line-height: 1.65;
padding: 1.25rem;
}
/* -------------------------------
Headings (no underline)
------------------------------- */
.markdown-body h1,
.markdown-body h2,
.markdown-body h3,
.markdown-body h4,
.markdown-body h5,
.markdown-body h6 {
border: none;
margin-top: 1.6em;
margin-bottom: 0.6em;
font-weight: 700;
}
.markdown-body h1 { font-size: 2em; }
.markdown-body h2 { font-size: 1.7em; }
.markdown-body h3 { font-size: 1.4em; }
.markdown-body h4 { font-size: 1.2em; }
.markdown-body h5 { font-size: 1.05em; }
.markdown-body h6 { font-size: 1em; }
/* -------------------------------
Text
------------------------------- */
.markdown-body p {
margin: 0.75em 0;
}
.markdown-body strong {
color: #ECEFF4;
}
.markdown-body em {
color: #E5E9F0;
}
/* -------------------------------
Links
------------------------------- */
.markdown-body a {
color: #88C0D0; /* nord8 */
text-decoration: none;
border-bottom: 1px dotted #81A1C1;
}
.markdown-body a:hover {
color: #8FBCBB; /* nord7 */
border-bottom-style: solid;
}
/* -------------------------------
Inline + Block Code
------------------------------- */
.markdown-body code {
background: #3B4252; /* nord1 */
color: #EBCB8B; /* nord13 */
padding: 0.15em 0.35em;
border-radius: 3px;
font-size: 0.95em;
}
.markdown-body pre {
background: #3B4252;
color: #ECEFF4;
padding: 1em;
border-radius: 6px;
overflow-x: auto;
border-left: 4px solid #81A1C1; /* nord9 */
}
.markdown-body pre code {
background: none;
padding: 0;
color: inherit;
}
/* -------------------------------
Blockquotes
------------------------------- */
.markdown-body blockquote {
margin: 1em 0;
padding: 0.6em 1em;
border-left: 4px solid #8FBCBB; /* nord7 */
background: #3B4252;
color: #D8DEE9;
font-style: italic;
}
/* -------------------------------
Lists
------------------------------- */
.markdown-body ul,
.markdown-body ol {
padding-left: 1.6em;
margin: 0.8em 0;
}
.markdown-body ul li::marker {
color: #88C0D0;
}
.markdown-body ol li::marker {
color: #88C0D0;
font-weight: bold;
}
/* -------------------------------
Horizontal Rule
------------------------------- */
.markdown-body hr {
border: none;
border-top: 1px dashed #4C566A; /* nord3 */
margin: 2em 0;
}
/* -------------------------------
Tables
------------------------------- */
.markdown-body table {
border-collapse: collapse;
width: 100%;
margin: 1em 0;
font-size: 0.95em;
}
.markdown-body th,
.markdown-body td {
border: 1px solid #4C566A;
padding: 0.5em 0.75em;
}
.markdown-body th {
background: #3B4252;
color: #ECEFF4;
}
.markdown-body tr:nth-child(even) td {
background: #434C5E; /* nord2 */
}
/* -------------------------------
Images
------------------------------- */
.markdown-body img {
max-width: 100%;
background: #3B4252;
border: 1px solid #4C566A;
padding: 0.25em;
border-radius: 4px;
}
/* -------------------------------
Anchor links (hide GitHub icons)
------------------------------- */
.markdown-body a.anchor {
display: none;
}
/* -------------------------------
Print / PDF safety
------------------------------- */
@media print {
.markdown-body {
background: #ffffff;
color: #000000;
}
a {
color: #000000;
border: none;
}
}

View File

@@ -1,10 +1,12 @@
---
pdf_options:
format: a4
margin: 20mm 10mm
margin: 0mm 0mm
printBackground: true
trim_trailing_whitespace: false
stylesheet:
- https://cdnjs.cloudflare.com/ajax/libs/github-markdown-css/5.5.1/github-markdown.css
- ./css/nord_dark.css
body_class: markdown-body
css: |-
.markdown-body {
@@ -13,54 +15,76 @@ css: |-
.page-break { page-break-after: always; }
---
## Nikolai Rodionov
<img src="../resources/photo.png" alt="photo" style="float: left; padding-right: 2em; padding-top: 2em; margin: 0 0 0em 0em; height: 80px;"/>
<br>
```
> Location: Hamburg, Germany
> Email: allanger@zohomail.com
> Github: https://github.com/allanger
```
## Nikolai Rodionov
### Senior DevOps Engineer
<br clear="left" />
> **Location:**&nbsp;&nbsp;**Hamburg, Germany**
> **Email:**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;allanger@zohomail.com
> **Phone:**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;**4915223284008**
> **GitHub:**&nbsp;&nbsp;&nbsp;&nbsp;https://github.com/allanger
### About me
I'm a DevOps engineer with almost 10 years of hands-on experience. I've been mostly focused on Kubernetes and CI/CD pipelines, but it doesn't mean that I would like to avoid tasks in other areas.
A couple of interesting tasks, that I've been working on:
Senior DevOps Engineer focused on **Kubernetes** and **CI/CD pipelines**. I build and run **scalable systems**, write **Go** and **Rust**, manage **servers** and **databases**, and help developers perform at their best.
- Migration from Datadog to the self-managed monitoring stack (Mimir/Loki/Tempo/Grafana)
- GCP Kafka access management with a self-written k8s operator (<https://github.com/allanger/gcp-kafka-auth-operator>)
- Migration of several MySQL Percona clusters to Kubernetes using the Percona Operator
- Implementation of a downtime-free blue-green deployment for RabbitMQ
- A data streaming automation from ~800 Postgres databases with structural changes via Kafka deployed to Kubernetes
- Implementation of a Kubernetes backend for Selenoid for running e2e tests in k8s environments
In addition, I'm a maintainer of an open-source **Kubernetes operator** designed to help users manage databases through CRDs:
<https://github.com/db-operator/db-operator>
Also, I'm a maintainer of a Kubernetes operator that should help users manage databases via CRDs: <https://github.com/db-operator/db-operator>
---
### Skills
**Linux** - **Docker** - **Kubernetes** - **CI/CD** - **Automations and Scripting** - **Bash/Golang/Rust** - **GitOps**
**Database Administration** - **Observability and Monitoring** - **Terraform/OpenTofu/Ansible** - **AWS/GCP/Azure**
---
### Experience
| Company | Position | Dates |
|------------------|-------------------|---------------------|
| **Onpier** | DevOps Engineer | 06.2024 - Until Now |
| **Giant Swarm** | Platform Engineer | 12.2023 - 05.2024 |
| **Grandcentrix** | SRE | 02.2023 - 11.2023 |
| **Klöckner.I** | DevOps Engineer | 01.2022 - 01.2023 |
| **Itigris** | DevOps Engineer | 07.2019 - 12.2021 |
| **Etersoft** | DevOps Engineer | 03.2017 - 06.2019 |
#### Onpier - DevOps Engineer [06.2024 - Until now]
- Bootstrapped deployment workflows and CI/CD pipelines for the monitoring stack using **helmfile** and **Github Actions**
- Configured and maintained a self-managed observability stack (**Mimir**/**Loki**/**Tempo**/**Grafana Alloy**/**Grafana**)
- Operated and supported **Tekton CD** and **ArgoCD** instances for developers
- Built and maintained [an open-source Kubernetes operator](https://github.com/ONPIER-OSS/gcp-kafka-auth-operator) for access management in **GCP Kafka**
- Implemented a custom [selenoid backend](https://github.com/ONPIER-OSS/selenoid) to run **e2e-tests** natively in **Kubernetes**
### Tools
#### Giant Swarm - Platform Engineer [12.2023 - 05.2024]
- Deployed and actively used **FluxCD** for GitOps-based workflows
- Maintained a large set of customer-facing **Helm charts**
- Contributed to and maintained multiple **Go** and **Rust** project
- **Environments**: Linux - Containers - Kubernetes - Proxmox
- **Kubernetes**: Helm - Kustomize - Kubebuilder - Helmfile
- **Scripting/Coding**: Bash - Go - Rust - Perl - Python
- **Continuous Integration**: Gitlab-CI - Github Actions - Circle-CI - Woodpecker-CI - Drone-CI
- **Continuous Delivery**: ArgoCD - Flux - Tekton
- **Infrastructure as Code**: Ansible - Terraform - Opentofu - Cluster API
- **Cloud Providers**: Microsoft Azure - Google Cloud - AWS - Yandex Cloud - Hetzner
- **Observability**: Prometheus - Mimir - Grafana - Loki - Elasticsearch - Kibana - FluentBit - Promtail - Fluentd - Grafana Alloy - Faro - Tempo
- **Secret Management**: Sops - Age - Helm Secrets - Hashicorp Vault
- **Databases**: PostgreSQL - MySQL - Percona MySQL - Redis - Mongo - Dragonfly
- **Storages**: Minio - Ceph - Longhorn
- **Others**: Kafka - RabbitMQ - Selenium - Selenoid - Kyverno - K3s - Kubeadm
#### Grandcentrix - SRE [02.2023 - 11.2023]
- Streamlined database management using the [db-operator](https://github.com/db-operator/db-operator)
- Configured, maintained, and actively used **ArgoCD**
- Refactored a large **Terraform** codebase with zero downtime
#### Klöckner.I - DevOps Engineer [01.2022 - 01.2022]
- Migrated multiple **Percona MySQL** clusters to **Kubernetes** using **Percona Operator**
- Replaced a custom CD solution with **ArgoCD**
- Managed **GitLab** and **GitLab CI/CD** installations
- Implemented a cross-cloud backup solution using **Restic**
- Operated **Elasticsearch**, **Kibana**, and **FluentBit**
- Maintained federated **Prometheus** clusters across **Kubernetes** and **Linux Servers**
- Deployed and maintained **Vaultwarden** for company-wide secret management
- Maintained and contributed to **db-operator**
#### Itigris - DevOps Engineer [07.2019 - 12.2021]
- Built **preview environments** using **ArgoCD**
- Implemented data streaming from **~800 PostgreSQL databases** using **Kafka** running in **Kubernetes**
- Designed and rolled out company-wide **Gitlab-CI/CD** pipelines for **Java** and **JavaScript** projects
- Developed a [cli tool](https://github.com/allanger/gitlab-user-manager) to manage access to **Gitlab** repositories
- Designed, implemented, and maintained **CI** pipelines for **e2e-tests**.
#### Etersoft - DevOps Engineer [03.2017 - 06.2019]
- Designed, implemented, and maintained **CI** pipelines for **e2e-tests**.
- Maintained **Linux Servers**
---

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,10 +1,12 @@
---
pdf_options:
format: a4
margin: 20mm 10mm
margin: 0mm 0mm
printBackground: true
trim_trailing_whitespace: false
stylesheet:
- https://cdnjs.cloudflare.com/ajax/libs/github-markdown-css/5.5.1/github-markdown.css
- ./css/nord_dark.css
body_class: markdown-body
css: |-
.markdown-body {
@@ -13,54 +15,74 @@ css: |-
.page-break { page-break-after: always; }
---
## Nikolai Rodionov
<img src="../resources/photo.png" alt="photo" style="float: left; padding-right: 2em; padding-top: 2em; margin: 0 0 0em 0em; height: 80px;"/>
<br>
```
> Standort: Hamburg, Deutschland
> E-mail: allanger@zohomail.com
> Github: https://github.com/allanger
```
## Nikolai Rodionov
### Senior DevOps Ingenieur
<br clear="left" />
> **Standort:**&nbsp;&nbsp;Hamburg, Deutschland
> **E-mail:**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;allanger@zohomail.com
> **Telefon:**&nbsp;&nbsp;&nbsp;4915223284008
> **GitHub:**&nbsp;&nbsp;&nbsp;&nbsp;https://github.com/allanger
### Über mich
Ich bin ein DevOps-Ingenieur mit fast 10 Jahren praktischer Erfahrung und einer breiten Palette an Tools. Mein Fokus lag hauptsächlich auf Kubernetes und CI/CD-Pipelines, das bedeutet jedoch nicht, dass ich andere Themenbereiche meide.
Senior-DevOps-Ingenieur konzentrierte sich auf **Kubernetes** und **CI/CD Pipelines**. Ich baue und betreibe **skalierbare Systeme**, schreibe **Go** und **Rust**, verwalte **Servern** und **Datenbanken**, und helfe Entwicklern, Höchstleistungen zu erbringen.
Ein paar interessante Aufgaben, an denen ich gearbeitet habe:
Außerdem bin ich ein Maintainer eines **Open-Source-Kubernetes-Operators**, der Benutzern bei der Verwaltung von Datenbanken über CRDs helfen soll:
<https://github.com/db-operator/db-operator>
- Migration von Datadog zu einem self-managed Monitoring-Stack (Mimir/Loki/Tempo/Grafana)
- GCP-Kafka-Zugriffsverwaltung mit einem selbstgeschriebenen k8s Operator (<https://github.com/allanger/gcp-kafka-auth-operator>)
- Migration mehrerer MySQL Percona-Cluster zu Kubernetes mithilfe des Percona-Operators
- Implementierung eines downtime-freien Blue-Green-RabbitMQ-Deployments
- Automatisierung des Data-Streamings von ~800 PostgreSQL-Datenbanken inklusive struktureller Änderungen via Kafka in Kubernetes
- Implementierung eines Kubernetes-Backends für Selenoid, um E2E-Tests nativ in Kubernetes auszuführen
---
Außerdem bin ich Maintainer eines Kubernetes-Operators, der die Verwaltung von Datenbanken über CRDs vereinfacht: <https://github.com/db-operator/db-operator>
### Fähigkeiten
**Linux** - **Docker** - **Kubernetes** - **CI/CD** - **Automatisierung und Skripting** - **Bash/Golang/Rust** - **GitOps**
**Datenbankverwaltung** - **Observability und Monitoring** - **Terraform/OpenTofu/Ansible** - **AWS/GCP/Azure**
---
### Erfahrung
| Firma | Position | Zeitraum |
|------------------|---------------------|---------------------|
| **Onpier** | DevOps Ingenieur | 06.2024 - Bis jetzt |
| **Giant Swarm** | Plattform Ingenieur | 12.2023 - 05.2024 |
| **Grandcentrix** | SRE | 02.2023 - 11.2023 |
| **Klöckner.I** | DevOps Ingenieur | 01.2022 - 01.2023 |
| **Itigris** | DevOps Ingenieur | 07.2019 - 12.2021 |
| **Etersoft** | DevOps Ingenieur | 03.2017 - 06.2019 |
#### Onpier - DevOps-Ingenieur [06.2024 - bis jetzt]
- Aufbau und Einführung von Deployment-Workflows und CI/CD-Pipelines für einen Monitoring-Stack mit **helmfile** und **GitHub Actions**
- Konfiguration und Betrieb eines selbstverwalteten Observability-Stacks (**Mimir**, **Loki**, **Tempo**, **Grafana Alloy**, **Grafana**)
- Betrieb und Support von **Tekton CD-** und **ArgoCD-**Instanzen für Entwicklungsteams
- Entwicklung und Wartung eines [Open-Source-Kubernetes-Operators](https://github.com/ONPIER-OSS/gcp-kafka-auth-operator) für Zugriffsmanagement in **GCP Kafka**
- Implementierung eines eigenen [Selenoid-Backends](https://github.com/ONPIER-OSS/selenoid) zur nativen Ausführung von **E2E-Tests** in **Kubernetes**
### Tools
#### Giant Swarm - Plattform-Ingenieur [12.2023 - 05.2024]
- Einführung und aktive Nutzung von **FluxCD** für **GitOps** Deployments
- Wartung einer größeren Anzahl kundenorientierter **Helm Charts**
- Mitarbeit an sowie Wartung mehrerer **Go-** und **Rust-**Projekte
- **Umgebungen**: Linux - Containers - Kubernetes - Proxmox
- **Kubernetes**: Helm - Kustomize - Kubebuilder - Helmfile
- **Skripting/Programmierung**: Bash - Go - Rust - Perl - Python
- **Continuous Integration**: Gitlab-CI - Github Actions - Circle-CI - Woodpecker-CI - Drone-CI
- **Continuous Delivery**: ArgoCD - Flux - Tekton
- **IaC**: Ansible - Terraform - Opentofu - Cluster API
- **Cloud Providers**: Microsoft Azure - Google Cloud - AWS - Yandex Cloud - Hetzner
- **Observability**: Prometheus - Mimir - Grafana - Loki - Elasticsearch - Kibana - FluentBit - Promtail - Fluentd - Grafana Alloy - Faro - Tempo
- **Secret-Management**: Sops - Age - Helm Secrets - Hashicorp Vault
- **Datenbanken**: PostgreSQL - MySQL - Percona MySQL - Redis - Mongo - Dragonfly
- **Storages**: Minio - Ceph - Longhorn
- **Sonstiges**: Kafka - RabbitMQ - Selenium - Selenoid - Kyverno - K3s - Kubeadm
#### Grandcentrix - SRE [02.2023 - 11.2023]
- Optimierung des Datenbank-Lifecycle-Managements mit dem [db-operator](https://github.com/db-operator/db-operator)
- Konfiguration, Wartung und aktive Nutzung von **ArgoCD**
- Refactoring einer umfangreichen Terraform-Codebasis ohne Downtime
#### Klöckner.I - DevOps-Ingenieur [01.2022 - 01.2022]
- Migration mehrerer **Percona MySQL-Cluster** nach **Kubernetes** mithilfe des **Percona Operators**
- Ablösung einer selbst entwickelten CD-Lösung durch **ArgoCD**
- Betrieb und Wartung von **GitLab** und **GitLab CI/CD**
- Implementierung von Cross-Cloud-Backup-Strategien mit **Restic**
- Betrieb von **Elasticsearch**, **Kibana**, und **FluentBit**
- Wartung **Federated-Prometheus-Cluster** auf **Kubernetes** und **Linux-Servern**
- Einführung und Betrieb von **Vaultwarden** für unternehmensweites Secret-Management
- Wartung **db-operator**
#### Itigris - DevOps-Ingenieur [07.2019 - 12.2021]
- Aufbau **Preview-Environments** mithilfe **ArgoCD**
- Umsetzung von Daten-Streaming aus ca. **800 PostgreSQL-Datenbanken** in einen auf **Kubernetes** betriebenen **Kafka-Cluster**
- Konzeption und Einführung unternehmensweiter **GitLab CI/CD-Pipelines** für **Java-** und **JavaScript-**Projekte
- Entwicklung eines [Cli-Tools](https://github.com/allanger/gitlab-user-manager) zur Verwaltung von Zugriffsrechten auf **GitLab**-Repositories
- Konzeption, Implementierung und Betrieb von **CI-Pipelines** für **E2E-Tests**
#### Etersoft - DevOps-Ingenieur [03.2017 - 06.2019]
- Konzeption, Implementierung und Betrieb von **CI-Pipelines** für **E2E-Tests**
- Betrieb und Wartung von **Linux-Servern**
---

58
package-lock.json generated
View File

@@ -10,7 +10,7 @@
"license": "ISC",
"dependencies": {
"markdown-spellcheck": "^1.3.1",
"md-to-pdf": "^5.2.4"
"md-to-pdf": "^5.2.5"
}
},
"node_modules/@babel/code-frame": {
@@ -37,9 +37,9 @@
}
},
"node_modules/@puppeteer/browsers": {
"version": "2.11.2",
"resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.11.2.tgz",
"integrity": "sha512-GBY0+2lI9fDrjgb5dFL9+enKXqyOPok9PXg/69NVkjW3bikbK9RQrNrI3qccQXmDNN7ln4j/yL89Qgvj/tfqrw==",
"version": "2.12.0",
"resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.12.0.tgz",
"integrity": "sha512-Xuq42yxcQJ54ti8ZHNzF5snFvtpgXzNToJ1bXUGQRaiO8t+B6UM8sTUJfvV+AJnqtkJU/7hdy6nbKyA12aHtRw==",
"license": "Apache-2.0",
"dependencies": {
"debug": "^4.4.3",
@@ -84,9 +84,9 @@
"license": "MIT"
},
"node_modules/@types/node": {
"version": "25.2.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.0.tgz",
"integrity": "sha512-DZ8VwRFUNzuqJ5khrvwMXHmvPe+zGayJhr2CDNiKB1WBE1ST8Djl00D0IC4vvNmHMdj6DlbYRIaFE7WHjlDl5w==",
"version": "25.2.3",
"resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.3.tgz",
"integrity": "sha512-m0jEgYlYz+mDJZ2+F4v8D1AyQb+QzsNqRuI7xg1VQX/KlKS0qT9r1Mo16yo5F/MtifXFgaofIFsdFMox2SxIbQ==",
"license": "MIT",
"optional": true,
"dependencies": {
@@ -513,9 +513,9 @@
}
},
"node_modules/chromium-bidi": {
"version": "13.0.1",
"resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-13.0.1.tgz",
"integrity": "sha512-c+RLxH0Vg2x2syS9wPw378oJgiJNXtYXUvnVAldUlt5uaHekn0CCU7gPksNgHjrH1qFhmjVXQj4esvuthuC7OQ==",
"version": "13.1.1",
"resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-13.1.1.tgz",
"integrity": "sha512-zB9MpoPd7VJwjowQqiW3FKOvQwffFMjQ8Iejp5ZW+sJaKLRhZX1sTxzl3Zt22TDB4zP0OOqs8lRoY7eAW5geyQ==",
"license": "Apache-2.0",
"dependencies": {
"mitt": "^3.0.1",
@@ -852,9 +852,9 @@
}
},
"node_modules/devtools-protocol": {
"version": "0.0.1551306",
"resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1551306.tgz",
"integrity": "sha512-CFx8QdSim8iIv+2ZcEOclBKTQY6BI1IEDa7Tm9YkwAXzEWFndTEzpTo5jAUhSnq24IC7xaDw0wvGcm96+Y3PEg==",
"version": "0.0.1566079",
"resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1566079.tgz",
"integrity": "sha512-MJfAEA1UfVhSs7fbSQOG4czavUp1ajfg6prlAN0+cmfa2zNjaIbvq8VneP7do1WAQQIvgNJWSMeP6UyI90gIlQ==",
"license": "BSD-3-Clause"
},
"node_modules/dunder-proto": {
@@ -2644,17 +2644,17 @@
}
},
"node_modules/puppeteer": {
"version": "24.36.1",
"resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-24.36.1.tgz",
"integrity": "sha512-uPiDUyf7gd7Il1KnqfNUtHqntL0w1LapEw5Zsuh8oCK8GsqdxySX1PzdIHKB2Dw273gWY4MW0zC5gy3Re9XlqQ==",
"version": "24.37.2",
"resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-24.37.2.tgz",
"integrity": "sha512-FV1W/919ve0y0oiS/3Rp5XY4MUNUokpZOH/5M4MMDfrrvh6T9VbdKvAHrAFHBuCxvluDxhjra20W7Iz6HJUcIQ==",
"hasInstallScript": true,
"license": "Apache-2.0",
"dependencies": {
"@puppeteer/browsers": "2.11.2",
"chromium-bidi": "13.0.1",
"@puppeteer/browsers": "2.12.0",
"chromium-bidi": "13.1.1",
"cosmiconfig": "^9.0.0",
"devtools-protocol": "0.0.1551306",
"puppeteer-core": "24.36.1",
"devtools-protocol": "0.0.1566079",
"puppeteer-core": "24.37.2",
"typed-query-selector": "^2.12.0"
},
"bin": {
@@ -2665,15 +2665,15 @@
}
},
"node_modules/puppeteer-core": {
"version": "24.36.1",
"resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.36.1.tgz",
"integrity": "sha512-L7ykMWc3lQf3HS7ME3PSjp7wMIjJeW6+bKfH/RSTz5l6VUDGubnrC2BKj3UvM28Y5PMDFW0xniJOZHBZPpW1dQ==",
"version": "24.37.2",
"resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.37.2.tgz",
"integrity": "sha512-nN8qwE3TGF2vA/+xemPxbesntTuqD9vCGOiZL2uh8HES3pPzLX20MyQjB42dH2rhQ3W3TljZ4ZaKZ0yX/abQuw==",
"license": "Apache-2.0",
"dependencies": {
"@puppeteer/browsers": "2.11.2",
"chromium-bidi": "13.0.1",
"@puppeteer/browsers": "2.12.0",
"chromium-bidi": "13.1.1",
"debug": "^4.4.3",
"devtools-protocol": "0.0.1551306",
"devtools-protocol": "0.0.1566079",
"typed-query-selector": "^2.12.0",
"webdriver-bidi-protocol": "0.4.0",
"ws": "^8.19.0"
@@ -2833,9 +2833,9 @@
}
},
"node_modules/semver": {
"version": "7.7.3",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
"integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
"version": "7.7.4",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
"integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
"license": "ISC",
"bin": {
"semver": "bin/semver.js"

View File

@@ -15,6 +15,6 @@
"license": "ISC",
"dependencies": {
"markdown-spellcheck": "^1.3.1",
"md-to-pdf": "^5.2.4"
"md-to-pdf": "^5.2.5"
}
}

BIN
resources/photo.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

BIN
resources/photo.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 522 KiB

BIN
resources/photo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 606 KiB