- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我喜欢用 kubernetes 创建一个应用。
我应该如何构建我的项目?
每个应用程序应该在它自己的存储库中还是应该使用 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/
我是一名优秀的程序员,十分优秀!