From 73b327f410d03fed1e2df331b192f495e7b78026 Mon Sep 17 00:00:00 2001 From: Kevin Smith Date: Tue, 29 May 2018 08:02:56 -0400 Subject: [PATCH] Docker runtime integration. Provision 10G logical volume in cgts_vg for docker usage. puppet changes to configure and start docker if --kubernetes config_controller option specified. Change-Id: I6820025e34564283981798a53ad2f3d42162e804 --- puppet-manifests/src/manifests/controller.pp | 1 + .../src/modules/platform/manifests/ceph.pp | 4 ++ .../src/modules/platform/manifests/docker.pp | 39 ++++++++++++ .../modules/platform/manifests/filesystem.pp | 63 ++++++++++++++++--- .../modules/platform/manifests/kubernetes.pp | 8 +-- .../api/controllers/v1/controller_fs.py | 3 +- .../sysinv/sysinv/sysinv/common/constants.py | 7 +++ .../sysinv/sysinv/sysinv/conductor/manager.py | 25 +++++++- sysinv/sysinv/sysinv/sysinv/puppet/storage.py | 5 ++ 9 files changed, 140 insertions(+), 15 deletions(-) create mode 100644 puppet-manifests/src/modules/platform/manifests/docker.pp diff --git a/puppet-manifests/src/manifests/controller.pp b/puppet-manifests/src/manifests/controller.pp index a66e5de68f..065d165341 100644 --- a/puppet-manifests/src/manifests/controller.pp +++ b/puppet-manifests/src/manifests/controller.pp @@ -30,6 +30,7 @@ include ::platform::amqp::rabbitmq include ::platform::postgresql::server include ::platform::haproxy::server include ::platform::grub +include ::platform::docker include ::platform::kubernetes::master include ::platform::patching diff --git a/puppet-manifests/src/modules/platform/manifests/ceph.pp b/puppet-manifests/src/modules/platform/manifests/ceph.pp index 9d8bb314ee..f95bbb851c 100644 --- a/puppet-manifests/src/modules/platform/manifests/ceph.pp +++ b/puppet-manifests/src/modules/platform/manifests/ceph.pp @@ -5,6 +5,8 @@ class platform::ceph::params( $authentication_type = 'none', $mon_lv_name = 'ceph-mon-lv', $mon_lv_size = 0, + $mon_fs_type = 'ext4', + $mon_fs_options = ' ', $mon_mountpoint = '/var/lib/ceph/mon', $mon_0_host = undef, $mon_0_ip = undef, @@ -88,6 +90,8 @@ class platform::ceph::monitor lv_name => $mon_lv_name, lv_size => $mon_lv_size, mountpoint => $mon_mountpoint, + fs_type => $mon_fs_type, + fs_options => $mon_fs_options, } -> Class['::ceph'] file { "/etc/pmon.d/ceph.conf": diff --git a/puppet-manifests/src/modules/platform/manifests/docker.pp b/puppet-manifests/src/modules/platform/manifests/docker.pp new file mode 100644 index 0000000000..bedd3cd61d --- /dev/null +++ b/puppet-manifests/src/modules/platform/manifests/docker.pp @@ -0,0 +1,39 @@ +class platform::docker::params ( + $package_name = 'docker-ce', +) { } + +class platform::docker::config + inherits ::platform::docker::params { + + include ::platform::kubernetes::params + + if $::platform::kubernetes::params::enabled { + + Class['::platform::filesystem::docker'] ~> Class[$name] + + service { 'docker': + ensure => 'running', + name => 'docker', + enable => true, + require => Package['docker'] + } -> + exec { 'enable-docker': + command => '/usr/bin/systemctl enable docker.service', + } + } +} + +class platform::docker::install + inherits ::platform::docker::params { + + package { 'docker': + ensure => 'installed', + name => $package_name, + } +} + +class platform::docker +{ + include ::platform::docker::install + include ::platform::docker::config +} diff --git a/puppet-manifests/src/modules/platform/manifests/filesystem.pp b/puppet-manifests/src/modules/platform/manifests/filesystem.pp index 8f2cb7168f..67bf92fe12 100644 --- a/puppet-manifests/src/modules/platform/manifests/filesystem.pp +++ b/puppet-manifests/src/modules/platform/manifests/filesystem.pp @@ -1,5 +1,4 @@ class platform::filesystem::params ( - $fs_type = 'ext4', $vg_name = 'cgts-vg', ) {} @@ -8,6 +7,8 @@ define platform::filesystem ( $lv_name, $lv_size, $mountpoint, + $fs_type, + $fs_options ) { include ::platform::filesystem::params $vg_name = $::platform::filesystem::params::vg_name @@ -25,7 +26,8 @@ define platform::filesystem ( # create filesystem filesystem { $device: ensure => present, - fs_type => 'ext4', + fs_type => $fs_type, + options => $fs_options, } -> file { $mountpoint: @@ -41,7 +43,7 @@ define platform::filesystem ( ensure => 'mounted', device => "${device}", options => 'defaults', - fstype => $::platform::filesystem::params::fs_type, + fstype => $fs_type, } -> # The above mount resource doesn't actually remount devices that were already present in /etc/fstab, but were @@ -86,7 +88,9 @@ class platform::filesystem::backup::params ( $lv_name = 'backup-lv', $lv_size = '5', $mountpoint = '/opt/backups', - $devmapper = '/dev/mapper/cgts--vg-backup--lv' + $devmapper = '/dev/mapper/cgts--vg-backup--lv', + $fs_type = 'ext4', + $fs_options = ' ' ) {} class platform::filesystem::backup @@ -96,15 +100,18 @@ class platform::filesystem::backup lv_name => $lv_name, lv_size => $lv_size, mountpoint => $mountpoint, + fs_type => $fs_type, + fs_options => $fs_options } } - class platform::filesystem::scratch::params ( $lv_size = '8', $lv_name = 'scratch-lv', $mountpoint = '/scratch', - $devmapper = '/dev/mapper/cgts--vg-scratch--lv' + $devmapper = '/dev/mapper/cgts--vg-scratch--lv', + $fs_type = 'ext4', + $fs_options = ' ' ) { } class platform::filesystem::scratch @@ -114,15 +121,39 @@ class platform::filesystem::scratch lv_name => $lv_name, lv_size => $lv_size, mountpoint => $mountpoint, + fs_type => $fs_type, + fs_options => $fs_options } } +class platform::filesystem::docker::params ( + $lv_size = '1', + $lv_name = 'docker-lv', + $mountpoint = '/var/lib/docker', + $devmapper = '/dev/mapper/cgts--vg-docker--lv', + $fs_type = 'xfs', + $fs_options = '-n ftype=1', +) { } + +class platform::filesystem::docker + inherits ::platform::filesystem::docker::params { + + platform::filesystem { $lv_name: + lv_name => $lv_name, + lv_size => $lv_size, + mountpoint => $mountpoint, + fs_type => $fs_type, + fs_options => $fs_options + } +} class platform::filesystem::img_conversions::params ( $lv_size = '8', $lv_name = 'img-conversions-lv', $mountpoint = '/opt/img-conversions', - $devmapper = '/dev/mapper/cgts--vg-img--conversions--lv' + $devmapper = '/dev/mapper/cgts--vg-img--conversions--lv', + $fs_type = 'ext4', + $fs_options = ' ' ) {} class platform::filesystem::img_conversions @@ -134,6 +165,8 @@ class platform::filesystem::img_conversions lv_name => $lv_name, lv_size => $lv_size, mountpoint => $mountpoint, + fs_type => $fs_type, + fs_options => $fs_options } } @@ -141,6 +174,7 @@ class platform::filesystem::img_conversions class platform::filesystem::controller { include ::platform::filesystem::backup include ::platform::filesystem::scratch + include ::platform::filesystem::docker include ::platform::filesystem::img_conversions } @@ -175,6 +209,21 @@ class platform::filesystem::scratch::runtime { } +class platform::filesystem::docker::runtime { + + include ::platform::filesystem::docker::params + $lv_name = $::platform::filesystem::docker::params::lv_name + $lv_size = $::platform::filesystem::docker::params::lv_size + $devmapper = $::platform::filesystem::docker::params::devmapper + + platform::filesystem::resize { $lv_name: + lv_name => $lv_name, + lv_size => $lv_size, + devmapper => $devmapper, + } +} + + class platform::filesystem::img_conversions::runtime { include ::platform::filesystem::img_conversions::params diff --git a/puppet-manifests/src/modules/platform/manifests/kubernetes.pp b/puppet-manifests/src/modules/platform/manifests/kubernetes.pp index affe8cd614..06c474bb7c 100644 --- a/puppet-manifests/src/modules/platform/manifests/kubernetes.pp +++ b/puppet-manifests/src/modules/platform/manifests/kubernetes.pp @@ -52,6 +52,8 @@ class platform::kubernetes::master if $enabled { include ::platform::kubernetes::master::init + Class['::platform::docker::config'] -> Class[$name] + $repo_file = "[kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 @@ -88,12 +90,6 @@ class platform::kubernetes::master command => "sysctl --system", } -> - # Start docker - will move to another manifest. - service { 'docker': - ensure => 'running', - enable => true, - } -> - # Update kubelet configuration. Should probably just patch the kubelet # package to fix these things. file_line { "${kubeadm_conf} KUBELET_EXTRA_ARGS": diff --git a/sysinv/sysinv/sysinv/sysinv/api/controllers/v1/controller_fs.py b/sysinv/sysinv/sysinv/sysinv/api/controllers/v1/controller_fs.py index 7cb2a137b4..e29de6e49e 100644 --- a/sysinv/sysinv/sysinv/sysinv/api/controllers/v1/controller_fs.py +++ b/sysinv/sysinv/sysinv/sysinv/api/controllers/v1/controller_fs.py @@ -627,7 +627,8 @@ def _check_controller_multi_fs_data(context, controller_fs_list_new, lvdisplay_keys = [constants.FILESYSTEM_LV_DICT[constants.FILESYSTEM_NAME_DATABASE], constants.FILESYSTEM_LV_DICT[constants.FILESYSTEM_NAME_CGCS], constants.FILESYSTEM_LV_DICT[constants.FILESYSTEM_NAME_BACKUP], - constants.FILESYSTEM_LV_DICT[constants.FILESYSTEM_NAME_SCRATCH]] + constants.FILESYSTEM_LV_DICT[constants.FILESYSTEM_NAME_SCRATCH], + constants.FILESYSTEM_LV_DICT[constants.FILESYSTEM_NAME_DOCKER]] # On primary region, img-conversions always exists in controller_fs DB table. # On secondary region, if both glance and cinder are sharing from the primary diff --git a/sysinv/sysinv/sysinv/sysinv/common/constants.py b/sysinv/sysinv/sysinv/sysinv/common/constants.py index 618ee03fd3..48d33847bb 100644 --- a/sysinv/sysinv/sysinv/sysinv/common/constants.py +++ b/sysinv/sysinv/sysinv/sysinv/common/constants.py @@ -250,6 +250,7 @@ VSWITCH_TYPE_NUAGE_VRS = "nuage_vrs" # Partition default sizes DEFAULT_IMAGE_STOR_SIZE = 10 +DEFAULT_DOCKER_STOR_SIZE = 1 DEFAULT_DATABASE_STOR_SIZE = 20 DEFAULT_IMG_CONVERSION_STOR_SIZE = 20 DEFAULT_SMALL_IMAGE_STOR_SIZE = 10 @@ -263,6 +264,9 @@ DEFAULT_VIRTUAL_BACKUP_STOR_SIZE = 5 DEFAULT_EXTENSION_STOR_SIZE = 1 DEFAULT_PATCH_VAULT_STOR_SIZE = 8 +# Docker lv size when Kubernetes is configured +KUBERNETES_DOCKER_STOR_SIZE = 10 + # Openstack Interface names OS_INTERFACE_PUBLIC = 'public' OS_INTERFACE_INTERNAL = 'internal' @@ -408,6 +412,7 @@ FILESYSTEM_NAME_CINDER = 'cinder' FILESYSTEM_NAME_DATABASE = 'database' FILESYSTEM_NAME_IMG_CONVERSIONS = 'img-conversions' FILESYSTEM_NAME_SCRATCH = 'scratch' +FILESYSTEM_NAME_DOCKER = 'docker' FILESYSTEM_NAME_EXTENSION = 'extension' FILESYSTEM_NAME_PATCH_VAULT = 'patch-vault' @@ -415,6 +420,7 @@ FILESYSTEM_LV_DICT = { FILESYSTEM_NAME_CGCS: 'cgcs-lv', FILESYSTEM_NAME_BACKUP: 'backup-lv', FILESYSTEM_NAME_SCRATCH: 'scratch-lv', + FILESYSTEM_NAME_DOCKER: 'docker-lv', FILESYSTEM_NAME_IMG_CONVERSIONS: 'img-conversions-lv', FILESYSTEM_NAME_DATABASE: 'pgsql-lv', FILESYSTEM_NAME_EXTENSION: 'extension-lv', @@ -431,6 +437,7 @@ SUPPORTED_FILEYSTEM_LIST = [ FILESYSTEM_NAME_EXTENSION, FILESYSTEM_NAME_IMG_CONVERSIONS, FILESYSTEM_NAME_SCRATCH, + FILESYSTEM_NAME_DOCKER, FILESYSTEM_NAME_PATCH_VAULT, ] diff --git a/sysinv/sysinv/sysinv/sysinv/conductor/manager.py b/sysinv/sysinv/sysinv/sysinv/conductor/manager.py index 9f7768f392..cc678264f7 100644 --- a/sysinv/sysinv/sysinv/sysinv/conductor/manager.py +++ b/sysinv/sysinv/sysinv/sysinv/conductor/manager.py @@ -5269,6 +5269,8 @@ class ConductorManager(service.PeriodicService): 'platform::filesystem::img_conversions::runtime', constants.FILESYSTEM_NAME_SCRATCH: 'platform::filesystem::scratch::runtime', + constants.FILESYSTEM_NAME_DOCKER: + 'platform::filesystem::docker::runtime', constants.FILESYSTEM_NAME_DATABASE: 'platform::drbd::pgsql::runtime', constants.FILESYSTEM_NAME_CGCS: @@ -6062,6 +6064,8 @@ class ConductorManager(service.PeriodicService): system = self.dbapi.isystem_get_one() system_dc_role = system.get('distributed_cloud_role', None) region_config = system.capabilities.get('region_config', False) + kubernetes_config = system.capabilities.get('kubernetes_enabled', False) + LOG.info("Local Region Name: %s" % system.region_name) # handle region mode case if region_config: @@ -6362,6 +6366,22 @@ class ConductorManager(service.PeriodicService): data['name'], data['logical_volume'], data['size'])) self.dbapi.controller_fs_create(data) + if kubernetes_config: + docker_lv_size = constants.KUBERNETES_DOCKER_STOR_SIZE + else: + docker_lv_size = constants.DEFAULT_DOCKER_STOR_SIZE + + data = { + 'name': constants.FILESYSTEM_NAME_DOCKER, + 'size': docker_lv_size, + 'logical_volume': constants.FILESYSTEM_LV_DICT[ + constants.FILESYSTEM_NAME_DOCKER], + 'replicated': False, + } + LOG.info("Creating FS:%s:%s %d" % ( + data['name'], data['logical_volume'], data['size'])) + self.dbapi.controller_fs_create(data) + if (system_dc_role == constants.DISTRIBUTED_CLOUD_ROLE_SYSTEMCONTROLLER and tsc.system_type != constants.TIS_AIO_BUILD): data = { @@ -8651,13 +8671,16 @@ class ConductorManager(service.PeriodicService): def get_controllerfs_lv_sizes(self, context): system = self.dbapi.isystem_get_one() system_dc_role = system.get('distributed_cloud_role', None) + lvdisplay_command = 'lvdisplay --columns --options lv_size,lv_name ' \ '--units g --noheading --nosuffix ' \ '/dev/cgts-vg/pgsql-lv /dev/cgts-vg/backup-lv ' \ '/dev/cgts-vg/cgcs-lv ' \ '/dev/cgts-vg/img-conversions-lv ' \ '/dev/cgts-vg/scratch-lv ' \ - '/dev/cgts-vg/extension-lv ' + '/dev/cgts-vg/extension-lv '\ + '/dev/cgts-vg/docker-lv ' + if (system_dc_role == constants.DISTRIBUTED_CLOUD_ROLE_SYSTEMCONTROLLER and tsc.system_type != constants.TIS_AIO_BUILD): lvdisplay_command = lvdisplay_command + '/dev/cgts-vg/patch-vault-lv ' diff --git a/sysinv/sysinv/sysinv/sysinv/puppet/storage.py b/sysinv/sysinv/sysinv/sysinv/puppet/storage.py index e416be0696..5eedb46052 100644 --- a/sysinv/sysinv/sysinv/sysinv/puppet/storage.py +++ b/sysinv/sysinv/sysinv/sysinv/puppet/storage.py @@ -66,6 +66,11 @@ class StoragePuppet(base.BasePuppet): 'platform::drbd::patch_vault::params::lv_size': controller_fs.size, }) + elif controller_fs.name == constants.FILESYSTEM_NAME_DOCKER: + config.update({ + 'platform::filesystem::docker::params::lv_size': + controller_fs.size + }) return config