我正在尝试创建一个包含2个容器的容器,每个容器都有不同的图像!我不确定如何将两个不同的容器暴露给客户端。以下是我的部署yaml文件。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: checkdifimage
spec:
replicas: 1
template:
metadata:
labels:
app: checkdifimagelab
spec:
containers:
- name: checkallcont1
image: <dockerimage>
ports:
- containerPort: 32030
- name: checkall1cont2
image: <dockerimage2>
ports:
- containerPort: 32031
我正在进行的部署是在部署之后。我运行以下命令来公开服务:
kubectl expose pod checkdifimage --port=8080 --type=NodePort --name=diffimage
这适用于单个容器,并且能够从其他客户端访问该服务。但是当我使用2个容器时,我只能打一个容器。我该怎样继续打两个容器?此外,如果有人可以请指导使用一个具有一个图像的pod与一个具有多个图像的pod有什么优缺点!
答案 0 :(得分:10)
您有多个选项:
在同一部署中创建多个服务,每个服务公开一个端口。
创建公开多个端口的单个服务:
---
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- name: http
protocol: TCP
port: 80
targetPort: 9376
- name: https
protocol: TCP
port: 443
targetPort: 9377
使用kubectl expose:
kubectl expose service nginx --port=443 --target-port=8443 --name=nginx-https
请注意,如果没有通过-port指定端口,并且公开的资源有多个端口,则新服务将重新使用所有端口。此外,如果未指定标签,则新服务将重新使用其公开的资源中的标签。
何时使用多容器容器: pod是一组一个或多个容器,这些容器的共享存储以及有关如何运行容器的选项。 Pod总是共处和共同安排,并在共享上下文中运行。一个pod模拟特定于应用程序的“逻辑主机” - 它包含一个或多个相对紧密耦合的应用程序容器 - 在预容器世界中,它们将在同一物理或虚拟机上执行
答案 1 :(得分:2)
您实际上可以在命令行中执行此操作:
kubectl expose deployment xxx --port=8080,18000 --type=NodePort
仅使用逗号
设置端口