刚接触 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
中的容器都能够相互访问,Pod
到 Pod
的通信是通过将 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/