网站开发挣不挣钱wordpress像微博

news/2025/9/23 6:09:36/文章来源:
网站开发挣不挣钱,wordpress像微博,网站模板尺寸,wordpress响应式主题在哪作者 | Addo Zhang来源 | 云原生指北GitHub Actions 是一个功能强大、“免费” 的 CI#xff08;持续集成#xff09;工具。与之前介绍的 Tekton 类似#xff0c;GitHub Actions 的核心也是 Pipeline as Code 也就是所谓的流水线即代码。二者不同的是#xff0c;GitHub Act… 作者 | Addo Zhang来源 | 云原生指北GitHub Actions 是一个功能强大、“免费” 的 CI持续集成工具。与之前介绍的 Tekton 类似GitHub Actions 的核心也是 Pipeline as Code 也就是所谓的流水线即代码。二者不同的是GitHub Actions 本身就是一个 CI 平台用户可以使用代码来定义流水线并在平台上运行而 Tekton 本身是一个用于构建 CI/CD 平台的开源框架。Pipeline as Code既然与代码扯上了关系。那流水线的定义就可繁可简了完全看需求。小到一个 GitHub Pages大到流程复杂的项目都可以使用 GitHub Actions 来构建。本篇文章不会介绍如何使用 GitHub Actions 的如果还未用过的同学可以浏览下官方的文档。今天主要来分享下如何在 Kubernetes 上的自托管资源来执行流水线作业。背 景在介绍 GitHub Actions 的时候免费带上了引号为何其作为一个 CI 工具允许用户定义流水线并在平台上运行需要消耗计算、存储、网络等资源这些运行流水线的机器称为 Runner。GitHub 为不同类等型级的用户每月提供了不同的免费额度额度用完后每分钟 0.008 美元。见下图。不同类型的主机分钟数的消耗倍数也不同Linux 为 1、macOS 为 10、Windows 为 2。拿免费用户来看每月 2000 分钟看似也不少。比如笔者个人就是拿来构建下博客静态页面以及几个简单的应用每个月也用不了太多。但对于企业或者组织来说尤其是当流水线的触发频繁每次代码提交触发、或者项目的单元测试耗时很长bug 引起的或者项目本身的复杂度所致积少成多也会变成一笔不小的开支。那有没有办法使用自己的资源来运行流水线呢有。GitHub Actions Runner 分为两种Github 托管的 Runner 和自托管的 Runner。我们可以将自己的资源作为自托管的 Runner 来运行流水线而且还可以借助 Kubernetes 的能力来管理这些 Runner。同时自托管 Runner 也适合那些对 CI 有更高要求的用户比如更高性能、更多类型的计算资源等等。准备工作Kubernetes 集群我们使用 k3s 快速创建一个单节点的集群。export INSTALL_K3S_VERSIONv1.22.11k3s2 curl -sfL https://get.k3s.io | sh -s - --disable traefik --write-kubeconfig-mode 644 --write-kubeconfig ~/.kube/config使用 Github Actions 构建的项目这里使用之前做的一个 graalvmmaven 的基础镜像仓库来进行测试https://github.com/addozhang/docker-graalvm-maven。GitHub Access Token参考文档创建 Access Token。注意鉴于本演示的需要分配完全的 repo 访问权限。access token创建 RunnerGitHub Actions Runner 的程序源码是开源的GitHub 托管的 Runner 也是使用该程序运行的。Runner 可以是某个仓库使用也可以由组织下的所有仓库共享。鉴于这里演示用的项目我们为上面提到的项目仓库创建 Runner。Runner 在启动时会通过 GitHub API 将自己注册到 GitHub Actions然后不断发送请求到 GitHub 查看是否分配了流水线作业如有则会执行流水线作业Runner 停止运行时需要进行注销的操作。这里的一系列操作都会用到上面创建的 Access Token。要在 Kubernetes 上运行我们要将 Runner 应用以及上面的逻辑打成镜像并以 Deployment 的方式部署到 Kubernetes 中。然后通过 workflow 作业 webhook 查看排队的作业数来决定是否增加或者减少 Deployment 的副本数。听起来就有些复杂但确实是实现的基本方式。这里我们使用一个 Kubernetes controller actions-runner-controller/actions-runner-controller 来实现所有的流程。actions-runner-controller 提供了三种 CRDRunner可以理解为 Pod该 Runner 只能执行一次作业。RunnerDeployments可以理解为 Deployment可以设置要创建的 Runner 数量。Runner 在执行完作业后会销毁然后 Controller 会创建新的 Runner 等待作业调度。RunnerSets可以理解为 StatefulSet也是基于 StatefulSet 来创建 Pod即 Runner提供 StatefulSet 的特性。更多用法可以参考 actions-runner-controller 官方文档。部署 Cert Manageractions-runner-controller 的运行需要使用 cert-mananger。通过下面的命令来部署kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.8.2/cert-manager.yaml检查 pod 是否成功启动kubectl get pods -n cert-managerNAME                                       READY   STATUS    RESTARTS   AGE cert-manager-66b646d76-7b9fz               1/1     Running   0          18s cert-manager-cainjector-59dc9659c7-rzlrl   1/1     Running   0          18s cert-manager-webhook-7d8f555998-6zkqp      1/1     Running   0          18s启动 Controller接下来就是启动 controller本文发布时的最新版本是 v0.25.0。使用下面的命令部署 controllerkubectl create -f https://github.com/actions-runner-controller/actions-runner-controller/releases/download/v0.25.0/actions-runner-controller.yaml注这里使用的 create 而非 apply。使用 apply 会报类似下面的错误Error from server (Invalid): error when creating https://github.com/actions-runner-controller/actions-runner-controller/releases/download/v0.25.0/actions-runner-controller.yaml: CustomResourceDefinition.apiextensions.k8s.io runnerdeployments.actions.summerwind.dev is invalid: metadata.annotations: Too long: must have at most 262144 bytes此时pod 无法启动还需要为其创建 Secret 来提供 GitHub Access Tokenexport GITHUB_TOKENTOKEN_HERE kubectl create secret generic controller-manager \-n actions-runner-system \--from-literalgithub_token${GITHUB_TOKEN}现在可以看到 pod 可以成功运行kubectl get pods -n actions-runner-system NAME                                  READY   STATUS    RESTARTS   AGE controller-manager-58c598f64d-27xn6   2/2     Running   0          40s创建 Runner执行下面的命令创建一个名为 building-runner 的 Runner CR。kubectl apply -f - EOF apiVersion: actions.summerwind.dev/v1alpha1 kind: Runner metadata:name: building-runner spec:repository: addozhang/docker-graalvm-mavenenv: [] EOF此时会发现 controller 创建了一个同名的 podkubectl get pods -l actions-runner -n actions-runner-system NAME              READY   STATUS    RESTARTS   AGE building-runner   2/2     Running   0          16s在仓库的 Settings/Actions/Runners 中可以看到同名的 Runner处于 idle 状态。runner list假如此时启动流水线作业会发现作业并没有调度该 Runner 上。这是因为还没有将作业 Runner 的 label 设置为该 runner 的 labelself-hosted、Linux、 X64。修改流水线定义将 runs-on 指定为 [self-hosted, linux, X64]custom labels然后可以查看作业成功调度到该 runner 上运行schedule job现在再去看 pod 的状态其中的 runner 容器是 Completedkubectl get pods -l actions-runner -n actions-runner-system NAME              READY   STATUS     RESTARTS   AGE building-runner   1/2     Running   0          3m53s此时再去触发流水线执行作业会一直等待可用的 runner 来执行queued jobrunner 无法重复使用怎么办可重用 RunnerRunnerDeployment 要派上用场了前面提到可以将 RunnerDeployments 理解为 Deployment可以设置要创建的 Runner 数量。Runner 在执行完作业后会销毁然后 Controller 会创建新的 Runner 等待作业调度。kubectl apply -f - EOF apiVersion: actions.summerwind.dev/v1alpha1 kind: RunnerDeployment metadata:name: building-runner spec:template:spec:repository: addozhang/docker-graalvm-mavenenv: [] EOF使用上面的命令创建 RunnerDeployment 之后controller 会创建新的 podrunner并得到作业的调度完成作业的执行后pod building-runner-9k4cj-ml46v 被销毁新的 pod building-runner-9k4cj-f8twz 被创建并等待作业的调度kubectl get events --sort-bymetadata.creationTimestamp ... 3m7s        Normal    PodCreated                 runner/building-runner-9k4cj-ml46v         Created pod building-runner-9k4cj-ml46v 3m6s        Normal    Scheduled                  pod/building-runner-9k4cj-ml46v            Successfully assigned actions-runner-system/building-runner-9k4cj-ml46v to ubuntu-dev1 3m7s        Normal    RegistrationTokenUpdated   runner/building-runner-9k4cj-ml46v         Successfully update registration token 3m6s        Normal    Pulling                    pod/building-runner-9k4cj-ml46v            Pulling image summerwind/actions-runner:latest 3m3s        Normal    Started                    pod/building-runner-9k4cj-ml46v            Started container docker 3m3s        Normal    Pulled                     pod/building-runner-9k4cj-ml46v            Successfully pulled image summerwind/actions-runner:latest in 3.06531539s 3m3s        Normal    Created                    pod/building-runner-9k4cj-ml46v            Created container runner 3m3s        Normal    Started                    pod/building-runner-9k4cj-ml46v            Started container runner 3m3s        Normal    Created                    pod/building-runner-9k4cj-ml46v            Created container docker 3m3s        Normal    Pulled                     pod/building-runner-9k4cj-ml46v            Container image docker:dind already present on machine 2m6s        Normal    RegistrationTokenUpdated   runner/building-runner-9k4cj-f8twz         Successfully update registration token 2m6s        Normal    PodCreated                 runner/building-runner-9k4cj-f8twz         Created pod building-runner-9k4cj-f8twz 2m5s        Normal    Scheduled                  pod/building-runner-9k4cj-f8twz            Successfully assigned actions-runner-system/building-runner-9k4cj-f8twz to ubuntu-dev1 2m5s        Normal    Pulling                    pod/building-runner-9k4cj-f8twz            Pulling image summerwind/actions-runner:latest 2m5s        Normal    Killing                    pod/building-runner-9k4cj-ml46v            Stopping container docker 2m3s        Normal    Pulled                     pod/building-runner-9k4cj-f8twz            Successfully pulled image summerwind/actions-runner:latest in 2.50468863s 2m3s        Normal    Created                    pod/building-runner-9k4cj-f8twz            Created container runner 2m3s        Normal    Started                    pod/building-runner-9k4cj-f8twz            Started container runner 2m3s        Normal    Pulled                     pod/building-runner-9k4cj-f8twz            Container image docker:dind already present on machine 2m3s        Normal    Created                    pod/building-runner-9k4cj-f8twz            Created container docker 2m3s        Normal    Started                    pod/building-runner-9k4cj-f8twz            Started container docker前面创建 RunnerDeployment 的时候没有指定副本数也就是 runner 的数量controller 只创建了一个 Runner。假设这个 RunnerDeployment 是某个组织下多个项目共用的多个项目同时执行作业会怎样这里我重新运行 3 个已经完成的作业模拟作业的并发curl -X POST -H Accept: application/vnd.githubjson -H Authorization: token ${GITHUB_TOKEN} https://api.github.com/repos/addozhang/docker-graalvm-maven/actions/runs/2643982502/rerun curl -X POST -H Accept: application/vnd.githubjson -H Authorization: token ${GITHUB_TOKEN} https://api.github.com/repos/addozhang/docker-graalvm-maven/actions/runs/2643982274/rerun curl -X POST -H Accept: application/vnd.githubjson -H Authorization: token ${GITHUB_TOKEN} https://api.github.com/repos/addozhang/docker-graalvm-maven/actions/runs/2643982274/rerun或者 push 几个空的提交到仓库不推荐会有 commit 历史。测试项目随意git commit --allow-empty -m trigger action git push去 Actions 列表会发现只有一个作业在运行其他两个都是 queued 的等待状态。前面的作业执行完成后后一个作业才会被执行。不支持并发既然是类似 Deployment 的方式运行 runner那是否有类似 HPA水平 pod 自动扩缩容的功能自动伸缩actions-runner-controller 在 3 个 Runner 的 CRD 之外还提供了类似 HPA 的 CRD HorizontalRunnerAutoscaler简称 HRA。HRA 可以根据指标 PercentageRunnersBusy 或者 TotalNumberOfQueuedAndInProgressWorkflowRuns来对 runner 进行扩缩容或者基于 GitHub Eventswebhook来进行扩缩容。这两种都各有优缺点前者指标是通过 GitHub API 轮训等待的作业数实现简单但时效性差后者基于事件触发时效性更佳但是实现复杂需要对外暴露访问端点接收 GitHub Event。这里为了演示使用基于指标的方式进行扩缩容。kubectl apply -f - EOF apiVersion: actions.summerwind.dev/v1alpha1 kind: HorizontalRunnerAutoscaler metadata:name: building-runner-autoscaler spec:scaleDownDelaySecondsAfterScaleOut: 30scaleTargetRef:name: building-runnerminReplicas: 1maxReplicas: 5metrics:- type: PercentageRunnersBusyscaleUpThreshold: 0.75scaleDownThreshold: 0.25scaleUpFactor: 2scaleDownFactor: 0.5 EOF还是通过 API 触发作业模拟并发执行由于轮训间隔比较长默认 1 分钟自动扩容需要等待一段时间kubectl get pods -l actions-runner -n actions-runner-system NAME                          READY   STATUS    RESTARTS   AGE building-runner-k6jlc-dk7gc   2/2     Running   0          1m34s building-runner-k6jlc-pbwnz   2/2     Running   0          54s building-runner-k6jlc-nlptp   2/2     Running   0          54s总结GitHub Actions 是个很强大的 CI 工具结合自托管的 Runner 可以在付出较低成本的基础上有更好的体验。本文也只是从满足需求的出发对 “Runner on Kubernetes” 进行了探索。对一个工具从会用到用好还有很长的路要走。但满足当前需求已是足矣。有兴趣的同学可以更进一步思考如何限制 Runner 运行时的资源占用持久化如何实现比如 Maven 构建时的本地库Nodejs 的 node_mudules 如何避免重复下载自动扩缩容能否更加高效往期推荐Redis 内存优化神技小内存保存大数据使用 nginx 轻松管理 kubernetes 资源文件Redis 内存满了怎么办这样置才正确实战 Kubectl 创建 Deployment 部署应用点分享点收藏点点赞点在看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/911554.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用什么建设网站自己怎么做入网站回收书报

要实现的内容&#xff1a;手写签名&#xff0c;协议内容。点击提交后&#xff1a;生成1张图片&#xff0c;有协议内容和签署日期和签署人。 实现的效果图如下&#xff1a; 1、签名页面 <template><view class"index"><u-navbar title"电子协议…

根据链接获取网站名称wordpress后台慢js

书接上回&#xff0c;经过连续两期使用人工神经网络对福彩3D进行预测&#xff0c;经过不断的调参优化&#xff0c;并及时总结规律&#xff0c;感觉还是有一定的信心提高七码的命中概率。 今天&#xff0c;咱们继续来验证&#xff0c;直接上今天的统计结果&#xff0c;首先&…

网站开发语言字典99作文网官网

好久没有上来了。也没有什么好说的。最近在做基于SVG开发的一个实时监测系统&#xff0c;感觉目前SVG性能还不是太好&#xff0c;客户端CPU不经意间就达到80%以上了。向老板提出辞职&#xff0c;不过老板没有同意&#xff0c;最终协商结果再做三个月&#xff0c;直到新人完全接…

网站开发的时间流程英文网站建设口碑好

文/张铎“机器人在2029年能够达到人类的水平”张铎(以下简称张)&#xff1a;在今年的CES大展上&#xff0c;我们看到了能从手掌上起飞的自拍无人机&#xff0c;电视的分辨率都出到了8K的清晰度&#xff0c;像在去年的CES上还是4K的&#xff0c;发展非常迅速&#xff0c;然后今年…

建设厅网站打不开建筑学专业大学世界排名

随着城市化进程的加快&#xff0c;公厕作为城市基础设施的重要组成部分&#xff0c;扮演着不可忽视的角色。然而&#xff0c;传统的公厕粗放型管理模式&#xff0c;已经无法满足市民日益增长的需求。为了提升公厕的管理和服务水平&#xff0c;智慧公厕应运而生。 什么是智慧公…

化州市住房和建设局网站西安优化官网公司

1 glog 使用 CMakeLists.txt 来组织和构建包含 glog 的项目是一个很好的选择。下面是一个如何使用 CMake 与 glog 的例子。 项目结构: ├── CMakeLists.txt └── main.cppCMakeLists.txt: cmake_minimum_required(VERSION 3.10) project(GlogExample)# 设置C++标准为C++11…

做网站 搞流量 赚广告费艺术字体在线生成器免费转换器

什么是 NPM npm之于Node,就像pip之于Python,gem之于Ruby,composer之于PHP。 npm是Node官方提供的包管理工具,他已经成了Node包的标准发布平台,用于Node包的发布、传播、依赖控制。npm提供了命令行工具,使你可以方便地下载、安装、升级、删除包,也可以让你作为开发者发布…

阿雷网站建设购物网站建设价格

一、Android 权限机制 安装时权限声明 权限机制说明 安装软件时弹出软件所需要申请的全部权限&#xff0c;如果用户认可软件申请的权限&#xff0c;就会继续安装软件&#xff1b;如果用户不认可所申请的权限&#xff0c;就可以拒绝安装。 实现方式 在 AndroidManifest.mxl …

网站死链检查随机置顶wordpress

24.3 分布式综合应用 1. 分布式事务1.1 分布式事务1.2 分布式事务方案1. 2pc2. 其他方案1.3 Seata分布式事务框架:基于2pc1. 简介2. 启动seata服务1.4 微服务事务案例分析1. 代码分析2. 基于Seata改造2. 分布式锁2.1 简介3. RabbitMQ应用

网站手机端怎么制作教程京津冀协同发展的首要任务有

随着UWA GOT Online采样的参数越来越多样化&#xff0c;为了提升开发者的使用体验&#xff0c;我们最新推出了三种预设数据采集方案&#xff1a;极简模式、CPU模式、内存模式。该更新旨在降低多数据采集对数据准确性的干扰&#xff0c;同时也为大家提供更精准且有针对性的数据指…

比较专业的建设网站的公司太钢建设公司官网

前言 本文很细&#xff0c;甚至有点墨迹&#xff0c;主要为了方便从来没用过 vmware 的新人&#xff0c;其实大部分步骤和正常安装虚拟机没有区别&#xff0c;详细贴图以方便大家对比细节 参考文章 感谢大佬们的无私分享 https://blog.csdn.net/qq_19731521/article/details…

西安做网站维护的公司python怎么学

在本文中&#xff0c;我们将为Speedment创建一个插件&#xff0c;该插件使用Gson生成序列化和反序列化逻辑&#xff0c;从而使其在数据库实体和JSON字符串之间进行映射非常容易。 这将有助于展示Speedment代码生成的可扩展性&#xff0c;同时探索Gson库的一些很酷的功能。 Spe…

重庆装修网站建设怎么在各个网站免费推广信息

文章目录 前期工作1. 设置GPU&#xff08;如果使用的是CPU可以忽略这步&#xff09;我的环境&#xff1a; 2. 导入数据3. 查看数据 二、数据预处理1. 加载数据2. 可视化数据3. 再次检查数据4. 配置数据集5. 归一化 三、构建VGG-19网络1. 官方模型&#xff08;已打包好&#xff…

做电商的网站动漫wordpress主题下载地址

目录 1. FPGA的基础 2. FPGA的工作原理 3. FPGA的优势 3.1 灵活性 3.2 快速开发周期 3.3 高性能 4. FPGA的应用领域 4.1 通信系统 4.2 图像处理 4.3 嵌入式系统 4.4 科学研究 5. FPGA的未来展望 1. FPGA的基础 FPGA&#xff0c;即现场可编程门阵列&#xff08;Fiel…

网站建设详细描述产品的是什么建设网站要多长时间

我们平常用python写些脚本可以方便我们的学习办公&#xff0c;但限制就是需要有python环境才能运行。 那能不能直接在没有python环境的电脑上运行我们的脚本呢&#xff1f; 当然可以&#xff0c;那就是直接把python脚本打包成exe可执行程序&#xff08;注针对win系统&#xf…

设计企业网站哪家好学做宝宝衣服网站好

ID是设计的时候所指定的ID。 ClientID是当这个控件生成到客户端页面时候&#xff0c;需要在客户端访问时候用的。 UniqueID是当需要参与服务端回传的时候用的。 备注&#xff1a;当控件是子控件的时候&#xff08;例如在用户控件中的Button&#xff09;&#xff0c;ClientID在H…

学做网站需要多少钱家乡ppt模板免费下载网站

【Miniconda】一文了解conda虚拟环境的作用 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希望得到您的订阅和支持~ &am…

做电商网站前期做什么工作无锡企业网站排名

​在数字化浪潮席卷全球的今天&#xff0c;产业园区正经历着前所未有的变革&#xff0c;数字化运营管理成为各个园区转型升级的发力方向&#xff0c;它不仅能够提升园区的运营管理效率&#xff0c;还能够帮助园区提高服务效能、实现精准招商、增强决策效率&#xff0c;从而全面…

阿里云建站是外包的吗wordpress 当前主题路径

供配电系统智能化监控是指利用先进的监测技术、自动化控制技术、计算机网络技术等&#xff0c;对供配电系统进行实时、全方位的监测和控制&#xff0c;以实现供配电系统的安全、稳定、高效运行。 供配电系统智能化监控的主要功能包括&#xff1a; 实时数据采集&#xff1a;通过…