diff --git a/cmd/cluster/clusterCreate.go b/cmd/cluster/clusterCreate.go index afc82ca5..b5f93250 100644 --- a/cmd/cluster/clusterCreate.go +++ b/cmd/cluster/clusterCreate.go @@ -327,6 +327,9 @@ func NewCmdClusterCreate() *cobra.Command { cmd.Flags().String("agents-memory", "", "Memory limit imposed on the agents nodes [From docker]") _ = cfgViper.BindPFlag("options.runtime.agentsmemory", cmd.Flags().Lookup("agents-memory")) + cmd.Flags().Bool("host-pid-mode", false, "Enable host pid mode of server(s) and agent(s)") + _ = cfgViper.BindPFlag("options.runtime.hostpidmode", cmd.Flags().Lookup("host-pid-mode")) + /* Image Importing */ cmd.Flags().Bool("no-image-volume", false, "Disable the creation of a volume for importing images") _ = cfgViper.BindPFlag("options.k3d.disableimagevolume", cmd.Flags().Lookup("no-image-volume")) diff --git a/pkg/config/transform.go b/pkg/config/transform.go index 07a53839..c69c82ae 100644 --- a/pkg/config/transform.go +++ b/pkg/config/transform.go @@ -136,11 +136,12 @@ func TransformSimpleToClusterConfig(ctx context.Context, runtime runtimes.Runtim for i := 0; i < simpleConfig.Servers; i++ { serverNode := k3d.Node{ - Name: client.GenerateNodeName(newCluster.Name, k3d.ServerRole, i), - Role: k3d.ServerRole, - Image: simpleConfig.Image, - ServerOpts: k3d.ServerOpts{}, - Memory: simpleConfig.Options.Runtime.ServersMemory, + Name: client.GenerateNodeName(newCluster.Name, k3d.ServerRole, i), + Role: k3d.ServerRole, + Image: simpleConfig.Image, + ServerOpts: k3d.ServerOpts{}, + Memory: simpleConfig.Options.Runtime.ServersMemory, + HostPidMode: simpleConfig.Options.Runtime.HostPidMode, } // first server node will be init node if we have more than one server specified but no external datastore @@ -158,10 +159,11 @@ func TransformSimpleToClusterConfig(ctx context.Context, runtime runtimes.Runtim for i := 0; i < simpleConfig.Agents; i++ { agentNode := k3d.Node{ - Name: client.GenerateNodeName(newCluster.Name, k3d.AgentRole, i), - Role: k3d.AgentRole, - Image: simpleConfig.Image, - Memory: simpleConfig.Options.Runtime.AgentsMemory, + Name: client.GenerateNodeName(newCluster.Name, k3d.AgentRole, i), + Role: k3d.AgentRole, + Image: simpleConfig.Image, + Memory: simpleConfig.Options.Runtime.AgentsMemory, + HostPidMode: simpleConfig.Options.Runtime.HostPidMode, } newCluster.Nodes = append(newCluster.Nodes, &agentNode) } diff --git a/pkg/config/v1alpha3/types.go b/pkg/config/v1alpha3/types.go index a3e96cc2..18e2f942 100644 --- a/pkg/config/v1alpha3/types.go +++ b/pkg/config/v1alpha3/types.go @@ -104,6 +104,7 @@ type SimpleConfigOptionsRuntime struct { GPURequest string `mapstructure:"gpuRequest" yaml:"gpuRequest,omitempty" json:"gpuRequest,omitempty"` ServersMemory string `mapstructure:"serversMemory" yaml:"serversMemory,omitempty" json:"serversMemory,omitempty"` AgentsMemory string `mapstructure:"agentsMemory" yaml:"agentsMemory,omitempty" json:"agentsMemory,omitempty"` + HostPidMode bool `mapstructure:"hostPidMode" yaml:"hostPidMode,omitempty" json:"hostPidMode,omitempty"` Labels []LabelWithNodeFilters `mapstructure:"labels" yaml:"labels,omitempty" json:"labels,omitempty"` } diff --git a/pkg/runtimes/docker/translate.go b/pkg/runtimes/docker/translate.go index 356d1a4f..b353c057 100644 --- a/pkg/runtimes/docker/translate.go +++ b/pkg/runtimes/docker/translate.go @@ -120,6 +120,10 @@ func TranslateNodeToContainer(node *k3d.Node) (*NodeInDocker, error) { // TODO: can we replace this by a reduced set of capabilities? hostConfig.Privileged = true + if node.HostPidMode { + hostConfig.PidMode = "host" + } + /* Volumes */ hostConfig.Binds = node.Volumes // containerConfig.Volumes = map[string]struct{}{} // TODO: do we need this? We only used binds before diff --git a/pkg/types/types.go b/pkg/types/types.go index 191bf219..debf5e33 100644 --- a/pkg/types/types.go +++ b/pkg/types/types.go @@ -284,6 +284,7 @@ type Node struct { Ports nat.PortMap `yaml:"portMappings" json:"portMappings,omitempty"` Restart bool `yaml:"restart" json:"restart,omitempty"` Created string `yaml:"created" json:"created,omitempty"` + HostPidMode bool `yaml:"hostPidMode" json:"hostPidMode,omitempty"` RuntimeLabels map[string]string `yaml:"runtimeLabels" json:"runtimeLabels,omitempty"` K3sNodeLabels map[string]string `yaml:"k3sNodeLabels" json:"k3sNodeLabels,omitempty"` Networks []string // filled automatically