【问题标题】:Running application with only some parts in a container [closed]仅在容器中运行某些部分的应用程序[关闭]
【发布时间】:2020-02-06 06:15:15
【问题描述】:

我想知道由 Kubernetes 管理的应用程序(例如 Jupiter)是否可以在没有容器的情况下使用它的某些元素(例如 CIRCE 调度程序)。

如果是,那么大体上需要进行哪些更改?另外,有没有我可以阅读的资源?谢谢!!

【问题讨论】:

  • "没有容器"是什么意思?你想在 kubernetes 集群 之外运行这个特定的组件吗?
  • 在集群外运行数据库是相当常规的,并没有什么特别之处,只需将您的应用程序数据库配置设置为指向它即可。您遇到了具体问题吗?

标签: docker kubernetes containers


【解决方案1】:

是的,您可以将任何外部组件(部署在 kuberntes 集群之外)与集群内运行的组件集成,使其成为您的应用程序架构的一个组成部分。

您可以通过所谓的service without selector 来实现它。

kubernetes 文档中描述了它最常见的用例,但它实际上可用于将任何外部组件与您的 kubernetes 集群集成:

服务最常见的是对 Kubernetes Pod 的抽象访问,但它们 还可以抽象其他类型的后端。例如:

  • 您希望在生产环境中拥有一个外部数据库集群,但在您的测试环境中您使用自己的数据库。
  • 您希望将您的服务指向不同Namespace 中的服务 或在另一个集群上。
  • 您正在将工作负载迁移到 Kubernetes。在评估该方法时,您只在 Kubernetes 中运行一部分后端。

下面是示例:

在任何这些场景中,您都可以定义一个服务没有一个 Pod 选择器。例如:

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  ports:
    - protocol: TCP
      port: 80
      targetPort: 9376

由于这个Service没有选择器,对应的Endpoint 对象不是自动创建的。您可以手动映射 服务到运行它的网络地址和端口,通过添加 手动一个 Endpoint 对象:

apiVersion: v1
kind: Endpoints
metadata:
  name: my-service
subsets:
  - addresses:
      - ip: 192.0.2.42
    ports:
      - port: 9376

在没有选择器的情况下访问服务的工作方式与使用选择器相同 选择器。在上面的示例中,流量被路由到单个 YAML 中定义的端点:192.0.2.42:9376 (TCP)。

还可以看看ExternalName,它是一种特殊的Service,没有选择器:

ExternalName ServiceService 的一个特例 没有选择器,而是使用 DNS 名称。了解更多信息, 见 ExternalName 本文档后面的部分。

您也可以阅读这两篇文章,它们基本上解释了同一件事:

Kubernetes best practices: mapping external services

Kubernetes Access External Services

如果有帮助,请告诉我。如果不是,请更详细地说明您想要达到的理想状态。

【讨论】:

    猜你喜欢
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 2014-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多