首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何构造Web应用程序的Kubernetes项目?

问如何构造Web应用程序的Kubernetes项目?
EN

Stack Overflow用户
提问于 2018-11-22 09:10:42
回答 2查看 2.5K关注 0票数 3

我喜欢用kubernetes创建一个应用程序。

  • 我有api服务器,前端服务器,一些刮板等等。
  • 我想把api和前端放在同一个吊舱里,把所有的刮刀放在另一个吊舱里。
  • 我希望能够部署一个项目,例如,只部署api或特定的刮板。
  • 每个应用程序都有一个docker文件和循环ci配置以进行部署。

我应该如何构造我的项目?

每个应用程序应该在它自己的存储库中,还是应该使用monorepo?

我应该把k8s.yaml放在哪里(因为它涉及到所有的项目)?

我应该在哪里应用k8s配置?应该在每次部署中发生吗?如何轻松地为每个服务配置域名?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-22 10:26:29

这里有几点:

我想把api和前端放在同一个吊舱里,把所有的刮刀放在另一个吊舱里。

没问题的。只要它们在同一个豆荚里的不同容器上。多个容器荚可以通过本地主机地址彼此访问。豆荚可以用DNS看到彼此。(是的,一半健康意味着不健康)

我应该如何构造我的项目?

我对不同的容器使用不同的回购。但每个豆荚都可以=1次回购。它更容易维护这种方式,你有独立的CI/CD版本,使您可以更新每个应用程序分别。将每个部署清单YAML文件存储在repo根目录中是个好主意。因为一个部署意味着一个应用程序(一组荚)。

我应该在哪里应用k8s配置?应该在每次部署中发生吗?如何轻松地为每个服务配置域名?

在部署清单文件中,可以将信任存储在ENVs中,也可以使用配置映射。您不需要对每个部署使用kubectl apply。在您的CI中,您可以对每个部署执行以下操作:

代码语言:javascript
复制
- docker build -t {registry}:{version} .
- docker push {registry}:{version}
- kubectl set image deployment/{API_NAME} {containername}={registry}:{version} -n {NAMESPACE}

您需要在您的API前面作为网关的反向代理,最好的选择是Ingress,它易于部署和配置。它知道你的吊舱。入口配置可以类似于:

代码语言:javascript
复制
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: api
  namespace: production
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: api.yourdomain.com
    http:
      paths:
      - path: /application1
        backend:
          serviceName: app1-production
          servicePort: 80 
      - path: /application2
        backend:
          serviceName: app2-production
          servicePort: 80 

或者,根据您的喜好,每个api只使用一个子域。

票数 3
EN

Stack Overflow用户

发布于 2018-11-22 09:42:59

这确实取决于您的用例,但我建议一些使生活更轻松的实践:

我想把api和前端放在同一个吊舱里,把所有的刮刀放在另一个吊舱里。

不要把多个容器放在同一个容器中(除非它是一个侧面的容器,如管道、istio等)。因为要对你的吊舱进行健康检查是非常困难的(如果一个容器掉了,另一个容器升了,那么吊舱是……半健康?)

我希望能够部署一个项目,例如,只部署api或特定的刮板。 我应该把k8s.yaml放在哪里(因为它涉及到所有的项目)?

将yaml文件分离到它们自己的项目目录中,这样您就可以独立地部署它们,从而获得更好的可读性。

使用monorepo有其优点,代码在一个地方,等等.但是,如果您将有CI,随着回购变得更大,您的构建可能会变得更慢,因此您需要优化(使用构建缓存之类),或者为您可能拥有的每个业务域或逻辑组设置一个单独的CI。

我应该如何构造我的项目?

将基础设施与应用程序分开,这样,如果有一天您希望从GCE切换到AWS或Azure,并且希望获得更好的可读性。

我应该在哪里应用k8s配置?应该在每次部署中发生吗?如何轻松地为每个服务配置域名?

Kubernetes有一个非常广泛的例子,你可以把配置注入你的应用程序,这真的取决于你的用例。您不需要为每个服务配置域名,只需要配置向外部世界公开的域名。您可以使用Ingress对象或代理。

您需要考虑的事情:

日志记录--这是一个非常重要的主题,因为拥有可伸缩的豆荚可能是一项棘手的工作。我真的会花时间部署一些紧凑的分布式日志记录。

Environments -开发/生产或开发/分期/生产或.?无论您选择什么,都要确保它们之间的差异最小,并且每个步骤都可以很容易地部署。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53427333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档