From: Adam King Date: Wed, 6 Apr 2022 15:24:24 +0000 (-0400) Subject: cephadm: only apply pids-limit to iscsi and rgw X-Git-Tag: v17.2.6~5^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b48748c7b641300690d6699753baaede8aa88a09;p=ceph.git cephadm: only apply pids-limit to iscsi and rgw Signed-off-by: Adam King (cherry picked from commit 9c8f3942d5154e927d511bbcc9a0275a3dcecf05) --- diff --git a/src/cephadm/cephadm b/src/cephadm/cephadm index 773955ff6442..8df403850e33 100755 --- a/src/cephadm/cephadm +++ b/src/cephadm/cephadm @@ -930,10 +930,7 @@ class CephIscsi(object): # remove extra container args for tcmu container. # extra args could cause issue with forking service type tcmu_container.container_args = [] - # set container limits to unlimited as defaults (Docker 4096 / Podman 2048) - # prevents the creation of max lun (default 255) - pids_unlimited = '-1' if isinstance(self.ctx.container_engine, Podman) else '0' - tcmu_container.container_args.extend(['--pids-limit=%s' % pids_unlimited]) + set_pids_limit_unlimited(self.ctx, tcmu_container.container_args) return tcmu_container ################################## @@ -3068,6 +3065,17 @@ def get_ceph_volume_container(ctx: CephadmContext, ) +def set_pids_limit_unlimited(ctx: CephadmContext, container_args: List[str]) -> None: + # set container's pids-limit to unlimited rather than default (Docker 4096 / Podman 2048) + # Useful for daemons like iscsi where the default pids-limit limits the number of luns + # per iscsi target or rgw where increasing the rgw_thread_pool_size to a value near + # the default pids-limit may cause the container to crash. + if isinstance(ctx.container_engine, Podman): + container_args.append('--pids-limit=-1') + else: + container_args.append('--pids-limit=0') + + def get_container(ctx: CephadmContext, fsid: str, daemon_type: str, daemon_id: Union[int, str], privileged: bool = False, @@ -3089,6 +3097,7 @@ def get_container(ctx: CephadmContext, if daemon_type == 'rgw': entrypoint = '/usr/bin/radosgw' name = 'client.rgw.%s' % daemon_id + set_pids_limit_unlimited(ctx, container_args) elif daemon_type == 'rbd-mirror': entrypoint = '/usr/bin/rbd-mirror' name = 'client.rbd-mirror.%s' % daemon_id @@ -3125,6 +3134,7 @@ def get_container(ctx: CephadmContext, # So the container can modprobe iscsi_target_mod and have write perms # to configfs we need to make this a privileged container. privileged = True + set_pids_limit_unlimited(ctx, container_args) elif daemon_type == CustomContainer.daemon_type: cc = CustomContainer.init(ctx, fsid, daemon_id) entrypoint = cc.entrypoint @@ -3158,8 +3168,6 @@ def get_container(ctx: CephadmContext, # if using podman, set -d, --conmon-pidfile & --cidfile flags # so service can have Type=Forking - # set containers limits to unlimited as defaults (Docker 4096 / Podman 2048) - # prevents some app customizations from running if isinstance(ctx.container_engine, Podman): runtime_dir = '/run' container_args.extend([ @@ -3168,14 +3176,9 @@ def get_container(ctx: CephadmContext, runtime_dir + '/ceph-%s@%s.%s.service-pid' % (fsid, daemon_type, daemon_id), '--cidfile', runtime_dir + '/ceph-%s@%s.%s.service-cid' % (fsid, daemon_type, daemon_id), - '--pids-limit=-1', ]) if ctx.container_engine.version >= CGROUPS_SPLIT_PODMAN_VERSION and not ctx.no_cgroups_split: container_args.append('--cgroups=split') - else: - container_args.extend([ - '--pids-limit=0', - ]) return CephContainer.for_daemon( ctx,