Kubernetes Charm Libraries
Channel | Revision | Published | Runs on |
---|---|---|---|
latest/edge | 65 | 06 Jan 2025 |
juju deploy kubernetes-charm-libraries --channel edge
Deploy universal operators easily with Juju, the Universal Operator Lifecycle Manager.
Platform:
charms.kubernetes_charm_libraries.v0.multus
-
- Last updated 10 Dec 2024
- Revision Library version 0.17
Charm Library used to leverage the Multus Kubernetes CNI in charms.
Usage
from typing import List
from charms.kubernetes_charm_libraries.v0.multus import (
KubernetesMultusCharmLib,
NetworkAnnotation,
NetworkAttachmentDefinition,
)
from ops import RemoveEvent
from ops.charm import CharmBase
from ops.framework import EventBase
from ops.main import main
class YourCharm(CharmBase):
def __init__(self, *args):
super().__init__(*args)
self._kubernetes_multus = KubernetesMultusCharmLib(
cap_net_admin=True,
namespace=self.model.name,
statefulset_name=self.model.app.name,
pod_name="-".join(self.model.unit.name.rsplit("/", 1)),
container_name=self._bessd_container_name,
network_annotations=self._generate_network_annotations(),
network_attachment_definitions=self._network_attachment_definitions_from_config(),
privileged=True,
)
self.framework.observe(self.on.update_status, self._on_update_status)
def _on_update_status(self, event: EventBase):
self._kubernetes_multus.configure()
def _on_remove(self, _: RemoveEvent) -> None:
self._kubernetes_multus.remove()
def _generate_network_annotations(self) -> List[NetworkAnnotation]:
return [
NetworkAnnotation(
name=ACCESS_NETWORK_ATTACHMENT_DEFINITION_NAME,
interface_name=ACCESS_INTERFACE_NAME,
bridge_name=ACCESS_INTERFACE_BRIDGE_NAME,
),
NetworkAnnotation(
name=CORE_NETWORK_ATTACHMENT_DEFINITION_NAME,
interface_name=CORE_INTERFACE_NAME,
bridge_name=CORE_INTERFACE_BRIDGE_NAME,
),
]
def _network_attachment_definitions_from_config(self) -> List[NetworkAttachmentDefinition]:
return [
NetworkAttachmentDefinition(
name=ACCESS_NETWORK_ATTACHMENT_DEFINITION_NAME,
cni_type="macvlan",
network_name=self.config["access_network_name"],
),
NetworkAttachmentDefinition(
name=CORE_NETWORK_ATTACHMENT_DEFINITION_NAME,
cni_type="macvlan",
network_name=self.config["core_network_name"],
),
]
Index
class NetworkAttachmentDefinition
Description
Object to represent Kubernetes Multus NetworkAttachmentDefinition. None
Methods
NetworkAttachmentDefinition. __eq__( self , other )
Description
Validate equality between two NetworkAttachmentDefinitions object. None
class NetworkAnnotation
Description
NetworkAnnotation. None
Methods
NetworkAnnotation. dict( self )
Return a NetworkAnnotation in the form of a dictionary.
Returns
Dictionary representation of the NetworkAnnotation
class KubernetesMultusError
Description
KubernetesMultusError. None
Methods
KubernetesMultusError. __init__( self , message: str )
class KubernetesClient
Description
Class containing all the Kubernetes specific calls. None
Methods
KubernetesClient. __init__( self , namespace: str )
KubernetesClient. delete_pod( self , pod_name: str )
Delete given pod.
Arguments
Pod name
KubernetesClient. pod_is_ready( self , pod_name: str )
Return whether pod has the requisite network annotation and NET_ADMIN capability.
Arguments
Pod name
List of network annotations
Container name
Container requires NET_ADMIN capability
Container requires privileged security context
Returns
Whether pod is ready.
KubernetesClient. network_attachment_definition_is_created( self , network_attachment_definition: NetworkAttachmentDefinition )
Return whether a NetworkAttachmentDefinition is created.
Arguments
NetworkAttachmentDefinition
Returns
Whether the NetworkAttachmentDefinition is created
KubernetesClient. create_network_attachment_definition( self , network_attachment_definition: GenericNamespacedResource )
Create a NetworkAttachmentDefinition.
Arguments
NetworkAttachmentDefinition object
KubernetesClient. list_network_attachment_definitions( self )
List NetworkAttachmentDefinitions in a given namespace.
Returns
List of NetworkAttachmentDefinitions
KubernetesClient. delete_network_attachment_definition( self , name: str )
Delete network attachment definition based on name.
Arguments
NetworkAttachmentDefinition name
KubernetesClient. patch_statefulset( self , name: str , network_annotations , container_name: str , cap_net_admin: bool , privileged: bool )
Patch a statefulset with Multus annotation and NET_ADMIN capability.
Arguments
Statefulset name
List of network annotations
Container name
Container requires NET_ADMIN capability
Container requires privileged security context
KubernetesClient. unpatch_statefulset( self , name: str , container_name: str )
Remove annotations, security privilege and NET_ADMIN capability from stateful set.
Arguments
Statefulset name
Container name
KubernetesClient. statefulset_is_patched( self , name: str , network_annotations , container_name: str , cap_net_admin: bool , privileged: bool )
Return whether the statefulset has the expected multus annotation.
Arguments
Statefulset name.
list of network annotations
Container name
Container requires NET_ADMIN capability
Container requires privileged security context
Returns
Whether the statefulset has the expected multus annotation.
KubernetesClient. multus_is_available( self )
Check whether Multus is enabled leveraging existence of NAD custom resource.
Returns
Whether Multus is enabled
class KubernetesMultusCharmLib
Description
Class to be instantiated by charms requiring Multus networking. None
Methods
KubernetesMultusCharmLib. __init__( self , network_attachment_definitions , network_annotations , namespace: str , statefulset_name: str , pod_name: str , container_name: str , cap_net_admin: bool , privileged: bool )
Create instance of the KubernetesMultusCharmLib.
Arguments
list of NetworkAttachmentDefinition
to be created.
List of NetworkAnnotation
to be added to the container.
Kubernetes namespace
Statefulset name
Pod name
Container name
Container requires NET_ADMIN capability
Container requires privileged security context
KubernetesMultusCharmLib. configure( self )
Description
Create network attachment definitions and patches statefulset. None
KubernetesMultusCharmLib. is_ready( self )
Return whether Multus is ready.
Returns
Whether Multus is ready
Description
Validates that the network attachment definitions are created, that the statefulset is patched with the appropriate Multus annotations and capabilities and that the pod also contains the same annotations and capabilities.
KubernetesMultusCharmLib. remove( self )
Description
Delete network attachment definitions and removes patch. None
KubernetesMultusCharmLib. delete_pod( self )
Description
Delete the pod. None
KubernetesMultusCharmLib. multus_is_available( self )
Check whether Multus is enabled leveraging existence of NAD custom resource.
Returns
Whether Multus is enabled