Pagids答案有大部分的基础知识。您应该为您的场景创建4 Deployments
。每个部署将创建一个ReplicaSet
,该表计划和监督Deployment
的PODs
的集合。
每个Deployment
很可能还需要在它前面的Service
进行访问。我通常会创建一个yaml文件,其中包含Deployment
和相应的Service
。下面是一个nginx.yaml
,我使用的一个示例:
apiVersion: v1
kind: Service
metadata:
annotations:
service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
name: nginx
labels:
app: nginx
spec:
type: NodePort
ports:
- port: 80
name: nginx
targetPort: 80
nodePort: 32756
selector:
app: nginx
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginxdeployment
spec:
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginxcontainer
image: nginx:latest
imagePullPolicy: Always
ports:
- containerPort: 80
这里一些附加信息的澄清:
- 甲
POD
不是可伸缩的单元。一个Deployment
,安排POD是。
- A
Deployment
意在代表一起实现单一目的的单组POD。
- 您可以有许多
Deployments
在群集的虚拟网络中一起工作。
- 要访问可能由多个
PODs
运行在不同节点上的Deployment
,您必须创建一个服务。
- 部署旨在包含无状态服务。如果需要存储状态,则需要创建
StatefulSet
(例如,用于数据库服务)。
谢谢Oswin。您的语法示例将'Deployment'和'Service'合并为一个非常有用! – Raj
我很困惑在同一个服务中使用'port:80'和'nodePort:32756'。你能解释为什么他们都需要? – AIon
'port:80'表示如果你将服务作为一个实体来处理,例如通过其名称或服务IP的DNS条目,端口80将转发给提供实际服务的PODS。 'nodePort:32xxx'表示如果你对群集节点进行寻址,例如从外部通过负载均衡器或节点IP,端口32xxx将转发到提供实际服务的PODS。 –