我有一个单节点k8s集群。我有两个名称空间,分别称为n1
和n2
。我想在相同的端口上,但在不同的名称空间中部署相同的映像。
我该怎么做?
命名空间yamls:
apiVersion: v1
kind: Namespace
metadata:
name: n1
and
apiVersion: v1
kind: Namespace
metadata:
name: n2
服务Yamls:
apiVersion: v1
kind: Service
metadata:
name: my-app-n1
namespace: n1
labels:
app: my-app-n1
spec:
type: LoadBalancer
ports:
- name: http
port: 80
targetPort: http
protocol: TCP
selector:
app: my-app-n1
and
apiVersion: v1
kind: Service
metadata:
name: my-app-n2
namespace: n2
labels:
app: my-app-n2
spec:
type: LoadBalancer
ports:
- name: http
port: 80
targetPort: http
protocol: TCP
selector:
app: my-app-n2
部署Yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-n1
labels:
app: my-app-n1
spec:
replicas: 1
selector:
matchLabels:
app: my-app-n1
template:
metadata:
labels:
app: my-app-n1
spec:
containers:
- name: waiter
image: waiter:v1
ports:
- containerPort: 80
and
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-n2
labels:
app: my-app-n2
spec:
replicas: 1
selector:
matchLabels:
app: my-app-n2
template:
metadata:
labels:
app: my-app-n2
spec:
containers:
- name: waiter
image: waiter:v1
ports:
- containerPort: 80
waiter:v1
与此仓库对应:https://hub.docker.com/r/adamgardnerdt/waiter
由于命名空间应该表示不同的环境,我当然可以这样做吗?例如。非产品与产品因此,可以肯定,我可以将其完全相同地部署到两个不同的“环境”(又称为“命名空间”)中吗?
答案 0 :(得分:2)
对于Service,您已经指定了命名空间。
对于部署,您还应该指定命名空间,否则它们将进入默认命名空间。
示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-n1
namespace: n1
labels:
app: my-app-n1
spec:
replicas: 1
selector:
matchLabels:
app: my-app-n1
template:
metadata:
labels:
app: my-app-n1
spec:
containers:
- name: waiter
image: waiter:v1
ports:
- containerPort: 80
答案 1 :(得分:1)
我想在相同的端口上,但在不同的名称空间中部署相同的映像。
除了deployment
对象之外,您已经在使用配置来做到这一点,这些对象应该引用正确的名称空间(如 Ijaz Ahmad Khan 的回答所述),其他服务可以使用分别使用DNS名称my-app-n1
和my-app-n2
的名称空间。
因为waiter
是一个Web服务器,所以我假设您想从Internet访问它的两个实例。因此,您应该:
ClusterIP
,ingress
对象,每个名称空间一个,包含一个主机名,例如分别为myapp.com
和staging.myapp.com
,