在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称(OpenSource Name):virtual-kubelet/virtual-kubelet开源软件地址(OpenSource Url):https://github.com/virtual-kubelet/virtual-kubelet开源编程语言(OpenSource Language):Go 92.8%开源软件介绍(OpenSource Introduction):Virtual KubeletVirtual Kubelet is an open source Kubernetes kubelet implementation that masquerades as a kubelet for the purposes of connecting Kubernetes to other APIs. This allows the nodes to be backed by other services like ACI, AWS Fargate, IoT Edge, Tensile Kube etc. The primary scenario for VK is enabling the extension of the Kubernetes API into serverless container platforms like ACI and Fargate, though we are open to others. However, it should be noted that VK is explicitly not intended to be an alternative to Kubernetes federation. Virtual Kubelet features a pluggable architecture and direct use of Kubernetes primitives, making it much easier to build on. We invite the Kubernetes ecosystem to join us in empowering developers to build upon our base. Join our slack channel named, virtual-kubelet, within the Kubernetes slack group. The best description is "Kubernetes API on top, programmable back." Table of ContentsHow It WorksThe diagram below illustrates how Virtual-Kubelet works. UsageVirtual Kubelet is focused on providing a library that you can consume in your project to build a custom Kubernetes node agent. See godoc for up to date instructions on consuming this project: https://godoc.org/github.com/virtual-kubelet/virtual-kubelet There are implementations available for several providers, see those repos for details on how to deploy. Current Features
ProvidersThis project features a pluggable provider interface developers can implement that defines the actions of a typical kubelet. This enables on-demand and nearly instantaneous container compute, orchestrated by Kubernetes, without having VM infrastructure to manage and while still leveraging the portable Kubernetes API. Each provider may have its own configuration file, and required environmental variables. Providers must provide the following functionality to be considered a supported integration with Virtual Kubelet.
Admiralty Multi-Cluster SchedulerAdmiralty Multi-Cluster Scheduler mutates annotated pods into "proxy pods" scheduled on a virtual-kubelet node and creates corresponding "delegate pods" in remote clusters (actually running the containers). A feedback loop updates the statuses and annotations of the proxy pods to reflect the statuses and annotations of the delegate pods. You can find more details in the Admiralty Multi-Cluster Scheduler documentation. Alibaba Cloud ECI ProviderAlibaba Cloud ECI(Elastic Container Instance) is a service that allow you run containers without having to manage servers or clusters. You can find more details in the Alibaba Cloud ECI provider documentation. Configuration FileThe alibaba ECI provider will read configuration file specified by the The example configure file is in the ECI provider repository. Azure Container Instances ProviderThe Azure Container Instances Provider allows you to utilize both typical pods on VMs and Azure Container instances simultaneously in the same Kubernetes cluster. You can find detailed instructions on how to set it up and how to test it in the Azure Container Instances Provider documentation. Configuration FileThe Azure connector can use a configuration file specified by the AWS Fargate ProviderAWS Fargate is a technology that allows you to run containers without having to manage servers or clusters. The AWS Fargate provider allows you to deploy pods to AWS Fargate. Your pods on AWS Fargate have access to VPC networking with dedicated ENIs in your subnets, public IP addresses to connect to the internet, private IP addresses to connect to your Kubernetes cluster, security groups, IAM roles, CloudWatch Logs and many other AWS services. Pods on Fargate can co-exist with pods on regular worker nodes in the same Kubernetes cluster. Easy instructions and a sample configuration file is available in the AWS Fargate provider documentation. Please note that this provider is not currently supported. Elotl KipKip is a provider that runs pods in cloud instances, allowing a Kubernetes cluster to transparently scale workloads into a cloud. When a pod is scheduled onto the virtual node, Kip starts a right-sized cloud instance for the pod's workload and dispatches the pod onto the instance. When the pod is finished running, the cloud instance is terminated. When workloads run on Kip, your cluster size naturally scales with the cluster workload, pods are strongly isolated from each other and the user is freed from managing worker nodes and strategically packing pods onto nodes. HashiCorp Nomad ProviderHashiCorp Nomad provider for Virtual Kubelet connects your Kubernetes cluster with Nomad cluster by exposing the Nomad cluster as a node in Kubernetes. By using the provider, pods that are scheduled on the virtual Nomad node registered on Kubernetes will run as jobs on Nomad clients as they would on a Kubernetes node. For detailed instructions, follow the guide here. Liqo ProviderLiqo implements a provider for Virtual Kubelet designed to transparently offload pods and services to "peered" Kubernetes remote cluster. Liqo is capable of discovering neighbor clusters (using DNS, mDNS) and "peer" with them, or in other words, establish a relationship to share part of the cluster resources. When a cluster has established a peering, a new instance of the Liqo Virtual Kubelet is spawned to seamlessly extend the capacity of the cluster, by providing an abstraction of the resources of the remote cluster. The provider combined with the Liqo network fabric extends the cluster networking by enabling Pod-to-Pod traffic and multi-cluster east-west services, supporting endpoints on both clusters. For detailed instruction, follow the guide here OpenStack Zun ProviderOpenStack Zun provider for Virtual Kubelet connects your Kubernetes cluster with OpenStack in order to run Kubernetes pods on OpenStack Cloud. Your pods on OpenStack have access to OpenStack tenant networks because they have Neutron ports in your subnets. Each pod will have private IP addresses to connect to other OpenStack resources (i.e. VMs) within your tenant, optionally have floating IP addresses to connect to the internet, and bind-mount Cinder volumes into a path inside a pod's container. ./bin/virtual-kubelet --provider="openstack" For detailed instructions, follow the guide here. Tensile Kube ProviderTensile kube is contributed by tencent games, which is provider for Virtual Kubelet connects your Kubernetes cluster with other Kubernetes clusters. This provider enables us extending Kubernetes to an unlimited one. By using the provider, pods that are scheduled on the virtual node registered on Kubernetes will run as jobs on other Kubernetes clusters' nodes. Adding a New Provider via the Provider InterfaceProviders consume this project as a library which implements the core logic of a Kubernetes node agent (Kubelet), and wire up their implementation for performing the neccessary actions. There are 3 main interfaces: PodLifecylceHandlerWhen pods are created, updated, or deleted from Kubernetes, these methods are called to handle those actions. type PodLifecycleHandler interface {
// CreatePod takes a Kubernetes Pod and deploys it within the provider.
CreatePod(ctx context.Context, pod *corev1.Pod) error
// UpdatePod takes a Kubernetes Pod and updates it within the provider.
UpdatePod(ctx context.Context, pod *corev1.Pod) error
// DeletePod takes a Kubernetes Pod and deletes it from the provider.
DeletePod(ctx context.Context, pod *corev1.Pod) error
// GetPod retrieves a pod by name from the provider (can be cached).
GetPod(ctx context.Context, namespace, name string) (*corev1.Pod, error)
// GetPodStatus retrieves the status of a pod by name from the provider.
GetPodStatus(ctx context.Context, namespace, name string) (*corev1.PodStatus, error)
// GetPods retrieves a list of all pods running on the provider (can be cached).
GetPods(context.Context) ([]*corev1.Pod, error)
} There is also an optional interface It is highly recommended to implement type PodNotifier interface {
// NotifyPods instructs the notifier to call the passed in function when
// the pod status changes.
//
// NotifyPods should not block callers.
NotifyPods(context.Context, func(*corev1.Pod))
}
pc, _ := node.NewPodController(podControllerConfig) // <-- instatiates the pod controller
pc.Run(ctx) // <-- starts watching for pods to be scheduled on the node NodeProviderNodeProvider is responsible for notifying the virtual-kubelet about node status updates. Virtual-Kubelet will periodically check the status of the node and update Kubernetes accordingly. type NodeProvider interface {
// Ping checks if the node is still active.
// This is intended to be lightweight as it will be called periodically as a
// heartbeat to keep the node marked as ready in Kubernetes.
Ping(context.Context) error
// NotifyNodeStatus is used to asynchronously monitor the node.
// The passed in callback should be called any time there is a change to the
// node's status.
// This will generally trigger a call to the Kubernetes API server to update
// the status.
//
// NotifyNodeStatus should not block callers.
NotifyNodeStatus(ctx context.Context, cb func(*corev1.Node))
} Virtual Kubelet provides a
nc, _ := node.NewNodeController(nodeProvider, nodeSpec) // <-- instantiate a node controller from a node provider and a kubernetes node spec
nc.Run(ctx) // <-- creates the node in kubernetes and starts up he controller API endpointsOne of the roles of a Kubelet is to accept requests from the API server for
things like Scrape Pod metricsIf you want to use HPA(Horizontal Pod Autoscaler) in your cluster, the provider should implement the TestingUnit testsRunning the unit tests locally is as simple as End-to-end testsCheck out Known quirks and workaroundsMissing Load Balancer IP addresses for servicesProviders that do not support service discoveryKubernetes 1.9 introduces a new flag, WorkaroundCluster requirements: Kubernetes 1.9 or above Enable the ServiceNodeExclusion flag, by modifying the Controller Manager manifest and adding ContributingVirtual Kubelet follows the CNCF Code of Conduct. Sign the CNCF CLA to be able to make Pull Requests to this repo. Monthly Virtual Kubelet Office Hours are held at 10am PST on the last Thursday of every month in this zoom meeting room. Check out the calendar here. Our google drive with design specifications and meeting notes are here. We also have a community slack channel named virtual-kubelet in the Kubernetes slack. You can also connect with the Virtual Kubelet community via the mailing list. |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论