Documentation ¶
Overview ¶
Package exec scans and loads networking plugins that are installed under /usr/libexec/kubernetes/kubelet-plugins/net/exec/ The layout convention for a plugin is:
plugin-name/ (plugins have to be directories first) plugin-name/plugin-name (executable that will be called out, see Vendoring Note for more nuances) plugin-name/<other-files> where, 'executable' has the following requirements: - should have exec permissions - should give non-zero exit code on failure, and zero on success - the arguments will be <action> <pod_namespace> <pod_name> <docker_id_of_infra_container> whereupon, <action> will be one of: - init, called when the kubelet loads the plugin - setup, called after the infra container of a pod is created, but before other containers of the pod are created - teardown, called before the pod infra container is killed - status, called at regular intervals and is supposed to return a json formatted output indicating the pod's IPAddress(v4/v6). An empty string value or an erroneous output will mean the container runtime (docker) will be asked for the PodIP e.g. { "apiVersion" : "v1beta1", "kind" : "PodNetworkStatus", "ip" : "10.20.30.40" } The fields "apiVersion" and "kind" are optional in version v1beta1
As the executables are called, the file-descriptors stdin, stdout, stderr remain open. The combined output of stdout/stderr is captured and logged.
Note: If the pod infra container self-terminates (e.g. crashes or is killed), the entire pod lifecycle will be restarted, but teardown will not be called.
Vendoring Note:
Plugin Names can be vendored also. Use '~' as the escaped name for plugin directories. And expect command line argument to call vendored plugins as 'vendor/pluginName' e.g. pluginName = mysdn vendorname = mycompany then, plugin layout should be mycompany~mysdn/ mycompany~mysdn/mysdn (this becomes the executable) mycompany~mysdn/<other-files> and, call the kubelet with '--network-plugin=mycompany/mysdn'
Index ¶
Constants ¶
View Source
const X_OK = 0x1
Variables ¶
This section is empty.
Functions ¶
func ProbeNetworkPlugins ¶
func ProbeNetworkPlugins(pluginDir string) []network.NetworkPlugin
Types ¶
This section is empty.
Click to show internal directories.
Click to hide internal directories.