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

时间:2018-02-28 01:24:34

标签: docker kubernetes

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

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

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

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

1 个答案:

答案 0 :(得分:1)

分配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定义nodeSelector中设置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

由于Pod将始终位于Kubernetes中,Pod中的容器将能够互相访问,PodPod通信已完成通过将Pod公开为Service。请注意Service也使用标签选择器来查找Pods

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

然后,您可以通过环境变量在其他Podsdiscover the available Services,或者如果您的群集有added CoreDNS,则可以通过DNS。

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

您经常不会自己定义和安排Pods。您可能会使用描述Pods的{​​{3}}来帮助您扩展它们。

一旦你得到了简单的案例,文档就会继续描述Deployment,它允许你定义更复杂的规则集。甚至可以根据Pods上当前安排的Node来制定日程安排决策。