Tag: 微服务

如何在基于Docker的微服务中pipe理每个环境的数据?

在微服务体系结构中,我很难掌握如何pipe理环境特定的configuration(例如数据库或消息代理的IP地址和凭证)。 假设您有三个微服务(“A”,“B”和“C”),每个微服务由不同的团队拥有和维护。 每个团队都需要一个团队集成环境…他们在哪里使用他们的微服务的最新快照,以及所有依赖微服务的稳定版本。 当然,你也需要QA /分期/生产环境。 大图的简化视图如下所示: “微服务A”团队环境 微服务A( SNAPSHOT ) 微服务B(STABLE) 微服务C(STABLE) “微服务B”团队环境 微服务A(STABLE) 微服务B( SNAPSHOT ) 微服务C(STABLE) “微服务C”团队环境 微服务A(STABLE) 微服务B(STABLE) 微服务C( SNAPSHOT ) 质量保证/分期/生产 微服务A(稳定,发布等) 微服务B(稳定,发布等) 微服务C(STABLE,RELEASE等) 这是很多的部署,但是这个问题可以通过持续集成服务器来解决,也许可以像Chef / Puppet /等等。 真正困难的部分是每个微服务都需要一些特定的环境数据给每个被部署的地方。 例如,在“A”团队环境中,“A”需要一个地址和一组证书来与“B”交互。 但是,在“B”团队环境中,“A”的部署需要不同的地址和凭证来与“B”的部署进行交互。 而且,当你接近生产时,像这样的环境configuration信息可能需要安全限制(即只有某些人可以修改甚至查看它)。 那么,在微服务体系结构中,如何维护特定于环境的configuration信息并将其提供给应用程序呢? 一些方法浮现在脑海中,尽pipe它们都有问题: 让构build服务器在构build时把它们烧到应用程序中 – 我想你可以创build一个每个环境属性文件或脚本的回购,并且为每个微服务的构build过程伸出并拉入适当的脚本(你也可以有一个单独的,限制访问回购生产的东西)。 不过,你需要大量的脚本。 对于微服务可以部署的每个地方的每一个微服务,基本上都是单独的。 将它们烘焙到每个环境的基础Docker镜像中 – 如果构build服务器将微服务应用程序放入Docker容器中作为构build过程的最后一步,则可以为每个环境创build自定义基础镜像。 基本映像将包含一个shell脚本,用于设置所有您需要的环境variables。 您的Dockerfile将被设置为在启动您的应用程序之前调用此脚本。 这与之前的要点也有类似的挑战,因为现在你正在pipe理大量的Docker镜像。 在运行时从某种registry中提取环境信息 – 最后,可以将你的每个环境configuration存储在Apache ZooKeeper(甚至只是一个普通的数据库)中,然后让你的应用程序代码在运行时将其拉入它启动。 每个微服务应用程序都需要知道它在哪个环境(例如启动参数),以便知道从registry中获取哪一组variables。 这种方法的优点是,现在您可以使用完全相同的构build工件(即应用程序或Docker容器)从团队环境一直到生产。 […]

自动化微服务负载平衡/缩放

现在读几天微服务,我想知道人们如何去实现负载均衡自动化和扩展这些东西? 我有一个特定的想法,我想实现,但不知道是否有可能,或者我正在考虑错误。 所以在这里呢… 假设我有一个名为A,B和C的3个CoreOS机器集群 首先我想要的是透明部署,我可以使用舰队。 然后,我想要检测,当其中一个服务负载巨大,部署另一个实例,并部署了一个和第一个,自动负载平衡的方式,不会中断其他服务正在使用它(stream量从现在起经过负载平衡器)。 另一种方式可能是我手动部署服务的其他版本,然后自动进行负载平衡,并将stream量路由器传输到负载平衡器。 那么最后一个问题,这和Akka集群有什么不同呢?这些与微服务有什么不同呢?

如何pipe理微服务/容器/云环境中的秘密?

微服务和云是一件事情。 每个人都在谈论和写作。 就我个人而言,我正在思考很多关于这个话题:如何从中受益? 什么是可能的挑战? 这怎么能加速日常的发展? 如何pipe理所有的东西? 几天以来困扰我的一个问题是“如何pipe理微服务/云环境中的秘密?”。 设想一家拥有150名软件工程师和各种产品的团队。 每个团队都在创build一个软件,每个服务都需要不同数量的秘密(API密钥,密码,SSH密钥等等)。 “老式”方式是以ini / yaml / txt格式创build一些configuration文件并从中读取。 12因素应用程序说:做每个环境variables。 环境variables可以在每台机器上设置,configuration文件也可以放在那里。 如果你有一堆机器,并且部署由几个系统pipe理员完成,这是有效的。 其中一条规则是:“不要在Git仓库中存储秘密”。 现在,新的世界进来了。永远的团队负责他们自己生产的应用程序。 他们应该由团队部署和运行。 所以我们公司正在转向集装箱和自助服务的方式(如Mesos和Marathon或Kubernetes)。 当然,Dockerfiles也可以设置env vars。 是的,您可以在构build过程中将您的configuration文件添加到Docker容器中。 但是,每个人都可以访问这些秘密(例如来自其他团队)。 没有人知道谁使用这个秘密,做一些危险的事情。 你也想要版本化你的Dockerfiles。 你想在Marathon上运行的应用程序也应该进行版本化(Git或其他)(并由REST API应用)。 那么在哪里存储和pipe理这个容器/应用程序的所有秘密? 因为像Swarm和Machine(Docker)这样的调度器框架,Mesos和Marathon(也可用于Docker)或者Kubernetes你不知道你的应用程序将在哪里运行。 这将安排在几台机器上。 而且大部分工具都没有authentication(默认情况下,这可以通过Nginx代理或其他东西来添加)。 pipe理秘密的一个想法是使用像Vault这样的工具。 但我从来没有在应用程序中看到“原生”的支持。 这同样适用于Blackbox 。 而且我不知道configurationpipe理如何解决这个问题。 我知道厨师支持encryption的数据包,但afaik不可能使用厨师来设置/构buildDocker容器。 你如何在一个多团队的环境中与几个工程师在微服务/容器/云环境中pipe理秘密?

dynamic可扩展和自适应架构

我是一名云计算博士生,我计划使用基于微服务的架构与consul和zeromq进行我的研究项目。 我有几个难以理解的问题。 有人能帮我分享他们的经验。 我们有基于docker的微服务,我们有zeromq,我们有领事。 你能否提一下我们如何将这三者结合起来,形成一个dynamic的适应性环境? 虽然我了解zeromq,docker和consul是个别的,但是我仍然无法清楚地了解它们是如何作为一个整体来运行的。我们有一个在主机上运行微服务的docker容器。 我们使用zeromq在Docker容器之间传输消息(Pub-sub / pipeline)。 这些容器可能运行在相同的主机/数据中心或不同的主机/数据中心上。 然后,我们使用领事进行服务发现。这里我的理解是否正确? 架构如何根据工作负载dynamic扩展/缩小? 说,我有一个情况,我需要更多的工人节点进行特定的计算。 谁旋转了更多的工人节点。 哪个组件决定/做出这个决定? 是否有调度组件? 如果是这样,有人可以简单地解释它是如何发生的或哪个组件执行该function? 那么,领事的主要angular色是什么? 是否仅用于服务发现?是否也可用于configuration。 如果是这样,它的局限性是什么? 我看到,即使是zeromq也有服务发现机制,那么为什么我们需要领事呢? 如何在架构中传播节点信息的失败? 哪个组件负责? 这只是领事吗? 还是zeroMq呢? 请指教。

产品版本控制微服务

我进入基于Docker的微服务架构,我有3个微服务,它们共同创build一个产品,例如“CRM系统”。 现在,我希望我的客户能够随时升级他的产品。 我有3个不同版本的微服务,哪一个客户应该看到? 我猜产品版本应该独立于微服务,因为复制一个微服务版本会让我陷入比没有任何版本更麻烦的地步。 那么是否有任何模式,想法来处理这种情况? 我唯一想到的就是有一个存储库,只要其中的一个微服务可以生产现成的包,就会有一个版本库。 不过,我现在有一个版本,我的产品所有者(PO)都不会知道这个版本。

docker组合服务的集中configuration

想象一下,一个非平凡的泊坞窗撰写应用程序,在一个Web应用程序的前面nginx和一些链接的数据存储: web: build: my-django-app volumes: – .:/code ports: – "8000:8000" links: – redis – mysql – mongodb nginx: image: nginx links: – web redis: image: redis expose: – "6379" mysql: image: mysql volumes: – /var/lib/mysql environment: – MYSQL_ALLOW_EMPTY_PASSWORD=yes – MYSQL_DATABASE=myproject mongodb: image: mongo 数据库很容易configuration(现在),容器公开很好的环境variables来控制它们(请参阅mysql容器),但是nginx什么? 我们需要为这个模板创build一个虚拟主机文件,对吗? 我不想推出我自己的形象,这将需要从不同的开发者的设置,每个更改的configuration重build,以testing ,通过舞台和生产 。 如果我们想以轻量级的方式通过翻转configuration选项来进行A / Btesting呢? 在这里需要一些集中的configurationpipe理 ,可能是由docker-compose控制的,可以将configuration文件写入共享卷? 随着新服务的添加,这只会变得更加重要(想象一下微服务云,而不是像在这个例子中那样是一个单一的web应用程序) 在docker-compose项目中pipe理configuration的正确方法是什么?

使用docker运行多个项目,每个docker-compose运行

我们正在使用微服务的方法来build立我们的产品。 我们正在使用一些使用docker-compose来运行的项目。 问题是,在开发环境中,如果我们想改变多个项目中的代码并testing开发的代码,我们必须单独运行项目并手动将它们连接起来。 现在我们要创build一个开发工具包来克隆项目,并将它们一起运行并处理链接。 docker-compose可以处理多个docker-compose文件吗? 如果没有,有没有足够的工具来为我们做这件事? 还是有任何build议的方法来实现我们的目标? 编辑:例如,我们有两个项目:PROJECT_A和PROJECT_B。 每个人都有自己的docker-compose.yml,每个人都需要运行postgresql。 我们在PROJECT_A中有docker-compose.yml,像这样: db: image: postgres:9.4 ports: – "5432" project_a: build: . command: python2.7 main.py links: – db 我们在PROJECT_B中有docker-compose.yml,像这样: db: image: postgres:9.4 ports: – "5432" project_b: build: . command: python2.7 main.py links: – db 每个项目都可以单独运行,工作正常。 但是如果我们想要改变PROJECT_A和PROJECT_B之间的API,我们需要运行两个项目并将它们连接在一起来testing我们的代码。 现在我们要编写一个开发工具包项目,可以运行这两个项目,并在需要时连接它们。 什么是最好的方法来做到这一点?

docker服务器微服务应用程序重新启动一遍又一遍的kubernetes

我正试图用kubernetes运行微服务应用程序。 我在kubernetes上运行rabbitmq,elasticsearch和eureka发现服务。 除此之外,我有三个微服务应用程序。 当我跑两个的时候,没事的。 然而当我运行第三个时,他们都开始重复一遍又一遍,没有任何理由。 我的一个configuration文件: apiVersion: v1 kind: Service metadata: name: hrm labels: app: suite spec: type: NodePort ports: – port: 8086 nodePort: 30001 selector: app: suite tier: hrm-core — apiVersion: extensions/v1beta1 kind: Deployment metadata: name: hrm spec: replicas: 1 template: metadata: labels: app: suite tier: hrm-core spec: containers: – image: privaterepo/hrm-core name: hrm […]

如何让docker工具箱与.net core 2.0项目一起工作

我收到一个错误,试图使用我的.NET核心2.0项目的Dockerfunction。 我收到一条错误消息说 Visual Studio容器工具要求Docker在构build,debugging或运行容器化项目之前运行。 有关更多信息,请参阅: http : //aka.ms/DockerToolsTroubleshooting 我跟着链接,并意识到我有Windows 10 Home x64,并不得不安装Docker Toolbox,而不是Docker for Windows。 现在它安装了这个可执行文件 Docker快速入门terminal 这是否应该启动docker服务? 我曾尝试运行这个可执行文件,它似乎工作。 我的容器正在运行,但Visual Studio容器工具的错误仍然存​​在。 我错过了什么? 为了在Visual Studio 2017中使用Docker容器支持,是否需要比Home更高版本的Windows? 更新: 我试图按照Quetzcoatl的build议,我仍然在Visual Studio中得到了关于这些工具的同样的错误。 这是我在Docker快速入门terminal中运行的内容。 我试图在Visual Studio成功打开项目之后构build项目,并且仍然收到有关容器工具的上述错误。 我的devenv.exe文件位于 C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Community \ Common7 \ IDE \ devenv.exe 和我的解决scheme文件位于 D:\ Development \ Visual Studio \ […]

微服务和数据库

在微服务架构中部署数据库的最佳实践是什么,更准确地说是在分布式环境中,比如docker群? 微服务原则规定,每个服务应该是无状态的,以实现扩展。 由于数据库显然有一个状态,它应该在群集之外的固定位置上生存,在群集初始化之前进行部署和configuration? 我很困惑,因为所有的docker组合示例在服务定义中包含数据库容器。 但事情并不那么简单。 在准备使用之前,数据库通常需要大量的configuration。 另外,docker员在协调服务启动顺序方面很糟糕。 如果将数据库和服务一起部署在Docker群中是一个很好的做法,那么如何确保Cricial数据的一致性和持久性呢?