问题描述
我正在使用自定义docker映像创建两个容器(ubuntu是基本映像)。我正在尝试从其终端ping荚。我可以使用IP地址而不是主机名来访问它。如何在不手动添加/etc/hosts
的情况下实现?
注意:我不在节点中运行任何服务。我基本上是试图使用它来设置口吃。
Pod清单文件:
apiVersion: v1
kind: Pod
Metadata:
name: slurmctld
labels:
app: slurm
spec:
nodeName: docker-desktop
hostname: slurmctld
containers:
- name: slurmctld
image: slurmcontroller
imagePullPolicy: Always
ports:
- containerPort: 6817
resources:
requests:
memory: "1000Mi"
cpu: "1000m"
limits:
memory: "1500Mi"
cpu: "1500m"
command: [ "/bin/bash","-c","--" ]
args: [ "while true; do sleep 30; done;" ]
---
apiVersion: v1
kind: Pod
Metadata:
name: worker1
labels:
app: slurm
spec:
nodeName: docker-desktop
hostname: worker1
containers:
- name: worker1
image: slurmworker
imagePullPolicy: Always
ports:
- containerPort: 6818
resources:
requests:
memory: "1000Mi"
cpu: "1000m"
limits:
memory: "1500Mi"
cpu: "1500m"
command: [ "/bin/bash","--" ]
args: [ "while true; do sleep 30; done;" ]
解决方法
从文档here
通常,一个Pod具有以下DNS解析:
pod-ip-address.my-namespace.pod.cluster-domain.example
。例如,如果
default
命名空间中的容器具有IP地址172.17.0.3
,而您的群集的域名为cluster.local
,则Pod的DNS名称为:
172-17-0-3.default.pod.cluster.local
。由服务公开的Deployment或DaemonSet创建的任何Pod 具有以下可用的DNS解析:
pod-ip-address.deployment-name.my-namespace.svc.cluster-domain.example
如果您不想处理Pod的IP不断变化,则需要创建service以使用DNS主机名公开Pod。以下是公开slurmctld
窗格的服务示例。
apiVersion: v1
kind: Service
metadata:
name: slurmctld-service
spec:
selector:
app: slurm
ports:
- protocol: TCP
port: 80
targetPort: 6817
假设您正在default
名称空间上执行这些操作,现在应该可以通过slurmctld-service.default.svc.cluster.local