in pkg/skoop/collector/manager/manager.go [319:426]
func (m *simplePodCollectorManager) createCollectorPod(nodeName string) (*v1.Pod, error) {
klog.V(3).Infof("Creating pod on node %s with image %s", nodeName, m.image)
hostPathType := v1.HostPathDirectory
podName := fmt.Sprintf("collector-%s", nodeName)
err := m.ensurePodClean(podName)
if err != nil {
return nil, err
}
pod := &v1.Pod{
TypeMeta: metav1.TypeMeta{
Kind: "Pod",
APIVersion: "v1",
},
ObjectMeta: metav1.ObjectMeta{
Namespace: m.namespace,
Name: podName,
},
Spec: v1.PodSpec{
InitContainers: []v1.Container{
{
Name: "collector",
Image: m.image,
ImagePullPolicy: m.imagePullPolicy,
SecurityContext: &v1.SecurityContext{
Privileged: pointer.Bool(true),
},
Env: []v1.EnvVar{{
Name: "RUNTIME_SOCK",
Value: m.runtimeAPIAddress,
}},
Command: []string{"/bin/pod-collector"},
VolumeMounts: []v1.VolumeMount{
{
Name: "cri-dir",
MountPath: "/var/run",
},
{
Name: "data",
MountPath: "/data",
},
{
Name: "lib-modules",
MountPath: "/lib/modules",
},
},
},
},
Containers: []v1.Container{
{
Name: "alive",
Image: m.image,
ImagePullPolicy: m.imagePullPolicy,
Command: []string{
"/bin/sh",
"-c",
"while true;do sleep 100;done;",
},
VolumeMounts: []v1.VolumeMount{
{
Name: "data",
MountPath: "/data",
},
},
},
},
NodeName: nodeName,
HostNetwork: true,
HostPID: true,
HostIPC: true,
RestartPolicy: "Never",
Volumes: []v1.Volume{
{
Name: "cri-dir",
VolumeSource: v1.VolumeSource{
HostPath: &v1.HostPathVolumeSource{
Path: "/var/run",
Type: &hostPathType,
},
},
},
{
Name: "lib-modules",
VolumeSource: v1.VolumeSource{
HostPath: &v1.HostPathVolumeSource{
Path: "/lib/modules",
Type: &hostPathType,
},
},
},
{
Name: "data",
VolumeSource: v1.VolumeSource{
EmptyDir: &v1.EmptyDirVolumeSource{},
},
},
},
Tolerations: []v1.Toleration{
{
Operator: v1.TolerationOpExists,
},
},
},
Status: v1.PodStatus{},
}
return m.client.CoreV1().Pods(m.namespace).Create(context.TODO(), pod, metav1.CreateOptions{})
}