Documentation ¶
Overview ¶
Package k8s abstracts all Kubernetes specific behaviour
Package k8s abstracts all Kubernetes specific behaviour ¶
Package k8s contains all k8s related logic. +groupName=pkg
Package k8s abstracts all Kubernetes specific behaviour
Index ¶
- Constants
- Variables
- func AnnotationsEqual(relevantAnnotations []string, anno1, anno2 map[string]string) bool
- func Configure(apiServerURL, kubeconfigPath string, qps float32, burst int)
- func ConvertToCCEEndpoint(obj interface{}) interface{}
- func ConvertToK8sService(obj interface{}) interface{}
- func ConvertToK8sV1LoadBalancerIngress(slimLBIngs []corev1.LoadBalancerIngress) []v1.LoadBalancerIngress
- func ConvertToK8sV1ServiceAffinityConfig(saCfg *corev1.SessionAffinityConfig) *v1.SessionAffinityConfig
- func ConvertToK8sV1ServicePorts(slimPorts []corev1.ServicePort) []v1.ServicePort
- func ConvertToNetResourceSet(obj interface{}) interface{}
- func ConvertToNode(obj interface{}) interface{}
- func CreateConfig() (*rest.Config, error)
- func EqualV1Services(k8sSVC1, k8sSVC2 *corev1.Service, nodeAddressing dpTypes.NodeAddressing) bool
- func EventBroadcaster() record.EventBroadcaster
- func ExtractFixedIPTTLSeconds(pod *corev1.Pod) int64
- func FinalizerAddRemoteIP(obj metav1.Object)
- func FinalizerRemoveRemoteIP(obj metav1.Object) bool
- func GetAPIServerURL() string
- func GetBurst() int
- func GetKubeconfigPath() string
- func GetQPS() float32
- func HaveFixedIPLabel(obj metav1.Object) bool
- func HavePrimaryENILabel(obj metav1.Object) bool
- func Init(conf k8sconfig.Configuration) error
- func InitNewFakeK8sClient() error
- func InitNewK8sClient() (*rest.Config, rest.Interface, error)
- func IsEnabled() bool
- func IsLocalNetResourceSet(n *ccev2.NetResourceSet) bool
- func K8sErrorHandler(e error)
- func MatchNetworkResourceType(annotations map[string]string, networkType string) bool
- func ObjToNetResourceSet(obj interface{}) *cce_v2.NetResourceSet
- func ObjToV1Beta1EndpointSlice(obj interface{}) *slim_discover_v1beta1.EndpointSlice
- func ObjToV1EndpointSlice(obj interface{}) *slim_discover_v1.EndpointSlice
- func ObjToV1Endpoints(obj interface{}) *corev1.Endpoints
- func ObjToV1Ingress(obj interface{}) *slim_networkingv1.Ingress
- func ObjToV1Namespace(obj interface{}) *corev1.Namespace
- func ObjToV1NetworkPolicy(obj interface{}) *slim_networkingv1.NetworkPolicy
- func ObjToV1Node(obj interface{}) *v1.Node
- func ObjToV1PartialObjectMetadata(obj interface{}) *slim_metav1.PartialObjectMetadata
- func ObjToV1Secret(obj interface{}) *corev1.Secret
- func ObjToV1Services(obj interface{}) *corev1.Service
- func ObjTov1Pod(obj interface{}) *corev1.Pod
- func ParseNode(k8sNode *corev1.Node) *nodeTypes.Node
- func ParseNodeAddressType(k8sAddress corev1.NodeAddressType) (addressing.AddressType, error)
- func WaitForNodeInformation(ctx context.Context, nodeGetter nodeGetter) error
- type JSONPatch
- type K8sAPIExtensionsClient
- type K8sCCEClient
- type K8sClient
- func (k8sCli K8sClient) AnnotateNode(nodeName string, encryptKey uint8, v4CIDR, v6CIDR *cidr.CIDR, ...) error
- func (k8sCli K8sClient) GetK8sNode(ctx context.Context, nodeName string) (*core_v1.Node, error)
- func (k8sCli K8sClient) GetSecrets(ctx context.Context, ns, name string) (map[string][]byte, error)
Constants ¶
const ( CCEPrefix = "cce.baidubce.com/" // LabelNodeInstanceType type of k8s node LabelNodeInstanceType = "node.kubernetes.io/instance-type" // LabelPodUseFixedIP Only the pod marked with this annotation when creating the pod will enable the fixed IP LabelPodUseFixedIP = "cce.baidubce.com/fixedip" LabelNodeName = "cce.baidubce.com/node" LabelInstanceID = "cce.baidubce.com/instanceid" LabelContainerID = "cce.baidubce.com/containerid" LabelClusterRole = "cluster-role" LabelClusterRoleValueMaster = "master" LabelClusterRoleValueNode = "node" // AnnotationFixedIPTTLSeconds If the fixed IP is stuck for a long time when the pod fails, IP recycling will be triggered // default value is 6040800 (7) AnnotationFixedIPTTLSeconds = "fixedip.cce.baidubce.com/ttl" // AnnotationNodeAnnotationSynced node have synced with cloud AnnotationNodeAnnotationSynced = "node.cce.baidubce.com/annotation-synced" // AnnotationNodeLabelSynced node have synced with cloud AnnotationCCEInstanceLabel = "kubernetes.io/cce.instance.labels" // AnnotationNodeLabelSynced node speicified subnets id use to create eni and allocate ip AnnotationNodeEniSubnetIDs = "network.cce.baidubce.com/node-eni-subnet-ids" AnnotationNodeMaxENINum = "network.cce.baidubce.com/node-max-eni-num" AnnotationNodeMaxPerENIIPsNum = "network.cce.baidubce.com/node-eni-max-ips-num" AnnotationNodeMaxRdmaEniNum = "network.cce.baidubce.com/node-max-rdma-eni-num" AnnotationNodeMaxPerRdmaEniIpsNum = "network.cce.baidubce.com/node-rdma-eni-max-ips-num" // AnnotationUseEnterpriseSecurityGroupIDs use enterprise security group AnnotationUseEnterpriseSecurityGroupIDs = "network.cce.baidubce.com/use-esg-ids" AnnotationUseSecurityGroupIDs = "network.cce.baidubce.com/sg-ids" // FinalizerOfCCEEndpointRemoteIP finalizer to remove ip from remote iaas FinalizerOfCCEEndpointRemoteIP = "RemoteIPFinalizer" // FinalizerOfNetResourceSetRoute finalizer to remove ip from remote iaas FinalizerOfNetResourceSetRoute = "RemoteRouteFinalizer" // LabelENIUseMode is the label used to store the ENI use mode of the node. // if the label is set before the NetResourceSet is created, we wiil use the label // value as the ENI use mode of the node. LabelENIUseMode = "cce.baidubce.com/eni-use-mode" LabelENIType = "cce.baidubce.com/eni-type" // VPCIDLabel is the label used to store the VPC ID of the node. VPCIDLabel = "cce.baidubce.com/vpc-id" // AnnotationIPResourceCapacitySynced is the annotation used to store the ip resource capacity synced status of the node. AnnotationIPResourceCapacitySynced = "cce.baidubce.com/ip-resource-capacity-synced" // LabelAvailableZone is the label used to store the available zone of the node. LabelAvailableZone = "cce.baidubce.com/available-zone" LabelRegion = "topology.kubernetes.io/region" LabelZone = "topology.kubernetes.io/zone" // LabelOwnerByReference this label is used to mark the owner of the resource. // for example, if a psts is created by a cpsts, the label will be set to LabelOwnerByReference = CCEPrefix + "owner-by-reference" )
const ( // maximum number of operations a single json patch may contain. // See https://github.com/kubernetes/kubernetes/pull/74000 MaxJSONPatchOperations = 10000 )
Variables ¶
var ( // LabelPodUseFixedIP use fixed ip ValueStringTrue = "true" // annotation for PodSubnetTopologySpread AnnotationPodSubnetTopologySpread = CCEPrefix + "PodSubnetTopologySpread" // cce defined k8s resource name ResourceIPForNode = corev1.ResourceName(CCEPrefix + "ip") ResourceENIForNode = corev1.ResourceName(CCEPrefix + "eni") ResourceRdmaIpForNode = corev1.ResourceName(CCEPrefix + "rdmaip") ResourceRdmaEniForNode = corev1.ResourceName(CCEPrefix + "rdmaeni") // CrossVPCEni resource name ResourceCrossVPCEni = corev1.ResourceName("cross-vpc-eni.cce.io/eni") // topodlogy key for psts TopologyKeyOfPod = "topology.kubernetes.io/zone" // AnnotationDisablePSTSPodAffinity This annotation is included on the pod, which means that the pod does not expect to use the scheduling function extended by pSTS AnnotationDisablePSTSPodAffinity = CCEPrefix + "DisablePodSubnetTopologySpreadScheduler" // AnnotationExternalENI means ENI was created by external system AnnotationExternalENI = "cce.baidubce.com/external-eni" // AnnotationExternalENI means ENI primary IP was created by cce AnnotationENIIPv6PrimaryIP = "cce.baidubce.com/ipv6-primary-ip" // cce defined net resource set annotations in k8s AnnotationRDMAInfoMacAddress = CCEPrefix + "rdma-mac-address" AnnotationRDMAInfoVifFeatures = CCEPrefix + "rdma-vif-features" )
var ( PodAnnotationCrossVPCEniUserID = "cross-vpc-eni.cce.io/userID" PodAnnotationCrossVPCEniSubnetID = "cross-vpc-eni.cce.io/subnetID" PodAnnotationCrossVPCEniSecurityGroupIDs = "cross-vpc-eni.cce.io/securityGroupIDs" PodAnnotationCrossVPCEniPrivateIPAddress = "cross-vpc-eni.cce.io/privateIPAddress" PodAnnotationCrossVPCEniVPCCIDR = "cross-vpc-eni.cce.io/vpcCidr" PodAnnotationCrossVPCEniDefaultRouteInterfaceDelegation = "cross-vpc-eni.cce.io/defaultRouteInterfaceDelegation" PodAnnotationCrossVPCEniDefaultRouteExcludedCidrs = "cross-vpc-eni.cce.io/defaultRouteExcludedCidrs" NodeAnnotationMaxCrossVPCEni = "cross-vpc-eni.cce.io/maxEniNumber" NodeLabelMaxCrossVPCEni = "cross-vpc-eni.cce.io/max-eni-number" PodLabelOwnerNamespace = "cce.io/ownerNamespace" PodLabelOwnerName = "cce.io/ownerName" PodLabelOwnerNode = "cce.io/ownerNode" PodLabelOwnerInstance = "cce.io/ownerInstance" )
crossvpc labels
Functions ¶
func AnnotationsEqual ¶
AnnotationsEqual returns whether the annotation with any key in relevantAnnotations is equal in anno1 and anno2.
func ConvertToCCEEndpoint ¶
func ConvertToCCEEndpoint(obj interface{}) interface{}
ConvertToCCEEndpoint converts a *cce_v2.NetResourceSet into a *cce_v2.NetResourceSet or a cache.DeletedFinalStateUnknown into a cache.DeletedFinalStateUnknown with a *cce_v2.NetResourceSet in its Obj. If the given obj can't be cast into either *cce_v2.NetResourceSet nor cache.DeletedFinalStateUnknown, the original obj is returned.
func ConvertToK8sService ¶
func ConvertToK8sService(obj interface{}) interface{}
ConvertToK8sService converts a *v1.Service into a *corev1.Service or a cache.DeletedFinalStateUnknown into a cache.DeletedFinalStateUnknown with a *corev1.Service in its Obj. If the given obj can't be cast into either *corev1.Service nor cache.DeletedFinalStateUnknown, the original obj is returned.
func ConvertToK8sV1LoadBalancerIngress ¶
func ConvertToK8sV1LoadBalancerIngress(slimLBIngs []corev1.LoadBalancerIngress) []v1.LoadBalancerIngress
func ConvertToK8sV1ServiceAffinityConfig ¶
func ConvertToK8sV1ServiceAffinityConfig(saCfg *corev1.SessionAffinityConfig) *v1.SessionAffinityConfig
func ConvertToK8sV1ServicePorts ¶
func ConvertToK8sV1ServicePorts(slimPorts []corev1.ServicePort) []v1.ServicePort
func ConvertToNetResourceSet ¶
func ConvertToNetResourceSet(obj interface{}) interface{}
ConvertToNetResourceSet converts a *cce_v2.NetResourceSet into a *cce_v2.NetResourceSet or a cache.DeletedFinalStateUnknown into a cache.DeletedFinalStateUnknown with a *cce_v2.NetResourceSet in its Obj. If the given obj can't be cast into either *cce_v2.NetResourceSet nor cache.DeletedFinalStateUnknown, the original obj is returned.
func ConvertToNode ¶
func ConvertToNode(obj interface{}) interface{}
ConvertToNode converts a *v1.Node into a *types.Node or a cache.DeletedFinalStateUnknown into a cache.DeletedFinalStateUnknown with a *types.Node in its Obj. If the given obj can't be cast into either *v1.Node nor cache.DeletedFinalStateUnknown, the original obj is returned. WARNING calling this function will set *all* fields of the given Node as empty.
func CreateConfig ¶
CreateConfig creates a client configuration based on the configured API server and Kubeconfig path
func EqualV1Services ¶
func EqualV1Services(k8sSVC1, k8sSVC2 *corev1.Service, nodeAddressing dpTypes.NodeAddressing) bool
func EventBroadcaster ¶
func EventBroadcaster() record.EventBroadcaster
func ExtractFixedIPTTLSeconds ¶
ExtractFixedIPTTLSeconds Extract the expiration time of the fixed IP from the annotation of the pod. The unit is s
func FinalizerAddRemoteIP ¶
func FinalizerRemoveRemoteIP ¶
func GetAPIServerURL ¶
func GetAPIServerURL() string
GetAPIServerURL returns the configured API server URL address
func GetKubeconfigPath ¶
func GetKubeconfigPath() string
GetKubeconfigPath returns the configured path to the kubeconfig configuration file
func HaveFixedIPLabel ¶
func HavePrimaryENILabel ¶
HavePrimaryENILabel check if the object has the primary ENI label
func Init ¶
func Init(conf k8sconfig.Configuration) error
Init initializes the Kubernetes package. It is required to call Configure() beforehand.
func InitNewFakeK8sClient ¶
func InitNewFakeK8sClient() error
func IsEnabled ¶
func IsEnabled() bool
IsEnabled checks if CCE is being used in tandem with Kubernetes.
func IsLocalNetResourceSet ¶
func IsLocalNetResourceSet(n *ccev2.NetResourceSet) bool
IsLocalNetResourceSet returns true if the given NetResourceSet object refers to the NetResourceSet object representing the local node.
func K8sErrorHandler ¶
func K8sErrorHandler(e error)
K8sErrorHandler handles the error messages in a non verbose way by omitting repeated instances of the same error message for a timeout defined with k8sErrLogTimeout.
func ObjToNetResourceSet ¶
func ObjToNetResourceSet(obj interface{}) *cce_v2.NetResourceSet
ObjToNetResourceSet attempts to cast object to a NetResourceSet object and returns the NetResourceSet objext if the cast succeeds. Otherwise, nil is returned.
func ObjToV1Beta1EndpointSlice ¶
func ObjToV1Beta1EndpointSlice(obj interface{}) *slim_discover_v1beta1.EndpointSlice
func ObjToV1EndpointSlice ¶
func ObjToV1EndpointSlice(obj interface{}) *slim_discover_v1.EndpointSlice
func ObjToV1Endpoints ¶
func ObjToV1Ingress ¶
func ObjToV1Ingress(obj interface{}) *slim_networkingv1.Ingress
func ObjToV1Namespace ¶
func ObjToV1NetworkPolicy ¶
func ObjToV1NetworkPolicy(obj interface{}) *slim_networkingv1.NetworkPolicy
func ObjToV1Node ¶
func ObjToV1PartialObjectMetadata ¶
func ObjToV1PartialObjectMetadata(obj interface{}) *slim_metav1.PartialObjectMetadata
func ObjToV1Secret ¶
func ObjToV1Services ¶
func ObjTov1Pod ¶
func ParseNodeAddressType ¶
func ParseNodeAddressType(k8sAddress corev1.NodeAddressType) (addressing.AddressType, error)
ParseNodeAddressType converts a Kubernetes NodeAddressType to a CCE NodeAddressType. If the Kubernetes NodeAddressType does not have a corresponding CCE AddressType, returns an error.
func WaitForNodeInformation ¶
WaitForNodeInformation retrieves the node information via the NetResourceSet or Kubernetes Node resource. This function will block until the information is received. nodeGetter is a function used to retrieved the node from either the kube-apiserver or a local cache, depending on the caller.
Types ¶
type JSONPatch ¶
type JSONPatch struct { OP string `json:"op,omitempty"` Path string `json:"path,omitempty"` Value interface{} `json:"value"` }
JSONPatch structure based on the RFC 6902
type K8sAPIExtensionsClient ¶
type K8sAPIExtensionsClient struct {
apiextclientset.Interface
}
K8sAPIExtensionsClient is a wrapper around clientset.Interface.
func APIExtClient ¶
func APIExtClient() *K8sAPIExtensionsClient
APIExtClient returns the default API Extension client.
func WatcherAPIExtClient ¶
func WatcherAPIExtClient() *K8sAPIExtensionsClient
WatcherAPIExtClient returns the client dedicated to API Extensions watchers.
type K8sCCEClient ¶
type K8sCCEClient struct { clientset.Interface Informers cceInformer.SharedInformerFactory }
K8sCCEClient is a wrapper around clientset.Interface.
func CCEClient ¶
func CCEClient() *K8sCCEClient
CCEClient returns the default CCE Kubernetes client.
type K8sClient ¶
type K8sClient struct { // kubernetes.Interface is the object through which interactions with // Kubernetes are performed. kubernetes.Interface Informers informers.SharedInformerFactory }
K8sClient is a wrapper around kubernetes.Interface.
func WatcherClient ¶
func WatcherClient() *K8sClient
WatcherClient returns the client dedicated to K8s watchers.
func (K8sClient) AnnotateNode ¶
func (k8sCli K8sClient) AnnotateNode(nodeName string, encryptKey uint8, v4CIDR, v6CIDR *cidr.CIDR, v4HealthIP, v6HealthIP, v4IngressIP, v6IngressIP, v4CCEHostIP, v6CCEHostIP net.IP) error
AnnotateNode writes v4 and v6 CIDRs and health IPs in the given k8s node name. In case of failure while updating the node, this function while spawn a go routine to retry the node update indefinitely.
func (K8sClient) GetK8sNode ¶
GetK8sNode returns the node with the given nodeName.
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
apis
|
|
cce.baidubce.com/v1
v1 版本的api包
|
v1 版本的api包 |
cce.baidubce.com/v2
* Copyright (c) 2023 Baidu, Inc.
|
* Copyright (c) 2023 Baidu, Inc. |
client
|
|
clientset/versioned
This package has the automatically generated clientset.
|
This package has the automatically generated clientset. |
clientset/versioned/fake
This package has the automatically generated fake clientset.
|
This package has the automatically generated fake clientset. |
clientset/versioned/scheme
This package contains the scheme of the automatically generated clientset.
|
This package contains the scheme of the automatically generated clientset. |
clientset/versioned/typed/cce.baidubce.com/v1
This package has the automatically generated typed clients.
|
This package has the automatically generated typed clients. |
clientset/versioned/typed/cce.baidubce.com/v1/fake
Package fake has the automatically generated clients.
|
Package fake has the automatically generated clients. |
clientset/versioned/typed/cce.baidubce.com/v2
This package has the automatically generated typed clients.
|
This package has the automatically generated typed clients. |
clientset/versioned/typed/cce.baidubce.com/v2/fake
Package fake has the automatically generated clients.
|
Package fake has the automatically generated clients. |
clientset/versioned/typed/cce.baidubce.com/v2alpha1
This package has the automatically generated typed clients.
|
This package has the automatically generated typed clients. |
clientset/versioned/typed/cce.baidubce.com/v2alpha1/fake
Package fake has the automatically generated clients.
|
Package fake has the automatically generated clients. |
Package synced provides tools for tracking if k8s resources have been initially sychronized with the k8s apiserver.
|
Package synced provides tools for tracking if k8s resources have been initially sychronized with the k8s apiserver. |
Package types contains slimmer versions of k8s types.
|
Package types contains slimmer versions of k8s types. |
* Copyright (c) 2023 Baidu, Inc.
|
* Copyright (c) 2023 Baidu, Inc. |
Package version keeps track of the Kubernetes version the client is connected to
|
Package version keeps track of the Kubernetes version the client is connected to |
resources
This package contains exported resource identifiers and metric resource labels related to K8s watchers.
|
This package contains exported resource identifiers and metric resource labels related to K8s watchers. |
subscriber
Package subscriber implements a mechanism to represent K8s watcher subscribers and allows K8s events to objects / resources to notify their respective subscribers.
|
Package subscriber implements a mechanism to represent K8s watcher subscribers and allows K8s events to objects / resources to notify their respective subscribers. |