<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>OVHcloud Engineering Archives - OVHcloud Blog</title>
	<atom:link href="https://blog.ovhcloud.com/category/engineering/feed/" rel="self" type="application/rss+xml" />
	<link></link>
	<description>Innovation for Freedom</description>
	<lastBuildDate>Fri, 17 Jul 2026 13:05:56 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://blog.ovhcloud.com/wp-content/uploads/2019/07/cropped-cropped-nouveau-logo-ovh-rebranding-32x32.gif</url>
	<title>OVHcloud Engineering Archives - OVHcloud Blog</title>
	<link></link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Navigating OVHcloud  File Storage with Manila CSI (RWX) on Kubernetes clusters (MKS)</title>
		<link>https://blog.ovhcloud.com/manila-csi-ovhcloud-file-storage/</link>
		
		<dc:creator><![CDATA[Aurélie Vache]]></dc:creator>
		<pubDate>Thu, 16 Jul 2026 12:16:24 +0000</pubDate>
				<category><![CDATA[OVHcloud Engineering]]></category>
		<category><![CDATA[Tranches de Tech & Co — Tech bites]]></category>
		<category><![CDATA[File Storage]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<category><![CDATA[Public Cloud]]></category>
		<guid isPermaLink="false">https://blog.ovhcloud.com/?p=32926</guid>

					<description><![CDATA[If you run stateful applications on Kubernetes, one common challenge is providing shared persistent storage that can be accessed by [&#8230;]<img src="//blog.ovhcloud.com/wp-content/plugins/matomo/app/matomo.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Fblog.ovhcloud.com%2Fmanila-csi-ovhcloud-file-storage%2F&amp;action_name=Navigating%20OVHcloud%20%20File%20Storage%20with%20Manila%20CSI%20%28RWX%29%20on%20Kubernetes%20clusters%20%28MKS%29&amp;urlref=https%3A%2F%2Fblog.ovhcloud.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image aligncenter size-large is-resized"><img fetchpriority="high" decoding="async" width="1024" height="1022" src="https://blog.ovhcloud.com/wp-content/uploads/2026/07/hero-manila-csi-file-storage-kubernetes-1-1024x1022.png" alt="Navigating OVHcloud File Storage with Manila CSI (RWX) on Kubernetes clusters (MKS)" class="wp-image-32976" style="aspect-ratio:1.0018478908240174;width:490px;height:auto" srcset="https://blog.ovhcloud.com/wp-content/uploads/2026/07/hero-manila-csi-file-storage-kubernetes-1-1024x1022.png 1024w, https://blog.ovhcloud.com/wp-content/uploads/2026/07/hero-manila-csi-file-storage-kubernetes-1-300x300.png 300w, https://blog.ovhcloud.com/wp-content/uploads/2026/07/hero-manila-csi-file-storage-kubernetes-1-150x150.png 150w, https://blog.ovhcloud.com/wp-content/uploads/2026/07/hero-manila-csi-file-storage-kubernetes-1-768x767.png 768w, https://blog.ovhcloud.com/wp-content/uploads/2026/07/hero-manila-csi-file-storage-kubernetes-1-1536x1533.png 1536w, https://blog.ovhcloud.com/wp-content/uploads/2026/07/hero-manila-csi-file-storage-kubernetes-1-70x70.png 70w, https://blog.ovhcloud.com/wp-content/uploads/2026/07/hero-manila-csi-file-storage-kubernetes-1.png 1635w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">If you run stateful applications on Kubernetes, one common challenge is providing shared persistent storage that can be accessed by multiple workloads.</p>



<p class="wp-block-paragraph">While Kubernetes Persistent Volumes usually rely on block storage with <code>ReadWriteOnce</code> access, some applications require shared filesystem access with <code>ReadWriteMany</code> (<code>RWX</code>) capabilities.</p>



<p class="wp-block-paragraph">OVHcloud <strong>File Storage</strong> provides managed <strong>NFS shares</strong> that can be dynamically consumed by Kubernetes workloads through the <strong>Manila CSI </strong>driver.</p>



<p class="wp-block-paragraph">In this blog post, we will see how to integrate <a href="https://www.ovhcloud.com/en/public-cloud/file-storage/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">OVHcloud File Storage</a> with <a href="https://www.ovhcloud.com/en/public-cloud/kubernetes/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">OVHcloud Managed Kubernetes Service (MKS)</a> using Manila CSI and test RWX storage capabilities.</p>



<h3 class="wp-block-heading">OVHcloud File Storage</h3>



<figure class="wp-block-image aligncenter size-full"><img decoding="async" width="100" height="100" src="https://blog.ovhcloud.com/wp-content/uploads/2026/07/Public-Cloud-File-Storage@2x.png" alt="OVHcloud File Storage managed NFS shares for cloud-native Kubernetes workloads." class="wp-image-32967" srcset="https://blog.ovhcloud.com/wp-content/uploads/2026/07/Public-Cloud-File-Storage@2x.png 100w, https://blog.ovhcloud.com/wp-content/uploads/2026/07/Public-Cloud-File-Storage@2x-70x70.png 70w" sizes="(max-width: 100px) 100vw, 100px" /></figure>



<p class="wp-block-paragraph"><a href="https://www.ovhcloud.com/en/public-cloud/file-storage/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">OVHcloud Public Cloud File Storage</a> is a fully managed shared file storage service designed for cloud-native workloads running on Public Cloud instances and Kubernetes clusters.</p>



<p class="wp-block-paragraph">Built on <strong>OpenStack Manila</strong>, it provides shared <strong>NFSv3</strong> volumes that can be mounted simultaneously by multiple clients, making it an ideal solution for applications requiring <code>ReadWriteMany</code> (<code>RWX</code>) access. Volumes can be provisioned from <strong>150 GiB up to 10 TiB</strong>, with predictable, linear performance that scales with the allocated capacity.</p>



<p class="wp-block-paragraph">Because the service is fully managed, you don&#8217;t need to deploy or maintain your own NFS server. File Storage integrates with the OVHcloud platform through the Control Panel, API, CLI, Terraform provider, and Kubernetes via the <strong>Manila CSI driver</strong>, allowing shared volumes to be dynamically provisioned directly from your cluster.</p>



<h3 class="wp-block-heading">Why use Manila CSI?</h3>



<p class="wp-block-paragraph">The Kubernetes Container Storage Interface (CSI) provides a standard mechanism for exposing external storage systems to Kubernetes.</p>



<p class="wp-block-paragraph">Instead of manually creating NFS mounts and PersistentVolumes, the Manila CSI driver allows Kubernetes to dynamically create and manage file shares using Kubernetes resources such as StorageClasses (SC), PersistentVolumeClaims (PVC) and PersistentVolumes (PV).</p>



<h3 class="wp-block-heading">Prerequisites</h3>



<p class="wp-block-paragraph">Before starting, you need:</p>



<ul class="wp-block-list">
<li>An OVHcloud Public Cloud project</li>



<li>An OVHcloud Managed Kubernetes Service (MKS) cluster that is connected to a private network</li>



<li><a href="https://developer.hashicorp.com/terraform/install" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">Terraform CLI</a> installed</li>



<li><a href="https://kubernetes.io/docs/tasks/tools/#kubectl" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">kubectl CLI </a>installed</li>
</ul>



<h3 class="wp-block-heading">Deploying Manila CSI step by step: let’s do it!</h3>



<p class="wp-block-paragraph">We already have a MKS cluster, in EU-WEST-PAR region, running inside a private network and a subnet. In this blog post we will:</p>



<ul class="wp-block-list">
<li>create a <strong>Public Cloud user</strong> for the Manila CSI driver</li>



<li>install the <strong>CSI NFS driver</strong></li>



<li>install the <strong>Manila CSI driver</strong></li>



<li>deploy a <strong>Secret</strong> for Manila CSI that allows the Manila CSI driver to authenticate against OpenStack and manage Manila resources in your cluster</li>



<li>create a file shared network</li>



<li>deploy a <strong>ConfigMap</strong> to configure the Manila CSI driver</li>



<li>deploy the csi-manila-nfs <strong>StorageClass</strong> to enable the Manila CSI driver to dynamically create Manila shares and use them as Kubernetes volumes</li>
</ul>



<p class="wp-block-paragraph">We will use Terraform to deploy this architecture easily.</p>



<p class="wp-block-paragraph">Create a <strong>provider.tf </strong>file and fill it with the information:</p>



<pre class="wp-block-code"><code class="">terraform {<br>  required_providers {<br>    helm = {<br>      source = "hashicorp/helm"<br>    }<br><br>    kubectl = {<br>      source = "alekc/kubectl"<br>      version = "2.1.6"<br>    }<br><br>    ovh = {<br>      source = "ovh/ovh"<br>    }<br>  }<br>}<br><br>provider "helm" {<br>  kubernetes = {<br>    host                   = data.ovh_cloud_project_kube.mks_cluster.kubeconfig_attributes[0].host<br>    client_certificate     = base64decode(data.ovh_cloud_project_kube.mks_cluster.kubeconfig_attributes[0].client_certificate)<br>    client_key             = base64decode(data.ovh_cloud_project_kube.mks_cluster.kubeconfig_attributes[0].client_key)<br>    cluster_ca_certificate = base64decode(data.ovh_cloud_project_kube.mks_cluster.kubeconfig_attributes[0].cluster_ca_certificate)<br>  }<br>}<br><br>provider "kubectl" {<br>  host                   = data.ovh_cloud_project_kube.mks_cluster.kubeconfig_attributes[0].host<br>  client_certificate     = base64decode(data.ovh_cloud_project_kube.mks_cluster.kubeconfig_attributes[0].client_certificate)<br>  client_key             = base64decode(data.ovh_cloud_project_kube.mks_cluster.kubeconfig_attributes[0].client_key)<br>  cluster_ca_certificate = base64decode(data.ovh_cloud_project_kube.mks_cluster.kubeconfig_attributes[0].cluster_ca_certificate)<br>  load_config_file       = false<br>}</code></pre>



<p class="wp-block-paragraph">Set the environment variables, for the OVHcloud Terraform provider, with your credentials:</p>



<pre class="wp-block-code"><code class=""># OVHcloud provider needed keys<br>export OVH_ENDPOINT="ovh-eu"<br>export OVH_APPLICATION_KEY="xxx"<br>export OVH_APPLICATION_SECRET="xxx"<br>export OVH_CONSUMER_KEY="xxx"<br>export OVH_CLOUD_PROJECT_SERVICE="xxx"</code></pre>



<p class="wp-block-paragraph">Create a <strong>variables.tf.template</strong> file and fill it with these information:</p>



<pre class="wp-block-code"><code class="">variable "service_name" {<br>  default = "$OVH_CLOUD_PROJECT_SERVICE"<br>}<br><br>variable "mks_cluster_id" {<br>  default = "&lt;your_mks_cluster_id&gt;"<br>}</code></pre>



<p class="wp-block-paragraph">⚠️ In the file, replace the MKS ID with your existing MKS cluster ID information.</p>



<p class="wp-block-paragraph">Replace the value of the <strong>OVH_CLOUD_PROJECT_SERVICE</strong> environment variable in the <strong>variables.tf</strong> file:</p>



<pre class="wp-block-code"><code class="">envsubst &lt; variables.tf.template &gt; variables.tf</code></pre>



<p class="wp-block-paragraph">Create a <strong>nfs_share.tf</strong> file and fill it with these information:</p>



<pre class="wp-block-code"><code class="">data "ovh_cloud_project_kube" "mks_cluster" {<br>  service_name = var.service_name<br>  kube_id      = var.mks_cluster_id<br>}<br><br>data "ovh_cloud_network_private_vrack_subnet" "mks_cluster_subnet" {<br>  service_name = var.service_name<br>  network_id   = data.ovh_cloud_project_kube.mks_cluster.private_network_id<br>  id           = data.ovh_cloud_project_kube.mks_cluster.nodes_subnet_id<br>}<br><br># CSI Manila<br><br>module "csi_manila" {<br>  source = "git::https://github.com/ovh/public-cloud-examples.git//containers-orchestration/managed-kubernetes/install-csi-manila/modules/ovhcloud/csi_manila?ref=v1.5.0"<br><br>  service_name       = var.service_name<br>  region             = data.ovh_cloud_project_kube.mks_cluster.region<br>  share_network_name = "${data.ovh_cloud_project_kube.mks_cluster.name}-share-network"<br>  network_id         = data.ovh_cloud_project_kube.mks_cluster.private_network_id<br>  subnet_id          = data.ovh_cloud_project_kube.mks_cluster.nodes_subnet_id<br>  subnet_cidr        = data.ovh_cloud_network_private_vrack_subnet.mks_cluster_subnet.cidr<br>}<br><br>output "manila-user" {<br>  value = module.csi_manila.manila-user<br>}<br></code></pre>



<p class="wp-block-paragraph">💡In this Terraform file we are using an <a href="https://github.com/ovh/public-cloud-examples/tree/main/containers-orchestration/managed-kubernetes/install-csi-manila/modules/ovhcloud/csi_manila" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">existing <strong>csi_manila</strong> Terraform module</a> hosted in the <a href="https://github.com/ovh/public-cloud-examples/blob/main/containers-orchestration/managed-kubernetes/install-csi-manila/modules/ovhcloud/csi_manila/main.tf" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">OVHcloud Public Cloud Examples GitHub repository</a>.</p>



<p class="wp-block-paragraph">The Terraform configuration is ready. Let’s init it:</p>



<pre class="wp-block-code"><code class="">terraform init</code></pre>



<p class="wp-block-paragraph">The output should be like this:</p>



<pre class="wp-block-code"><code class="">$ terraform init<br><br>Initializing the backend...<br>Initializing modules...<br>Downloading git::https://github.com/ovh/public-cloud-examples.git?ref=v1.5.0 for csi_manila...<br>- csi_manila in .terraform/modules/csi_manila/containers-orchestration/managed-kubernetes/install-csi-manila/modules/ovhcloud/csi_manila<br>Initializing provider plugins...<br>- Reusing previous version of hashicorp/helm from the dependency lock file<br>- Reusing previous version of alekc/kubectl from the dependency lock file<br>- Reusing previous version of ovh/ovh from the dependency lock file<br>- Installing hashicorp/helm v3.2.0...<br>- Installed hashicorp/helm v3.2.0 (signed by HashiCorp)<br>- Installing alekc/kubectl v2.1.6...<br>- Installed alekc/kubectl v2.1.6 (self-signed, key ID 772FB27A86DAFCE7)<br>- Installing ovh/ovh v2.16.1...<br>- Installed ovh/ovh v2.16.1 (signed by a HashiCorp partner, key ID F56D1A6CBDAAADA5)<br>Partner and community providers are signed by their developers.<br>If you'd like to know more about provider signing, you can read about it here:<br>https://developer.hashicorp.com/terraform/cli/plugins/signing<br><br>Terraform has been successfully initialized!<br><br>You may now begin working with Terraform. Try running "terraform plan" to see<br>any changes that are required for your infrastructure. All Terraform commands<br>should now work.<br><br>If you ever set or change modules or backend configuration for Terraform,<br>rerun this command to reinitialize your working directory. If you forget, other<br>commands will detect it and remind you to do so if necessary.</code></pre>



<p class="wp-block-paragraph">Apply it:</p>



<pre class="wp-block-code"><code class="">terraform apply</code></pre>



<p class="wp-block-paragraph">The output should be like this:</p>



<pre class="wp-block-code"><code class="">$ terraform apply<br><br>data.ovh_cloud_project_kube.mks_cluster: Reading...<br>data.ovh_cloud_project_kube.mks_cluster: Read complete after 1s [id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx]<br>data.ovh_cloud_network_private_vrack_subnet.mks_cluster_subnet: Reading...<br>data.ovh_cloud_network_private_vrack_subnet.mks_cluster_subnet: Read complete after 1s [id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx]<br><br>Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:<br>  + create<br><br>Terraform will perform the following actions:<br><br>  # module.csi_manila.helm_release.csi-driver-nfs will be created<br>  + resource "helm_release" "csi-driver-nfs" {<br>      + atomic                     = false<br>      + chart                      = "csi-driver-nfs"<br>      + cleanup_on_fail            = false<br>      + create_namespace           = false<br>      + dependency_update          = false<br>      + disable_crd_hooks          = false<br>      + disable_openapi_validation = false<br>      + disable_webhooks           = false<br>      + force_update               = false<br>      + id                         = (known after apply)<br>      + lint                       = false<br>      + max_history                = 0<br>      + metadata                   = (known after apply)<br>      + name                       = "csi-driver-nfs"<br>      + namespace                  = "kube-system"<br>      + pass_credentials           = false<br>      + recreate_pods              = false<br>      + render_subchart_notes      = true<br>      + replace                    = false<br>      + repository                 = "https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts"<br>      + reset_values               = false<br>      + reuse_values               = false<br>      + set_wo                     = (write-only attribute)<br>      + skip_crds                  = false<br>      + status                     = "deployed"<br>      + take_ownership             = false<br>      + timeout                    = 300<br>      + upgrade_install            = false<br>      + verify                     = false<br>      + version                    = "4.13.4"<br>      + wait                       = true<br>      + wait_for_jobs              = false<br>    }<br><br>  # module.csi_manila.helm_release.openstack-manila-csi will be created<br>  + resource "helm_release" "openstack-manila-csi" {<br>      + atomic                     = false<br>      + chart                      = "openstack-manila-csi"<br>      + cleanup_on_fail            = false<br>      + create_namespace           = false<br>      + dependency_update          = false<br>      + disable_crd_hooks          = false<br>      + disable_openapi_validation = false<br>      + disable_webhooks           = false<br>      + force_update               = false<br>      + id                         = (known after apply)<br>      + lint                       = false<br>      + max_history                = 0<br>      + metadata                   = (known after apply)<br>      + name                       = "openstack-manila-csi"<br>      + namespace                  = "kube-system"<br>      + pass_credentials           = false<br>      + recreate_pods              = false<br>      + render_subchart_notes      = true<br>      + replace                    = false<br>      + repository                 = "https://kubernetes.github.io/cloud-provider-openstack"<br>      + reset_values               = false<br>      + reuse_values               = false<br>      + set_wo                     = (write-only attribute)<br>      + skip_crds                  = false<br>      + status                     = "deployed"<br>      + take_ownership             = false<br>      + timeout                    = 300<br>      + upgrade_install            = false<br>      + verify                     = false<br>      + version                    = "2.36.0"<br>      + wait                       = true<br>      + wait_for_jobs              = false<br>    }<br><br>  # module.csi_manila.kubectl_manifest.csi-manila-secrets will be created<br>  + resource "kubectl_manifest" "csi-manila-secrets" {<br>      + api_version             = (known after apply)<br>      + apply_only              = false<br>      + field_manager           = "kubectl"<br>      + force_conflicts         = false<br>      + force_new               = false<br>      + id                      = (known after apply)<br>      + kind                    = (known after apply)<br>      + live_manifest_incluster = (sensitive value)<br>      + live_uid                = (known after apply)<br>      + name                    = (known after apply)<br>      + namespace               = (known after apply)<br>      + server_side_apply       = false<br>      + uid                     = (known after apply)<br>      + validate_schema         = true<br>      + wait_for_rollout        = true<br>      + yaml_body               = (sensitive value)<br>      + yaml_body_parsed        = (known after apply)<br>      + yaml_incluster          = (sensitive value)<br>    }<br><br>  # module.csi_manila.kubectl_manifest.manila-runtime-configmap will be created<br>  + resource "kubectl_manifest" "manila-runtime-configmap" {<br>      + api_version             = "v1"<br>      + apply_only              = false<br>      + field_manager           = "kubectl"<br>      + force_conflicts         = false<br>      + force_new               = false<br>      + id                      = (known after apply)<br>      + kind                    = "ConfigMap"<br>      + live_manifest_incluster = (sensitive value)<br>      + live_uid                = (known after apply)<br>      + name                    = "manila-csi-runtimeconf-cm"<br>      + namespace               = "default"<br>      + server_side_apply       = false<br>      + uid                     = (known after apply)<br>      + validate_schema         = true<br>      + wait_for_rollout        = true<br>      + yaml_body               = (sensitive value)<br>      + yaml_body_parsed        = &lt;&lt;-EOT<br>            apiVersion: v1<br>            data:<br>              runtimeconfig.json: |<br>                {<br>                  "nfs": {<br>                    "matchExportLocationAddress": "10.1.0.0/16"<br>                  }<br>                }<br>            kind: ConfigMap<br>            metadata:<br>              annotations:<br>                meta.helm.sh/release-name: manila-csi<br>                meta.helm.sh/release-namespace: default<br>              labels:<br>                app.kubernetes.io/managed-by: Helm<br>              name: manila-csi-runtimeconf-cm<br>              namespace: default<br>        EOT<br>      + yaml_incluster          = (sensitive value)<br>    }<br><br>  # module.csi_manila.kubectl_manifest.storage-class will be created<br>  + resource "kubectl_manifest" "storage-class" {<br>      + api_version             = (known after apply)<br>      + apply_only              = false<br>      + field_manager           = "kubectl"<br>      + force_conflicts         = false<br>      + force_new               = false<br>      + id                      = (known after apply)<br>      + kind                    = (known after apply)<br>      + live_manifest_incluster = (sensitive value)<br>      + live_uid                = (known after apply)<br>      + name                    = (known after apply)<br>      + namespace               = (known after apply)<br>      + server_side_apply       = false<br>      + uid                     = (known after apply)<br>      + validate_schema         = true<br>      + wait_for_rollout        = true<br>      + yaml_body               = (sensitive value)<br>      + yaml_body_parsed        = (known after apply)<br>      + yaml_incluster          = (sensitive value)<br>    }<br><br>  # module.csi_manila.ovh_cloud_project_user.manila-user will be created<br>  + resource "ovh_cloud_project_user" "manila-user" {<br>      + creation_date = (known after apply)<br>      + description   = "User for the Manila CSI driver"<br>      + id            = (known after apply)<br>      + openstack_rc  = (known after apply)<br>      + password      = (sensitive value)<br>      + role_name     = "share_operator"<br>      + roles         = (known after apply)<br>      + service_name  = "xxxxxxxxxxxxxxxxxxxxx"<br>      + status        = (known after apply)<br>      + username      = (known after apply)<br>    }<br><br>  # module.csi_manila.ovh_cloud_storage_file_share_network.sharenetwork will be created<br>  + resource "ovh_cloud_storage_file_share_network" "sharenetwork" {<br>      + checksum        = (known after apply)<br>      + created_at      = (known after apply)<br>      + current_state   = (known after apply)<br>      + description     = (known after apply)<br>      + id              = (known after apply)<br>      + name            = "mks_standard_3az-share-network"<br>      + network_id      = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx"<br>      + region          = "EU-WEST-PAR"<br>      + resource_status = (known after apply)<br>      + service_name    = "xxxxxxxxxxxxxxxxxxxxx"<br>      + subnet_id       = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx"<br>      + updated_at      = (known after apply)<br>    }<br><br>Plan: 7 to add, 0 to change, 0 to destroy.<br><br>Changes to Outputs:<br>  + manila-user = (known after apply)<br><br>Do you want to perform these actions?<br>  Terraform will perform the actions described above.<br>  Only 'yes' will be accepted to approve.<br><br>  Enter a value: yes<br><br>module.csi_manila.ovh_cloud_storage_file_share_network.sharenetwork: Creating...<br>module.csi_manila.ovh_cloud_project_user.manila-user: Creating...<br>module.csi_manila.kubectl_manifest.manila-runtime-configmap: Creating...<br>module.csi_manila.kubectl_manifest.manila-runtime-configmap: Creation complete after 0s [id=/api/v1/namespaces/default/configmaps/manila-csi-runtimeconf-cm]<br>module.csi_manila.helm_release.csi-driver-nfs: Creating...<br>module.csi_manila.ovh_cloud_storage_file_share_network.sharenetwork: Still creating... [00m10s elapsed]<br>module.csi_manila.ovh_cloud_project_user.manila-user: Still creating... [00m10s elapsed]<br>module.csi_manila.ovh_cloud_storage_file_share_network.sharenetwork: Creation complete after 12s [id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx]<br>module.csi_manila.kubectl_manifest.storage-class: Creating...<br>module.csi_manila.ovh_cloud_project_user.manila-user: Creation complete after 13s [id=718526]<br>module.csi_manila.kubectl_manifest.csi-manila-secrets: Creating...<br>module.csi_manila.kubectl_manifest.csi-manila-secrets: Creation complete after 1s [id=/api/v1/namespaces/default/secrets/csi-manila-secrets]<br>...</code></pre>



<h3 class="wp-block-heading">Let&#8217;s create dynamically File Storage on Kubernetes</h3>



<p class="wp-block-paragraph">Now, in your Kubernetes cluster, create a <strong>pvc.yaml </strong>file witht this content:</p>



<pre class="wp-block-code"><code class="">apiVersion: v1<br>kind: PersistentVolumeClaim<br>metadata:<br>  name: nfs-share-fs-pvc<br>spec:<br>  accessModes:<br>    - ReadWriteMany<br>  resources:<br>    requests:<br>      storage: 150Gi<br>  storageClassName: csi-manila-nfs</code></pre>



<p class="wp-block-paragraph">Apply this Persistent Volume Claim (PVC), thanks to that Kubernetes users can request shared storage:</p>



<pre class="wp-block-code"><code class="">kubectl apply -f pvc.yaml</code></pre>



<p class="wp-block-paragraph">Check the status of the PVC:</p>



<pre class="wp-block-code"><code class="">kubectl get pvc nfs-share-fs-pvc</code></pre>



<p class="wp-block-paragraph">Wait until the status of the PVC changes to <strong>Bound</strong>.</p>



<p class="wp-block-paragraph">You should have an output like this:</p>



<pre class="wp-block-code"><code class="">$ kubectl get pvc nfs-share-fs-pvc<br><br>NAME               STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS     VOLUMEATTRIBUTESCLASS   AGE<br>nfs-share-fs-pvc   Bound    pvc-af1349b7-eb51-43ac-b0f0-94d0e8139c57   150Gi      RWX            csi-manila-nfs   &lt;unset&gt;                 3h48m</code></pre>



<p class="wp-block-paragraph">Create a <strong>deploy.yaml</strong> file and fill it with this content:</p>



<pre class="wp-block-code"><code class="">apiVersion: apps/v1<br>kind: Deployment<br>metadata:<br>  name: nginx-deployment<br>  labels:<br>    app: nginx<br>spec:<br>  replicas: 1<br>  selector:<br>    matchLabels:<br>      app: nginx<br>  template:<br>    metadata:<br>      labels:<br>        app: nginx<br>    spec:<br>      volumes:<br>      - name: nfs-share-fs-pvc<br>        persistentVolumeClaim:<br>          claimName: nfs-share-fs-pvc<br>      containers:<br>      - name: nginx<br>        image: nginx<br>        ports:<br>          - containerPort: 80<br>            name: "http-server"<br>        volumeMounts:<br>          - mountPath: "/usr/share/nginx/html"<br>            name: nfs-share-fs-pvc</code></pre>



<p class="wp-block-paragraph">Apply this deployment with one pod that has a volume attached to nfs-share-fs-pvc:</p>



<pre class="wp-block-code"><code class="">kubectl apply -f deploy.yaml</code></pre>



<p class="wp-block-paragraph">Verify that the pod is running:</p>



<pre class="wp-block-code"><code class="">kubectl get pod</code></pre>



<p class="wp-block-paragraph">You should have an output like this:</p>



<pre class="wp-block-code"><code class="">$ kubectl get pod<br>NAME                                READY   STATUS    RESTARTS   AGE<br>nginx-deployment-6cbf9b898c-svpzf   1/1     Running   0          6m</code></pre>



<p class="wp-block-paragraph">Verify that you can scale the deployment (multi-attach volume):</p>



<pre class="wp-block-code"><code class="">kubectl scale deploy/nginx-deployment --replicas=2</code></pre>



<p class="wp-block-paragraph">Check another pod is running:</p>



<pre class="wp-block-code"><code class="">kubectl get pod</code></pre>



<p class="wp-block-paragraph">You should have an output like this:</p>



<pre class="wp-block-code"><code class="">$ kubectl get pod<br><br>NAME                                READY   STATUS    RESTARTS   AGE<br>nginx-deployment-6cbf9b898c-867bq   1/1     Running   0          3m<br>nginx-deployment-6cbf9b898c-svpzf   1/1     Running   0          9m</code></pre>



<p class="wp-block-paragraph">To verify RWX functionality, connect to one pod and create a file in the mounted directory (e.g., /usr/share/nginx/html).</p>



<pre class="wp-block-code"><code class="">MY_POD=$(kubectl get po -o name | sed -n '1p')<br>echo $MY_POD<br><br>#Create a file in the pod number 1<br>kubectl exec $MY_POD -it -- touch /usr/share/nginx/html/index.html</code></pre>



<p class="wp-block-paragraph">Then connect to the second pod and confirm the file is visible:</p>



<pre class="wp-block-code"><code class="">MY_POD_2=$(kubectl get po -o name | sed -n '2p')<br>echo $MY_POD_2<br><br>#Display it in the pod number two<br>kubectl exec $MY_POD_2 -it -- ls -alrt /usr/share/nginx/html/</code></pre>



<p class="wp-block-paragraph">You should have an output like this:</p>



<pre class="wp-block-code"><code class="">$ kubectl exec $MY_POD_2 -it -- ls -alrt /usr/share/nginx/html/<br><br>total 24<br>drwxr-xr-x 3 root root  4096 Jul 14 01:22 ..<br>drwx------ 2 root root 16384 Jul 15 09:18 lost+found<br>drwxrwxrwx 3 root root  4096 Jul 15 09:32 .<br>-rw-r--r-- 1 root root     0 Jul 15 13:09 index.html</code></pre>



<p class="wp-block-paragraph">Now your Manila share exposed through NFS is functioning the way you want! 🎉</p>



<h3 class="wp-block-heading">Conclusion</h3>



<p class="wp-block-paragraph">In this blog post we showed that using Manila CSI with OVHcloud File Storage makes it possible to provide Kubernetes applications with dynamically provisioned shared storage.</p>



<p class="wp-block-paragraph">We recommend you also take a look at our <a href="https://github.com/orgs/ovh/projects/16" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external">Cloud Roadmap &amp; Changelog</a> for an overview of all the coming features for OVHcloud Public Cloud products.</p>
<img decoding="async" src="//blog.ovhcloud.com/wp-content/plugins/matomo/app/matomo.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Fblog.ovhcloud.com%2Fmanila-csi-ovhcloud-file-storage%2F&amp;action_name=Navigating%20OVHcloud%20%20File%20Storage%20with%20Manila%20CSI%20%28RWX%29%20on%20Kubernetes%20clusters%20%28MKS%29&amp;urlref=https%3A%2F%2Fblog.ovhcloud.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>The architecture of blockchain explained: how proof of stake works</title>
		<link>https://blog.ovhcloud.com/blockchain-architecture-proof-stake/</link>
		
		<dc:creator><![CDATA[Elena Luoto,&nbsp;Omar Abi Issa&nbsp;and&nbsp;Adnan Patka]]></dc:creator>
		<pubDate>Sun, 12 Jul 2026 22:00:00 +0000</pubDate>
				<category><![CDATA[OVHcloud Engineering]]></category>
		<category><![CDATA[Blockchain]]></category>
		<category><![CDATA[OVHcloud]]></category>
		<guid isPermaLink="false">https://blog.ovhcloud.com/?p=32869</guid>

					<description><![CDATA[When people talk about blockchain, they are usually talking about the visible parts: cryptocurrencies, wallets, tokens, or applications built on [&#8230;]<img src="//blog.ovhcloud.com/wp-content/plugins/matomo/app/matomo.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Fblog.ovhcloud.com%2Fblockchain-architecture-proof-stake%2F&amp;action_name=The%20architecture%20of%20blockchain%20explained%3A%20how%20proof%20of%20stake%20works&amp;urlref=https%3A%2F%2Fblog.ovhcloud.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="683" src="https://blog.ovhcloud.com/wp-content/uploads/2026/07/blockchain4v2-1024x683.png" alt="block chain architecture" class="wp-image-32876" srcset="https://blog.ovhcloud.com/wp-content/uploads/2026/07/blockchain4v2-1024x683.png 1024w, https://blog.ovhcloud.com/wp-content/uploads/2026/07/blockchain4v2-300x200.png 300w, https://blog.ovhcloud.com/wp-content/uploads/2026/07/blockchain4v2-768x512.png 768w, https://blog.ovhcloud.com/wp-content/uploads/2026/07/blockchain4v2.png 1536w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">When people talk about blockchain, they are usually talking about the visible parts: cryptocurrencies, wallets, tokens, or applications built on top. But underneath all of that sits the whole architecture that makes the system work.</p>



<p class="wp-block-paragraph">Like any structure, the underlying architecture matters. In blockchain, the structure determines how transactions move through the network, how they are validated, how the ledger stays synchronised, and why some blockchains can process payments or smart contracts much more efficiently than others.</p>



<p class="wp-block-paragraph">In this article, we will take a look “behind the scenes” of the intricacy of a typical blockchain architecture built around a <strong>proof of stake</strong> consensus mechanism. We will also look at why <strong>Layer 2</strong> networks exist, and how rollups help blockchains scale without simply pushing all activity through the main chain. But let’s begin at the beginning.</p>



<h2 class="wp-block-heading"><strong>We start with the user</strong></h2>



<p class="wp-block-paragraph">Every blockchain transaction begins with a <strong>user</strong> and an <strong>application</strong>.</p>



<p class="wp-block-paragraph">The application might be a wallet, a decentralised finance platform, a marketplace, or another decentralised app. The user signs the <strong>transaction</strong> with their private key, which proves that they are authorised to move assets or trigger a smart contract action.</p>



<p class="wp-block-paragraph">At this stage, nothing has yet been added to the blockchain itself. The transaction is simply a request: “I want to send these funds,” or “I want to interact with this application.”</p>



<p class="wp-block-paragraph">The next step is getting that request into the network.</p>



<h2 class="wp-block-heading"><strong>The role of RPC nodes and the gateway layer</strong></h2>



<p class="wp-block-paragraph">Like all networks, traffic and requests go through several different stages before they are completed. Most users do not connect directly to the deepest parts of a blockchain network. Instead, transactions are usually submitted through an <strong>RPC node </strong>— short for <strong>remote procedure call</strong> node.</p>



<p class="wp-block-paragraph">Think of the RPC node as an access point, or a gateway that will get you there. It receives requests from wallets, apps, and developer tools, and passes them into the blockchain system. In high-traffic environments, this layer may also include load balancers, proxies, or caching systems to help distribute demand and keep services responsive.</p>



<p class="wp-block-paragraph">This matters because blockchain networks are not just ledgers. They are also<em> live digital systems </em>that need to handle large volumes of incoming activity. If the access layer is poorly designed, the user experience will suffer long before validation even begins.</p>



<p class="wp-block-paragraph">Once the transaction has entered the network through this gateway layer, it moves on, closer to the validation process.</p>



<h2 class="wp-block-heading"><strong>The mempool: the “waiting room” for transactions</strong></h2>



<p class="wp-block-paragraph">After passing through the access layer, the transaction usually enters the <strong>mempool</strong>, or transaction pool.</p>



<p class="wp-block-paragraph">The mempool is essentially a waiting area for transactions that have been submitted, but not yet finalised. The network checks that the request is valid in basic ways: that the signature is correct, that the sender has the required funds, and that the transaction format meets the network’s rules.</p>



<p class="wp-block-paragraph">At this stage, the transaction has been submitted to the network, <em>but it is not yet officially part of the blockchain. </em>It is waiting in a queue until validators choose it, place it in the right order with other transactions, and add it to a block.</p>



<p class="wp-block-paragraph">This matters because a transaction can be visible to the network before it is fully confirmed. In other words, the network can see that the transaction exists before it becomes a permanent part of the shared ledger.</p>



<h2 class="wp-block-heading"><strong>How proof of stake validation works</strong></h2>



<p class="wp-block-paragraph">Ready? This is where <strong>proof of stake</strong> comes in. The most important part of any <a href="https://www.ovhcloud.com/en/blockchain/" type="link" id="https://www.ovhcloud.com/en/blockchain/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">blockchain networ</a>k is validation, which checks the transaction ahead of being incorporated into the block.</p>



<p class="wp-block-paragraph">In a proof of stake blockchain, the network does not rely on miners solving complex mathematical puzzles, as happens in proof of work systems. Instead, validation is handled by <strong>validators</strong>: participants who lock up a stake in the network, check the transaction, and are then rewarded for helping to secure it.</p>



<p class="wp-block-paragraph">When transactions are ready to move forward, validators play a role in checking them and helping the network agree on what should be added next. A block proposer assembles valid transactions into a block, and other validators help confirm that this proposed block is legitimate.</p>



<p class="wp-block-paragraph">The precise mechanics vary between networks, but the broad idea is the same: the chain moves forward because the network reaches consensus on the next valid state of the ledger.</p>



<p class="wp-block-paragraph">This process is far more computationally lightweight than proof of work. Why is this useful? Because <em>proof of stake is generally more energy-efficient than proof of work</em>, and it is often better suited to blockchains that need higher throughput and lower latency. That efficiency is attractive to many enterprises.</p>



<h2 class="wp-block-heading"><strong>From execution to block creation</strong></h2>



<p class="wp-block-paragraph">Once a transaction has been selected, the network has to do more than simply store it. It must also process what that transaction means.</p>



<p class="wp-block-paragraph">For a simple transfer, that may just mean moving a balance from one wallet to another. For a smart contract interaction, it may involve executing code. In Ethereum-based environments, for example, this happens through the <strong>Ethereum Virtual Machine</strong>, or <strong>EVM</strong>.</p>



<p class="wp-block-paragraph">This execution layer matters because blockchains are not static databases. They are state machines. Every new valid transaction changes the state of the network, and the system must determine exactly what that new state is.</p>



<p class="wp-block-paragraph">After execution, the transaction is incorporated into a block. That block is then proposed, validated, and distributed across the network.</p>



<p class="wp-block-paragraph">Once consensus is reached, the block is added to the chain. <em>The transaction is now confirmed as part of the shared ledger.</em></p>



<h2 class="wp-block-heading"><strong>Full nodes, propagation and the distributed ledger</strong></h2>



<p class="wp-block-paragraph">Let’s move on. After a block is accepted, it does not stay in one place. It is propagated across the peer-to-peer network so that the blockchain remains synchronised.</p>



<p class="wp-block-paragraph">This is where <strong>full nodes</strong> play an important role. Full nodes store the blockchain’s history and verify the validity of blocks and transactions. Together, they help maintain the integrity of the distributed ledger.</p>



<p class="wp-block-paragraph">That distributed structure is a core part of blockchain’s appeal. <em>Instead of one central authority updating one private database, many participants maintain and verify the ledger together. That is what gives blockchain its combination of transparency, resilience, and decentralisation.</em></p>



<h2 class="wp-block-heading"><strong>Why Layer 2 exists</strong></h2>



<p class="wp-block-paragraph">So far, this all sounds logical. But it also raises a problem — read on.</p>



<p class="wp-block-paragraph">If every transaction has to move through the main chain, validated and recorded in the same shared environment, what happens when activity explodes?</p>



<p class="wp-block-paragraph">What happens is congestion.</p>



<p class="wp-block-paragraph">Layer 1 blockchains are powerful, but they are not infinitely scalable. If too many low-value or high-frequency transactions compete for space on the main chain, speed can drop and costs can rise.</p>



<p class="wp-block-paragraph">This is why <strong>Layer 2</strong> networks have become so important.</p>



<p class="wp-block-paragraph">Layer 2 sits above the main blockchain and handles part of the workload elsewhere, while still ultimately relying on the security of the Layer 1 chain.</p>



<p class="wp-block-paragraph">In practical terms, this means that large volumes of activity can happen off the main chain, with results later passed back and settled on Layer 1.</p>



<h2 class="wp-block-heading"><strong>How rollups work</strong></h2>



<p class="wp-block-paragraph">If you’ve gotten this far, you’re doing well. Now it’s time to learn about one of the most important Layer 2 approaches: the <strong>rollup.</strong></p>



<p class="wp-block-paragraph">A rollup gathers many transactions together, processes them off the main chain, and then submits the result back to Layer 1 as a bundled update. This reduces pressure on the main blockchain and helps improve throughput. These transactions have to be verified as well, but when they are smaller transactions, networks can be less rigorous about verification. However, there are still processes involved, and</p>



<p class="wp-block-paragraph">There are two major trust models here.</p>



<p class="wp-block-paragraph"><strong>Optimistic rollups</strong> assume that submitted transactions are valid unless challenged. This makes them fast and efficient, but it also means there is usually a contest period during which invalid transactions can be disputed.</p>



<p class="wp-block-paragraph"><strong>Zero-knowledge rollups</strong>, often called <strong>ZK rollups</strong>, use cryptographic proofs to demonstrate that the transactions are valid without revealing all of their underlying details. This can provide strong efficiency and privacy benefits, while reducing the need for long challenge periods.</p>



<p class="wp-block-paragraph">Once the transaction has been verified in this way, it is incorporated into a block with many other smaller transactions, and passed back to the Layer 1 blockchain.</p>



<p class="wp-block-paragraph">Both optimistic and ZK models aim to answer the same question: <em>how do you scale blockchain activity without abandoning trust?</em></p>



<p class="wp-block-paragraph">That is the real architectural challenge. Layer 2 systems are not simply shortcuts. They are engineering responses to the limits of Layer 1.</p>



<h2 class="wp-block-heading"><strong>Why blockchain architecture matters</strong></h2>



<p class="wp-block-paragraph">It is easy to think of blockchain as a single thing, but in reality it is a stack of interacting layers — a structural foundation.</p>



<p class="wp-block-paragraph">First, there is the user-facing application. The gateway layer that receives transactions. Then the mempool that holds them. The validator layer that checks and orders them. The execution environment that updates the state of the chain. The full nodes that preserve and distribute the ledger. And, increasingly, the Layer 2 systems that help the whole model scale.</p>



<p class="wp-block-paragraph">Understanding that architecture helps explain why blockchain performance depends on more than the chain alone. It depends on networking, validation design, software layers, and the infrastructure choices all working together.</p>



<p class="wp-block-paragraph">That is also why blockchain architecture is now such an important topic for builders, operators, and IT leaders alike. The question is no longer simply “what is blockchain?” — it is “how does this system actually work at scale?”</p>



<p class="wp-block-paragraph">And the answer lies in the masterful architecture behind it.</p>
<img loading="lazy" decoding="async" src="//blog.ovhcloud.com/wp-content/plugins/matomo/app/matomo.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Fblog.ovhcloud.com%2Fblockchain-architecture-proof-stake%2F&amp;action_name=The%20architecture%20of%20blockchain%20explained%3A%20how%20proof%20of%20stake%20works&amp;urlref=https%3A%2F%2Fblog.ovhcloud.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Object  Storage : 10 ans d’évolution, de l’évolutivité à la résilience</title>
		<link>https://blog.ovhcloud.com/object-storage-evolution-resilience-fr/</link>
		
		<dc:creator><![CDATA[Rémy Vandepoel]]></dc:creator>
		<pubDate>Tue, 07 Jul 2026 06:56:39 +0000</pubDate>
				<category><![CDATA[OVHcloud en Français]]></category>
		<category><![CDATA[OVHcloud Engineering]]></category>
		<category><![CDATA[OVHcloud Product News]]></category>
		<category><![CDATA[OVHcloud]]></category>
		<guid isPermaLink="false">https://blog.ovhcloud.com/?p=32752</guid>

					<description><![CDATA[Introduction Dans une nouvelle session Twitch #VeryTechTalk, Rémy (Tech Evangelist) a invité Antonin (Product Manager) et Édouard (IT Team Leader) [&#8230;]<img src="//blog.ovhcloud.com/wp-content/plugins/matomo/app/matomo.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Fblog.ovhcloud.com%2Fobject-storage-evolution-resilience-fr%2F&amp;action_name=Object%E2%80%AF%20Storage%20%3A%2010%C2%A0ans%20d%E2%80%99%C3%A9volution%2C%20de%20l%E2%80%99%C3%A9volutivit%C3%A9%20%C3%A0%20la%20r%C3%A9silience&amp;urlref=https%3A%2F%2Fblog.ovhcloud.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="538" src="https://blog.ovhcloud.com/wp-content/uploads/2026/07/object-storage-10-ans-evolution-hero-1024x538.png" alt="Object storage 10 years of evolution" class="wp-image-32744" srcset="https://blog.ovhcloud.com/wp-content/uploads/2026/07/object-storage-10-ans-evolution-hero-1024x538.png 1024w, https://blog.ovhcloud.com/wp-content/uploads/2026/07/object-storage-10-ans-evolution-hero-300x158.png 300w, https://blog.ovhcloud.com/wp-content/uploads/2026/07/object-storage-10-ans-evolution-hero-768x403.png 768w, https://blog.ovhcloud.com/wp-content/uploads/2026/07/object-storage-10-ans-evolution-hero.png 1200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">Introduction</h2>



<p class="wp-block-paragraph">Dans une nouvelle session Twitch #VeryTechTalk, Rémy (Tech Evangelist) a invité Antonin (Product Manager) et Édouard (IT Team Leader) pour décortiquer la solution Object Storage d’OVHcloud.</p>



<p class="wp-block-paragraph">Au fil de la discussion, ils ont revisité les débuts du service, expliqué comment il a été repensé autour d&#8217;une compatibilité S3, détaillé les mécanismes de résilience et présenté les nouvelles fonctionnalités à venir dans les prochains mois. Cet article de blog reprend les points clés de cette discussion pour vous donner des perspectives sur cette technologie et, qui sait, vous donner envie de la tester&nbsp;!</p>



<h2 class="wp-block-heading">L&#8217;historique du projet</h2>



<p class="wp-block-paragraph">En 2014, OVH proposait HubiC, une offre grand public reposant sur du stockage de fichiers (NAS) accessible via WebDAV. Le modèle fonctionnait tant que les volumes restaient modestes, mais dès que les téraoctets ont commencé à affluer, l’équipe a compris que la mise à l&#8217;échelle était limitée.</p>



<p class="wp-block-paragraph">La solution a alors basculé vers <strong>OpenStack Swift</strong>, la brique objet du projet <strong>OpenStack</strong>. Celle-ci a permis de mettre à disposition des clientes et clients une offre d&#8217;Object Storage et de gérer les objets à l’échelle du cloud.</p>



<p class="wp-block-paragraph">En 2020, OVHcloud a racheté <strong>OpenIO</strong>, une startup déjà experte du stockage compatible S3. Cette acquisition a été le catalyseur du projet.</p>



<p class="wp-block-paragraph">OpenStack Swift a été conservé pour les usages historiques et une offre compatible S3 a pu voir le jour afin de répondre aux exigences du marché (ex. outils, CI/CD, IA). La première classe compatible S3 a été mise à disposition un an et demi après le rachat, puis d’autres classes (infrequent‑access, hyper‑performance) ont suivi, créant un <strong>portfolio multiclasse</strong>.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>«&nbsp;Il est primordial d’accélérer le développement de cette API &nbsp;: les outils S3 sont devenus le standard de facto&nbsp;» <em>– Antonin</em></strong></p>
</blockquote>



<p class="wp-block-paragraph">Le but était de transformer l’Object Storage en une offre <strong>générique</strong> (multi-usages) capable de couvrir les backups classiques, les workloads de machine learning, les archives légales…<br></p>



<p class="wp-block-paragraph">Aujourd’hui, le service se positionne comme le point d’ancrage de nombreuses solutions internes&nbsp;: images d’instances, Logs Data Platform, stockage de logs, etc.</p>



<h2 class="wp-block-heading">Architecture et évolutivité : un «&nbsp;infini&nbsp;» virtuel</h2>



<p class="wp-block-paragraph">L’équipe gère <strong>des centaines de milliers de disques</strong> répartis dans les datacenters d’OVHcloud. Cette densité permet de proposer une évolutivité quasi‑infinie. Un des points forts, ainsi qu&#8217;une volonté d&#8217;OVHcloud, est que l’utilisatrice ou l’utilisateur ne voit jamais le moment où un disque est ajouté ou remplacé, aucune interruption n’est perceptible.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>«&nbsp;L’évolution doit être la plus transparente possible. L’utilisatrice ou l’utilisateur ne doit jamais voir un « drop » pendant l’ajout d’un disque.&nbsp;» – Édouard</strong></p>
</blockquote>



<p class="wp-block-paragraph">Toutefois, cette quasi-infinité concernant le volume doit être encadrée, renforcée et tolérante à la panne de certains de ses éléments tout en continuant de fournir un service.<br></p>



<p class="wp-block-paragraph">Plutôt que de se contenter de copier les données, le service découpe chaque objet en plusieurs fragments et ajoute des <strong>chunks de parité</strong> (Erasure Coding). Si une panne survenait sur un disque, un rack ou sur un datacenter entier dans le cas d&#8217;un <a href="https://help.ovhcloud.com/csm/de-public-cloud-storage-s3-deployments-modes?id=kb_article_view&amp;sysparm_article=KB0065337" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer"><u>stockage 3-AZ</u></a>. Les fragments restants permettent de reconstruire le fichier original sans perte. C&#8217;est l’un des points forts d&#8217;Object Storage.</p>



<p class="wp-block-paragraph">Dans le cadre du service, OVHcloud assure la&nbsp;<strong>durabilité</strong> (les données restent intactes) et la <strong>disponibilité</strong> (accès en permanence) des données. La clientèle, quant à elle, choisit le niveau de résilience &nbsp;: nombre de copies, réplication asynchrone, versionning, object‑lock…<br></p>



<p class="wp-block-paragraph">Cette granularité permet d’ajuster le coût au niveau de criticité des données.</p>



<ul class="wp-block-list">
<li>Durabilité&nbsp;: les données restent intactes grâce à l’Erasure Coding et à la réplication multisite.</li>



<li>Disponibilité&nbsp;: l’accès aux objets est garanti même lorsqu’une zone de disponibilité (AZ) tombe en panne.</li>
</ul>



<h2 class="wp-block-heading">Performance et métriques clés</h2>



<p class="wp-block-paragraph">Dans une infrastructure de cette taille, il existe de nombreuses métriques qu&#8217;il est possible d&#8217;analyser. Certaines attirent toutefois davantage l&#8217;attention des équipes opérationnelles. Édouard nous en détaille trois, qui peuvent également être monitorées si vous possédez une infrastructure dans laquelle vous gérez une plateforme de stockage par vous-même.</p>



<h3 class="wp-block-heading">Le taux d’erreur, premier signal d’alerte</h3>



<p class="wp-block-paragraph">Le <strong>taux d’erreur</strong> (500/503) est le premier indicateur de santé du service.</p>



<p class="wp-block-paragraph">Un pic déclenche immédiatement les mécanismes de retry intégrés aux SDK, de façon transparente pour l’utilisateur ou l’utilisatrice. Ces tentatives successives sont effectuées côté client pour s&#8217;assurer que la lecture (ou l&#8217;écriture) se déroule dans de bonnes conditions.</p>



<h3 class="wp-block-heading">Time‑to‑First‑Byte (TTFB)&nbsp;: le vrai baromètre de latence</h3>



<p class="wp-block-paragraph">Le <strong>TTFB</strong> mesure le temps nécessaire pour délivrer le premier octet, quel que soit le poids du fichier.</p>



<p class="wp-block-paragraph">Une hausse du TTFB signale souvent une saturation ou un incident dans l’infrastructure. L’équipe surveille ce KPI en temps réel pour anticiper les anomalies. Il s’agit d’un indicateur fort en interne pour la performance et la santé de la plateforme.</p>



<h3 class="wp-block-heading">IOPS versus capacité disque</h3>



<p class="wp-block-paragraph">Depuis quelques années, les capacités des disques continuent de croître, mais les <strong>IOPS</strong> restent relativement stables.</p>



<p class="wp-block-paragraph">Cette évolution crée un <strong>IOPS/To</strong> décroissant, d&#8217;où la nécessité de garder ces métriques sous supervision afin d&#8217;anticiper un possible engorgement.</p>



<h2 class="wp-block-heading">Cas d’usage concrets</h2>



<h3 class="wp-block-heading">Cas n°1&nbsp;: sauvegarde et archivage</h3>



<p class="wp-block-paragraph">Les clientes et clients peuvent effectuer leurs sauvegardes directement dans un bucket, profiter du versionning et de l’object‑lock, puis restaurer les données en quelques clics. L’archivage sur bande, proposé depuis 2025, offre un coût de 1‑2&nbsp;€/To avec un <em>TTFB</em> de l’ordre de l’heure, idéal pour les obligations légales de conservation à long terme.</p>



<ul class="wp-block-list">
<li><strong>Versionning</strong> : chaque modification crée une nouvelle version, protégeant de la perte causée par les suppressions accidentelles.</li>



<li><strong>Object Lock (immutabilité)</strong>&nbsp;: écriture unique, lecture illimitée ; idéal contre les ransomwares.</li>
</ul>



<h3 class="wp-block-heading">Cas n°2&nbsp;: big data et IA</h3>



<p class="wp-block-paragraph">Les volumes massifs nécessaires à l’entraînement de modèles de machine learning sont stockés en «&nbsp;cold &nbsp;» sur l’Object Storage, puis déplacés vers les clusters de calcul lorsqu’ils sont requis.</p>



<h3 class="wp-block-heading">Cas n°3&nbsp;: services internes d’OVHcloud</h3>



<p class="wp-block-paragraph">Les usages d’Object Storage se démocratisent. Il est normal et nécessaire que les produits OVHcloud aussi tirent parti des bénéfices apportés par cette technologie.</p>



<p class="wp-block-paragraph">En effet, de nombreux services s’appuient sur elle&nbsp;: images d’instances, logs de la Logs Data Platform, stockage de données froides, etc.</p>



<h2 class="wp-block-heading">Feuille de route et innovations à venir</h2>



<h3 class="wp-block-heading">Object Storage 2.0</h3>



<p class="wp-block-paragraph">Un&nbsp;<strong>backend refondu</strong> (nom de code <em>Object Storage 2.0</em>) est en phase de <a href="https://labs.ovhcloud.com/en/future-object-storage" type="link" id="https://labs.ovhcloud.com/en/future-object-storage" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">bêta privée</a>. L’objectif est supprimer les soft limits actuelles, réduire le TTFB au minimum et offrir des performances supérieures pour les cas d&#8217;usage client à forte granularité (milliers de petits fichiers).</p>



<h3 class="wp-block-heading">Transparence via la feuille de route publique</h3>



<p class="wp-block-paragraph">Toutes les évolutions sont publiées sur le <a href="https://github.com/orgs/ovh/projects/16/views/1?sliceBy%5Bvalue%5D=Public+Cloud+Storage" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer"><u>OVHcloud GitHub</u></a>. Les utilisateurs et utilisatrices peuvent suivre les tickets, laisser des commentaires et s’inscrire aux versions bêta via le serveur <a href="https://discord.gg/ovhcloud" type="link" id="https://discord.gg/ovhcloud" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">Discord dédié</a>.</p>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">L’OVHcloud Object Storage a parcouru un long chemin et est désormais une plateforme multiclasse, capable de gérer des centaines de milliers de disques tout en offrant une résilience de niveau entreprise. L’intégration d’OpenIO a permis d’ajouter une API compatible S3, répondant aux exigences d’interopérabilité du marché. Grâce à l’Erasure Coding, au versionning, à l’object‑lock et aux options de réplication, chaque cliente et client peut ajuster la durabilité et la disponibilité de ses données à son propre coût.</p>



<p class="wp-block-paragraph"><strong>Vous avez un projet cloud native ou avez besoin de sauvegarde à grande échelle&nbsp;?</strong>estez dès maintenant l’<a href="https://www.ovhcloud.com/fr/public-cloud/object-storage/]" type="link" id="https://www.ovhcloud.com/fr/public-cloud/object-storage/]" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">Object Storage d’OVHcloud</a><a href="https://www.ovhcloud.com/fr/public-cloud/object-storage/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">, </a>explorez les différentes stratégies de résilience et partagez vos retours : la communauté technique grandit grâce à vos expériences.</p>



<p class="wp-block-paragraph"><em><em>Vous avez aimé cet article&nbsp;? La vidéo dont il est extrait est accessible sur notre chaîne Youtube, ici&nbsp;:</em></em> <a href="https://www.youtube.com/watch?v=KmS0YhjuYZc" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external">https://www.youtube.com/watch?v=KmS0YhjuYZc</a></p>
<img loading="lazy" decoding="async" src="//blog.ovhcloud.com/wp-content/plugins/matomo/app/matomo.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Fblog.ovhcloud.com%2Fobject-storage-evolution-resilience-fr%2F&amp;action_name=Object%E2%80%AF%20Storage%20%3A%2010%C2%A0ans%20d%E2%80%99%C3%A9volution%2C%20de%20l%E2%80%99%C3%A9volutivit%C3%A9%20%C3%A0%20la%20r%C3%A9silience&amp;urlref=https%3A%2F%2Fblog.ovhcloud.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Object Storage: 10 years on, from scalability to resilience</title>
		<link>https://blog.ovhcloud.com/object-storage-scalability-resilience/</link>
		
		<dc:creator><![CDATA[Rémy Vandepoel]]></dc:creator>
		<pubDate>Tue, 07 Jul 2026 06:56:16 +0000</pubDate>
				<category><![CDATA[OVHcloud Engineering]]></category>
		<category><![CDATA[OVHcloud Product News]]></category>
		<category><![CDATA[OVHcloud]]></category>
		<guid isPermaLink="false">https://blog.ovhcloud.com/?p=32743</guid>

					<description><![CDATA[Introduction In a new #VeryTechTalk session on Twitch, Rémy (Tech Evangelist), was joined by Antonin (Product Manager) and Édouard (IT [&#8230;]<img src="//blog.ovhcloud.com/wp-content/plugins/matomo/app/matomo.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Fblog.ovhcloud.com%2Fobject-storage-scalability-resilience%2F&amp;action_name=Object%20Storage%3A%2010%20years%20on%2C%20from%20scalability%20to%20resilience&amp;urlref=https%3A%2F%2Fblog.ovhcloud.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="538" src="https://blog.ovhcloud.com/wp-content/uploads/2026/07/object-storage-10-ans-evolution-hero-1024x538.png" alt="Object storage 10 years of evolution" class="wp-image-32744" srcset="https://blog.ovhcloud.com/wp-content/uploads/2026/07/object-storage-10-ans-evolution-hero-1024x538.png 1024w, https://blog.ovhcloud.com/wp-content/uploads/2026/07/object-storage-10-ans-evolution-hero-300x158.png 300w, https://blog.ovhcloud.com/wp-content/uploads/2026/07/object-storage-10-ans-evolution-hero-768x403.png 768w, https://blog.ovhcloud.com/wp-content/uploads/2026/07/object-storage-10-ans-evolution-hero.png 1200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">Introduction</h2>



<p class="wp-block-paragraph">In a new #VeryTechTalk session on Twitch, Rémy (Tech Evangelist), was joined by Antonin (Product Manager) and Édouard (IT Team Leader) to unpack OVHcloud’s Object Storage solution.</p>



<p class="wp-block-paragraph">They chatted about the service’s early days, how it was redesigned to work with S3, its resilience features, and upcoming additions. This blog post rounds up the key points from the chat to give you a fresh take on this technology, and maybe even make you curious enough to try it for yourself.</p>



<h2 class="wp-block-heading">How the project started</h2>



<p class="wp-block-paragraph">In 2014, OVHcloud launched HubiC, a consumer service based on File Storage (NAS) and accessible via WebDAV. The model was fine with small amounts of data, but when the terabytes started pouring in, the team realised it couldn’t scale enough to keep up.</p>



<p class="wp-block-paragraph">The solution was then moved to OpenStack Swift, one of OpenStack’s core building blocks. As a result, customers got an Object Storage service that could manage objects at cloud scale.</p>



<p class="wp-block-paragraph">In 2020, OVHcloud acquired OpenIO, a startup known for its expertise in S3-compatible storage, which set the project in motion.</p>



<p class="wp-block-paragraph">We kept OpenStack Swift for legacy uses, but launched an S3-compatible service for modern needs like tools, CI/CD, and AI. About a year and a half after the acquisition, the first S3-compatible class launched, followed by others (infrequent-access and hyper-performance), forming a Multiclass Portfolio.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em><strong>“We need to build this API quickly as S3 tools are now the go-to standard” – Antonin</strong></em></p>
</blockquote>



<p class="wp-block-paragraph">We wanted to make Object Storage a multi-purpose service, covering everything from classic backups and machine learning workloads to legal archives.</p>



<p class="wp-block-paragraph">Today, the service acts as the anchor point for many in-house solutions: instance images, Logs Data Platform, log storage, etc.</p>



<h2 class="wp-block-heading">Architecture and scalability: virtually limitless</h2>



<p class="wp-block-paragraph">The team manages hundreds of thousands of disks, spread across OVHcloud datacentres, which allow for near-limitless scalability. A big plus, and one of OVHcloud’s goals, is that users don’t notice when a disk is added or swapped out – meaning no downtime.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em><strong>“Scaling should be as transparent as possible. When adding a disc, users shouldn’t notice any drop in performance.” – Édouard</strong></em></p>
</blockquote>



<p class="wp-block-paragraph">Even so, this near-limitless volume should be kept in check, enhanced and able to handle some failures while still delivering service.</p>



<p class="wp-block-paragraph">Rather than simply copying the data, the service splits each object into chunks and adds parity chunks (erasure coding). In the case of <a href="https://help.ovhcloud.com/csm/de-public-cloud-storage-s3-deployments-modes?id=kb_article_view&amp;sysparm_article=KB0065337" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer"><u>3-AZ storage</u></a> deployments, if a disk, rack, or an entire datacentre fails, we can use the remaining bits to put the original file back together without losing anything. And this is where Object Storage really shines.</p>



<p class="wp-block-paragraph">As part of the service, OVHcloud ensures durability (data remains intact) and data availability (uninterrupted access). Customers have the option to choose the level of resilience they need: number of copies, asynchronous replication, versioning, and object-lock features.</p>



<p class="wp-block-paragraph">This granularity helps customers adjust costs depending on how critical their data is.</p>



<ul class="wp-block-list">
<li>Durability: data remains intact thanks to erasure coding and multi-site replication.</li>



<li>Availability: access to objects is guaranteed even when an Availability Zone (AZ) goes down.</li>
</ul>



<h2 class="wp-block-heading">Performance indicators and key metrics</h2>



<p class="wp-block-paragraph">A variety of metrics can be analysed within an infrastructure of this scale. But a few of them are getting more attention from operations teams. Édouard goes over three of them, which are also worth keeping an eye on if you run your own storage infrastructure and setup.</p>



<h3 class="wp-block-heading">Error rate: an early warning sign</h3>



<p class="wp-block-paragraph">Error rate (500/503) is the first indicator of the solution’s health.</p>



<p class="wp-block-paragraph">SDKs are set up to retry automatically when there’s a spike, without the user even noticing. These repeated attempts are made on the customer’s end to ensure a successful read (or write).</p>



<h3 class="wp-block-heading">Time-to-First-Byte (TTFB): the best gauge of latency</h3>



<p class="wp-block-paragraph">TTFB measures the time it takes to deliver the first byte, no matter the file size.</p>



<p class="wp-block-paragraph">A slower TTFB usually means the infrastructure is overloaded or something isn’t working as it should. The team monitors this KPI in real time so they can get ahead of issues. It’s a reliable internal indicator of the platform’s performance and overall health.</p>



<h3 class="wp-block-heading">IOPS vs disk capacity</h3>



<p class="wp-block-paragraph">Even though disk sizes have expanded in recent years, their IOPS haven’t really changed.</p>



<p class="wp-block-paragraph">A larger capacity lowers IOPS per TB, which is why tracking these metrics is necessary to spot potential slowdowns.</p>



<h2 class="wp-block-heading">Real-world use cases</h2>



<h3 class="wp-block-heading">Use case 1: Backup and archiving</h3>



<p class="wp-block-paragraph">Customers can back up directly to a bucket, use versioning and object lock, and restore data with just a few clicks. Tape archiving, available since 2025, cost about €1–2 per TB with a TTFB of roughly an hour, ideal for long-term, compliant storage needs.</p>



<ul class="wp-block-list">
<li>Versioning: saves a new version for every edit, so nothing is deleted by accident.</li>



<li>Object Lock (immutability): write once, read many to help protect against ransomware.</li>
</ul>



<h3 class="wp-block-heading">Use case 2: Big data and AI</h3>



<p class="wp-block-paragraph">Huge amounts of data for training machine learning models are kept in cold storage on Object Storage and then moved to compute clusters when needed.</p>



<h3 class="wp-block-heading">Use case 3: OVHcloud internal services</h3>



<p class="wp-block-paragraph">Object storage is becoming more accessible to a wider range of users. It makes sense for OVHcloud products to make the most of what this technology has to offer.</p>



<p class="wp-block-paragraph">In fact, it supports many services including instance images, Logs Data Platform logs, and cold data storage.</p>



<h2 class="wp-block-heading">Roadmap and upcoming innovations</h2>



<h3 class="wp-block-heading">Object Storage 2.0</h3>



<p class="wp-block-paragraph">A redesigned backend (codename Object Storage 2.0) is currently in <a href="https://labs.ovhcloud.com/en/future-object-storage" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer"><u>private beta</u></a>. The goal is to get rid of soft limits, achieve the lowest possible TTFB, and deliver top performance for customer applications with thousands of small files.</p>



<h3 class="wp-block-heading">Transparency via the published roadmap</h3>



<p class="wp-block-paragraph">All updates are shared on the <a href="https://github.com/orgs/ovh/projects/16/views/1?sliceBy%5Bvalue%5D=Public+Cloud+Storage" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer"><u>OVHcloud GitHub</u></a>. Users can track tickets, leave comments, and sign up for beta versions in our <a href="https://discord.gg/ovhcloud" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer"><u>Discord server</u></a>.</p>



<h2 class="wp-block-heading">To sum up&#8230;</h2>



<p class="wp-block-paragraph">OVHcloud Object Storage has come a long way and is now a multi-class platform, capable of managing hundreds of thousands of disks while providing robust resiliency. OpenIO’s integration now includes an S3-compatible API to keep up with market demand for interoperability. And with erasure coding, versioning, object-lock, and replication options, customers can adjust data durability and availability according to their budget.</p>



<p class="wp-block-paragraph">Got a cloud-native project or need large-scale backup? <a href="https://www.ovhcloud.com/en-gb/public-cloud/object-storage/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer"><u>Try OVHcloud Object Storage now</u></a>. Take a look at the different resilience strategies and tell us what you think — your experience can help the tech community grow.</p>



<p class="wp-block-paragraph"><em>Was this article helpful? You can watch the full video this excerpt is taken from on our YouTube channel here: </em><a href="https://www.youtube.com/watch?v=KmS0YhjuYZc" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external">https://www.youtube.com/watch?v=KmS0YhjuYZc</a></p>



<p class="wp-block-paragraph"></p>
<img loading="lazy" decoding="async" src="//blog.ovhcloud.com/wp-content/plugins/matomo/app/matomo.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Fblog.ovhcloud.com%2Fobject-storage-scalability-resilience%2F&amp;action_name=Object%20Storage%3A%2010%20years%20on%2C%20from%20scalability%20to%20resilience&amp;urlref=https%3A%2F%2Fblog.ovhcloud.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Discovering Docker Agent with AI Endpoints</title>
		<link>https://blog.ovhcloud.com/discovering-docker-agent-with-ai-endpoints/</link>
		
		<dc:creator><![CDATA[Stéphane Philippart]]></dc:creator>
		<pubDate>Thu, 02 Jul 2026 11:50:06 +0000</pubDate>
				<category><![CDATA[OVHcloud Engineering]]></category>
		<category><![CDATA[Tranches de Tech & Co — Tech bites]]></category>
		<guid isPermaLink="false">https://blog.ovhcloud.com/?p=32596</guid>

					<description><![CDATA[What if you could build a team of AI agents, each specialized in a different task, workingtogether like a well-oiled [&#8230;]<img src="//blog.ovhcloud.com/wp-content/plugins/matomo/app/matomo.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Fblog.ovhcloud.com%2Fdiscovering-docker-agent-with-ai-endpoints%2F&amp;action_name=Discovering%20Docker%20Agent%20with%20AI%20Endpoints&amp;urlref=https%3A%2F%2Fblog.ovhcloud.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">What if you could build a team of AI agents, each specialized in a different task, working<br>together like a well-oiled pipeline, without having to build agent orchestration logic from<br>scratch ?<br>That&#8217;s exactly what Docker Agent brings to the table.</p>



<p class="wp-block-paragraph">Docker Agent is an open-source framework for building collaborative multi-agent workflows.<br>Instead of one monolithic agent trying to do everything, you compose a team of specialized<br>agents. Each agent has a clear role, specific tools, and its own model, allowing them to<br>communicate and collaborate on complex, multi-step tasks.</p>



<p class="wp-block-paragraph">In this post, we&#8217;ll explore how to wire up Docker Agent with <a href="https://www.ovhcloud.com/en/public-cloud/ai-endpoints/catalog/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">OVHcloud AI Endpoints</a> to create<br>a multi-agent coding assistant: one agent browses documentation, another writes the code.</p>



<h3 class="wp-block-heading">Install/configure Docker Agent</h3>



<p class="wp-block-paragraph">All detailed instructions for installing and configuring Docker Agent can be found in<br>the <a href="https://docs.docker.com/ai/docker-agent/#installation" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">official documentation</a>.<br>Once installed, Docker Agent is available as the <mark style="background-color:var(--ast-global-color-4)" class="has-inline-color">docker-agent</mark> or <mark style="background-color:var(--ast-global-color-4)" class="has-inline-color">docker agent</mark> command line<br>tool.<br>⚠ Docker Agent does not need Docker engine to run. ⚠</p>



<h3 class="wp-block-heading">Authenticate with AI Endpoints</h3>



<p class="wp-block-paragraph">To use Docker Agent with AI Endpoints, export your API key:</p>



<pre class="wp-block-code"><code class="">export OVH_AI_ENDPOINTS_ACCESS_TOKEN="your_api_key_here"</code></pre>



<p class="wp-block-paragraph">ℹ️ Docker Agent uses the <mark style="background-color:var(--ast-global-color-4)" class="has-inline-color">token_key</mark> field in the provider configuration to know which environment variable holds the API token, here we name it <mark style="background-color:var(--ast-global-color-4)" class="has-inline-color">OVH_AI_ENDPOINTS_ACCESS_TOKEN</mark>. ℹ️</p>



<h3 class="wp-block-heading">Configure the provider and models</h3>



<p class="wp-block-paragraph">AI Endpoints is fully integrated in docker agents. That&#8217;s mean that the configuration is very easy as you can see in the <a href="https://docker.github.io/docker-agent/providers/ovhcloud/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">official documentation</a>.</p>



<p class="wp-block-paragraph">One of the strengths of AI Endpoints is the ability to choose the right model for each task. This allows each agent to use a model optimized for its specific role rather than forcing a single model to handle every step of the workflow. Here we use gpt-oss-120b for the crawler, which handles documentation analysis, web browsing and reasoning, while Qwen3.5-397B-A17B is used for the coder due to its strong code generation capabilities.</p>



<h3 class="wp-block-heading">Create a team of agents for coding</h3>



<p class="wp-block-paragraph">Let&#8217;s build a two-agent team: a crawler that fetches documentation from the web, and a coder that turns that documentation into working code.</p>



<p class="wp-block-paragraph">The crawler uses the fetch toolset to read URLs and passes the extracted context to the coder via the sub_agents mechanism. The coder uses the filesystem toolset to create files and the shell toolset to execute or validate them when needed.</p>



<pre class="wp-block-code"><code class="">agents:<br>  crawler: <br>    model: ovhcloud/gpt-oss-120b<br>    description: Documentation crawler<br>    instruction: |<br>      You are a documentation crawler.<br>      Step 1: use the fetch tool to read the URLs provided by the user and     extract the relevant information.<br>      Step 2: you MUST invoke the coder sub-agent tool with the full context you gathered, so it can write the code.<br>      Do NOT write the code yourself. Always invoke the coder agent.<br>    sub_agents: [coder]<br>    toolsets:<br>     - type: filesystem<br>     - type: fetch<br><br>coder:<br>  model: ovhcloud/Qwen3.5-397B-A17B<br>  description: Coder<br>  instruction: |<br>    Write code based on the context provided.<br>    Ensure code quality and maintainability.<br>    Save files to disk using the filesystem toolset, use the current path.<br>   toolsets:<br>    - type: filesystem<br>    - type: fetch<br>    - type: shell</code></pre>



<p class="wp-block-paragraph">As you can see using an OVHcloud model is very easy: get the model name from the <a href="https://www.ovhcloud.com/en/public-cloud/ai-endpoints/catalog/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">catalog</a> and add <mark style="background-color:var(--ast-global-color-4)" class="has-inline-color">ovhcloud/</mark> to the name in the configuration file.</p>



<h3 class="wp-block-heading">Run the agents</h3>



<p class="wp-block-paragraph">Once your configuration file is ready, run the team with:</p>



<pre class="wp-block-code"><code class="">docker agent run ovhcloud-agent.yml</code></pre>



<p class="wp-block-paragraph">Here is the Docker Agent in action:</p>



<figure class="wp-block-video aligncenter"><video height="1274" style="aspect-ratio: 2526 / 1274;" width="2526" controls src="https://blog.ovhcloud.com/wp-content/uploads/2026/07/docker-agents.mov"></video></figure>



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading">Conclusion</h3>



<p class="wp-block-paragraph">In this post, we saw how Docker Agent makes it easy to build collaborative multi-agent teams (without requiring Docker engine) and how AI Endpoints fits in naturally thanks to its full OpenAI API compatibility.</p>



<p class="wp-block-paragraph">AI Endpoints gives you the flexibility to choose the right model for each agent in a multi-agent workflow, all from a single provider configuration. Rather than relying on one model for every task, you can combine specialized models for research, reasoning, coding, content generation, or data processing.</p>



<p class="wp-block-paragraph">The crawler/coder example shown here is just one illustration of this approach. The same multi-agent pattern can be applied to a wide range of workflows wherein specialized agents collaborate to complete complex tasks more efficiently.</p>



<p class="wp-block-paragraph">Have questions or feedback? Join the dedicated #ai-endpoints channel on our <a href="https://discord.gg/ovhcloud" id="https://discord.gg/ovhcloud" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">Discord server</a>.</p>



<p class="wp-block-paragraph">To learn more about AI Endpoints, please explore our <a href="https://blog.ovhcloud.com/tag/ai-endpoints/" data-wpel-link="internal">previous blog posts</a>.</p>
<img loading="lazy" decoding="async" src="//blog.ovhcloud.com/wp-content/plugins/matomo/app/matomo.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Fblog.ovhcloud.com%2Fdiscovering-docker-agent-with-ai-endpoints%2F&amp;action_name=Discovering%20Docker%20Agent%20with%20AI%20Endpoints&amp;urlref=https%3A%2F%2Fblog.ovhcloud.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></content:encoded>
					
		
		<enclosure url="https://blog.ovhcloud.com/wp-content/uploads/2026/07/docker-agents.mov" length="58921147" type="video/quicktime" />

			</item>
		<item>
		<title>Rancher and OVHcloud: simplifying the management of your Managed Kubernetes clusters</title>
		<link>https://blog.ovhcloud.com/rancher-and-ovhcloud-simplifying-the-management-of-your-managed-kubernetes-clusters/</link>
		
		<dc:creator><![CDATA[Rémy Vandepoel]]></dc:creator>
		<pubDate>Tue, 30 Jun 2026 13:00:00 +0000</pubDate>
				<category><![CDATA[OVHcloud Engineering]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<guid isPermaLink="false">https://blog.ovhcloud.com/?p=32485</guid>

					<description><![CDATA[Introduction As part of the new season of OVHcloud’s Twitch channel, Rémy (Tech Evangelist) invited Charbel Harb (Containerisation Sales Specialist) [&#8230;]<img src="//blog.ovhcloud.com/wp-content/plugins/matomo/app/matomo.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Fblog.ovhcloud.com%2Francher-and-ovhcloud-simplifying-the-management-of-your-managed-kubernetes-clusters%2F&amp;action_name=Rancher%20and%20OVHcloud%3A%20simplifying%20the%20management%20of%20your%20Managed%20Kubernetes%20clusters&amp;urlref=https%3A%2F%2Fblog.ovhcloud.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="512" src="https://blog.ovhcloud.com/wp-content/uploads/2026/06/rancher_kubernetes-1024x512.png" alt="Rancher and Kubernetes" class="wp-image-32356" srcset="https://blog.ovhcloud.com/wp-content/uploads/2026/06/rancher_kubernetes-1024x512.png 1024w, https://blog.ovhcloud.com/wp-content/uploads/2026/06/rancher_kubernetes-300x150.png 300w, https://blog.ovhcloud.com/wp-content/uploads/2026/06/rancher_kubernetes-768x384.png 768w, https://blog.ovhcloud.com/wp-content/uploads/2026/06/rancher_kubernetes-1536x768.png 1536w, https://blog.ovhcloud.com/wp-content/uploads/2026/06/rancher_kubernetes.png 1774w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">Introduction</h2>



<p class="wp-block-paragraph">As part of the new season of OVHcloud’s Twitch channel, Rémy (Tech Evangelist) invited Charbel Harb (Containerisation Sales Specialist) to demystify Rancher, the Kubernetes cluster management platform. During their conversation, they discussed the multicloud advantages of the solution, usage modes and features, as well as potential future developments. This article summarises the key points of their discussion to help you understand how Rancher can lighten the operational load of your Kubernetes environments.</p>



<h2 class="wp-block-heading">Rancher does not replace Managed Kubernetes; it overlays it</h2>



<p class="wp-block-paragraph">Rancher functions as a <strong>Kubernetes cluster management platform</strong>: it is installed as a layer on top of your clusters, whether they are hosted with OVHcloud, on bare metal, or with another provider. It does not replace Kubernetes; it <strong>complements</strong> the solution by providing a graphical interface that replicates actions usually performed in command lines.</p>



<p class="wp-block-paragraph"><em><em>“Rancher is a complete multicloud Managed Kubernetes cluster management platform. It does not replace Kubernetes – it’s an overlay.”</em></em></p>



<p class="wp-block-paragraph">OVHcloud focuses on technological freedom and open source. After testing several solutions, Rancher was selected for its <strong>agnostic</strong> nature and lack of vendor lock-in. Its partnership with SUSE, a European publisher sharing the same sovereignty principles, has led to the launch of a “vanilla” version of Rancher, enriched with some interface adjustments for deploying clusters with OVHcloud.</p>



<h2 class="wp-block-heading">Multicloud management and deployment flexibility</h2>



<p class="wp-block-paragraph">Rancher offers a single dashboard for both local and remote clusters. It <strong>centralises the management</strong> of clusters hosted on:</p>



<ul class="wp-block-list">
<li>OVHcloud Managed Kubernetes Service</li>



<li>Public Cloud or Private Cloud instances self-managed by the client</li>



<li>Other cloud providers offering a Managed Kubernetes Service</li>
</ul>



<p class="wp-block-paragraph">The interface lists all clusters, regardless of their location, as long as they have a public outbound IP address.<br><br>Rancher offers two entry points that are easily identifiable:</p>



<ul class="wp-block-list">
<li><strong>Create</strong> a new cluster from one of the supported environments (choice of zone, number of AZs, type of nodes, enabling autoscaling)</li>



<li><strong>import</strong> an existing cluster by deploying a small Rancher agent via a <code>kubectl</code> command.</li>
</ul>



<p class="wp-block-paragraph">This duality ensures that every member of a DevOps team works in a way that’s comfortable for them, while retaining the ability to automate tasks via scripts.</p>



<h2 class="wp-block-heading">User experience: GUI vs CLI</h2>



<p class="wp-block-paragraph">Rancher caters to both profiles:</p>



<ul class="wp-block-list">
<li><strong>users who prefer clicking</strong>: creating clusters, sizing node pools, and deploying applications can be done in a few clicks, without memorising long <code>kubectl</code> syntaxes.</li>



<li><strong>experts who prefer the power of the terminal</strong>: the interface includes a <code>kubectl</code> terminal that allows commands be directly executed on the cluster, even from a bastion or a computer without local installation.</li>
</ul>



<p class="wp-block-paragraph">This duality ensures that every member of a DevOps team works in a way that’s comfortable for them, while retaining the ability to automate tasks via scripts.</p>



<h2 class="wp-block-heading">Integrated application catalogue: monitoring, observability and security</h2>



<p class="wp-block-paragraph">Rancher includes a <strong>catalogue of applications</strong> (Helm charts),&nbsp; including Prometheus and Grafana, that are pre-installed and free.&nbsp;</p>



<p class="wp-block-paragraph">In just a few clicks, you can add a monitoring layer to your cluster and immediately visualise metrics like CPU, RAM, network load and logs.</p>



<p class="wp-block-paragraph"><em><em>“The application catalogue is a toolbox that solves many issues.”</em></em></p>



<p class="wp-block-paragraph">These tools facilitate <strong>quick debugging</strong> and provide enough visibility to initiate finops actions (scale-up/scale-down, resource optimisation) even though Rancher is not a financial management product.</p>



<h2 class="wp-block-heading">Security and access control</h2>



<p class="wp-block-paragraph">Rancher integrates complete role-based access control (<strong>RBAC</strong>).<br>You can create user groups, assign them predefined roles (read, write, administration), and link them to external authentication providers such as LDAP or SSO. This granularity prevents human errors and strengthens compliance with internal policies.</p>



<h2 class="wp-block-heading">Internal architecture: the brain and the agent</h2>



<p class="wp-block-paragraph"><strong>Rancher Manager</strong> operates within its own dedicated Kubernetes cluster, shared for all OVHcloud customers. Each managed cluster has a <strong>Rancher agent</strong> that receives instructions from the administration console. During creation, this console automatically deploys the agent. During import, the user executes the provided command to install the agent. This architecture ensures <strong>reliable communication</strong> while maintaining the isolation of client workloads.</p>



<h2 class="wp-block-heading">Roadmap and development perspectives</h2>



<p class="wp-block-paragraph">The product is currently stable, and several areas for improvement are underway:</p>



<ul class="wp-block-list">
<li><strong>support for “private” mode</strong> (clusters without public IPs) to meet the requirements of isolated networks</li>



<li><strong>integration of AI assistants</strong> to generate prompts for creating clusters or managing users, further reducing the number of clicks required.</li>
</ul>



<p class="wp-block-paragraph">These developments align with our goal of offering an increasingly smooth and automated experience for DevOps teams.</p>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">Rancher positions itself as <strong>a versatile tool</strong> for Kubernetes management: it centralises multicloud clusters, offers an intuitive graphical interface, integrates a catalogue of ready-to-use applications, and ensures granular security via RBAC.</p>



<p class="wp-block-paragraph"><em><em>“The first piece of advice is really to try it. Give yourself some time to measure the gain.”</em></em></p>



<p class="wp-block-paragraph">If you’d like to test this solution, we are currently offering a <strong>free trial</strong> of the Managed Rancher service. Start a test cluster, explore the application catalogue, and measure how much time you save in your DevOps processes.</p>



<p class="wp-block-paragraph"><strong>Over to you!</strong> Contact our team, schedule a personalised demonstration session, and discover how Rancher can transform the management of your Kubernetes environments.</p>
<img loading="lazy" decoding="async" src="//blog.ovhcloud.com/wp-content/plugins/matomo/app/matomo.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Fblog.ovhcloud.com%2Francher-and-ovhcloud-simplifying-the-management-of-your-managed-kubernetes-clusters%2F&amp;action_name=Rancher%20and%20OVHcloud%3A%20simplifying%20the%20management%20of%20your%20Managed%20Kubernetes%20clusters&amp;urlref=https%3A%2F%2Fblog.ovhcloud.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Secure Image Signing with Cosign and OVHcloud KMS</title>
		<link>https://blog.ovhcloud.com/secure-image-signing-cosign-ovhcloud-kms/</link>
		
		<dc:creator><![CDATA[Aurélie Vache]]></dc:creator>
		<pubDate>Mon, 22 Jun 2026 06:52:50 +0000</pubDate>
				<category><![CDATA[OVHcloud Engineering]]></category>
		<category><![CDATA[Tranches de Tech & Co — Tech bites]]></category>
		<category><![CDATA[Cosign OVHcloud KMS]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[OVHcloud]]></category>
		<category><![CDATA[Public Cloud]]></category>
		<category><![CDATA[Security]]></category>
		<guid isPermaLink="false">https://blog.ovhcloud.com/?p=31702</guid>

					<description><![CDATA[Software supply chains have become more complex and increasingly targeted, making container image security a fundamental requirement for building trust [&#8230;]<img src="//blog.ovhcloud.com/wp-content/plugins/matomo/app/matomo.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Fblog.ovhcloud.com%2Fsecure-image-signing-cosign-ovhcloud-kms%2F&amp;action_name=Secure%20Image%20Signing%20with%20Cosign%20and%20OVHcloud%20KMS&amp;urlref=https%3A%2F%2Fblog.ovhcloud.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1018" height="1024" src="https://blog.ovhcloud.com/wp-content/uploads/2026/05/Gribouillis-2026-05-07-14.00.13.759-1018x1024.png" alt="" class="wp-image-31768" style="aspect-ratio:0.9941455602881566;width:456px;height:auto" srcset="https://blog.ovhcloud.com/wp-content/uploads/2026/05/Gribouillis-2026-05-07-14.00.13.759-1018x1024.png 1018w, https://blog.ovhcloud.com/wp-content/uploads/2026/05/Gribouillis-2026-05-07-14.00.13.759-298x300.png 298w, https://blog.ovhcloud.com/wp-content/uploads/2026/05/Gribouillis-2026-05-07-14.00.13.759-150x150.png 150w, https://blog.ovhcloud.com/wp-content/uploads/2026/05/Gribouillis-2026-05-07-14.00.13.759-768x772.png 768w, https://blog.ovhcloud.com/wp-content/uploads/2026/05/Gribouillis-2026-05-07-14.00.13.759-70x70.png 70w, https://blog.ovhcloud.com/wp-content/uploads/2026/05/Gribouillis-2026-05-07-14.00.13.759.png 1244w" sizes="auto, (max-width: 1018px) 100vw, 1018px" /></figure>



<p class="wp-block-paragraph">Software supply chains have become more complex and increasingly targeted, making container image security a fundamental requirement for building trust in modern delivery pipelines.</p>



<p class="wp-block-paragraph">By signing images with Cosign and protecting signing keys in OVHcloud KMS, teams can keep cryptographic material out of local environments and CI/CD variables, all while making image signing easier to control, audit and integrate into delivery pipelines.</p>



<p class="wp-block-paragraph">In this blog post, you will learn how to use the OVHcloud KMS plugin for Cosign to generate a key, sign a container image with this key and verify that the OCI image has been correctly signed.</p>



<h3 class="wp-block-heading">Cosign</h3>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="399" height="126" src="https://blog.ovhcloud.com/wp-content/uploads/2026/05/image-5.png" alt="" class="wp-image-31741" srcset="https://blog.ovhcloud.com/wp-content/uploads/2026/05/image-5.png 399w, https://blog.ovhcloud.com/wp-content/uploads/2026/05/image-5-300x95.png 300w" sizes="auto, (max-width: 399px) 100vw, 399px" /></figure>



<p class="wp-block-paragraph"><a href="https://github.com/sigstore/cosign" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">Cosign</a> is a tool from the <strong>Sigstore</strong> project used to <strong>sign, verify, and attest</strong> OCI container images and software artifacts.</p>



<p class="wp-block-paragraph">Cosign supports several signing modes, including <strong>keyless</strong> signing through Sigstore, where short-lived certificates are generated at signing time based on your identity (via GitHub, Google or another OIDC provider), as well as ephemeral key generation, hardware and <strong>KMS</strong>-backed signing and custom PKI integration.</p>



<p class="wp-block-paragraph"><code>Cosign</code> supports <a href="https://docs.sigstore.dev/cosign/key_management/overview/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">multiple KMS providers</a> to generate and sign keys. Several external KMS providers are supported, including HashiCorp Vault, AWS KMS, GCP KMS and Azure Key Vault.<br>Cosign can now also be integrated with OVHcloud KMS through the <a href="https://github.com/ovh/sigstore-kms-ovhcloud" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">Sigstore Cosign OVHcloud KMS plugin</a> 💪.</p>



<h3 class="wp-block-heading">OVHcloud Key Management Service (KMS)</h3>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="100" height="101" src="https://blog.ovhcloud.com/wp-content/uploads/2026/05/Key-Management-Service-KMS@2x.png" alt="" class="wp-image-31711" srcset="https://blog.ovhcloud.com/wp-content/uploads/2026/05/Key-Management-Service-KMS@2x.png 100w, https://blog.ovhcloud.com/wp-content/uploads/2026/05/Key-Management-Service-KMS@2x-70x70.png 70w" sizes="auto, (max-width: 100px) 100vw, 100px" /></figure>



<p class="wp-block-paragraph"><a href="https://www.ovhcloud.com/en/identity-security-operations/key-management-service/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">OVHcloud KMS</a>, often called <strong>OKMS</strong>, is a managed service that centralizes the creation, storage, and management of encryption keys. Its main goal is to help businesses secure data and control cryptographic operations from a single platform.</p>



<p class="wp-block-paragraph">Each KMS is associated with a region, so the keys stored in that region are guaranteed to stay in that region. You can order multiple KMSs, either in different regions or in the same region.</p>



<h3 class="wp-block-heading">Prerequisites</h3>



<p class="wp-block-paragraph">To be able to use the Sigstore KMS OVHcloud provider, you need to follow some prerequisites:</p>



<ul class="wp-block-list">
<li>Have an OVHcloud account</li>



<li>Have created an <a href="https://www.ovhcloud.com/en/identity-security-operations/key-management-service/" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external">OKMS</a> domain (“<em><code class="">305db938-1234-5678-9012-3a0a29291661</code></em>” for example in this blog post)</li>



<li><a href="https://github.com/ovh/public-cloud-examples/tree/main/iam/create-user-and-generate-pat-token-with-cli" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external">Have created an IAM local user</a> (“<em>cosign-</em><code class="">305db938-1234-5678-9012-3a0a29291661</code>” for example in this blog post)</li>



<li>Have installed the <a href="https://github.com/ovh/ovhcloud-cli/?tab=readme-ov-file#installation" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external">OVHcloud CLI</a></li>



<li>Have <a href="https://man7.org/linux/man-pages/man1/uuidgen.1.html" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">uuidgen</a> CLI installed</li>
</ul>



<p class="wp-block-paragraph">💡The cosign OVHcloud plugin supports both <code>token</code> and <code>mTLS</code> authentication. For the purposes of this blog post, we will use the token authentication mode. Please follow the <a href="https://external-secrets.io/latest/provider/ovhcloud/" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external">Sigstore Cosign KMS plugin for OVHcloud</a> guide if you wish to use mTLS authentication mode.</p>



<h4 class="wp-block-heading">Generate a PAT token (for token authentication only)</h4>



<p class="wp-block-paragraph">List the OKMS domains:</p>



<pre class="wp-block-code"><code class="">$ ovhcloud okms list<br>┌──────────────────────────────────────┬─────────────┐<br>│                  id                  │   region    │<br>├──────────────────────────────────────┼─────────────┤<br>│ 305db938-1234-5678-9012-3a0a29291661 │ eu-west-par │<br>│ xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx │ eu-west-par │<br>└──────────────────────────────────────┴─────────────┘</code></pre>



<p class="wp-block-paragraph">Save the OKMS ID in an environment variable:</p>



<pre class="wp-block-code"><code class="">export KMS_RESTAPI_OKMSID="305db938-1234-5678-9012-3a0a29291661"</code></pre>



<p class="wp-block-paragraph">The cosign OVHcloud plugin needs the permission to create and fetch keys from the OVHcloud KMS.</p>



<p class="wp-block-paragraph">If you want to use token autentication, you’ll need a token (PAT). You can use the <strong>ovhcloud CLI </strong>to do that:</p>



<pre class="wp-block-code"><code class="">PAT_TOKEN=$(ovhcloud iam user token create &lt;iam-local-user-name&gt; --name pat-&lt;iam-local-user-name&gt; --description "PAT cosign for domain $KMS_RESTAPI_OKMSID" -o json  | jq .details.token |  tr -d '"')<br><br>echo $PAT_TOKEN</code></pre>



<p class="wp-block-paragraph">You should have a result like this:</p>



<pre class="wp-block-code"><code class="">$ PAT_TOKEN=$(ovhcloud iam user token create cosign-305db938-1234-5678-9012-3a0a29291661 --name pat-cosign-305db938-1234-5678-9012-3a0a29291661 --description "PAT cosign for domain 305db938-1234-5678-9012-3a0a29291661" -o json  | jq .details.token |  tr -d '"')<br>2026/05/07 08:48:34 Final parameters:<br>{<br> "description": "PAT cosign for domain 305db938-1234-5678-9012-3a0a29291661",<br> "name": "pat-cosign-305db938-1234-5678-9012-3a0a29291661"<br>}<br><br>$ echo $PAT_TOKEN<br>eyJhbGciOiJFZE...ASgXy55_DDFHdy4Z5uSq8lww-Bw</code></pre>



<h4 class="wp-block-heading">Save the KMS information</h4>



<p class="wp-block-paragraph">Save the KMS information in environment variables. For example:</p>



<pre class="wp-block-code"><code class="">export KMS_RESTAPI_ENDPOINT=$(ovhcloud okms get $KMS_RESTAPI_OKMSID -o json | jq .restEndpoint | xargs)<br>export KMS_RESTAPI_TYPE="token"<br>export KMS_RESTAPI_TOKEN=$PAT_TOKEN</code></pre>



<p class="wp-block-paragraph">Display the saved information:</p>



<pre class="wp-block-code"><code class="">$ echo $KMS_RESTAPI_ENDPOINT<br>https://eu-west-par.okms.ovh.net<br><br>$ echo $KMS_RESTAPI_OKMSID<br>305db938-1234-5678-9012-3a0a29291661<br><br>$ echo $KMS_RESTAPI_TYPE<br>token<br><br>$ echo $KMS_RESTAPI_TOKEN<br>eyJ...BIoHCA</code></pre>



<h4 class="wp-block-heading">Cosign KMS plugin installation</h4>



<p class="wp-block-paragraph">Install the plugin locally:</p>



<pre class="wp-block-code"><code class="">curl -fsSL https://raw.githubusercontent.com/ovh/sigstore-kms-ovhcloud/main/install.sh | sh</code></pre>



<p class="wp-block-paragraph">⚠️ The binary is installed in <code>$HOME/.local/bin</code> by default (created if it does not exist). Make sure this directory is in your <code>PATH</code>.</p>



<p class="wp-block-paragraph">Or follow the other <a href="https://github.com/ovh/sigstore-kms-ovhcloud#installation" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">installation methods.</a></p>



<p class="wp-block-paragraph">Now you can use the OVHcloud KMS plugin directly in the cosign command 🎉.</p>



<h3 class="wp-block-heading">Let&#8217;s use Cosign with the OVHcloud KMS!</h3>



<h4 class="wp-block-heading">Generate a key</h4>



<p class="wp-block-paragraph">First, to sign an image, we need to generate a key pair. To do that we need to generate a UUID and use it in the <code>cosign generate-key-pair</code> command.</p>



<pre class="wp-block-code"><code class="">export KEY_ID=$(uuidgen)<br>cosign generate-key-pair --kms ovhcloud://$KEY_ID</code></pre>



<p class="wp-block-paragraph">The signing key is created in OVHcloud KMS, and the public key is written locally.</p>



<p class="wp-block-paragraph">You should see an output like this:</p>



<pre class="wp-block-code"><code class="">$ export KEY_ID=$(uuidgen)<br>$ cosign generate-key-pair --kms ovhcloud://$KEY_ID<br><br>Public key written to cosign.pub</code></pre>



<p class="wp-block-paragraph">The command generates a key pair using the ECDSA algorithm and writes the public key to <code>cosign.pub</code>.</p>



<p class="wp-block-paragraph">Check the keys have been created:</p>



<pre class="wp-block-code"><code class="">$ ls -l cosign.pub<br>-rw-------  1 avache  staff  178 18 juin  16:06 cosign.pub<br><br>$ cat cosign.pub<br><br>-----BEGIN PUBLIC KEY-----<br>MFkw...QgwA==<br>-----END PUBLIC KEY-----<br></code></pre>



<p class="wp-block-paragraph"><br>Once the key pair has been generated, use the corresponding OVHcloud KMS key ID in the <code>ovhcloud://$KEY_ID</code> URI when signing and verifying images.</p>



<h4 class="wp-block-heading">Or get an existing public key (optional)</h4>



<p class="wp-block-paragraph">Instead of creating a new public key, you can retrieve an existing one with the following command:</p>



<pre class="wp-block-code"><code class="">cosign public-key --key ovhcloud://$KEY_ID --outfile cosign-ovhcloud.pub</code></pre>



<h4 class="wp-block-heading">Sign an image</h4>



<p class="wp-block-paragraph">Replace the <code>$IMAGE@sha256:$HASH</code> parameter with the URI to your image and the hash to your image and execute this command:</p>



<pre class="wp-block-code"><code class="">cosign sign --key ovhcloud://$KEY_ID $IMAGE@sha256:$HASH</code></pre>



<p class="wp-block-paragraph">You should see an output like this:</p>



<pre class="wp-block-code"><code class="">$ cosign sign --key ovhcloud://$KEY_ID 12345678.c1.de1.container-registry.ovh.net/my-project/my-image@sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxx</code></pre>



<figure class="wp-block-image aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="278" height="282" src="https://blog.ovhcloud.com/wp-content/uploads/2026/05/image-6.png" alt="" class="wp-image-31773" style="width:114px;height:auto" srcset="https://blog.ovhcloud.com/wp-content/uploads/2026/05/image-6.png 278w, https://blog.ovhcloud.com/wp-content/uploads/2026/05/image-6-70x70.png 70w" sizes="auto, (max-width: 278px) 100vw, 278px" /></figure>



<h4 class="wp-block-heading">Verify the image has been signed</h4>



<pre class="wp-block-code"><code class="">cosign verify --key ovhcloud://$KEY_ID $IMAGE@sha256:$HASH</code></pre>



<p class="wp-block-paragraph">You should see an output like this:</p>



<pre class="wp-block-code"><code class="">$ cosign verify --key ovhcloud://$KEY_ID 12345678.c1.de1.container-registry.ovh.net/my-project/my-image@sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br><br>Verification for 12345678.c1.de1.container-registry.ovh.net/my-project/my-image@sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxx --<br>The following checks were performed on each of these signatures:<br>  - The cosign claims were validated<br>  - Existence of the claims in the transparency log was verified offline<br>  - The signatures were verified against the specified public key<br><br>[{"critical":{"identity":{"docker-reference":"12345678.c1.de1.container-registry.ovh.net/my-project/my-image@sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"},"image":{"docker-manifest-digest":"sha256:b1202...2334e2"},"type":"https://sigstore.dev/cosign/sign/v1"},"optional":{}}]</code></pre>



<h3 class="wp-block-heading">Conclusion</h3>



<p class="wp-block-paragraph">In this blog post, we have shown how to use Cosign with the OVHcloud KMS plugin to generate a key pair, sign a container image and verify its signature.</p>



<p class="wp-block-paragraph">By keeping signing keys in a managed KMS, teams can reduce secret sprawl, protect sensitive cryptographic material and make image signing easier to integrate into secure CI/CD workflows.</p>



<p class="wp-block-paragraph">Feel free to take a look at our <a href="https://github.com/orgs/ovh/projects/16" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external">Cloud Roadmap &amp; Changelog</a> to follow the latest features coming to OVHcloud Public Cloud products.</p>
<img loading="lazy" decoding="async" src="//blog.ovhcloud.com/wp-content/plugins/matomo/app/matomo.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Fblog.ovhcloud.com%2Fsecure-image-signing-cosign-ovhcloud-kms%2F&amp;action_name=Secure%20Image%20Signing%20with%20Cosign%20and%20OVHcloud%20KMS&amp;urlref=https%3A%2F%2Fblog.ovhcloud.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Terraform S3 state locking with OVHcloud Object Storage</title>
		<link>https://blog.ovhcloud.com/terraform-s3-state-locking-ovhcloud-object-storage/</link>
		
		<dc:creator><![CDATA[Aurélie Vache]]></dc:creator>
		<pubDate>Mon, 15 Jun 2026 12:58:44 +0000</pubDate>
				<category><![CDATA[OVHcloud Engineering]]></category>
		<category><![CDATA[Tranches de Tech & Co — Tech bites]]></category>
		<category><![CDATA[OpenTofu S3 state locking]]></category>
		<category><![CDATA[OVHcloud Object Storage]]></category>
		<category><![CDATA[S3-compatible Object Storage]]></category>
		<category><![CDATA[Terraform backend]]></category>
		<category><![CDATA[Terraform S3 state locking]]></category>
		<guid isPermaLink="false">https://blog.ovhcloud.com/?p=32272</guid>

					<description><![CDATA[In a previous blog post, I explained how to use OVHcloud S3-compatible Object Storage as a Terraform backend for storing [&#8230;]<img src="//blog.ovhcloud.com/wp-content/plugins/matomo/app/matomo.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Fblog.ovhcloud.com%2Fterraform-s3-state-locking-ovhcloud-object-storage%2F&amp;action_name=Terraform%20S3%20state%20locking%20with%20OVHcloud%20Object%20Storage&amp;urlref=https%3A%2F%2Fblog.ovhcloud.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://blog.ovhcloud.com/wp-content/uploads/2026/06/IMG_1608-1-1024x1024.png" alt="" class="wp-image-32328" style="aspect-ratio:1.0008006079081817;width:430px;height:auto" srcset="https://blog.ovhcloud.com/wp-content/uploads/2026/06/IMG_1608-1-1024x1024.png 1024w, https://blog.ovhcloud.com/wp-content/uploads/2026/06/IMG_1608-1-300x300.png 300w, https://blog.ovhcloud.com/wp-content/uploads/2026/06/IMG_1608-1-150x150.png 150w, https://blog.ovhcloud.com/wp-content/uploads/2026/06/IMG_1608-1-768x767.png 768w, https://blog.ovhcloud.com/wp-content/uploads/2026/06/IMG_1608-1-70x70.png 70w, https://blog.ovhcloud.com/wp-content/uploads/2026/06/IMG_1608-1.png 1247w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">In a previous blog post, I explained <a href="https://blog.ovhcloud.com/using-ovhcloud-s3-compatible-object-storage-as-terraform-backend-to-store-your-terraform-opentofu-states/" data-wpel-link="internal">how to use OVHcloud S3-compatible Object Storage as a Terraform backend for storing Terraform/OpenTofu state files</a>.</p>



<p class="wp-block-paragraph">Since then, we&#8217;ve enhanced OVHcloud Object Storage, and one of the coolest improvements is the <a href="https://github.com/ovh/public-cloud-roadmap/issues/671" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">support for conditional writes</a>. By preventing concurrent overwrites, this feature enables <a href="https://developer.hashicorp.com/terraform/language/backend/s3#state-locking" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">Terraform&#8217;s native S3 state-locking mechanism</a> to work seamlessly with OVHcloud Object Storage.</p>



<p class="wp-block-paragraph">In practice, Terraform/OpenTofu can create a <code>.tflock</code> object only if it does not already exist. If another operation has already created the lock file, the conditional write fails and the second operation is blocked.</p>



<p class="wp-block-paragraph">With this blog post, I explain how we can configure our Terraform/OpenTofu backend to store our states in an OVHcloud S3-compatible Object Storage with S3 state locking.</p>



<h3 class="wp-block-heading">Terraform/OpenTofu S3 State Locking feature</h3>



<p class="wp-block-paragraph">State locking is a critical feature for collaborative Terraform/OpenTofu workflows. It ensures that only one operation can modify a state file at any given time, preventing concurrent writes that could lead to inconsistencies or state corruption.</p>



<p class="wp-block-paragraph">Concretely, when a user runs <code>terraform apply</code> (or <code>tofu apply)</code>, Terraform creates a <code>.tflock</code> file in the S3 bucket. This lock file indicates that an operation is currently in progress and that the state file is being used. If another user attempts to run <code>terraform apply</code> (or <code>tofu apply)</code> while the lock is active, Terraform detects the existing lock and aborts the operation with an error message. This prevents concurrent modifications of the state file and helps avoid state corruption.</p>



<figure class="wp-block-image aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="791" height="1024" src="https://blog.ovhcloud.com/wp-content/uploads/2026/06/IMG_1610-791x1024.jpeg" alt="" class="wp-image-32336" style="aspect-ratio:0.7724658665702258;width:480px;height:auto" srcset="https://blog.ovhcloud.com/wp-content/uploads/2026/06/IMG_1610-791x1024.jpeg 791w, https://blog.ovhcloud.com/wp-content/uploads/2026/06/IMG_1610-232x300.jpeg 232w, https://blog.ovhcloud.com/wp-content/uploads/2026/06/IMG_1610-768x994.jpeg 768w, https://blog.ovhcloud.com/wp-content/uploads/2026/06/IMG_1610-1187x1536.jpeg 1187w, https://blog.ovhcloud.com/wp-content/uploads/2026/06/IMG_1610-1583x2048.jpeg 1583w, https://blog.ovhcloud.com/wp-content/uploads/2026/06/IMG_1610-scaled.jpeg 1978w" sizes="auto, (max-width: 791px) 100vw, 791px" /></figure>



<h3 class="wp-block-heading">Prerequisites</h3>



<p class="wp-block-paragraph">To be able to store your Terraform/OpenTofu states and activate the <code>use_lockfile</code> feature, you need to follow some prerequisites:</p>



<ul class="wp-block-list">
<li>Have an OVHcloud account</li>



<li>Created <a href="https://blog.ovhcloud.com/using-ovhcloud-s3-compatible-object-storage-as-terraform-backend-to-store-your-terraform-opentofu-states/" data-wpel-link="internal">a S3-compatible Object Storage</a> (<em>enable <strong>bucket versioning</strong> for your state bucket so previous state versions can be recovered if needed</em>)</li>



<li>Installed <a href="https://developer.hashicorp.com/terraform/install" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">the Terraform CLI </a>or <a href="https://opentofu.org/docs/intro/install/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">OpenTofu CLI</a> (version 1.10 or &gt;)</li>



<li>Installed the <a href="https://github.com/ovh/ovhcloud-cli/?tab=readme-ov-file#installation" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external">OVHcloud CLI</a></li>
</ul>



<p class="wp-block-paragraph">Save the s3 user credentials in environment variables (that allows you to access and store files in the bucket):</p>



<pre class="wp-block-code"><code class="">export AWS_ACCESS_KEY_ID="xxxxxxxxx"<br>export AWS_SECRET_ACCESS_KEY="yyyyyyyyy"</code></pre>



<h3 class="wp-block-heading">Configure it</h3>



<p class="wp-block-paragraph">Create a new folder, named <code>my-app</code> (for example), and go into it.</p>



<p class="wp-block-paragraph">Create a <code>provider.tf</code> file with the following content, and replace the bucket value witht he name of the bucket you created:</p>



<pre class="wp-block-code"><code class="">terraform {<br>    backend "s3" {<br>      bucket = "terraform-state-3az" # the name of YOUR bucket<br>      key    = "my-app.tfstate" # the name of the state of your app<br>      region = "eu-west-par" # the region of the bucket<br>      endpoints = {<br>        s3 = "https://s3.eu-west-par.io.cloud.ovh.net/" # the endpoint<br>      }<br>      skip_credentials_validation = true<br>      skip_region_validation      = true<br>      skip_requesting_account_id  = true<br>      skip_s3_checksum            = true<br><br>      use_lockfile = true  # activation of the S3 native state locking feature<br>    }<br>}</code></pre>



<p class="wp-block-paragraph">💡The <code>use_lockfile = true </code>argument enables native S3 state locking. Terraform/OpenTofu uses the <code>.tflock</code> object to prevent two operations from writing to the same state file at the same time.</p>



<h3 class="wp-block-heading">Test it!</h3>



<p class="wp-block-paragraph">Create a <code>resource.tf</code> file with an example resource to create (only for the testing purpose):</p>



<pre class="wp-block-code"><code class="">resource "null_resource" "test" {}</code></pre>



<p class="wp-block-paragraph">Initialise Terraform:</p>



<pre class="wp-block-code"><code class="">$ terraform init<br><br>Initializing the backend...<br><br>Successfully configured the backend "s3"! Terraform will automatically<br>use this backend unless the backend configuration changes.<br>Initializing provider plugins...<br>- Finding latest version of hashicorp/null...<br>- Installing hashicorp/null v3.3.0...<br>- Installed hashicorp/null v3.3.0 (signed by HashiCorp)<br>Terraform has created a lock file .terraform.lock.hcl to record the provider<br>selections it made above. Include this file in your version control repository<br>so that Terraform can guarantee to make the same selections by default when<br>you run "terraform init" in the future.<br><br>Terraform has been successfully initialized!<br><br>You may now begin working with Terraform. Try running "terraform plan" to see<br>any changes that are required for your infrastructure. All Terraform commands<br>should now work.<br><br>If you ever set or change modules or backend configuration for Terraform,<br>rerun this command to reinitialize your working directory. If you forget, other<br>commands will detect it and remind you to do so if necessary.</code></pre>



<p class="wp-block-paragraph">As you can see, Terraform is using “s3” backend and initialized the provider plugins. 💪</p>



<p class="wp-block-paragraph">💡<em>Note that </em><code>.terraform.lock.hcl</code><em> is the provider dependency lock file created during initialization. The state lock file used for S3 backend locking is the <code>.tflock</code> file shown in the bucket during <code>terraform apply</code>.</em></p>



<p class="wp-block-paragraph">Execute the apply command (without answering &#8220;yes&#8221;):</p>



<pre class="wp-block-code"><code class="">$ terraform apply<br><br>Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:<br>  + create<br><br>Terraform will perform the following actions:<br><br>  # null_resource.test will be created<br>  + resource "null_resource" "test" {<br>      + id = (known after apply)<br>    }<br><br>Plan: 1 to add, 0 to change, 0 to destroy.<br><br>Do you want to perform these actions?<br>  Terraform will perform the actions described above.<br>  Only 'yes' will be accepted to approve.<br><br>  Enter a value:</code></pre>



<p class="wp-block-paragraph">Check if a new file appears in the S3 bucket:</p>



<pre class="wp-block-code"><code class="">$ ovhcloud cloud storage object object list terraform-state-3az<br><br>┌───────────────────────┬──────┐<br>│          key          │ size │<br>├───────────────────────┼──────┤<br>│ my-app.tfstate.tflock │ 219  │<br>└───────────────────────┴──────┘<br>💡 Use option -o json or -o yaml to get the raw output with all information</code></pre>



<p class="wp-block-paragraph">A <code>.tflock</code> file appears! 💪</p>



<p class="wp-block-paragraph">You can also check it in the OVHcloud Control Panel:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="338" src="https://blog.ovhcloud.com/wp-content/uploads/2026/06/Capture-decran-2026-06-09-a-15.04.19-1024x338.png" alt="" class="wp-image-32322" srcset="https://blog.ovhcloud.com/wp-content/uploads/2026/06/Capture-decran-2026-06-09-a-15.04.19-1024x338.png 1024w, https://blog.ovhcloud.com/wp-content/uploads/2026/06/Capture-decran-2026-06-09-a-15.04.19-300x99.png 300w, https://blog.ovhcloud.com/wp-content/uploads/2026/06/Capture-decran-2026-06-09-a-15.04.19-768x253.png 768w, https://blog.ovhcloud.com/wp-content/uploads/2026/06/Capture-decran-2026-06-09-a-15.04.19-1536x507.png 1536w, https://blog.ovhcloud.com/wp-content/uploads/2026/06/Capture-decran-2026-06-09-a-15.04.19-2048x676.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">This <code>.tflock</code> file means that someone is working on this infrastructure. After answering &#8220;yes&#8221; to the <code>terraform apply</code> command, the resources will be deployed, the state will appear and the lock file will disappear:</p>



<pre class="wp-block-code"><code class="">$ terraform apply<br><br>Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:<br>  + create<br><br>Terraform will perform the following actions:<br><br>  # null_resource.test will be created<br>  + resource "null_resource" "test" {<br>      + id = (known after apply)<br>    }<br><br>Plan: 1 to add, 0 to change, 0 to destroy.<br><br>Do you want to perform these actions?<br>  Terraform will perform the actions described above.<br>  Only 'yes' will be accepted to approve.<br><br>  Enter a value: yes<br><br>null_resource.test: Creating...<br>null_resource.test: Creation complete after 0s [id=2048943220587414471]<br><br>Apply complete! Resources: 1 added, 0 changed, 0 destroyed.<br><br><br>$ ovhcloud cloud storage object object list terraform-state-3az<br>┌────────────────┬──────┐<br>│      key       │ size │<br>├────────────────┼──────┤<br>│ my-app.tfstate │ 612  │<br>└────────────────┴──────┘<br>💡 Use option -o json or -o yaml to get the raw output with all information</code></pre>



<p class="wp-block-paragraph">🎉</p>



<h3 class="wp-block-heading">Why this Terraform state locking feature is useful?</h3>



<p class="wp-block-paragraph">If a user executes <code>terraform apply</code> command (without answering yes) and another user executes the same command, an error message will be displayed:</p>



<pre class="wp-block-code"><code class="">$ terraform apply<br><br>╷<br>│ Error: Error acquiring the state lock<br>│<br>│ Error message: operation error S3: PutObject, https response error StatusCode: 412, RequestID: tx7b439680a0104339a2fc7-xxxxxxxxxxxx, HostID: tx7b439680a0104339a2fc7-xxxxxxxxxxxx, api error<br>│ PreconditionFailed: At least one of the pre-conditions you specified did not hold<br>│ Lock Info:<br>│   ID:        xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx<br>│   Path:      terraform-state-3az/my-app.tfstate<br>│   Operation: OperationTypeApply<br>│   Who:       avache@xxxxxxxxxx<br>│   Version:   1.14.9<br>│   Created:   2026-06-09 13:09:05.562244 +0000 UTC<br>│   Info:<br>│<br>│<br>│ Terraform acquires a state lock to protect the state from being written<br>│ by multiple users at the same time. Please resolve the issue above and try<br>│ again. For most commands, you can disable locking with the "-lock=false"<br>│ flag, but this is not recommended.<br>╵</code></pre>



<p class="wp-block-paragraph">This error is expected. It means another Terraform/OpenTofu operation has already acquired the state lock, so the second operation cannot modify the state file at the same time. The user should wait until the first operation is complete and the lock file has been released, then retry. Although Terraform allows locking to be disabled with <code>-lock=false</code>, this is not recommended because it can lead to concurrent state changes and potential state corruption.</p>



<h3 class="wp-block-heading">Conclusion</h3>



<p class="wp-block-paragraph">In this blog post, we have seen one use case of conditional writes, but the feature goes far beyond that. Support for conditional writes does not only help prevent accidental overwrites; it also enables safer concurrent workflows, such as Terraform/OpenTofu state locking.</p>



<p class="wp-block-paragraph">Our team is working on the improvement of Object Storage, so stay tuned for more. And please, as alays, share your thoughts with us!</p>
<img loading="lazy" decoding="async" src="//blog.ovhcloud.com/wp-content/plugins/matomo/app/matomo.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Fblog.ovhcloud.com%2Fterraform-s3-state-locking-ovhcloud-object-storage%2F&amp;action_name=Terraform%20S3%20state%20locking%20with%20OVHcloud%20Object%20Storage&amp;urlref=https%3A%2F%2Fblog.ovhcloud.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How can blockchain speed up payments?</title>
		<link>https://blog.ovhcloud.com/blockchain-payments/</link>
		
		<dc:creator><![CDATA[Elena Luoto&nbsp;and&nbsp;Christian Sharp]]></dc:creator>
		<pubDate>Thu, 11 Jun 2026 03:00:00 +0000</pubDate>
				<category><![CDATA[OVHcloud Engineering]]></category>
		<category><![CDATA[Blockchain]]></category>
		<guid isPermaLink="false">https://blog.ovhcloud.com/?p=32212</guid>

					<description><![CDATA[It’s annoying: a payment often takes seconds to leave your account, but it can take days to reach the person [&#8230;]<img src="//blog.ovhcloud.com/wp-content/plugins/matomo/app/matomo.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Fblog.ovhcloud.com%2Fblockchain-payments%2F&amp;action_name=How%20can%20blockchain%20speed%20up%20payments%3F&amp;urlref=https%3A%2F%2Fblog.ovhcloud.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="1000" height="1000" src="https://blog.ovhcloud.com/wp-content/uploads/2026/06/June_26.png" alt="blockchain payments speeding up cross-border money transfers" class="wp-image-32213" srcset="https://blog.ovhcloud.com/wp-content/uploads/2026/06/June_26.png 1000w, https://blog.ovhcloud.com/wp-content/uploads/2026/06/June_26-300x300.png 300w, https://blog.ovhcloud.com/wp-content/uploads/2026/06/June_26-150x150.png 150w, https://blog.ovhcloud.com/wp-content/uploads/2026/06/June_26-768x768.png 768w, https://blog.ovhcloud.com/wp-content/uploads/2026/06/June_26-70x70.png 70w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></figure>



<p class="wp-block-paragraph">It’s annoying: a payment often takes seconds to leave your account, but it can take days to reach the person on the other end. Why?</p>



<p class="wp-block-paragraph">It is one of those modern financial mysteries. You tap your phone and the payment looks instant. But if you send money abroad, it can take three to five business days… Moreover, suddenly there are fees, delays, banking cut-off times and a trail of institutions&#8230; In an age of real-time apps and always-on services, traditional payments can still move maddeningly slow.</p>



<p class="wp-block-paragraph">But this is one of the reasons blockchain gets so much attention in today’s financial circles. Put simply, <strong>blockchain has the potential to make some payments faster, cheaper, and easier to track.</strong> It is not perfect, and it will not replace every payment system overnight, but it does offer an alternative way of moving value between parties.<br></p>



<h2 class="wp-block-heading"><strong>Why traditional payments can be slow</strong></h2>



<p class="wp-block-paragraph">To understand why blockchain matters, it helps to look at how many traditional payments work today.</p>



<p class="wp-block-paragraph">If you buy a coffee in your local café, the transaction feels immediate. But behind the scenes, several things are happening. Your bank, the merchant’s bank, the card network and payment processor may all be involved. <strong>The transaction is authorised quickly, but settlement can happen later.</strong></p>



<p class="wp-block-paragraph">Now imagine a more complicated scenario: a freelance designer in France is being paid by a client in the U.S., or a doctor working in London is sending money home to the Philippines. In these cases, the payment often passes through multiple banks, correspondent banking networks, foreign exchange systems, and compliance checks before it reaches the final account.</p>



<p class="wp-block-paragraph">Each step adds time, cost, and complexity.</p>



<p class="wp-block-paragraph">This is why international payments can take days rather than minutes. The money may move across different banking systems, operating in different time zones, with different rules, intermediary fees and business-hour limitations. In short, traditional payments often rely on a chain of trusted institutions updating their own records, one by one.</p>



<h2 class="wp-block-heading"><strong>How blockchain changes the model</strong></h2>



<p class="wp-block-paragraph">Blockchain works differently.</p>



<p class="wp-block-paragraph">Instead of several institutions each keeping their own version of the transaction and then reconciling those records, blockchain uses what’s called a <strong>shared ledger</strong>: a record of transactions that is distributed across a network and updated according to the same rules. In simple terms, <em>the participants in a</em> <em>shared ledger network are looking at the same history of payments</em>, <em>rather than passing information from one private database to another.</em></p>



<p class="wp-block-paragraph">That matters because a lot of delay in traditional payments comes from handoffs. One institution sends instructions to another. A second institution checks them. A third updates its own records. If any part of that chain is closed, delayed, or requires extra review, the payment slows down.</p>



<p class="wp-block-paragraph">With blockchain payments, the process is more direct. A payment request is sent to the network. Computers on that network check that the sender has the funds and that the same money has not already been spent elsewhere. Once the transaction is validated, it is grouped with other verified transactions, added to the ledger, and then reflected across the network. That shared update is what gives both sides a clearer, synchronized view of what has happened.</p>



<p class="wp-block-paragraph">This does not remove every check or every operational requirement. But it can reduce the number of intermediaries involved in moving and confirming value. It can also allow the network to operate continuously, rather than depending on banking hours, weekends or regional cut-off times.</p>



<p class="wp-block-paragraph">Therefore, some blockchain payments can settle far more quickly than traditional international transfers. In the right conditions, they can even happen in minutes or seconds, instead of days.</p>



<h2 class="wp-block-heading"><strong>A simple real-world example</strong></h2>



<p class="wp-block-paragraph">For example, let’s say a woman named Maria works as an architect in Chicago and sends part of her salary every month to her sister and nieces in Mexico. Using a traditional remittance service, she may pay transfer fees, exchange-rate markups, and they have to wait a day or two for the funds to arrive. If the transfer is made before a weekend or public holiday, it may take even longer.</p>



<p class="wp-block-paragraph">With a blockchain-based payment system, the same transfer could move across a digital network much more directly – maybe even instantly. Instead of passing through a long chain of correspondent banks, the transaction is submitted to a shared ledger, validated by the network, and recorded in a way that both sides can verify. Maria’s family does not have to wait for multiple institutions to update separate records in sequence before the payment is considered settled.</p>



<p class="wp-block-paragraph">That does not mean the experience is always instant or frictionless, but it does show why blockchain is relevant to ordinary payments. Not just about crypto trading or speculation, blockchain can also make everyday financial activity more efficient and reliable.</p>



<h2 class="wp-block-heading"><strong>Can blockchain make payments cheaper too?</strong></h2>



<p class="wp-block-paragraph">Oftentimes, yes.</p>



<p class="wp-block-paragraph">Traditional payment systems can be expensive because multiple parties may each take a fee. Currency conversion adds more cost. Smaller cross-border payments can be especially frustrating, because the charges can feel disproportionate to the amount being sent.</p>



<p class="wp-block-paragraph">Blockchain can reduce some of this friction because fewer intermediaries may be involved in moving and confirming the payment. In some systems, the network is handling verification and settlement instead of several institutions performing overlapping roles.</p>



<p class="wp-block-paragraph">That does not mean every blockchain payment is cheap. Costs depend heavily on the network, the design of the application, and how busy the chain is. But the core idea is compelling: fewer middlemen means fewer handoffs, which can mean lower costs.</p>



<h2 class="wp-block-heading"><strong>What blockchain will not fix on its own</strong></h2>



<p class="wp-block-paragraph">However, there are some caveats.</p>



<p class="wp-block-paragraph">Blockchain does not automatically solve every challenge in payments. Regulation, consumer protection, currency volatility, user experience, and integration with existing financial systems all matter. In many markets, blockchain payments still need better interfaces and clearer frameworks before they become truly mainstream.</p>



<p class="wp-block-paragraph">There is also a difference between the underlying technology and the end-user experience. Most people do not want to think about wallets, keys, or protocols when they are paying rent or buying groceries. For blockchain payments to scale, the experience must become simpler and more familiar.</p>



<h2 class="wp-block-heading"><strong>Back to Maria</strong></h2>



<p class="wp-block-paragraph">So let’s go back to Maria, sending money back to her family who might have an important bill they need to pay urgently.</p>



<p class="wp-block-paragraph">In the traditional model, the payment might pass through several institutions, take days to settle, and lose value through fees and exchange costs.</p>



<p class="wp-block-paragraph">In a blockchain-based model, the transfer could move through a shared ledger, be validated by the network rather than reconciled across several separate databases, settle much faster, and give both sides a clearer view of what is happening.</p>



<p class="wp-block-paragraph">That is why this matters to regular people like you, me, and Maria. Blockchain may not replace every payment rail tomorrow, but it offers a serious alternative for a world that increasingly expects transactions to be fast, transparent and borderless.</p>
<img loading="lazy" decoding="async" src="//blog.ovhcloud.com/wp-content/plugins/matomo/app/matomo.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Fblog.ovhcloud.com%2Fblockchain-payments%2F&amp;action_name=How%20can%20blockchain%20speed%20up%20payments%3F&amp;urlref=https%3A%2F%2Fblog.ovhcloud.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
