func()

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{})
}