4

elasticsearchname ==と serviceName ==の Kubernetes PetSet がありesます。elasticsearch-0ポッドを作成し、予想どおり、や などの名前が付けられelasticsearch-1ます。ただし、DNS は機能していないようです。elasticsearch-0.es解決しません (解決しませんelasticsearch-0.defaultなど)。生成された srv レコードを見ると、予測可能ではなくランダムに見えます。

# nslookup -type=srv elasticsearch
Server:        10.1.0.2
Address:    10.1.0.2#53

elasticsearch.default.svc.cluster.local    service = 10 100 0 9627d60e.elasticsearch.default.svc.cluster.local.

誰にもアイデアはありますか?


詳細

実際の PetSet と Service の定義は次のとおりです。

---
apiVersion: v1
kind: Service
metadata:
  name: elasticsearch
  labels:
    app: elasticsearch
spec:
  ports:
  - name: rest
    port: 9200
  - name: native
    port: 9300
  clusterIP: None
  selector:
    app: elasticsearch
---
apiVersion: apps/v1alpha1
kind: PetSet
metadata:
  name: elasticsearch
spec:
  serviceName: "es"
  replicas: 2
  template:
    metadata:
      labels:
        app: elasticsearch
      annotations:
        pod.alpha.kubernetes.io/initialized: "true"
    spec:
      terminationGracePeriodSeconds: 0
      containers:
      - name: elasticsearch
        image: 672129611065.dkr.ecr.us-west-2.amazonaws.com/elasticsearch:v1
        ports:
          - containerPort: 9200
          - containerPort: 9300
        volumeMounts:
        - name: es-data
          mountPath: /usr/share/elasticsearch/data
        env:
          - name: POD_NAME
            valueFrom:
              fieldRef:
                fieldPath: metadata.name
          - name: ES_CLUSTER_NAME
            value: EsEvents
  volumeClaimTemplates:
  - metadata:
      name: es-data
      annotations:
        volume.alpha.kubernetes.io/storage-class: anything
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 10Gi
4

1 に答える 1

6

これは、ドキュメントを読み間違えた問題でした。ドキュメントは言う:

ネットワーク ID には 2 つの部分があります。まず、ペットを作成するドメインを制御するヘッドレス サービスを作成しました。このサービスによって管理されるドメインは、$(サービス名).$(名前空間).svc.cluster.local の形式をとります。「cluster.local」はクラスター ドメインです。各ペットが作成されると、一致する DNS サブドメインが $(petname).$(管理サービス ドメイン) の形式で取得されます。管理サービスは、ペット セットの serviceName フィールドによって定義されます。

serviceDomainこれは、フィールドの値が「管理サービス ドメイン」の値であることを意味すると解釈しましたが、それは意味するものではありません。これは、 の値がserviceDomain既存のヘッドレス サービスの名前と一致する必要があり、そのサービスが管理サービス ドメインとして使用されることを意味します。そのようなサービスが存在しない場合、エラーは発生しません。ペットの DNS 名がランダムに取得されるだけです。

于 2016-08-11T18:04:21.783 に答える