docker - 使用 Kubernetes 在不同机器上运行 Docker 容器

标签 docker kubernetes

刚接触 Kubernetes,但希望在不同的机器上快速运行一些 Docker 容器,例如节点 1(物理机 1)上的容器 1、2 和 3 以及节点 2(物理机 2)上的容器 4、5 和 6 。有人可以帮助我使用配置文件和命令来启动和运行它,并且所有容器都可以相互通信吗?

我在https://gettech1.wordpress.com/2016/10/03/kubernetes-forcefully-run-pod-on-specific-node/中找到了这个例子接近我想要的,但只有一个 pods 。如何使用两个 pod(假设我可以在每个 pod 中添加更多容器)并在一个部署中一起运行这两个 pod(以便容器位于同一网络中,因此可以相互通信)?

我还想运行一个带有“共享”绑定(bind)传播的绑定(bind)挂载的 Docker 容器,我该如何指定它?

就我个人而言,我发现 Kubernetes 文档在概念层相互引用的情况下有点难以浏览。任何人都可以指出一个干净的教程也会有帮助。我想了解如何在多台机器上运行容器,然后如何通过在 Pod 中添加更多容器、在节点上添加更多 Pod 以及在集群中添加更多节点来自动缩放。然后是不同类型的网络和卷管理。

最佳答案

分配 Pods to Nodes 的简单方法就是使用label selectors

Labels and Selectors是您在 Kubernetes 中需要理解的一个概念。

首先为节点添加标签:

kubectl local nodes node-a podwants=somefeatureon-nodea
kubectl local nodes node-b podwants=somefeatureon-nodeb

然后可以在 Pod 定义 spec 中设置 nodeSelector

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: my-app
spec:
  nodeSelector:
    podwants: somefeatureon-nodea
  container:
    - name: nginx
      image: nginx:1.8
      ports:
      - containerPort: 80

作为 Pod将始终位于 Kubernetes 中,并且 Pod 中的容器都能够相互访问,PodPod 的通信是通过将 Pod 公开为 Service 。请注意,Service 还使用标签选择器来查找其 Pod

kind: Service
apiVersion: v1
metadata:
  name: web-svc
spec:
  selector:
    app: my-app
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

然后你就可以discover the available Services通过环境变量或通过 DNS 在其他 Pods 中(如果您有 added CoreDNS)到您的集群。

 WEB_SVC_SERVICE_HOST=x.x.x.x
 WEB_SVC_SERVICE_PORT=80

您不会经常定义和调度 Pod 本身。您可能会使用Deployment它描述了您的 Pod 并将帮助您扩展它们。

一旦您掌握了简单的案例,文档就会继续描述 Node affinity它允许您定义更复杂的规则集。甚至可以根据 Node 上当前调度的 Pod 做出调度决策。

关于docker - 使用 Kubernetes 在不同机器上运行 Docker 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49020582/

相关文章:

java - 转发 header 在 Spring Boot + Kubernetes 中不起作用

nginx.conf 忽略了 nginx-ingress 配置映射片段

docker - 使用适用于 Mac 的 docker 的 Splash 实时 Webkit 窗口

docker - 如果Docker不封装OS,那么Doc​​ker Ubuntu镜像内部有什么?

bash - 如何保持 docker debian 容器打开?

kubernetes - 如何设置RBAC让用户在特定命名空间中提交Argo工作流程?

kubernetes - 未找到 VolumeMount 名称

node.js - TypeORM CLI 无法通过 docker-compose 识别 postgres 主机

mysql - 使用 docker for wordpress 进行端口转发

kubernetes - 谷歌云 : insufficient authentication scopes