kube-fledged

kube-fledged

Kubernetes容器镜像缓存管理工具

kube-fledged是一个Kubernetes操作符,用于在集群工作节点上管理容器镜像缓存。它允许定义镜像列表和缓存位置,加速应用容器启动。通过API接口管理缓存生命周期,支持多种配置选项。适用于需快速扩展的应用、Serverless函数、边缘计算等场景,可提高容器启动速度和集群性能。

Kubernetes容器镜像缓存自定义资源kubefledged-controllerImageCacheGithub开源项目
<img src="https://yellow-cdn.veclightyear.com/0a4dffa0/3e90b887-cd9e-4b8f-8bb8-e060a383a6ba.png">

构建状态 覆盖率状态 Go 报告卡 GitHub 发布 (最新日期) 许可证

kube-fledged 是一个 Kubernetes 操作器,用于在 Kubernetes 集群的工作节点上直接创建和管理容器镜像缓存。它允许用户定义一个镜像列表,并指定这些镜像应该缓存(即拉取)到哪些工作节点上。因此,应用程序 Pod 几乎可以立即启动,因为不需要从镜像仓库拉取镜像。

kube-fledged 提供 CRUD API 来管理镜像缓存的生命周期,并支持多个可配置参数以根据需求自定义功能。

目录

<!-- https://github.com/thlorenz/doctoc --> <!-- START doctoc generated TOC please keep comment here to allow auto update --> <!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE --> <!-- END doctoc generated TOC please keep comment here to allow auto update -->

使用场景

  • 需要快速启动和/或扩展的应用程序。例如,执行实时数据处理的应用程序需要由于数据量激增而快速扩展。
  • 无服务器函数通常需要对传入事件立即做出反应,并在几分之一秒内启动容器。
  • 在边缘设备上运行的物联网应用程序,需要容忍边缘设备和镜像仓库之间的间歇性网络连接。
  • 如果需要从私有仓库拉取镜像,但不能授予所有人从该仓库拉取镜像的权限,那么可以将镜像放置在集群的节点上。
  • 如果集群管理员或操作员需要为应用程序部署升级,并希望事先验证新镜像是否能够成功拉取。

前提条件

  • 一个正常运行的 Kubernetes 集群。可以是像 minikube 这样的简单开发集群,也可以是大型生产集群。
  • 对 Kubernetes 集群具有集群管理员权限,以便部署 kube-fledged。
  • 所有主节点和工作节点都有 ["kubernetes.io/hostname"] 标签。
  • 对于 kube-fledged 的开发,您需要在本地 Linux 或 Mac 机器上安装 git、make、go、docker 引擎 (>= 19.03)、openssl、kubectl、helm、gpg 和 gnu-sed。kubectl 需正确配置以访问集群。
  • 对于 kube-fledged 的部署,您需要在本地 Linux 或 Mac 机器上安装 git、make、helm 和 kubectl。kubectl 需正确配置以访问集群。

使用 YAML 清单快速安装

这些说明使用 YAML 清单和 Docker Hub 中的预构建镜像,将 kube-fledged 安装到名为 "kube-fledged" 的单独命名空间中。

  • 克隆源代码仓库

    $ git clone https://github.com/senthilrch/kube-fledged.git $HOME/kube-fledged
    $ cd $HOME/kube-fledged
    
  • 将 kube-fledged 部署到集群

    $ make deploy-using-yaml
    
  • 验证 kube-fledged 是否成功部署

    $ kubectl get pods -n kube-fledged -l app=kubefledged
    $ kubectl get imagecaches -n kube-fledged (输出应为:'未找到资源')
    

使用 Helm chart 快速安装

  • 创建将安装 kube-fledged 的命名空间

    $ export KUBEFLEDGED_NAMESPACE=kube-fledged
    $ kubectl create namespace ${KUBEFLEDGED_NAMESPACE}
    
  • 验证并安装最新版本的 kube-fledged helm chart

    $ helm repo add kubefledged-charts https://senthilrch.github.io/kubefledged-charts/
    $ helm repo update
    $ gpg --keyserver keyserver.ubuntu.com --recv-keys 92D793FA3A6460ED (或) gpg --keyserver pgp.mit.edu --recv-keys 92D793FA3A6460ED
    $ gpg --export >~/.gnupg/pubring.gpg
    $ helm install --verify kube-fledged kubefledged-charts/kube-fledged -n ${KUBEFLEDGED_NAMESPACE} --wait
    

使用 Helm operator 快速安装

这些说明使用 Helm operator 和 Docker Hub 中的预构建镜像,将 kube-fledged 安装到名为 "kube-fledged" 的单独命名空间中。

  • 克隆源代码仓库

    $ git clone https://github.com/senthilrch/kube-fledged.git $HOME/kube-fledged
    $ cd $HOME/kube-fledged
    
  • 将 helm operator 和 kube-fledged 部署到 "kube-fledged" 命名空间。如果需要部署到不同的命名空间,请导出变量 KUBEFLEDGED_NAMESPACE

    $ make deploy-using-operator
    
  • 验证 kube-fledged 是否成功部署

    $ kubectl get pods -n kube-fledged -l app.kubernetes.io/name=kube-fledged
    $ kubectl get imagecaches -n kube-fledged (输出应为:'未找到资源')
    

Helm chart 参数

Helm chart 的参数在这里有文档说明

构建和部署

这些说明将帮助您从源代码构建 kube-fledged 并将其部署到名为 "kube-fledged" 的单独命名空间。如果需要部署到不同的命名空间,请相应编辑 "kube-fledged/deploy" 中清单的命名空间字段。

构建

  • 克隆源代码仓库

    $ git clone https://github.com/senthilrch/kube-fledged.git $HOME/kube-fledged
    $ cd $HOME/kube-fledged
    
  • 如果您在代理后面,请导出以下环境变量(大写)

    export HTTP_PROXY=http://proxy_ip_or_hostname:port
    export HTTPS_PROXY=https://proxy_ip_or_hostname:port
    
  • 构建并将 docker 镜像推送到注册表(例如 Docker hub)

    $ export RELEASE_VERSION=<你的标签>
    $ export CONTROLLER_IMAGE_REPO=docker.io/<你的dockerhub用户名>/kubefledged-controller
    $ export WEBHOOK_SERVER_IMAGE_REPO=docker.io/<你的dockerhub用户名>/kubefledged-webhook-server
    $ export CRI_CLIENT_IMAGE_REPO=docker.io/<你的dockerhub用户名>/kubefledged-cri-client
    $ export OPERATOR_IMAGE_REPO=docker.io/<你的dockerhub用户名>/kubefledged-operator
    $ docker login -u <用户名> -p <密码>
    $ export DOCKER_CLI_EXPERIMENTAL=enabled
    $ make install-buildx && make release-amd64
    

部署

注意:部署需要 'cluster-admin' 权限

  • 部署 kube-fledged 所需的所有清单文件都位于 'kube-fledged/deploy' 目录中。

  • 编辑 "kubefledged-deployment-controller.yaml"。

    将 "image" 设置为 "<your_docker_hub_username>/kubefledged-controller:<your_tag>"

    image: <your_docker_hub_username>/kubefledged-controller:<your_tag>
    
  • 如果你将镜像推送到私有仓库,请在 "kubefledged-deployment-controller.yaml" 的末尾添加 'imagePullSecrets'。参考 Kubernetes 文档中的 在 Pod 上指定 ImagePullSecrets。密钥 <your_registry_key> 应在 "kube-fledged" 命名空间中创建。

    serviceAccountName: kubefledged
    imagePullSecrets:
      - name: <your_registry_key>
    
  • 编辑 "kubefledged-deployment-webhook-server.yaml"。

    将 "image" 设置为 "<your_docker_hub_username>/kubefledged-webhook-server:<your_tag>"

    image: <your_docker_hub_username>/kubefledged-webhook-server:<your_tag>
    
  • kube-fledged 部署到集群

    $ make deploy-using-yaml
    
  • 验证 kube-fledged 是否成功部署

    $ kubectl get pods -n kube-fledged -l app=kubefledged
    $ kubectl logs -f <pod_name_obtained_from_above_command> -n kube-fledged
    $ kubectl get imagecaches -n kube-fledged (输出应为:'No resources found')
    

如何使用

kube-fledged 提供了对镜像缓存执行 CRUD 操作的 API。这些 API 可以通过 kubectl 或 curl 使用。

创建镜像缓存

参考 "deploy/kubefledged-imagecache.yaml" 中的示例镜像缓存清单。在创建镜像缓存之前,根据需要进行编辑。如果镜像在需要凭证才能拉取的私有仓库中,请在末尾添加 "imagePullSecrets"。

  imagePullSecrets:
  - name: myregistrykey

使用 kubectl 创建镜像缓存。验证是否成功创建

$ kubectl create -f deploy/kubefledged-imagecache.yaml
$ kubectl get imagecaches -n kube-fledged

查看镜像缓存状态

使用以下命令以 "json" 格式查看镜像缓存状态。

$ kubectl get imagecaches imagecache1 -n kube-fledged -o json

在镜像缓存中添加/删除镜像

使用 kubectl edit 命令在镜像缓存中添加/删除镜像。编辑命令会在编辑器中打开清单文件。编辑更改,保存并退出。

$ kubectl edit imagecaches imagecache1 -n kube-fledged
$ kubectl get imagecaches imagecache1 -n kube-fledged -o json

刷新镜像缓存

kube-fledged 支持自动和按需刷新镜像缓存。可以使用 --image-cache-refresh-frequency: 标志启用自动刷新。要请求按需刷新,请运行以下命令:

$ kubectl annotate imagecaches imagecache1 -n kube-fledged kubefledged.io/refresh-imagecache=

删除镜像缓存

在删除镜像缓存之前,你需要使用以下命令清除缓存中的镜像。这将从工作节点中删除所有缓存的镜像。

$ kubectl annotate imagecaches imagecache1 -n kube-fledged kubefledged.io/purge-imagecache=

查看清除镜像缓存的状态。如果有任何失败,应手动删除这些镜像,或者你可以决定将这些镜像留在工作节点中。

$ kubectl get imagecaches imagecache1 -n kube-fledged -o json

最后使用以下命令删除镜像缓存。

$ kubectl delete imagecaches imagecache1 -n kube-fledged

删除 kube-fledged

运行以下命令从集群中删除 kube-fledged

$ make remove-kubefledged (如果你使用 YAML 清单部署)
$ helm delete kube-fledged -n ${KUBEFLEDGED_NAMESPACE} (如果你使用 Helm chart 部署)
$ make remove-kubefledged-and-operator (如果你使用 Helm Operator 部署)

工作原理

Kubernetes 允许开发人员通过自定义资源扩展 Kubernetes API。kube-fledged 定义了一个 "ImageCache" 类型的自定义资源,并实现了一个自定义控制器(名为 kubefledged-controller)。kubefledged-controller 负责管理镜像缓存的繁重工作。用户可以使用 kubectl 命令创建和删除 ImageCache 资源。 kubefledged-controller 内置了一个负责拉取和删除镜像的镜像管理器例程。镜像的拉取或删除是通过 Kubernetes 作业完成的。如果启用,镜像缓存会由刷新工作器定期刷新。kubefledged-controller 在 ImageCache 资源的状态字段中更新镜像拉取、刷新和删除的状态。

有关更详细的描述,请查阅 kube-fledged设计方案

Kubefledged 控制器的配置标志

--cri-socket-path: 节点上 CRI 套接字的路径,例如 /run/containerd/containerd.sock(默认值:/var/run/docker.sock, /run/containerd/containerd.sock, /var/run/crio/crio.sock)

--image-cache-refresh-frequency: 镜像缓存定期刷新以确保缓存是最新的。将此标志设置为"0s"将禁用刷新。默认值"15m"

--image-delete-job-host-network: 镜像删除作业的 Pod 是否应以'HostNetwork: true'运行。默认值:false

--image-pull-deadline-duration: 允许拉取镜像的最长时间。超过此时间,镜像拉取将被视为失败。默认值"5m"

--image-pull-policy: 将镜像拉取到缓存并刷新缓存的镜像拉取策略。可能的值为'IfNotPresent'和'Always'。默认值为'IfNotPresent'。没有标签或标签为":latest"的镜像始终会被拉取。

--job-priority-class-name: kubefledged-controller 创建的作业的 priorityClassName。

--job-retention-policy: 决定 kubefledged-controller 创建的作业在完成后是删除还是保留(用于调试)。可能的值为'delete'和'retain'。默认值为'delete'。

--service-account-name: 用于拉取或删除镜像的作业中使用的 serviceAccountName。可选标志。如果未指定,则使用命名空间的默认服务账户。

--stderrthreshold: 日志级别。将此标志的值设置为 INFO

支持的容器运行时

  • docker
  • containerd
  • cri-o

支持的平台

  • linux/amd64
  • linux/arm
  • linux/arm64

构建工具

  • kubernetes/sample-controller - 使用 CRD 构建我们自己的 Kubernetes 风格控制器。
  • kubebuilder - 使用 CRD 构建 Kubernetes API 的 SDK
  • operator-sdk - 构建 Kubernetes 应用程序的 SDK
  • cri-tools - Kubelet 容器运行时接口(CRI)的 CLI 和验证工具。
  • buildx - 使用 BuildKit 扩展构建功能的 Docker CLI 插件
  • Go Modules - Go 模块用于依赖管理
  • Make - GNU Make

博客和演示

致谢

贡献

请阅读CONTRIBUTING.md了解提交拉取请求的流程详情。

贡献者

<a href="https://github.com/senthilrch/kube-fledged/graphs/contributors"> <img src="https://contrib.rocks/image?repo=senthilrch/kube-fledged" /> </a>

行为准则

请阅读CODE_OF_CONDUCT.md了解我们的行为准则详情,以及如何报告违规行为。

许可证

本项目采用Apache 2.0许可证 - 详情请参阅LICENSE文件。

编辑推荐精选

蛙蛙写作

蛙蛙写作

AI小说写作助手,一站式润色、改写、扩写

蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。

AI辅助写作AI工具蛙蛙写作AI写作工具学术助手办公助手营销助手AI助手
Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

下拉加载更多