kube migration

This commit is contained in:
2022-07-03 16:13:03 +02:00
parent 4d1eb87f5c
commit 287cb9c2d0
6 changed files with 45 additions and 21 deletions

View File

@ -7,8 +7,8 @@ Main purpose of this projects is to have personal extensive API training on mult
* Fully tested
* High QA by following best practices for linting, formatting, with static analyzers for non strongly typed languages
* Community-driven with usage of the most well-known packages
* `MySQL` or `PostgreSQL` as main databases
* `PostgreSQL` as main databases
* Use ORM whenever possible that follows any `DataMapper` or `Active Record` patterns
* Proper seeder / faker for quick starting with filled DB
* Proper suited QA + production Dockerfile
* Complete CI/DC deployment on Docker Swarm with [Drone CI](https://www.drone.io/)
* Complete CI/CD deployment on Kubernetes with [Concourse](https://concourse.okami101.io/)

View File

@ -9,38 +9,49 @@ A 🧔🌍💻 aka senior web developer @Bretagne 🇫🇷
Hi folks, I'm a web lover actually working [@Cesson-Sévigné](https://fr.wikipedia.org/wiki/Cesson-S%C3%A9vign%C3%A9), mastering :
* [`ASP.NET Core`](https://docs.microsoft.com/fr-fr/aspnet/core/?view=aspnetcore-6.0) with `C#` and [`Laravel`](https://laravel.com/) as main backend frameworks
* [`Vue 3`](https://vuejs.org/) associated with [`Typescript`](https://www.typescriptlang.org/) and [*Composition API*](https://vuejs.org/guide/extras/composition-api-faq.html) on frontend side
* *Utility-first CSS frameworks* as [`Tailwind`](https://tailwindcss.com/) / [`Windi CSS`](https://windicss.org/), but also comfortable with [`Sass`](https://sass-lang.com/) with **BEM** implementation
* [`ASP.NET Core`](https://docs.microsoft.com/fr-fr/aspnet/core/?view=aspnetcore-6.0) with `C#` and [`Laravel`](https://laravel.com/) as favorite backend frameworks
* [`Vue 3`](https://vuejs.org/) by [*Composition API*](https://vuejs.org/guide/extras/composition-api-faq.html) with [`Typescript`](https://www.typescriptlang.org/)
* *Utility-first CSS frameworks* as [`Tailwind`](https://tailwindcss.com/) / [`Windi CSS`](https://windicss.org/) / [`UnoCSS`](https://github.com/unocss/unocss), but also comfortable with [`Sass`](https://sass-lang.com/) with **BEM** implementation
I can develop proper API design following [**DDD / Hexa**](https://en.wikipedia.org/wiki/Domain-driven_design) principles if applicable. In addition to above `.NET` and `PHP` backend stacks, I'm also confident with :
* [`Nest.js`](https://nestjs.com/) associated to [`MikroORM`](https://mikro-orm.io/) (*Typescript*),
* [`FastAPI`](https://fastapi.tiangolo.com/) with [`SQLAlchemy`](https://www.sqlalchemy.org/) (*Python*),
* [`Spring Boot`](https://spring.io/projects/spring-boot) with `Hibernate` as main JPA implementation (*Java*).
* [`Nest.js`](https://nestjs.com/) associated to [`MikroORM`](https://mikro-orm.io/) (*Typescript*)
* [`FastAPI`](https://fastapi.tiangolo.com/) with [`SQLAlchemy`](https://www.sqlalchemy.org/) (*Python*)
* [`Spring Boot`](https://spring.io/projects/spring-boot) with `Hibernate` as main JPA implementation (*Java*)
I encourage `TDD` or at least proper **integration tests** on any backend frameworks, following **AAA** aka *Arrange Act Assert* principle :
* `PHPUnit` or [`Pest`](https://pestphp.com/) for *PHP*,
* [`NUnit.net`](https://nunit.org/) or [`xUnit.net`](https://xunit.net/) with [`Fluent Assertions`](https://github.com/fluentassertions/fluentassertions) for *.NET Core*,
* `JUnit` with [`REST Assured`](https://rest-assured.io/) for *Spring Boot*,
* `Jest` and `pytest` on respective *NodeJS* end *Python* stacks.
* `PHPUnit` or [`Pest`](https://pestphp.com/) for *PHP*
* [`NUnit.net`](https://nunit.org/) or [`xUnit.net`](https://xunit.net/) with [`Fluent Assertions`](https://github.com/fluentassertions/fluentassertions) for *.NET Core*
* `JUnit` with [`REST Assured`](https://rest-assured.io/) for *Spring Boot*
* `Jest` and `pytest` on respective *NodeJS* end *Python* stacks
Fully embracing app containerization with `Docker`, from local, staging to production, I push to use properly configured **CI/CD** whenever is possible in order to enforce **continuous automatized testing, linting and coding standard** at many languages ([`ESLint`](https://eslint.org/), [`Prettier`](https://prettier.io/), [`PHP CS fixer`](https://cs.symfony.com/), [`PHPStan`](https://github.com/phpstan/phpstan), [`Black`](https://black.readthedocs.io/en/stable/), [`mypy`](http://mypy-lang.org/), [`Google Java Format`](https://github.com/google/google-java-format), [`Spotless`](https://github.com/diffplug/spotless), and so on...).
Fully embracing app containerization with `Docker` and `Kubernetes`, from local, staging to production, I push to use properly configured **CI/CD** whenever possible in order to enforce **continuous automatized testing, linting and code styling** at many languages ([`ESLint`](https://eslint.org/), [`Prettier`](https://prettier.io/), [`PHP CS fixer`](https://cs.symfony.com/), [`PHPStan`](https://github.com/phpstan/phpstan), [`Black`](https://black.readthedocs.io/en/stable/), [`mypy`](http://mypy-lang.org/), [`Google Java Format`](https://github.com/google/google-java-format), [`Spotless`](https://github.com/diffplug/spotless), and so on...).
Mastering installations of properly configured `Docker Swarm` clusters with next containerized tools :
Mastering installations and maintenance of `Docker Swarm` or bare metal `Kubernetes` clusters. Here some cloud native tools solutions I generally use :
* [`Traefik`](https://traefik.io/traefik/) as main cloud proxy with automatic service discovery and SSL configuration
* [`Traefik`](https://traefik.io/traefik/) as preferred cloud proxy with automatic service discovery and SSL configuration
* [`Portainer`](https://www.portainer.io/) as simple GUI for containers management
* [`Loki`](https://grafana.com/oss/loki/), [`Prometheus`](https://prometheus.io) and [`Jaeger`](https://www.jaegertracing.io/) as respective *logging*, *metrics* and *tracing* tools
* [`Grafana`](https://grafana.com) as perfect GUI dashboard builder for *Ops*
* [`GitLab`](https://about.gitlab.com/) or [`Gitea`](https://gitea.io/) coupled with [`Drone CI`](https://www.drone.io/) as both *self-hosted CI/CD* solutions
* [SonarQube](https://www.sonarqube.org/) for automatic quality code scan
* [`Grafana`](https://grafana.com) as GUI dashboard builder, designed for *Ops*
* [`Gitea`](https://gitea.io/) or [`GitLab`](https://about.gitlab.com/) as self-hosted *VCS*
* [`Drone CI`](https://www.drone.io/) or [`Concourse`](https://concourse-ci.org/) as both *CI/CD* solutions
* [`SonarQube`](https://www.sonarqube.org/) for automatic quality code scan
I use managed [`PostgreSQL`](https://www.postgresql.org/), [`MySQL`](https://www.mysql.com/fr/), and `MSSQL` as main **SGBD**, as well as `Redis` for high performance cache/sessions management.
I use [`PostgreSQL`](https://www.postgresql.org/), [`MySQL`](https://www.mysql.com/fr/), and `MSSQL` as main *SGBD*, as well as `Redis` for high performance cache/sessions management.
For *load testing*, I can write scenarios for both [`K6`](https://k6.io/) and [`Locust`](https://locust.io/), coupled with proper time series DB as [`InfluxDB`](https://www.influxdata.com/) and `Grafana` as visualization tool. For advanced application performance analysis, I tend to use [`OpenTelemetry`](https://opentelemetry.io/) as collection tools for proper metrics that can be exposed to `Prometheus`, and tracing, ready to export into `Jaeger`.
Have some experiences with many mid-range cloud providers as [Digital Ocean](https://www.digitalocean.com/), [Hetzner](https://www.hetzner.com/), [OVH](https://www.ovhcloud.com/), [Scaleway](https://www.scaleway.com/).
Some notes of this blog :
* Hosted on Hetzner Cloud
* Powered by [`Hugo`](https://gohugo.io/)
* Source code on my own [`Gitea`](https://gitea.okami101.io/adr1enbe4udou1n/blog)
* Automatically deployed through my own [`Concourse`](https://concourse.okami101.io) instance ([see pipeline](https://concourse.okami101.io/teams/main/pipelines/blog))
* Tracked with [`Matomo`](https://matomo.okami101.io/)
All the above tools are **self-hosted** on custom multi-nodes **bare metal** `Kubernetes` installed with [`k0s`](https://k0sproject.io/).
See some of [my open sourced works]({{< ref "works" >}} "Okami101 Works").

View File

@ -7,6 +7,7 @@
- name: vue-ts
title: Vue 3 TS Realworld
repo: adr1enbe4udou1n/vue-ts-realworld-example-app
ci: conduit-vue-ts
demo: https://vuetsrealworld.okami101.io
color: green
@ -15,35 +16,41 @@
- name: aspnet-core
title: ASP.NET Core Realworld
repo: adr1enbe4udou1n/aspnetcore-realworld-example-app
ci: conduit-aspnet-core
demo: https://aspnetcorerealworld.okami101.io/api
- name: spring-boot
title: Spring Boot Realworld
repo: adr1enbe4udou1n/spring-boot-realworld-example-app
ci: conduit-spring-boot
demo: https://springbootrealworld.okami101.io/api
color: green
- name: symfony
title: Symfony Realworld
repo: adr1enbe4udou1n/symfony-realworld-example-app
ci: conduit-symfony
demo: https://symfonyrealworld.okami101.io/api
color: black
- name: laravel
title: Laravel Realworld
repo: adr1enbe4udou1n/laravel-realworld-example-app
ci: conduit-laravel
demo: https://laravelrealworld.okami101.io/api
color: orange
- name: nestjs
title: NestJS Realworld
repo: adr1enbe4udou1n/nestjs-realworld-example-app
ci: conduit-nestjs
demo: https://nestjsrealworld.okami101.io/api
color: red
- name: fastapi
title: FastAPI Realworld
repo: adr1enbe4udou1n/fastapi-realworld-example-app
ci: conduit-fastapi
demo: https://fastapirealworld.okami101.io/api
color: teal

View File

@ -20,6 +20,8 @@
{{ end }}
<div class="flex justify-between items-center">
<div class="flex items-center gap-4">
<img src="/kube.png" width="30" height="30" alt="Kubernetes" title="Run on bare metal Kubernetes on Hetzner Cloud" />
{{/* Copyright */}}
<p class="hidden sm:block text-sm text-neutral-500 dark:text-neutral-400">
{{- with .Site.Params.copyright }}
@ -32,7 +34,7 @@
</p>
<a href="https://yesterweb.org/no-to-web3/">
<img src="https://auzziejay.com/images/noweb32.gif" />
<img src="https://auzziejay.com/images/noweb32.gif" alt="No to Web3" />
</a>
</div>
{{/* Appearance switch */}}

View File

@ -31,7 +31,7 @@
"red" "border-red-500" "teal" "border-teal-500" "primary" "border-purple-500" }}
<div class="flex flex-col gap-4 rounded border-2 p-4 {{ (index $borders (or .color "primary")) }}">
<div class="text-center">
<a href="https://github.com/{{ .repo }}" target="_blank">
<a href="{{ .demo }}" target="_blank">
<h4 class="pb-1 font-bold border-b-2 border-purple-500 inline-block">
{{ .title }}
</h4>
@ -48,6 +48,10 @@
<div class="flex justify-center gap-4">
{{ partial "button.html" (dict "text" (partial "icon.html" "github") "href" (print
"https://github.com/" .repo) "color" .color) }}
{{ if .ci }}
{{ partial "button.html" (dict "text" (partial "icon.html" "bug") "href" (print
"https://concourse.okami101.io/teams/main/pipelines/" .ci) "color" .color) }}
{{ end }}
{{ if .demo }}
{{ partial "button.html" (dict "text" "Demo" "href" .demo "color" .color) }}
{{ end }}

BIN
static/kube.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB