Giuseppe Lavagetto has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/317475

Change subject: docker: refactor the storage setup, allow thick pools
......................................................................

docker: refactor the storage setup, allow thick pools

Since the lvm2 version on debian jessie does not support thin pools,
refactor our docker storage configuration into separate profiles, which
I intended to do anyways.

Bug: T147181
Change-Id: Ic5c1075ff7448dd9751cf596c93bdd1b99b5ef80
---
M hieradata/role/common/kubernetes/worker.yaml
M modules/profile/manifests/docker/engine.pp
A modules/profile/manifests/docker/storage.pp
A modules/profile/manifests/docker/storage/thinpool.pp
M modules/role/manifests/kubernetes/worker.pp
5 files changed, 173 insertions(+), 78 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/operations/puppet 
refs/changes/75/317475/1

diff --git a/hieradata/role/common/kubernetes/worker.yaml 
b/hieradata/role/common/kubernetes/worker.yaml
index bda5b48..90f7fb7 100644
--- a/hieradata/role/common/kubernetes/worker.yaml
+++ b/hieradata/role/common/kubernetes/worker.yaml
@@ -1,3 +1,3 @@
-profile::docker::engine::physical_volumes: "/dev/md2"
+profile::docker::storage::physical_volumes: "/dev/md2"
 profile::docker::engine::version: "1.12.2-0~jessie"
 profile::docker::engine::proxy: "http://webproxy.%{::site}.wmnet:8080";
diff --git a/modules/profile/manifests/docker/engine.pp 
b/modules/profile/manifests/docker/engine.pp
index af05650..5c8417e 100644
--- a/modules/profile/manifests/docker/engine.pp
+++ b/modules/profile/manifests/docker/engine.pp
@@ -4,16 +4,9 @@
 # devicemapper storage driver to work.
 # to work
 class profile::docker::engine {
-    # Parameters that need to be defined in hiera
-    $physical_volumes = hiera('profile::docker::engine::physical_volumes')
 
     # Optional parameters
-    # Volume group to substitute
-    $vg_to_remove = hiera('profile::docker::engine::vg_to_remove', undef)
     $docker_settings = hiera('profile::docker::engine::settings', {})
-    # Size of the thin pool and the metadata pool.
-    $lv_extents = hiera('profile::docker::engine::lv_extents', '95%VG')
-    $pool_metadata_size = hiera('profile::docker::engine::lvm_metadata_size', 
undef)
     # Version to install; the default is not to pick one.
     $docker_version = hiera('profile::docker::engine::version', 'present')
     $apt_proxy = hiera('profile::docker::engine::proxy', undef)
@@ -25,77 +18,15 @@
         proxy   => $apt_proxy,
     }
 
-    # Storage
-    if $vg_to_remove {
-        volume_group { $vg_to_remove:
-            ensure           => absent,
-            physical_volumes => [],
-        }
-    }
-    $basic_lv_params = {
-        extents  => $lv_extents,
-        thinpool => true,
-        mounted  => false,
-        createfs => false,
-    }
-
-    $lv_params = $pool_metadata_size ? {
-        undef   => $basic_lv_params,
-        default => merge($basic_lv_params, {'poolmetadatasize' => 
$pool_metadata_size}),
-    }
-
-    $logical_volumes = {
-        'thinpool'     => $lv_params,
-    }
-
-    $volume_group = {
-        docker => {
-            ensure           => present,
-            physical_volumes => $physical_volumes,
-            logical_volumes  => $logical_volumes,
-        }
-    }
-
-    class { 'lvm':
-        manage_pkg    => true,
-        volume_groups => $volume_group,
-    }
-
-    file { '/etc/lvm/profile/':
-        ensure => directory,
-        owner  => 'root',
-        group  => 'root',
-        mode   => '0555',
-    }
-
-    file { '/etc/lvm/profile/docker-thinpool.profile':
-        ensure => present,
-        owner  => 'root',
-        group  => 'root',
-        mode   => '0444',
-        source => 'puppet:///modules/profile/docker/lvm.profile',
-    }
-
-    exec { 'Attach profile to docker thinpool':
-        command => '/sbin/lvchange --metadataprofile docker-thinpool 
docker/thinpool',
-        unless  => '/sbin/lvs -o lv_profile docker/thinpool | grep -q docker',
-        require => [
-            File['/etc/lvm/profile/docker-thinpool.profile'],
-            Logical_volume['thinpool']
-        ],
-    }
-
-    $docker_storage_options = {
-        'storage-driver' => 'devicemapper',
-        'storage-opts'   =>  [
-            'dm.thinpooldev=/dev/mapper/docker-thinpool-tpool',
-            'dm.use_deferred_removal=true',
-            'dm.use_deferred_deletion=true'
-        ]
-    }
-
-
     # Docker config
+    # Fetch the storage config from the related driver
+    if defined(Class['::profile::docker::storage::thinpool']) {
+        $docker_storage_options = 
$::profile::docker::storage::thinpool::options
+    } else {
+        $docker_storage_options = $::profile::docker::storage::options
+    }
+
+    # We need to import one storage config
     class { 'docker::configuration':
         settings => merge($docker_settings, $docker_storage_options),
     }
diff --git a/modules/profile/manifests/docker/storage.pp 
b/modules/profile/manifests/docker/storage.pp
new file mode 100644
index 0000000..7969acd
--- /dev/null
+++ b/modules/profile/manifests/docker/storage.pp
@@ -0,0 +1,66 @@
+# == Class profile::docker::storage
+#
+# Sets up the storage for the devicemanager docker storage driver
+# with thick pools
+#
+# This should be used on jessie, see:
+#
+# https://github.com/docker/docker/issues/15629
+#
+class profile::docker::storage {
+    # Parameters that need to be defined in hiera
+    # list of physical volumes to use.
+    $physical_volumes = hiera('profile::docker::storage::physical_volumes')
+    # Optional parameters
+    # Volume group to substitute.
+    $vg_to_remove = hiera('profile::docker::storage::vg_to_remove', undef)
+    # Size of the thin pool and the metadata pool.
+    $extents = hiera('profile::docker::storage::extents', '95%VG')
+    $metadata_size = hiera('profile::docker::storage::metadata_size', '5%VG')
+
+    if $vg_to_remove {
+        volume_group { $vg_to_remove:
+            ensure           => absent,
+            physical_volumes => [],
+        }
+    }
+
+    $main_lv_params = {
+        extents  => $extents,
+        mounted  => false,
+        createfs => false,
+    }
+
+    $metadata_lv_params = {
+        extents  => $metadata_size,
+        mounted  => false,
+        createfs => false,
+    }
+
+    $logical_volumes = {
+        'data'     => $main_lv_params,
+        'metadata' => $metadata_lv_params,
+    }
+
+    $volume_group = {
+        docker => {
+            ensure           => present,
+            physical_volumes => $physical_volumes,
+            logical_volumes  => $logical_volumes,
+        }
+    }
+
+    class { 'lvm':
+        manage_pkg    => true,
+        volume_groups => $volume_group,
+    }
+
+    # This will be used in profile::docker::engine
+    $options = {
+        'storage-driver' => 'devicemapper',
+        'storage-opts'   =>  [
+            'dm.datadev=/dev/mapper/docker-data',
+            'dm.metadatadev=/dev/mapper/docker-metadata'
+        ]
+    }
+}
diff --git a/modules/profile/manifests/docker/storage/thinpool.pp 
b/modules/profile/manifests/docker/storage/thinpool.pp
new file mode 100644
index 0000000..a47a434
--- /dev/null
+++ b/modules/profile/manifests/docker/storage/thinpool.pp
@@ -0,0 +1,97 @@
+# == Class profile::docker::storage::thinpool
+#
+# Sets up the storage for the devicemanager docker storage driver
+# when thinpools can be used.
+#
+# Do NOT use on debian jessie, see
+#
+# https://github.com/docker/docker/issues/15629
+#
+class profile::docker::storage::thinpool {
+    # Parameters that need to be defined in hiera
+    # list of physical volumes to use. Common to all the storage profiles
+    $physical_volumes = hiera('profile::docker::storage::physical_volumes')
+
+    # Optional parameters
+    # Volume group to substitute. Common to all the storage profiles
+    $vg_to_remove = hiera('profile::docker::storage::vg_to_remove', undef)
+    # Size of the thin pool and the metadata pool.
+    $extents = hiera('profile::docker::storage::extents', '95%VG')
+    $metadata_size = hiera('profile::docker::storage::metadata_size', undef)
+
+    if os_version('debian == jessie') {
+        fail('Thin pools cannot be used on Debian jessie.')
+    }
+
+
+    if $vg_to_remove {
+        volume_group { $vg_to_remove:
+            ensure           => absent,
+            physical_volumes => [],
+        }
+    }
+
+    $basic_lv_params = {
+        extents  => $extents,
+        thinpool => true,
+        mounted  => false,
+        createfs => false,
+    }
+
+    $lv_params = $metadata_size ? {
+        undef   => $basic_lv_params,
+        default => merge($basic_lv_params, {'poolmetadatasize' => 
$metadata_size}),
+    }
+
+    $logical_volumes = {
+        'thinpool'     => $lv_params,
+    }
+
+    $volume_group = {
+        docker => {
+            ensure           => present,
+            physical_volumes => $physical_volumes,
+            logical_volumes  => $logical_volumes,
+        }
+    }
+
+    class { 'lvm':
+        manage_pkg    => true,
+        volume_groups => $volume_group,
+    }
+
+
+    file { '/etc/lvm/profile/':
+        ensure => directory,
+        owner  => 'root',
+        group  => 'root',
+        mode   => '0555',
+    }
+
+    file { '/etc/lvm/profile/docker-thinpool.profile':
+        ensure => present,
+        owner  => 'root',
+        group  => 'root',
+        mode   => '0444',
+        source => 'puppet:///modules/profile/docker/lvm.profile',
+    }
+
+    exec { 'Attach profile to docker thinpool':
+        command => '/sbin/lvchange --metadataprofile docker-thinpool 
docker/thinpool',
+        unless  => '/sbin/lvs -o lv_profile docker/thinpool | grep -q docker',
+        require => [
+            File['/etc/lvm/profile/docker-thinpool.profile'],
+            Logical_volume['thinpool']
+        ],
+    }
+
+    # This will be used in profile::docker::engine
+    $options = {
+        'storage-driver' => 'devicemapper',
+        'storage-opts'   =>  [
+            'dm.thinpooldev=/dev/mapper/docker-thinpool-tpool',
+            'dm.use_deferred_removal=true',
+            'dm.use_deferred_deletion=true'
+        ]
+    }
+}
diff --git a/modules/role/manifests/kubernetes/worker.pp 
b/modules/role/manifests/kubernetes/worker.pp
index efd7d8e..0c66e23 100644
--- a/modules/role/manifests/kubernetes/worker.pp
+++ b/modules/role/manifests/kubernetes/worker.pp
@@ -3,5 +3,6 @@
     include base::firewall
 
     # Sets up docker on the machine
+    include ::profile::docker::storage
     include ::profile::docker::engine
 }

-- 
To view, visit https://gerrit.wikimedia.org/r/317475
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic5c1075ff7448dd9751cf596c93bdd1b99b5ef80
Gerrit-PatchSet: 1
Gerrit-Project: operations/puppet
Gerrit-Branch: production
Gerrit-Owner: Giuseppe Lavagetto <glavage...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to