StatefulSet如何为Kubernetes中的容器分配主机名

时间:2017-11-09 02:17:57

标签: kubernetes

如果我们设置hostNetwork: true,Kubernetes中的StatefulSet规范如何为每个容器分配主机名?我有以下规范(类似):

apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: abc
spec:
  serviceName: abc
  replicas: 2
  template:
    metadata:
      labels:
        app: abc
    spec:
      hostNetwork: true
      #hostame: test
      terminationGracePeriodSeconds: 10
      containers:
      - name: abc
        image: abc.xyz.com:9001/abc:01.00.00.00
        ports:
        - name: api-port
          containerPort: 9000
          hostPort: 9000
        readinessProbe:
          httpGet:
            path: /api
            port: api-port
            scheme: HTTPS

现在运行kubectl create命令后,我看到第一个容器出现时选择了主机的主机名,因为我们已经指定了hostNetwork: true,但第二个容器出现时的主机名就像abc-0.abc.default.svc.cluster.local

  • Kubectl版本:1.7.3
  • Docker版本:1.12.6

此外,唯一运行的服务是Kubernetes服务。我自己没有创建abc服务。

NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes 10.96.0.1 <none> 443/TCP 1d

1 个答案:

答案 0 :(得分:0)

它应该每个节点只创建一个pod,我在下面的1.8群集中进行了测试,它为每个节点创建了一个pod,其中包含正确的pod hostname名称(与节点名称相同)。它不会创建我们创建任何服务所需的任何服务。

您的群集是版本1.7.3,这可能是错误,这就是它错误地创建主机名的原因。

apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: abc
spec:
  serviceName: abc
  replicas: 3
  template:
    metadata:
      labels:
        app: abc
    spec:
      hostNetwork: true
      #hostame: test
      terminationGracePeriodSeconds: 10
      containers:
      - name: sfgtools
        image: sfgroups/alphine_nettools
        ports:
        - name: api-port
          containerPort: 80
          hostPort: 80

我只有2个节点,只创建了两个pod I have only 2 nodes, its created only two pods