我喜欢用kubernetes创建一个应用程序。
我应该如何构造我的项目?
每个应用程序应该在它自己的存储库中,还是应该使用monorepo?
我应该把k8s.yaml放在哪里(因为它涉及到所有的项目)?
我应该在哪里应用k8s配置?应该在每次部署中发生吗?如何轻松地为每个服务配置域名?
发布于 2018-11-22 10:26:29
这里有几点:
我想把api和前端放在同一个吊舱里,把所有的刮刀放在另一个吊舱里。
没问题的。只要它们在同一个豆荚里的不同容器上。多个容器荚可以通过本地主机地址彼此访问。豆荚可以用DNS看到彼此。(是的,一半健康意味着不健康)
我应该如何构造我的项目?
我对不同的容器使用不同的回购。但每个豆荚都可以=1次回购。它更容易维护这种方式,你有独立的CI/CD版本,使您可以更新每个应用程序分别。将每个部署清单YAML文件存储在repo根目录中是个好主意。因为一个部署意味着一个应用程序(一组荚)。
我应该在哪里应用k8s配置?应该在每次部署中发生吗?如何轻松地为每个服务配置域名?
在部署清单文件中,可以将信任存储在ENVs中,也可以使用配置映射。您不需要对每个部署使用kubectl apply。在您的CI中,您可以对每个部署执行以下操作:
- docker build -t {registry}:{version} .
- docker push {registry}:{version}
- kubectl set image deployment/{API_NAME} {containername}={registry}:{version} -n {NAMESPACE}您需要在您的API前面作为网关的反向代理,最好的选择是Ingress,它易于部署和配置。它知道你的吊舱。入口配置可以类似于:
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只使用一个子域。
发布于 2018-11-22 09:42:59
这确实取决于您的用例,但我建议一些使生活更轻松的实践:
我想把api和前端放在同一个吊舱里,把所有的刮刀放在另一个吊舱里。
不要把多个容器放在同一个容器中(除非它是一个侧面的容器,如管道、istio等)。因为要对你的吊舱进行健康检查是非常困难的(如果一个容器掉了,另一个容器升了,那么吊舱是……半健康?)
我希望能够部署一个项目,例如,只部署api或特定的刮板。 我应该把k8s.yaml放在哪里(因为它涉及到所有的项目)?
将yaml文件分离到它们自己的项目目录中,这样您就可以独立地部署它们,从而获得更好的可读性。
使用monorepo有其优点,代码在一个地方,等等.但是,如果您将有CI,随着回购变得更大,您的构建可能会变得更慢,因此您需要优化(使用构建缓存之类),或者为您可能拥有的每个业务域或逻辑组设置一个单独的CI。
我应该如何构造我的项目?
将基础设施与应用程序分开,这样,如果有一天您希望从GCE切换到AWS或Azure,并且希望获得更好的可读性。
我应该在哪里应用k8s配置?应该在每次部署中发生吗?如何轻松地为每个服务配置域名?
Kubernetes有一个非常广泛的例子,你可以把配置注入你的应用程序,这真的取决于你的用例。您不需要为每个服务配置域名,只需要配置向外部世界公开的域名。您可以使用Ingress对象或代理。
您需要考虑的事情:
日志记录--这是一个非常重要的主题,因为拥有可伸缩的豆荚可能是一项棘手的工作。我真的会花时间部署一些紧凑的分布式日志记录。
Environments -开发/生产或开发/分期/生产或.?无论您选择什么,都要确保它们之间的差异最小,并且每个步骤都可以很容易地部署。
https://stackoverflow.com/questions/53427333
复制相似问题