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以及在群集中添加更多节点。然后是不同类型的网络和卷管理。
答案 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
中的容器将能够互相访问,Pod
到Pod
通信已完成通过将Pod
公开为Service
。请注意Service
也使用标签选择器来查找Pods
kind: Service
apiVersion: v1
metadata:
name: web-svc
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 80
然后,您可以通过环境变量在其他Pods
中discover 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
来制定日程安排决策。