gpt4 book ai didi

kubernetes - 如何为 Web 应用程序构建 Kubernetes 项目?

转载 作者:行者123 更新时间:2023-12-02 09:10:06 24 4
gpt4 key购买 nike

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

  • 我有 api 服务器、前端服务器、一些爬虫等等。
  • 我想将 api 和前端放在同一个 pod 中,并将所有爬虫放在另一个 pod 中。
  • 我希望能够部署单个项目,例如只有 api 或特定的抓取器。
  • 每个应用都有一个 docker 文件和用于部署的 circle ci 配置

我应该如何构建我的项目?
每个应用程序应该在它自己的存储库中还是应该使用 monorepo?
我应该将 k8s.yaml 放在哪里(因为它与所有项目相关)?
我应该在哪里应用 k8s 配置?它应该在每次部署时发生吗?如何轻松为每个服务配置域名?

最佳答案

有几点:

I'd like to put the api and the frontend in the same pod, and all the scrapers in other pod.

没关系。只要它们在同一个 pod 中的不同容器上。多容器 Pod 可以通过本地主机地址相互访问。并且 pod 可以通过 DNS 相互查看。 (是的,一半健康意味着不健康)

How should I structure my project?

我对不同的容器使用不同的 repo。但它对每个 pod = 1 repo 没问题。这种方式更易于维护,并且您拥有单独的 CI/CD 构建,可以让您单独更新每个应用程序。将每个部署 list YAML 文件存储在存储库的根目录中是个好主意。因为一个 Deployment 意味着 1 个应用程序(一组 pod)。

Where should I apply the k8s configurations? Should it happen on each deploy? How can I config domain names for each service easily?

在部署 list 文件中,您可以将配置存储在 ENV 中或使用配置映射。您不需要为每个部署使用 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。它知道你的 pod 。入口配置可以是这样的:

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 使用一个子域。

关于kubernetes - 如何为 Web 应用程序构建 Kubernetes 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53427333/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com