问题:
我正在进行CI设置以配置github - Jenkins web钩子,用于在github上使用代码提交触发构建.以下是当前配置详细信息
Jenkins的工作与手动构建完美配合.但是当在github上完成代码提交时,它不起作用(自动构建触发器).
需要帮助:
有没有人尝试使用saltstack创建AWS AMI(图像).
我尝试使用它能够从现有的AMI创建新实例,但如何使用salt-cloud创建图像?
也尝试使用boto_ec2,但它给出了模块'boto_ec2'不可用的错误.
我们的设置
此设置在两个集群中复制,用于称为元数据和缓存.我们想要部署更多集群.
主持人
是我们构建的python守护程序,它订阅了sentinels pub/sub并侦听+ switch-master消息.以下是协调人采取的行动:
SENTINEL get-master-addr-by-name mymaster问题
因为奴隶每天可以根据交通进出多次,所以我们最终会遇到属于同一个奴隶争夺同一奴隶的哨兵的一些奴隶.这是因为IP池在集群之间共享,并且据我们所知,从属ID是它们的IP.
这是复制的方法:
哨兵陷入无休止的循环中,永远为这种资源而战.即使我们只有一个哨兵小组管理具有不同主名称的两个redis群集,这种情况也会发生.这使我们相信哨兵不了解不同群集之间的资源,而只是分别对每个群集执行合乎逻辑的操作.
解决方案我们试过
SENTINEL reset mymaster+ sdown事件后,尝试让哨兵忘记该节点.问题是,如果该集群正在执行主故障转移,它可能会生成竞争条件.我们成功地复制了这个假设,并且让哨兵不同步,其中一个指向一个主人,另外两个指向另一个.理想的解决方案
Redis哨兵提供SENTINEL removeslave 172.24.246.142 mymaster我们可以在每次有奴隶的+ sdown事件时运行.这将使该群集忘记那个奴隶曾经存在而不会产生副作用SENTINEL reset …
我没有找到解决单独任务定义中的两个容器可以相互通信的解决方案。因此,我按照答案将两个容器链接到相同的任务定义中,效果很好。首先感谢您的回答。
但是,当我阅读 ECS 文档时,发现以下段落让我感到困惑:
并置在单个容器实例上的容器可能无需链接或主机端口映射即可相互通信。使用安全组和 VPC 设置在容器实例上实现网络隔离。
但我无法找到如何实现这一目标的进一步文档。我知道 docker 社区尝试使用--network并弃用--link. 我不确定 AWS 是否会进行一些更改以某种方式启用这些功能。
有人可以帮助我了解如何实现这一目标吗?因为容器名称和 IP 总是由 ECS 动态分配,如果在没有链接和端口映射的不同任务定义中,我如何从一个容器到另一个容器通信?
一点背景:我是 docker 新手,还不知道任何最佳实践。我的任务是创建一个基于 php 的网络服务,我决定使用 docker-compose 进行配置。
因为我们都是优秀的开发人员,所以我们知道 - 现在没有使用 Composer 构建 php 应用程序的方法。
我应该在构建中安装依赖项吗?因此,通过将其添加到我的 Dockerfile 中:
RUN cd /app && composer install --no-interaction --prefer-source --optimize-autoloader
Run Code Online (Sandbox Code Playgroud)
或者我应该在开发过程中安装依赖项并构建包含依赖项的容器映像?
我只知道一种不这样做的方法:在开发机器上本地安装依赖项,然后构建容器。但是“最佳实践”会是什么样子呢?
而且 - 因为我是这个领域的新手 - 我将如何为我的应用程序服务容器运行“composer require some/package”?
我还注意到一条消息“不要以 root/超级用户身份运行 Composer!” 在构建容器时。我添加COMPOSER_ALLOW_SUPERUSER=1到我的 Env 文件(如这里所示),但此消息仍然出现。
是否可以不在 docker 容器中以 root 身份执行 composer install?我可以忽略该消息吗?
提前致谢,菲利普
为部署在微服务架构(生产中)中的应用程序提供静态文件的首选方式是什么?
为简单起见,假设我有 3 个应用程序服务器和一个将请求转发到这些服务器的负载平衡器。
是否有最佳实践?
我阅读了以下关于“如何将应用程序配置导入到我的 Docker 容器中?”的文章。 https://dantehranian.wordpress.com/2015/03/25/how-should-i-get-application-configuration-into-my-docker-containers/
它总结了 4 个与 2015 年相关的选项。简而言之:
将配置烘焙到容器中
通过环境变量动态设置应用程序配置
通过环境变量动态设置应用程序配置(使用外部 kv 存储)
通过 Docker Volumes 直接映射配置文件
我想知道现在这些选项是否仍然是唯一可行的,或者是否有任何新的选项/模式可以做到这一点?
谢谢。
我有 9 个 pod 正在运行,它们基本上是 9 个不同的应用程序。
是否可以为多个 pod 使用相同的 k8s 服务(LB | 公共 IP),以便我可以通过不同的端口访问它们,但服务的 IP 相同(LB)?
例如像这样:
LB-IP:80 -- 在后端,一个应用程序正在运行,我可以访问它。
LB-IP:8080(与之前的 IP 相同)——我将在后端运行另一个 pod。
**** 每个 pod 的选择器都不同。**
我希望能够通过在 Maven 发布插件 ( mvn -B release:prepare) 中使用非交互模式来自动增加 Java 项目的发布版本。但是我不想使用默认的 Maven 版本控制架构。
我想使用的架构是<major>.<minor>.<bugfix>-SNAPSHOT. 我确实设法在 pom 文件中执行此操作,但是 Maven 尝试按如下方式增加它:
1.0.0-SNAPSHOT
1.0.1-SNAPSHOT
1.0.2-SNAPSHOT
...
Run Code Online (Sandbox Code Playgroud)
但是我希望能够对此进行控制,虽然有时我确实有错误修正并且上述增量工作,但大多数时候我想发布次要版本,因此增量看起来像这样:
1.0.0-SNAPSHOT
1.1.0-SNAPSHOT
1.2.0-SNAPSHOT
...
Run Code Online (Sandbox Code Playgroud) 我的公司最近着手将平台架构从单片架构更改为微服务架构。整个迁移可能要花费数年,所以到现在为止,我们仍然需要维护当前的整体应用程序,同时缓慢地拆除该应用程序。
我们暂时通过面向服务的体系结构为某个模块(其中数据库仍连接到单体应用程序的数据库)拆除了单体应用程序,而另一些则直接过渡到微服务(如果适用,微服务拥有自己的数据库)。
我们会随时准备发布功能,而不是遵循发布窗口。每个团队都有自己的阶段来管理该阶段,因此我们有多个阶段环境(总共11个),每个阶段都有自己的一组遗留的整体应用程序。
在过渡到微服务架构时(虽然我了解到,当我们完全过渡到微服务架构时,整个公司只有1个阶段),我们将需要维护所有这些阶段,这意味着我们将需要拥有一个阶段的副本。每个登台环境中的微服务。
(并不是要在此解决方案的方向上指导答案。如果在其他方向上有任何答案,则更可取,因为我们可以有更多选择和变化来考虑利弊),我们的想法之一是针对每个问题在db中,我们还有另外一列来标记此数据行用于哪个阶段。因此,我们可以维护1个微服务的单个实例以进行多个阶段。问题在于,对于每个API调用,客户端都需要指定用于哪个阶段。这使每个服务的开发变得复杂(需要满足要筛选的登台数据库的需求),使端点更难以调用(因为您需要指定需要访问的登台数据库)),更重要的是,这些是多余的代码,这些代码在生产中应该没有。
我们面临的问题是,随着微服务数量的增长,这将占用大量服务器资源(我们决定使用本地服务器来托管我们的kubernetes和Proxmox VM来保留传统的整体组件)。是否有任何基础架构可以减少为此所需的资源?
devops ×10
docker ×3
amazon-ec2 ×1
amazon-ecs ×1
architecture ×1
autoscaling ×1
composer-php ×1
containers ×1
git ×1
github ×1
java ×1
jenkins ×1
kubernetes ×1
maven ×1
php ×1
redis ×1
salt-cloud ×1
salt-stack ×1