I design, run and cost-optimise production Kubernetes platforms.
Work with me Read the case studiesI'm Firas Chbiki, a Senior DevOps / Platform Engineer with eight years in production environments — six of them on Kubernetes.
Today I lead the DevOps team at Suez Smart Solutions, where I own the build, the run and the cost of a production Kubernetes platform on Azure. Before that, I built the large-scale load-testing capability for the M6 Group streaming platforms at Bedrock, and deployed Orange's telecom services across the MEA region at Sofrecom.
What that means day to day: designing and operating Kubernetes clusters, industrialising the delivery chain with Terraform and Helm, making observability useful rather than noisy, keeping the platform hardened and audit-ready, and bringing the cloud bill down without degrading service.
I'm also CKA-certified and a Microsoft Certified Trainer. I train teams on Kubernetes, Azure and DevOps practices — in my experience that's where adoption is won or lost, far more than in the tooling.
Based in Île-de-France. Open to freelance missions and permanent roles.
I own the build, the run and the cost of a production Kubernetes platform on Azure, and I lead the DevOps team that keeps it running.
• Operating a fleet of AKS clusters in production: architecture, version upgrades, consistency across environments.
• Leading the DevOps team day to day — work allocation, technical review, skills development, and the interface with the development teams.
• Running k3s clusters in isolated, highly secured industrial environments: deployment, operations and troubleshooting.
• Migrating part of the Kubernetes estate to arm64 nodes to improve the price/performance ratio.
• Operating the platform's databases: MongoDB on Kubernetes with zero-downtime upgrades and operator lifecycle management, PostgreSQL automated end to end with Ansible.
• Backup and disaster recovery: restore testing, with RTO and RPO targets defined and validated.
• Industrialising the delivery chain on Azure DevOps: infrastructure as code with Terraform, application packaging and deployment with Helm, pipelines standardised across applications.
• Onboarding new applications and teams onto the platform with ready-to-use pipelines and templates.
• Automating operations, including in-house PowerShell tooling that replaces recurring manual work on infrastructure and applications.
• Evaluating and integrating AI services — Anthropic Claude and Azure AI Foundry — to support platform development and operations.
• FinOps: continuous optimisation of Azure consumption at constant service level — sizing, node architecture, drift tracking, cost per database.
• Observability: metrics, centralised logging, alerting and dashboards the teams actually use.
• Security and compliance: cluster hardening, RBAC, secret management, audit preparation and follow-through.
• Incident management and on-call: diagnosis, resolution and post-incident analysis.
Azure · AKS · k3s · Kubernetes · Azure DevOps · Terraform · Helm · Argo CD · Ansible · PowerShell · PostgreSQL · MongoDB · Prometheus · Grafana · Anthropic Claude · Azure AI Foundry · Linux
Bedrock is the technology arm of the M6 Group — the streaming platforms 6play, Salto and Videoland. My job was to build the large-scale load-testing capability, and to run it through to production.
• Designing the load-testing platform: technology and target architecture chosen with the Dev, Infra and DevOps teams.
• Modelling realistic test scenarios from actual usage, then industrialising their execution.
• Running campaigns of up to several million concurrent virtual users on AWS, with Artillery Pro and AWS Fargate.
• Feeding results back to the product and infrastructure teams and following the optimisations through.
• Building AWS Lambda functions for monitoring and alerting on the client-facing critical APIs.
• Day-to-day operations alongside the Dev, DevOps and Infra teams: incident resolution, infrastructure and application upgrades, deployment automation for new components.
AWS (EKS, Fargate, Lambda) · Kubernetes · Terraform · Artillery Pro · GitHub Enterprise · GitHub Actions · Prometheus · Grafana · New Relic
Joined on my final-year project — migrating Orange's internal projects to cloud and DevOps — then stayed on full time: deploying Orange's telecom services across the MEA region, and industrialising the Lab's DevOps practice.
Product deployment and support
• Installing the product for Orange's new MEA subsidiaries, and version upgrades for existing ones.
• Technical and application support for clients, plus contributions to optimisation work and new features alongside the development team.
Cloud migration and orchestration
• Containerising and orchestrating a production Orange project to guarantee its availability.
• Benchmarking a self-managed Kubernetes cluster (KubeSpray) against Red Hat OpenShift, then implementing the platform we retained.
• Automating integration, test, build and deployment.
"Try & Learn" — a DevOps e-learning platform
• Designing and operating a platform of interactive labs for real-time practice, as micro-services on Kubernetes.
• Building an in-house SDK that launches and manages Docker containers through an API, plus the admin, learner and trainer interfaces in Node.js and Angular.
• Auto-scaling and service checks for availability, configuration through configMaps, secrets for sensitive data, Swagger documentation.
Internal DevOps community
• Leading the Lab's DevOps community: migrating internal projects to DevOps, running upskilling workshops, sharing practice with Orange's other innovation Labs.
OpenStack · Flexible Engine · VMware · Azure · Docker · Kubernetes · OpenShift · KubeSpray · Ansible · Terraform · GitLab CI · RHEL / CentOS / Ubuntu · Shell · Python · Node.js · Angular · ELK · Prometheus · Grafana
Product engineering, and taking e-commerce startups through their move to DevOps.
Afflo — a dynamic e-commerce site generation platform
• Developing the platform's micro-services.
• Unit and functional testing to guarantee code quality and integrity before release.
• Deploying the micro-services across Dev, Staging and Production, hosted on an AKS cluster on Azure.
Partner startups
• Migrating their projects to DevOps within an agile team, from design through to production.
• Building the automation pipelines they asked for: compilation, build, tests.
• Deploying across environments — Kubernetes or Docker Compose depending on context.
• Training their developers, writing the documentation and supporting adoption.
Azure (AKS) · OVH · DigitalOcean · Docker · Kubernetes · GitLab CI · GitHub Actions · Bitbucket · Node.js · JavaScript · MochaJS · Shell · Ubuntu · ELK · Prometheus · Grafana
Building a training website on a serverless architecture on AWS.
• Developing the site's interfaces in JavaScript and Angular.
• Building the backend on AWS serverless functions.
• Automating AWS resource deployment with the Serverless framework and AWS pipelines.
AWS · Serverless · JavaScript · Angular · Shell · Ubuntu · GitHub · AWS CodePipeline · AWS CodeDeploy
I've spent eight years on systems that break in front of real users. That shapes every choice I make — I optimise for the day something goes wrong, not for the demo.
Anything done twice by hand becomes a pipeline or a script. Anything that can't be automated gets written down, so the next person doesn't rediscover it under pressure.
FinOps isn't a separate project handed to finance. It's a design constraint, like latency or availability, and it belongs in the architecture conversation.
The best platform nobody uses is a failure. I spend as much time training teams and removing friction as I do building — which is why I became a Microsoft Certified Trainer.
Check Certificate
Check Certificate
Check Certificate
Check Certificate
Check Certificate
Context. A production Kubernetes platform on Azure, running the workloads of a company whose cloud spend was growing faster than its traffic. ARM nodes offered a real price-performance win — the question was reaching it without anyone noticing.
The constraint. No degradation, no big bang, and a fleet that stayed mixed for as long as the migration took, so every decision had to work for both architectures at once.
What it actually took. Right-sizing and reserved instances were considered and dropped — neither changed the underlying unit cost the way ARM did. The real work sat in the build chain, not the cluster: multi-arch images became a mandatory CI step, dependencies and native code were inventoried before the migration rather than during it, and mixed-architecture scheduling was made explicit with taints rather than left to chance.
What changed. The migration ran on non-critical stateless workloads first, both architectures live in parallel long enough to compare under real traffic, nothing moved until it had held up. The platform came out of it with a build chain that produces multi-arch by default.
The lesson. The gain is real, but it's earned in the CI pipeline far more than in the cluster.
Context. A fleet of MongoDB replica sets on AKS was running on an archived, unmaintained operator. Years of manual changes had left each environment differently broken — some "replica sets" were single instances with no failover, disks sat on whatever storage class had been the default, and the server was frozen on an old major version. None of it could go offline to fix.
The constraint. The supported operator can adopt an existing resource without a dump-and-restore, so the swap itself was a control-plane handover, not a data migration. Everything after that was real change on a live system — growing a single instance into a genuine replica set, moving its data, and climbing several major versions member by member without losing quorum.
What it actually took. The first environment crash-looped on a hardcoded future version in its config; fixing the version exposed a second failure where that member's disk had been half-corrupted by the earlier attempt. I wiped just that disk, resynced it from a healthy peer, and hashed every collection across nodes before trusting it. That incident meant nothing in the next environment's config went unchecked against the live cluster either — which is exactly what caught a provisioning file claiming a 30Gi disk where the real one was 500Gi, before the migration script ever ran.
What changed. Both environments finished on the supported operator, running a current MongoDB release as a genuine multi-node replica set on proper storage. The rest of the fleet now inherits migration tooling that's already had its sharp edges found twice.
The lesson. Configuration that's been correct for years stops being trustworthy the moment automation starts acting on it.
Context. A large organisation's internal Azure estate — dozens of SQL Servers, Kubernetes split across AKS and k3s, Key Vaults and VMs across dev, pre-prod and production — needed governance and self-service tooling that matched how the operations team actually worked, not a rip-and-replace.
The constraint. The real constraint was institutional, not technical: the team's deepest fluency was in PowerShell, not Python or Terraform. Any new platform had to stay something they could read, extend and debug themselves, while still delivering a browser UI, governed access to production databases, and a move off shared passwords.
What it actually took. Azure Automation and a commercial cloud-management platform were both tried and dropped — one had no real UI story, the other meant vendor lock-in and someone else's workflow. So I built the platform up instead: a lightweight, PowerShell-native web framework, one script per browser tab sharing a common library for Azure, SQL and Key Vault access, became two internal portals. The flagship piece was an AI assistant wired in through a governed MCP server, so non-technical staff can ask plain-English questions about cloud spend instead of writing SQL — backed by a homegrown scheduler and a managed-identity agent for distributed task execution.
What changed. Routine Azure work — tagging, access audits, moving databases into elastic pools — moved from raw CLI commands run by whoever held the credentials to a self-service workflow safe enough for less-senior staff. Database auth moved from passwords to managed identities, closing a real security gap.
The lesson. Modernising an internal platform doesn't require abandoning the stack a team already knows well.
Context. PostgreSQL was being run by hand on Azure Ubuntu VMs — every install, upgrade and disk change a manual sequence, done slightly differently each time. Nothing enforced idempotency, disk paths weren't stable across reboots, and a bad version upgrade had no way back. It needed to become a platform, not a habit.
The constraint. Every operation had to be idempotent — a second run against a converged host reports zero changes — and nothing could ever touch a data or backup directory destructively. Azure adds its own trap: disk device names shift across reboots, so anything addressed by raw path is an outage waiting to happen.
What it actually took. One lifecycle operation at a time — install, upgrade, add-replica, extend-disk, backup, monitoring, security — each idempotent and safe to re-run on its own. The heaviest piece was the major-version upgrade: staged on an external disk, stale-cluster detection so a half-finished upgrade is never mistaken for a clean one, and a rollback validated against deterministic test data rather than checked by eye. Disks are addressed by LUN-persistent path and mounted by UUID, so a reboot can't silently remount the wrong one.
What changed. A manual runbook became a set of modular playbooks that install, upgrade, back up and monitor a PostgreSQL fleet with no human in the loop for the routine cases. Monitoring became a cost signal too: per-database Prometheus metrics feed a Grafana view and a PowerShell tool that turns raw usage into a per-database cost share — output as a formula rather than a fixed price, so it runs unattended on a monthly cron and whoever holds the invoice applies the numbers.
The lesson. Automating a stateful system is mostly about the failure paths, not the happy path — the upgrade nobody trusts is the one without a tested rollback.
Context. Bedrock Streaming runs the M6 Group's streaming platforms — 6play, Salto, Videoland. Audiences on a French broadcaster's platform don't arrive gradually; they arrive when a programme starts. My job was to build the capability to know, before that moment, whether the platform would hold.
The constraint. A load test that lies is worse than no load test at all — it produces confidence, and confidence is exactly what fails you at peak. The hard part was never generating load, it was generating load that resembled reality.
What we considered, and set aside. Off-the-shelf SaaS load-testing services are quick to start and expensive to scale to millions of concurrent users, with limited control over scenario shape. We built on Artillery Pro with AWS Fargate instead — more setup, but full control over scenarios and a cost curve that survived the scale we needed.
What it actually took. The technology and target architecture were chosen together with the Dev, Infra and DevOps teams. Scenarios were modelled from real usage patterns, then their execution was industrialised so a campaign became a repeatable step. Campaigns ran up to several million concurrent virtual users on AWS. Alongside, I built AWS Lambda functions for monitoring and alerting on the client-facing critical APIs.
What changed. Results went back to the product and infrastructure teams, and I followed the resulting optimisations through — a load test that produces a graph has failed, one that produces a decision has worked.
The lesson. Scale is the easy half. The difficulty is modelling honestly, and building enough trust in the numbers that teams act on them.
Context. At Orange Labs, an internal project running in production needed to move to containers and orchestration to guarantee its availability. The choice wouldn't only affect that project — it would set the reference other teams reached for next.
The constraint. Availability was the requirement, but the real constraint was durability of the decision. Picking the platform that worked for one project and broke for the next would be worse than picking the slower option.
What we compared. A self-managed Kubernetes cluster built with KubeSpray, against Red Hat OpenShift. The criteria that mattered weren't feature checklists — operational cost over time, the upgrade path, how much the existing team could actually own, and integration with the OpenStack and Flexible Engine estate already in place.
What it actually took. Building a real benchmark rather than a comparison table — running the project on both, and measuring what each cost to operate rather than what each promised. Then implementing the platform we retained, and automating the integration, test, build and deployment work around it.
What changed. The project got its availability. More usefully, the other teams got a documented decision with the reasoning attached, so the next project didn't have to redo the analysis.
The lesson. The output of a platform choice isn't the platform — it's the written argument that lets someone else trust it, or challenge it, two years later.
Context. Orange Labs had an internal DevOps community and a familiar problem: people were being taught DevOps in slide decks. What they needed was somewhere to break things safely, in real time, without waiting for anyone to provision an environment.
The constraint. Labs had to start on demand, stay isolated from each other, and survive dozens of learners hitting them at once — including the ones who would try to break them on purpose.
What it actually took. The platform was built as micro-services on Kubernetes, with separate interfaces for administrators, learners and trainers in Node.js and Angular. The interesting part was the SDK: rather than pre-provisioning environments, I built an in-house SDK that launches and manages Docker containers through an API, so a lab exists only while someone is using it and the platform's cost tracks its actual use. Availability came from auto-scaling and service checks; configuration went through configMaps, sensitive data through secrets, and the API was documented with Swagger.
What changed. The community got somewhere to practise rather than watch. I also ran the workshops around it and shared the practice with Orange's other innovation Labs — the platform and the teaching were the same job.
The lesson. The best argument for a set of practices is letting people use them for twenty minutes. Every hour spent on the platform saved several spent explaining.
I'm open to freelance missions and permanent roles — Île-de-France or remote. If you're running Kubernetes in production and something isn't working the way it should — the platform, the delivery chain, the bill, or the team's confidence in it — that's the conversation I'm interested in.