我是Kubernetes的新手,最近我使用它来部署hadoop。我想做一件事,将特定的主机名设置为pod,这是使用statefulSets和hostNetwork = true创建的。
这是我的yaml配置文件。
apiVersion: v1
kind: Service
metadata:
name: test-bbox
labels:
app: test-bbox
spec:
clusterIP: None
selector:
app: test-bbox
ports:
- name: foo
port: 1234
targetPort: 1234
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: test-bbox
spec:
serviceName: "test-bbox"
replicas: 1
selector:
matchLabels:
app: test-bbox
template:
metadata:
labels:
app: test-bbox
spec:
hostNetwork: true
hostname: test-hostname
containers:
- image: busybox
name: busybox
env:
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
command:
- sleep
- "7200"正如yaml所说,属性hostnetwork被设置为true。然后荚test-bbox-0的主机名是创建它的节点的主机名。
如果我将hostnetwork设置为false,主机名将由statefulSets自动生成,如test-bbox-0.test-bbox.default.svc.cluster.local格式,这正是我所需要的。
但在我的示例中,我需要将hostnetwork设置为true,同时将主机名自定义为上述格式,而不是节点的主机名。
所以问题是,有没有办法为Pod ?定制主机名?
使用的Kubernetes版本:1.9
发布于 2018-04-16 14:22:09
--不可能为使用hostNetwork的Pod设置主机名。如果您试图在这样的Pod中更改主机名,您将看到也在更改节点的主机名;这是因为它们共享的是UTS命名空间,而不仅仅是联网。
由StatefulSet管理的Pods是一个特例,它们的主机名设置为my StatefulSet,不能直接配置它。主机名可以受StatefulSet本身的名称影响,而通过适当地命名服务可以影响域名:
StatefulSet中的每个Pod都从StatefulSet的名称和Pod的序号中派生其主机名。构造的主机名的模式是
$(statefulset name)-$(ordinal)。..。StatefulSet可以使用无头服务来控制其Pods的域。此服务管理的域采用以下形式:$(service name).$(namespace).svc.cluster.local,其中cluster.local是群集域。创建每个Pod时,它将获得一个匹配的DNS子域,形式为:$(podname).$(governing service domain),其中控制服务由StatefulSet上的serviceName字段定义。
https://stackoverflow.com/questions/49859408
复制相似问题