首页 文章 精选 留言 我的

精选列表

搜索[step],共2633篇文章
优秀的个人博客,低调大师

大数据搬站step by step

IDC / ECS自建和云数据库之间的数据搬站 1 IDC -> MaxCompute / EMR 【方案】:使用“独享数据集成资源组”,绑定可以连通用户IDC的用户VPC,然后提工单,由阿里云数据集成开发人员在独享数据集成资源组上配置路由,使独享数据集成资源组可以访问IDC内数据源。 1.1 IDC Hadoop(HDFS / Hive)-> EMR 【HDFS读取】:https://help.aliyun.com/knowledge_detail/137721.html【HDFS写入】https://help.aliyun.com/knowledge_detail/137759.html 1.12 前期准备 创建好EMR集群,详细文档请参见:E-MapReduce集群创建 现在自建Hadoop迁移到E-MapReduce可以通过OSS进行过度,或者使用阿里云高速通道产品建立线下IDC和线上E-MapReduce所在VPC网络的连通。 配置DataWorks独享数据集成资源组,详细文档请参见:独享资源模式 本文以在华北2(北京)区域创建项目为例,同时启动Dataworks的相关服务。 2.12 数据准备 IDC集群测试数据准备,本例中HIVE建表语句如下: CREATE TABLE IF NOT EXISTS test( id INT, name STRING, hobby STRING, region STRING ) PARTITIONED BY(pt string) row format delimited fields terminated by ',' lines terminated by '\n' ; 插入测试数据: insert into test PARTITION(pt =1) values(1,'xiaoming','book','beijing'),(2,'lilei','TV','nanjing'),(3,'lihua','music','hebei'),(4,'xiaoma','draw','henan'),(5,'laoli','piano','heinan'); 2.13 IDC自建Hadoop数据源连接Dataworks数据集成-数据源管理-新增数据源-HDFS 使用“独享数据集成资源组”,绑定可以连通用户IDC的用户VPC,然后提工单,由阿里云数据集成开发人员在独 享数据集成资源组上配置路由,使独享数据集成资源组可以访问IDC内数据源。 EMR的Hadoop数据源连接Dataworks数据集成-数据源管理-新增数据源-HDFS 2.14 在EMR的Hadoop上创建目录来存放ECS集群同步过来的数据 hadoop fs -mkdir /emr_test 2.15 在DataWorks中创建数据同步节点 配置数据同步节点并点击转换为脚本模式,配置MaxCompute Reader 和 HDFS Writer 脚本可参考官方文档:配置HDFS Reader 和 配置HDFS Writer本文档中配置如下: { "type": "job", "steps": [ { "stepType": "hdfs", "parameter": { "path": "/user/hive/warehouse/gitdatabase.db/test/", "datasource": "IDC_EMR", "column": [ "*" ], "encoding": "UTF-8", "fieldDelimiter": ",", "fileType": "text" }, "name": "Reader", "category": "reader" }, { "stepType": "hdfs", "parameter": { "path": "/emr_test/", "fileName": "emr_test", "datasource": "IDC_EMR", "column": [ { "name": "id", "type": "int" }, { "name": "name", "type": "string" }, { "name": "hobby", "type": "string" }, { "name": "region", "type": "string" }, { "name": "col5", "type": "date" } ], "writeMode": "append", "encoding": "UTF-8", "fieldDelimiter": ",", "fileType": "text" }, "name": "Writer", "category": "writer" } ], "version": "2.0", "order": { "hops": [ { "from": "Reader", "to": "Writer" } ] }, "setting": { "errorLimit": { "record": "" }, "speed": { "concurrent": 2, "throttle": true, "mbps": "10" } } } 配置独享资源组: 2.16 脚本按需求配置并保存,运行节点: 查看EMR集群hdfs数据是否同步成功:hadoop fs -cat /emr_test/* 1.2 IDC Kafka -> EMR Kafka 【Kafka读取】:https://help.aliyun.com/knowledge_detail/137745.html【Kafka写入】https://help.aliyun.com/knowledge_detail/145510.html 1.21 环境准备 已完成阿里云EMR服务自动化搭建Kafka集群,详细文档请参见:E-MapReduce 数据工场DataWorks,详细文档请参见:DataWorks 购买独享数据集成资源,使独享资源组可以访问您的云资源,详细文档请参见:独享资源组模式IDC自建需要与线上E-MapReduce所在网络的连通。 为保证您可以顺利登录EMR集群Header主机,及DataWorks可以顺利和EMR集群Header主机通信,请您首 先配置EMR集群Header主机安全组,放行TCP 22及TCP 9092端口。本文中在华北2(北京)区域创建项目,同时启动DataWorks相关服务。通过独享集成资源组绑定到与Kafka对应的VPC,点击专有网络绑定,选择与Kafka对应的交换机进行连接。 1.22 准备IDC kafka测试数据创建测试Topic执行如下命令创建测试所使用的Topic testkafka。 [root@emr-header-1 ~]# kafka-topics.sh --zookeeper emr-header-1:2181/kafka-1.0.1 --partitions 10 --replication-factor 3 --topic testkafka --create Created topic "testkafka". 执行如下命令查看已创建的Topic。 [root@emr-header-1 ~]# kafka-topics.sh --list --zookeeper emr-header-1:2181/kafka-1.0.1 __consumer_offsets _emr-client-metrics _schemas connect-configs connect-offsets connect-status testkafka 写入测试数据您可以执行如下命令,模拟生产者向Topic testkafka中写入数据。由于Kafka用于处理流式数据,您可以持续不断的向其中写入数据。为保证测试结果,建议您写入10条以上的数据。 [root@emr-header-1 ~]# kafka-console-producer.sh --broker-list emr-header-1:9092 --topic testkafka >123 >abc > 为验证写入数据生效,您可以同时再打开一个SSH窗口,执行如下命令,模拟消费者验证数据是否已成功写入Kafka。当数据写入成功时,您可以看到已写入的数据。 [root@emr-header-1 ~]# kafka-console-consumer.sh --bootstrap-server emr-header-1:9092 --topic testkafka --from-beginning 123 abc 1.23 在EMR kafka创建topic来放同步过来的数据: [root@emr-header-1 ~]# kafka-topics.sh --zookeeper emr-header-1:2181/kafka-1.0.1 --partitions 10 --replication-factor 3 --topic emrkafka --create Created topic "testkafka". 1.24 数据同步 a. 在您的业务流程中右键单击数据集成,选择新建 > 数据集成 > 离线同步。 b.新建数据同步节点后,您需要选择数据来源的数据源为kafka,数据去向的数据源为kafka,完成上述配置后,请单击下图框中的按钮,转换为脚本模式。 c.完成脚本配置后,请首先切换任务资源组为您创建的独享资源组,然后单击运行。 1.25 确认数据导入 a.完成运行后,您可以在运行日志中查看运行结果,如下为成功运行的日志。 b. 查看EMR Kafka数据是否成功写入。 1.3 IDC MySQL -> MaxCompute 【MySQL读取】https://help.aliyun.com/knowledge_detail/137725.html【MaxCompute写入】https://help.aliyun.com/knowledge_detail/137466.html 1.31 环境准备 大数据计算服务MaxCompute,详细文档请参见:MaxCompute 数据工场DataWorks,详细文档请参见:DataWorks 购买独享数据集成资源,使独享数据资源可以访问您IDC的数据源,详细文档请参见:独享资源模式 1.32 数据采集本文通过开通数据网关资源,使用DMS来管理IDC的MySQL。通过数据集成-数据源-新增数据源MySQL JDBC Url连接。 1.33 在MaxCompute中创建数据表存放同步过来的数据。本实例建表:idc_my。 1.34 数据同步配置MySQL数据同步节点 配置数据集成任务时,将默认资源组配置为需要的独享数据集成资源。通过向导模式配置任务时,在通道控制 > 任务资源组下拉框中,选择相应的独享数据集成资源。 确认当前节点的配置无误后,单击左上角的保存。关闭当前任务,返回业务流程配置面板。 1.35 运行业务流程右键单击rds_数据同步节点,选择查看日志。当日志中出现如下字样,表示同步节点运行成功,并成功同步数据。然后在数据开发页面,单击左侧导航栏中的临时查询,进入临时查询面板,再确认数据是否已经导入MaxCompute中。 2 云上ECS自建 -> MaxCompute / EMR 【方案】:使用“独享数据集成资源组”,绑定可以自建数据源所在用户VPC,然后提工单,由阿里云数据集成开发人员在独享数据集成资源组上配置路由,使独享数据集成资源组可以访问ESC内数据源。 2.1 ECS Hadoop(HDFS / Hive)-> EMR 【HDFS读取】:https://help.aliyun.com/knowledge_detail/137721.html 【HDFS写入】https://help.aliyun.com/knowledge_detail/137759.html 2.11 前提条件 配置DataWorks独享数据集成资源组,详细文档请参见:独享资源模式 创建好EMR集群。 由于 VPC 实现用户专有网络之间的逻辑隔离,E-MapReduce 建议使用 VPC 网络。 经典网络与 VPC 网络打通如果 ECS 自建 Hadoop,需要通过 ECS 的classiclink的方式将经典网络和 VPC 网络打通,参见建立 ClassicLink 连接。 VPC 网络之间连通数据迁移一般需要较高的网络带宽连通,建议新旧集群尽量处在同一个区域的同一个可用区内。 本文以在华北2(北京)区域创建项目为例,同时启动Dataworks的相关服务。 2.12 数据准备ECS集群测试数据准备本例中HIVE建表语句如下: CREATE TABLE IF NOT EXISTS test( id INT, name STRING, hobby STRING, region STRING ) PARTITIONED BY(pt string) row format delimited fields terminated by ',' lines terminated by '\n' ; 插入测试数据: insert into test PARTITION(pt =1) values(1,'xiaoming','book','beijing'),(2,'lilei','TV','nanjing'),(3,'lihua','music','hebei'),(4,'xiaoma','draw','henan'),(5,'laoli','piano','heinan'); 2.13 ECS自建Hadoop数据源连接Dataworks数据集成-数据源管理-新增数据源-HDFS 使用“独享数据集成资源组”,绑定可以自建数据源所在用户VPC,然后提工单,由阿里云数据集成开发人员在独享数据集成资源组上配置路由,使独享数据集成资源组可以访问ESC内数据源。 EMR的Hadoop数据源连接Dataworks数据集成-数据源管理-新增数据源-HDFS 2.14 在EMR的Hadoop上创建目录来存放ECS集群同步过来的数据 hadoop fs -mkdir /emr_test 2.15 在DataWorks中创建数据同步节点配置数据同步节点并点击转换为脚本模式, 配置MaxCompute Reader 和 HDFS Writer 脚本可参考官方文档:配置HDFS Reader 和 配置HDFS Writer本文档中配置如下: { "type": "job", "steps": [ { "stepType": "hdfs", "parameter": { "path": "/user/hive/warehouse/gitdatabase.db/test/", "datasource": "IDC_EMR", "column": [ "*" ], "encoding": "UTF-8", "fieldDelimiter": ",", "fileType": "text" }, "name": "Reader", "category": "reader" }, { "stepType": "hdfs", "parameter": { "path": "/emr_test/", "fileName": "emr_test", "datasource": "IDC_EMR", "column": [ { "name": "id", "type": "int" }, { "name": "name", "type": "string" }, { "name": "hobby", "type": "string" }, { "name": "region", "type": "string" }, { "name": "col5", "type": "date" } ], "writeMode": "append", "encoding": "UTF-8", "fieldDelimiter": ",", "fileType": "text" }, "name": "Writer", "category": "writer" } ], "version": "2.0", "order": { "hops": [ { "from": "Reader", "to": "Writer" } ] }, "setting": { "errorLimit": { "record": "" }, "speed": { "concurrent": 2, "throttle": true, "mbps": "10" } } } 配置独享资源组: 2.16 脚本按需求配置并保存,运行节点: 查看EMR集群hdfs数据是否同步成功:hadoop fs -cat /emr_test/* 2.2 ECS MySQL -> MaxCompute 【MySQL读取】https://help.aliyun.com/knowledge_detail/137725.html【MaxCompute写入】https://help.aliyun.com/knowledge_detail/137466.html 2.21 环境准备 大数据计算服务MaxCompute,详细文档请参见:MaxCompute 数据工场DataWorks,详细文档请参见:DataWorks 购买独享数据集成资源,使Dataworks可以访问您的云资源,详细文档请参见:独享资源组模式本文以在华北2(北京)区域创建项目为例,同时启动Dataworks的相关服务。经典网络ECS上自建的数据源和DataWorks在同已区域为例。 2.22 数据采集(1)以项目管理员身份登录DataWorks控制台,单击相应工作空间后的进入数据集成。(2)单击左侧导航栏中的数据源,即可跳转至工作空间管理 > 数据源管理页面。(3)单击数据源管理页面右上角的新增数据源。(4)在新增数据源对话框中,选择数据源类型为MySQL。(5)填写MySQL数据源的各配置项。MySQL数据源类型需要用连接串模式。(6)单击测试连通性。(7)连通性测试通过后,单击完成。 2.23 在MaxCompute中建立数据表,存放数据同步过来的数据。本次同步建表:test_tab。 2.24 新建数据同步任务在DataWorks上新建数据同步节点,详情请参见数据同步节点。 配置数据集成任务时,将默认资源组配置为需要的独享数据集成资源。 完成上述配置后,单击运行即可。运行成功日志示例如下所示。 2.25 确认数据是否成功导入MaxCompute 3 云上DB -> MaxCompute / EMR 【方案】直接创建云上DB数据源,然后向导模式配置同步任务即可 3.1 RDS / Mongo -> MaxCompute 【创建RDS数据源】:https://help.aliyun.com/knowledge_detail/137690.html【创建MongoDB数据源】:https://help.aliyun.com/knowledge_detail/137675.html【MaxCompute写入】https://help.aliyun.com/knowledge_detail/137466.html 3.11 环境准备 大数据计算服务MaxCompute,详细文档请参见:MaxCompute 数据工场DataWorks,详细文档请参见:DataWorks3.12 数据采集 新增MySQL数据源(6) 以项目管理员身份登录DataWorks控制台,单击相应工作空间后的进入数据集成。(7) 单击左侧导航栏中的数据源,即可跳转至工作空间管理 > 数据源管理页面。(8) 单击数据源管理页面右上角的新增数据源。(9) 在新增数据源对话框中,选择数据源类型为MySQL。(10) 填写MySQL数据源的各配置项。MySQL数据源类型包括阿里云实例模式和连接串模式。以新增MySQL > 阿里云实例模式类型的数据源为例。 (6) 单击测试连通性。(7) 连通性测试通过后,单击完成。 新增MongoDB数据源(1) 单击左侧导航栏中的数据源,即可跳转至工作空间管理 > 数据源管理页面。(2) 单击数据源管理页面右上角的新增数据源。(3) 在新增数据源对话框中,选择数据源类型为MongoDB。(4) 填写MongoDB数据源的各配置项。 MongoDB数据源类型包括实例模式(阿里云数据源)和连接串模式。实例模式(阿里云数据源):通常使用经典网络类型,同地区的经典网络可以连通,跨地区的经典网络不保证可以连通。连接串模式:通常使用公网类型,可能产生一定的费用。以新增MongDB > 实例模式(阿里云数据源)类型的数据源,经典网络为例。 (5) 单击测试连通性。(6)测试连通性通过后,单击完成。 3.13 登录MongoDB的DMS控制台,本示例使用的数据库为admin,集合为abc。 3.14 新建表(1)在数据开发页面打开新建的业务流程,右键单击MaxCompute,选择新建 > 表。(2)在新建表对话框中,输入表名,单击提交。此处需要创建2张表(msl_maxc和mon_maxc),分别存储同步过来的MySQL日志数据和MongoDB日志数据。 3.15 新建数据同步任务在DataWorks上新建数据同步节点,详情请参见数据同步节点。 配置MySQL数据同步节点 配置MongoDB的数据同步节点。(不支持向导模式,此例为脚本模式) { "type": "job", "steps": [ { "stepType": "mongodb", "parameter": { "datasource": "mon_maxc", "column": [ { "name": "store.bicycle.color", "type": "document.string" } ], "collectionName": "abc" }, "name": "Reader", "category": "reader" }, { "stepType": "odps", "parameter": { "tableType": null, "partition": "", "truncate": true, "datasource": "odps_first", "column": [ "*" ], "guid": null, "emptyAsNull": false, "table": "mon_maxc" }, "name": "Writer", "category": "writer" } ], "version": "2.0", "order": { "hops": [ { "from": "Reader", "to": "Writer" } ] }, "setting": { "errorLimit": { "record": "" }, "speed": { "concurrent": 2, "throttle": false } } } 3.15 完成上述配置后,单击运行即可。运行成功日志示例如下所示。 确认数据是否成功导入MaxCompute

优秀的个人博客,低调大师

Step by Step!Kubernetes持续部署指南

本文是作者通过亲身实践,从零基础开始,一步一步总结出来的Kubernetes持续部署工作流程。文章从前期的工具准备开始,到复刻存储库、测试、构建镜像、构建流水线最后进行部署,所有的工作流程都一一展现在文章中,对于想要拥有全自动持续交付流水线的用户将有很大的借鉴意义。 在很久很久以前的一份工作中,我的任务是将老式的LAMP堆栈切换到Kubernetes上。那会儿我的老板总是追逐新技术,认为只需要几天时间就能够完成新旧技术的迭代——鉴于那时我们甚至对容器的工作机制一无所知,所以不得不说老板的想法真的很大胆。 在阅读了官方文档并且搜索了很多信息之后,我们开始感到不知所措——有许多新的概念需要学习:pod、容器以及replica等。对我而言,Kubernetes似乎只是为一群聪明的开发者而设计的。 然后我做了我在这一状况下常做的事:通过实践来学习。通过一个简单的例子可以很好地理解错综复杂的问题,所以我自己一步一步完成了整个部署过程。 最后,我们做到了,虽然远未达到规定的一周时间——我们花了将近一个月的时间来创建三个集群,包括它们的开发、测试和生产。 本文我将详细介绍如何将应用程序部署到Kubernetes。阅读完本文之后,你将拥有一个高效的Kubernetes部署和持续交付工作流程。 持续集成与交付 持续集成是在每次应用程序更新时构建和测试的实践。通过以少量的工作,更早地检测到错误并立即解决。 集成完成并且所有测试都通过之后,我们就能够添加持续交付到自动化发布和部署的流程中。使用CI/CD的项目可以更频繁、更可靠地发布。 我们将使用Semaphore,这是一个快速、强大且易用地持续集成和交付(CI/CD)平台,它能够自动执行所有流程: 1、 安装项目依赖项 2、 运行单元测试 3、 构建一个Docker镜像 4、 Push镜像到Docker Hub 5、 一键Kubernetes部署 对于应用程序,我们有一个Ruby Sinatra微服务,它暴露一些HTTP端点。该项目已包含部署所需的所有内容,但仍需要一些组件。 准备工作 在开始操作之前,你需要登录Github和Semaphore账号。此外,为后续方便拉取或push Docker镜像,你需要登录Docker Hub。 接下来,你需要在计算机上安装一些工具: Git:处理代码 curl:网络的“瑞士军刀” kubectl:远程控制你的集群 当然,千万不要忘了Kubernetes。大部分的云供应商都以各种形式提供此服务,选择适合你的需求的即可。最低端的机器配置和集群大小足以运行我们示例的app。我喜欢从3个节点的集群开始,但你可以只用1个节点的集群。 集群准备好之后,从你的供应商中下载kubeconfig文件。有些允许你直接从其web控制台下载,有些则需要帮助程序。我们需要此文件才能连接到集群。 有了这个,我们已经可以开始了。首先要做的是fork存储库。 Fork存储库 在这篇文章中fork我们将使用的演示应用程序。 访问semaphore-demo-ruby-kubernetes存储库,并且点击右上方的Fork按钮 点击Clone or download按钮并且复制地址 复制存储库:$ git clone https://github.com/your_repository_path… 使用Semaphore连接新的存储库 1、 登录到你的Semaphore 2、 点击侧边栏的链接,创建一个新项目 3、 点击你的存储库旁【Add Repository】按钮 使用Semaphore测试 持续集成让测试变得有趣并且高效。一个完善的CI 流水线能够创建一个快速反馈回路以在造成任何损失之前发现错误。我们的项目附带一些现成的测试。 打开位于.semaphore/semaphore.yml的初始流水线文件,并快速查看。这个流水线描述了Semaphore构建和测试应用程序所应遵循的所有步骤。它从版本和名称开始。 version: v1.0 name: CI 接下来是agent,它是为job提供动力的虚拟机。我们可以从3种类型中选择: agent: machine: type: e1-standard-2 os_image: ubuntu1804 Block(块)、任务以及job定义了在流水线的每个步骤中要执行的操作。在Semaphore,block按照顺序运行,与此同时,在block中的job也会并行运行。流水线包含2个block,一个是用于库安装,一个用于运行测试。 第一个block下载并安装了Ruby gems。 - name: Install dependencies task: jobs: - name: bundle install commands: - checkout - cache restore gems-$SEMAPHORE_GIT_BRANCH-$(checksum Gemfile.lock),gems-$SEMAPHORE_GIT_BRANCH,gems-master - bundle install --deployment --path .bundle - cache store gems-$SEMAPHORE_GIT_BRANCH-$(checksum Gemfile.lock) .bundle Checkout复制了Github里的代码。既然每个job都在完全隔离的机器里运行,那么我们必须依赖缓存(cache)来在job运行之间存储和检索文件。 blocks: - name: Install dependencies task: jobs: - name: bundle install commands: - checkout - cache restore gems-$SEMAPHORE_GIT_BRANCH-$(checksum Gemfile.lock),gems-$SEMAPHORE_GIT_BRANCH,gems-master - bundle install --deployment --path .bundle - cache store gems-$SEMAPHORE_GIT_BRANCH-$(checksum Gemfile.lock) .bundle 第二个block进行测试。请注意我们重复使用了checkout和cache的代码以将初始文件放入job中。最后一个命令用于启动RSpec测试套件。 - name: Tests task: jobs: - name: rspec commands: - checkout - cache restore gems-$SEMAPHORE_GIT_BRANCH-$(checksum Gemfile.lock),gems-$SEMAPHORE_GIT_BRANCH,gems-master - bundle install --deployment --path .bundle - bundle exec rspec 最后一个部分我们来看看Promotion。Promotion能够在一定条件下连接流水线以创建复杂的工作流程。所有job完成之后,我们使用 auto_promote_on来启动下一个流水线。 promotions: - name: Dockerize pipeline_file: docker-build.yml auto_promote_on: - result: passed 工作流程继续执行下一个流水线。 构建Docker镜像 我们可以在Kubernetes上运行任何东西,只要它打包在Docker镜像中。在这一部分,我们将学习如何构建镜像。 我们的Docker镜像将包含应用程序的代码、Ruby以及所有的库。让我们先来看一下Dockerfile: FROM ruby:2.5 RUN apt-get update -qq && apt-get install -y build-essential ENV APP_HOME /app RUN mkdir $APP_HOME WORKDIR $APP_HOME ADD Gemfile* $APP_HOME/ RUN bundle install --without development test ADD . $APP_HOME EXPOSE 4567 CMD ["bundle", "exec", "rackup", "--host", "0.0.0.0", "-p", "4567"] Dockerfile就像一个详细的菜谱,包含所有构建容器镜像所需要的步骤和命令: 1、 从预构建的ruby镜像开始 2、 使用apt-get安装构建工具 3、 复制Gemfile,因为它具有所有的依赖项 4、 用bundle安装它们 5、 复制app的源代码 6、 定义监听端口和启动命令 我们将在Semaphore环境中bake我们的生产镜像。然而,如果你想要在计算机上进行一个快速的测试,那么请输入: $ docker build . -t test-image 使用Docker运行和暴露内部端口4567以在本地启动服务器: $ docker run -p 4567:4567 test-image 你现在可以测试一个可用的HTTP端点: $ curl -w "\n" localhost:4567 hello world :)) 添加Docker Hub账户到Semaphore Semaphore有一个安全的机制以存储敏感信息,如密码、令牌或密钥等。为了能够push镜像到你的Docker Hub镜像仓库中,你需要使用你的用户名和密码来创建一个Secret: 打开你的Semaphore 在左侧导航栏中,点击【Secret】 点击【Creat New Secret】 Secret的名字应该是Dockerhub,键入登录信息(如下图所示),并保存。 构建Docker流水线 这个流水线开始构建并且push镜像到Docker Hub,它仅仅有1个block和1个job: 这次,我们需要使用更好的性能,因为Docker往往更加耗费资源。我们选择具有四个CPU,8GB RAM和35GB磁盘空间的中端机器e1-standard-4: version: v1.0 name: Docker build agent: machine: type: e1-standard-4 os_image: ubuntu1804 构建block通过登录到Docker Hub启动,用户名和密码可以从我们刚创建的secret导入。登录之后,Docker可以直接访问镜像仓库。 下一个命令是docker pull,它试图拉取最新镜像。如果找到镜像,那么Docker可能能够重新使用其中的一些层,以加速构建过程。如果没有最新镜像,也无需担心,只是需要花费长一点的时间来构建。 最后,我们push新的镜像。注意,这里我们使用SEMAPHORE_WORKFLOW_ID 变量来标记镜像。 blocks: - name: Build task: secrets: - name: dockerhub jobs: - name: Docker build commands: - echo "${DOCKER_PASSWORD}" | docker login -u "${DOCKER_USERNAME}" --password-stdin - checkout - docker pull "${DOCKER_USERNAME}"/semaphore-demo-ruby-kubernetes:latest || true - docker build --cache-from "${DOCKER_USERNAME}"/semaphore-demo-ruby-kubernetes:latest -t "${DOCKER_USERNAME}"/semaphore-demo-ruby-kubernetes:$SEMAPHORE_WORKFLOW_ID . - docker images - docker push "${DOCKER_USERNAME}"/semaphore-demo-ruby-kubernetes:$SEMAPHORE_WORKFLOW_ID 当镜像准备完毕,我们进入项目的交付阶段。我们将用手动promotion来扩展我们的Semaphore 流水线。 promotions: - name: Deploy to Kubernetes pipeline_file: deploy-k8s.yml 要进行第一次自动构建,请进行push: $ touch test-build $ git add test-build $ git commit -m "initial run on Semaphore“ $ git push origin master 镜像准备完成之后,我们就可以进入部署阶段。 部署到Kubernetes 自动部署是Kubernetes的强项。我们所需要做的就是告诉集群我们最终的期望状态,剩下的将由它来负责。 然而,在部署之前,你必须将kubeconfig文件上传到Semaphore。 上传Kubeconfig到Semaphore 我们需要第二个secret:集群的kubeconfig。这个文件授予可以对它的管理访问权限。因此,我们不希望将文件签入存储库。 创建一个名为do-k8s的secret并且将kubeconfig文件上传到/home/semaphore/.kube/dok8s.yaml中: 部署清单 尽管Kubernetes已经是容器编排平台,但是我们不直接管理容器。实际上,部署的最小单元是pod。一个pod就好像一群形影不离的朋友,总是一起去同一个地方。因此要保证在pod中的容器运行在同一个节点上并且有相同的IP。它们可以同步启动和停止,并且由于它们在同一台机器上运行,因此它们可以共享资源。 pod的问题在于它们可以随时启动和停止,我们没办法确定它们会被分配到的pod IP。要把用户的http流量转发,还需要提供一个公共IP和一个负载均衡器,它负责跟踪pod和转发客户端的流量。 打开位于deploymente.yml的文件。这是一个部署我们应用程序的清单,它被3个dash分离成两个资源。第一个,部署资源: apiVersion: apps/v1 kind: Deployment metadata: name: semaphore-demo-ruby-kubernetes spec: replicas: 1 selector: matchLabels: app: semaphore-demo-ruby-kubernetes template: metadata: labels: app: semaphore-demo-ruby-kubernetes spec: containers: - name: semaphore-demo-ruby-kubernetes image: $DOCKER_USERNAME/semaphore-demo-ruby-kubernetes:$SEMAPHORE_WORKFLOW_ID 这里有几个概念需要厘清: 资源都有一个名称和几个标签,以便组织 Spec定义了最终期望的状态,template是用于创建Pod的模型。 Replica设置要创建的pod的副本数。我们经常将其设置为集群中的节点数。既然我们使用了3个节点,我将这一命令行更改为replicas:3 第二个资源是服务。它绑定到端口80并且将HTTP流量转发到部署中的pod: --- apiVersion: v1 kind: Service metadata: name: semaphore-demo-ruby-kubernetes-lb spec: selector: app: semaphore-demo-ruby-kubernetes type: LoadBalancer ports: - port: 80 targetPort: 4567 Kubernetes将selector与标签相匹配以便将服务与pod连接起来。因此,我们在同一个集群中有许多服务和部署并且根据需要连接他们。 部署流水线 我们现在进入CI/CD配置的最后一个阶段。这时,我们有一个定义在semaphore.yml的CI流水线,以及定义在docker-build.yml的Docker流水线。在这一步中,我们将部署到Kubernetes。 打开位于.semaphore/deploy-k8s.yml的部署流水线: version: v1.0 name: Deploy to Kubernetes agent: machine: type: e1-standard-2 os_image: ubuntu1804 两个job组成最后的流水线: Job 1开始部署。导入kubeconfig文件之后,envsubst将deployment.yaml中的占位符变量替换为其实际值。然后,kubectl apply将清单发送到集群。 blocks: - name: Deploy to Kubernetes task: secrets: - name: do-k8s - name: dockerhub env_vars: - name: KUBECONFIG value: /home/semaphore/.kube/dok8s.yaml jobs: - name: Deploy commands: - checkout - kubectl get nodes - kubectl get pods - envsubst < deployment.yml | tee deployment.yml - kubectl apply -f deployment.yml Job 2将镜像标记为最新,以让我们能够在下一次运行中将其作为缓存使用。 - name: Tag latest release task: secrets: - name: dockerhub jobs: - name: docker tag latest commands: - echo "${DOCKER_PASSWORD}" | docker login -u "${DOCKER_USERNAME}" --password-stdin - docker pull "${DOCKER_USERNAME}"/semaphore-demo-ruby-kubernetes:$SEMAPHORE_WORKFLOW_ID - docker tag "${DOCKER_USERNAME}"/semaphore-demo-ruby-kubernetes:$SEMAPHORE_WORKFLOW_ID "${DOCKER_USERNAME}"/semaphore-demo-ruby-kubernetes:latest - docker push "${DOCKER_USERNAME}"/semaphore-demo-ruby-kubernetes:latest 这是工作流程的最后一步了。 部署应用程序 让我们教我们的Sinatra应用程序唱歌。在app.rb中的App类中添加以下代码: get "/sing" do "And now, the end is near And so I face the final curtain..." end 推送修改的文件到Github: $ git add .semaphore/* $ git add deployment.yml $ git add app.rb $ git commit -m "test deployment” $ git push origin master 等到docker构建流水线完成,你可以查看Semaphore的进度: 是时候进行部署了,点击Promote按钮,看它是否工作: 我们已经有了一个好的开始,现在就看Kubernetes的了。我们可以使用kubectl检查部署状态,初始状态是三个所需的pod并且零可用: $ kubectl get deployments NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE semaphore-demo-ruby-kubernetes 3 0 0 0 15m 几秒之后,pod已经启动,reconciliation已经完成: $ kubectl get deployments NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE semaphore-demo-ruby-kubernetes 3 3 3 3 15m 使用get all获得集群的通用状态,它显示了pod、服务、部署以及replica: $ kubectl get all NAME READY STATUS RESTARTS AGE pod/semaphore-demo-ruby-kubernetes-7d985f8b7c-454dh 1/1 Running 0 2m pod/semaphore-demo-ruby-kubernetes-7d985f8b7c-4pdqp 1/1 Running 0 119s pod/semaphore-demo-ruby-kubernetes-7d985f8b7c-9wsgk 1/1 Running 0 2m34s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.12.0.1 443/TCP 24m service/semaphore-demo-ruby-kubernetes-lb LoadBalancer 10.12.15.50 35.232.70.45 80:31354/TCP 17m NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deployment.apps/semaphore-demo-ruby-kubernetes 3 3 3 3 17m NAME DESIRED CURRENT READY AGE replicaset.apps/semaphore-demo-ruby-kubernetes-7d985f8b7c 3 3 3 2m3 Service IP在pod之后展示。对于我来说,负载均衡器被分配到外部IP 35.232.70.45。需要将其更改为你的提供商分配给你的那个,然后我们来试试新的服务器。 $ curl -w "\n" http://YOUR_EXTERNAL_IP/sing 现在,离结束已经不远了。 胜利近在咫尺 当你使用了正确的CI/CD解决方案之后,部署到Kubernetes并不是那么困难。你现在拥有一个Kubernetes的完全自动的持续交付流水线啦。 这里有几个建议可以让你在Kubernetes上随意fork并玩转semaphore-demo-ruby-kubernetes: 创建一个staging集群 构建一个部署容器并且在里面运行测试 使用更多微服务扩展项目

优秀的个人博客,低调大师

step by step,实现自定义监控脚本

背景 有几个客户在使用自定义监控,通过脚本方式上报数据时,反馈我们的文档不细致,对于aliyuncli的配置不熟,对于自定义指标的部分字段的含义不理解。 因此有必要再整理一个stepbystep的文档,描述清楚每一步的具体含义。 希望能够根据这个文档,能够快速的完成一个自定义的监控脚本。 前置条件 你需要有一个阿里云官网账号 生成ak(accesskeyid, accesskeysecrret) 建议使用子账号accesskeyid, accesskeysecrret,安全性更好。 创建子账号 为子账号生成accesskeyid, accesskeysecrret 为子账号授权:cloudmonitorfullaccess 安装aliyuncli工具 前提条件 • 系统要求:Linux、UNIX 或 Mac OS。 • 环境要求:已安装 Python 2.

优秀的个人博客,低调大师

Step by step,学习EMR集群的fair类型资源池

集群越大,跑的业务越多,越需要资源池管理。资源调度是yarn的核心。 EMR现在支持在业务视角操作yarn资源池了,资源池文档介绍了如何使用。 企业用户往往会选择使用fair调度类型的资源池。本文以一家大数据分析公司业务发展为故事背景,一步步的介绍如何使用fair调度。fair调度详细参数信息可参见官方文档 一个数据分析师 公司刚开始,业务团队只有小明一个数据分析师。一个人用整个集群,默认资源池配置即可。随便跑作业,随便杀作业。 三个数据分析师 公司发展,业务团队小明,张华,李萍三个数据分析师了。还用默认资源池不分队列,一个人把资源用满其他人就用不了了。杀作业很容易杀掉别人的作业,互相影响,出了问题无法定位。 于是采用三个人均分资源策略,创建三个资源池,只设置名字和权重1,管理访问控制的用户名。放置策略采用用户名为队列。gateway上建了三个

优秀的个人博客,低调大师

AgileEAS.NET平台开发Step By Step系列-药店系统-索引

介绍 为了方便大家查看和学习AgileEAS.NET敏捷开发平台相关的文章,特别整理一个索引,我会尽快的完善相应的系列,本系列将会已“药店系统”为 例,从需求-最后的部署全过程的使用说明,当然由于自身对平台还有不熟悉的地方,可能还存在部分理解有误或者理解不深刻的地方,还请大家批评指 出,当然如果您有更好的改进意见或建议,请提出来。 索引 项目说明 AgileEAS.NET平台开发案例-药店系统-项目说明 AgileEAS.NET敏捷开发平台案例-药店系统-项目综述 需求分析 AgileEAS.NET平台开发案例-药店系统-需求分析 开发环境配置 开发环境配置:AgileEAS.NET平台开发实例-开发环境配置 数据库还原:AgileEAS.NET平台开发实例-药店系统-数据库还原 设计 AgileEAS.NET平台开发实例-药店系统-数据库设计 开发 1、AgileEAS.NET平台开发实例-药店系统-系统架构设计 2、AgileEAS.NET平台开发实例-药店系统-数据库建模 3、AgileEAS.NET平台开发实例-药店系统-准备开发环境(上) 4、AgileEAS.NET平台开发实例-药店系统-准备开发环境(中) 5、AgileEAS.NET平台开发实例-药店系统-准备开发环境(下) 6、AgileEAS.NET平台开发实例-药店系统-DAL层解析 7、AgileEAS.NET平台开发实例-药店系统-BLL层分析 8、AgileEAS.NET平台开发实例-药店系统-UI层分析 9、AgileEAS.NET平台开发实例-药店系统-UI层重构技巧及其他 10、AgileEAS.NET平台开发实例-药店系统-报表开发(上) 11、AgileEAS.NET平台开发实例-药店系统-报表开发(下) 12、AgileEAS.NET平台开发实例-药店系统-报表开发(高级篇) 部署 1、AgileEAS.NET平台开发实例-药店系统-功能发布[模块注册][上] 2、AgileEAS.NET平台开发实例-药店系统-功能发布[权限配置][下] 3、AgileEAS.NET平台开发实例-智能升级及服务器部署 替换资源文件 AgileEAS.NET平台开发实例-药店系统-资源文件的替换[大家关心的问题] 药店系统视频教程 AgileEAS.NET平台开发实例-药店系统-视频教程系列-索引 药店系统源码 download3 其他文章 这里附带更多的关于AgileEAS.NET开发平台的说明文章。 1、官方博客:AgileEAS.NET 敏捷软件开发平台 3、AgileEAS.NET平台-文档发布-还等什么? 4、AgileEAS.NET平台工具之数据原型设计器的使用场景示例 5、更多。。。 本文转自何戈洲博客园博客,原文链接:http://www.cnblogs.com/hegezhou_hot/archive/2011/03/30/2000180.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

step-by-step通过数据集成同步数据到HBase

数据集成是阿里集团对外提供的稳定高效、弹性伸缩的数据同步平台。本文将介绍如何使用数据集成将数据同步到HBase。我们以如下场景为例:线上有两个云HBase集群,想把其中一个集群的数据同步到另一个集群中。 第一步 创建数据集成项目 在使用数据集成同步数据之前,我们需要先在MaxCompute产品首页购买资源并创建一个项目。后续的数据同步任务就是放在这个项目下面执行的。具体步骤参见购买并创建项目购买的资源不必和HBase在同一地区。如果已经创建过项目,可以忽略这一步。 第二步 准备调度资源 出于安全方面的考虑,目前HBase导入数据只支持本地模式,所以需要用户先申请ECS并将ESC添加到数据同步的资源组用于执行同步任务。 2.1 申请ECS 在HBase所在Region的任意Zone购买一台ECS,然后设置HBase的白名单。注意:(1)ECS要

优秀的个人博客,低调大师

使用Xamarin开发即时通信系统 -- 基础篇(大量图文讲解 step by step,附源码下载)

如果是.NET开发人员,想学习手机应用开发(Android和iOS),Xamarin无疑是最好的选择,编写一次,即可发布到Android和iOS平台,真是利器中的利器啊!而且,Xamarin已经被微软收购并被大力推广,.NET开发人员将时间投资在Xamarin上,以应对移动开发的热潮,应该是值得的。 好了,废话不多说,就开始吧。本系列文章将详细介绍如何使用Xamarin开发出一个移动端的即时通信系统(手机聊天程序)(文末有源码下载,可先睹为快),本文作为第一篇基础篇,将着重介绍Xamarin Android和Xamarin iOS环境的搭建,包括安装、设置、模拟器、部署、运行调试等。本系列后面的文章将详细介绍手机聊天系统结构原理和具体代码实现。 一.搭建环境 1. 安装 Xamarin。 VS2017已经集成了Xamarin,只要在安装的时候,将“使用.NET的移动开发”选项勾选上,即可。 2.设置Xamarin Android。 (1)启动VS 2017之后,打开菜单工具->选项->Xamarin->Android设置,在设置面板上做如下设置: (2)使用Genymotion作为安卓模拟器。 3.设置Xamarin iOS。 (1)在我的MacBook笔记本上安装 Visual Studio for Mac。 (2)在MacBook的系统偏好设置 中找到“共享”选项,打开“共享”界面如下。 开启远程管理和远程登录。 (3)在PC端VS “工具” 选择卡中依次选择 IOS ->Xamarin.Mac代理,点击左下方的“Add Server”按钮,输入对应远程Macbook机器的IP,并进行登录。 (4)登录成功后,界面上会显示如下链接的图标表示远程成功。 (5)连接成功后,在VS中就可以进行调试MAC机器上的模拟器或者真机了。 (6)在PC端VS中,打开菜单工具->选项->Xamarin->iOS设置,在设置面板上做如下设置: 二. 新建Xamarin.Forms项目、编译 Xamarin.Forms 是Xamarin提供的一个套件,用于跨移动平台的Form应用开发,所以,如果是使用Xamarin开发App,那么,Xamarin.Forms 将是很好的选择。 1.新建一个Cross-Platform跨平台项目,选择Cross Platform App(Xamarin)。 2.项目新建成功后,会在解决方案管理器中,生成三个项目。 XamarinDemo 项目是可移植的类库,App的绝大部分逻辑和UI都是在其中完成。 XamarinDemo.Droid 项目对应了安卓版本,XamarinDemo.iOS 项目对应了iOS版本,它们都引用了ESFramework.XamarinDemo 项目。 对于一般简单的应用而言,只需要在XamarinDemo中编写代码就可以了,XamarinDemo.Droid 和 XamarinDemo.iOS中的代码只需要做少量修改。 3.编译 XamarinDemo.Droid 项目 在解决方案管理器中选中 XamarinDemo.Droid 项目,右键->属性,打开设置面板。 在项目属性面板中,要选择编译所使用的安卓SDK的版本号,我选择的是最新6.0。 4.编译 XamarinDemo.iOS 项目 在解决方案管理器中选中 XamarinDemo.iOS项目,右键->属性,打开设置面板。 在项目属性面板中,选择编译所支持的CPU体系结构,由于现在是使用iOS模拟器,所以选择x86_64。 如果是使用真机调试,则应该选择 ARMv7+ARMv7s+ARM64。 三.部署、调试 编译成功后,就可以尝试部署到虚拟机,并运行调试了。 1. 安卓版本 (1)启动安卓虚拟机。 运行上述的Genymotion。 选择6.0的虚拟机,点击Start按钮运行起来。 (2)部署 在VS上的工具栏,选择刚才启动的虚拟机实例Genymotion Custom Phone - 6.0.0,点击调试按钮(绿色的三角形),即可开始部署、运行的流程。(注意,要选择Debug模式) (3)调试 部署运行成功后,模拟器就会显示demo App 的UI界面: 此时,可以在源码中加入断点开始调试程序了。 2.iOS版本 (1)启动虚拟机 (2)在VS上的工具栏,选择iPhone 6 Plus iOS 11.2,点击调试按钮(绿色的三角形),即可开始部署、运行的流程。 (3)调试 部署运行成功后,模拟器就会显示如下Demo的登录界面: 四.源码下载 虽然还未正式开始介绍聊天程序的代码实现,但是还是先将demo的源码分享给大家,基于以上介绍的内容,大家已经可以将demo运行起来看效果了。并且,源码中除了Xamarin移动端外,还包含了聊天服务端和PC客户端以及WebSocket客户端,而且,Xamarin移动端和PC客户端以及Web端之间都可以相互聊天哦! 下面是手机端运行的效果图: (1)源码:服务端+PC客户端(基于VS 2010) (2)源码:Xamarin 移动端(包括Android 和 iOS) (基于VS 2017) 最后,在使用Xamarin开发本Demo的过程中,踩过了很多很多的“坑”,对这些坑的解决方案我们也会在本系列的文章中分享出来,如此能为后来者节省一些时间。敬请期待!

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册