【问题标题】:How to put containers network to the kubernetes YAML file如何将容器网络放入 kubernetes YAML 文件
【发布时间】:2017-09-13 15:44:47
【问题描述】:

例如,我在 docker 创建了网络

docker network create hello-rails

然后,我有连接到这个网络的 mySQL

docker run -p 3306 -d --network=hello-rails --network-alias=db -e MYSQL_ROOT_PASSWORD=password --name hello-rails-db mysql

另外,我有 Rails 服务器,它也依赖这个网络

docker run -it -p 3000:3000 --network=hello-rails -e MYSQL_USER=root -e MYSQL_PASSWORD=password -e MYSQL_HOST=db --name hello-rails benjamincaldwell/hello-docker-rails:latest

我想用 YAML 文件为这两个容器在 kubernetes 上编写部署。但我不知道,如何将网络放在文件中的containers 中。你有什么建议吗?

【问题讨论】:

    标签: mysql ruby-on-rails docker networking kubernetes


    【解决方案1】:

    在 Kubernetes 中,您可以通过创建两个服务来解决这个问题。

    MySQL 服务将如下所示:

    kind: Service
    apiVersion: v1
    metadata:
      name: mysql
    spec:
      selector:
        app: mysql
      ports:
      - port: 3306
    

    在您的 Rails 服务器中,您可以通过使用 mysql DNS 名称或使用 MYSQL_SERVICE_HOSTMYSQL_SERVICE_PORT 环境变量来访问 MySQL 服务。无需像在 Docker 中那样链接容器或指定网络。

    您的 Rails 服务将如下所示:

    kind: Service
    apiVersion: v1
    metadata:
      name: rails
    spec:
      type: LoadBalancer
      selector:
        app: rails
      ports:
      - port: 3000
    

    注意type: LoadBalancer,它指定该服务将被发布到外部世界。根据您运行 Kubernetes 的位置,将自动为该服务分配一个公共 IP 地址。

    如需了解更多信息,请查看Services documentation

    【讨论】:

    • 谢谢!最后一个问题,是否可以使用 kubectl create -f 将它们组合成一个应用程序?
    • 是的,我什至会推荐它。您可以将各种资源组合在一个 Yaml 文件中,用---like this 分隔一行。但是create(或者我推荐的apply),也可以使用目录调用,他们会考虑该目录中的所有文件。
    • 所以,我需要将这两个服务合并为一个部署/t
    • 当您运行kubectl apply 时,Kubernetes 将为每个服务创建一个部署,无论这些服务是否已在一个或两个文件中定义。这两种配置都是可能的,但资源属于一个文件is recommended
    猜你喜欢
    • 1970-01-01
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-08
    • 2019-04-17
    • 2011-10-09
    • 2020-12-10
    相关资源
    最近更新 更多