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

使用Kubernetes在不同的机器上运行Docker容器,docker,kubernetes,Docker,Kubernetes,Kubernetes新手,但希望在不同的机器上快速运行一些Docker容器,例如,节点1(物理机器1)上的容器1、2和3以及节点2(物理机器2)上的容器4、5和6。有人能帮我配置文件和命令,让它启动并运行,所有容器都可以相互通信吗 我发现这个例子很接近我想要的,但是只有一个豆荚。如何使用两个pod(假设我可以在每个pod中添加更多容器)并在一次部署中同时运行两个pod(以便容器位于同一网络中,因此可以相互通信) 我还想运行一个Docker容器,该容器带有绑定挂载和“共享”绑定传播,如何指定它 就

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

我发现这个例子很接近我想要的,但是只有一个豆荚。如何使用两个pod(假设我可以在每个pod中添加更多容器)并在一次部署中同时运行两个pod(以便容器位于同一网络中,因此可以相互通信)

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

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

分配的简单方法是使用

这是一个贯穿库伯内特斯的概念

首先将标签添加到节点:

kubectl local nodes node-a podwants=somefeatureon-nodea
kubectl local nodes node-b podwants=somefeatureon-nodeb
然后可以在Pod定义
spec
中设置
节点选择器

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
由于a将始终位于Kubernetes中,并且
Pod
中的容器都将能够彼此访问,
Pod
Pod
的通信是通过将
Pod
作为a进行的。注意,
服务
还使用标签选择器来查找它的
吊舱

kind: Service
apiVersion: v1
metadata:
  name: web-svc
spec:
  selector:
    app: my-app
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
然后,您可以通过环境变量或DNS(如果您必须访问您的集群)在其他
pod

 WEB_SVC_SERVICE_HOST=x.x.x.x
 WEB_SVC_SERVICE_PORT=80
您不会经常定义和安排
pod
本身。您可能会使用一个用于描述您的
吊舱
,并帮助您调整它们的大小


一旦您完成了简单的案例,接下来的文档将描述哪些允许您定义更复杂的规则集。即使是根据
节点上当前调度的
吊舱
做出调度决策,这也是一个很好的问题,因为它表明了一些概念上的混乱。在这个问题上,似乎应该用pod这个词来代替container这个词。POD是调度的单位,而不是单个容器。容器可以通过多种方式与其他容器通信(例如通过服务名称),即使它们没有打包在同一个pod中。看起来k8s只支持rshared绑定传播,不支持共享。一些背景:也许把绑定挂载部分拆分成一个单独的问题?这是我在库伯内特斯的文档面前感到困惑和有点不知所措。我的理解是,Pod可以有多个容器,但不能跨节点(物理机器)。首先,我只想配置Pod1(容器1、2和3)在Node1上运行,Pod2(容器4、5和6)在Node2上运行,并使所有这些容器能够相互通信,但我找不到一个简单的示例来说明如何做到这一点。我可以用docker compose在一台机器上轻松地运行这些容器,并且容器之间可以很好地通信。@hanaZ容器1、2、3和4、5、6之间需要什么样的通信?使用http调用每一个?或者其他什么?例如,容器1是所有其他节点都需要注册的管理节点。容器4提供元数据,容器2和5提供存储,容器3和6是访问存储的客户端。存储和客户端从管理容器中获取元数据容器IP地址和端口,然后进行元数据查询。客户端还从管理容器中获取存储地址。