2017-11-30 9 views
1

私は個々のkubernetesコンテナを稼働させています。誰か私にそれらをリンクする方法を助けてもらえますか? 私はドッキングウィンドウのコンに働いていると、そこには次のように動作します。Kubernetesの別のサービスに1つのサービスをリンクします

redis: 
    image: redis 
    hostname: redis 
    expose: 
     - "6379" 

    nginx: 
    image: xxx.xx.xx.xx:5000/nginx:0.1 
    expose: 
     - "8080" 
    ports: 
     - "8080:8080" 
    depends_on: 
     - active-webserver 
     - passive-webserver 

    active-webserver: 
    image: xxx.xx.xx.xx:5000/webserver:0.1 
    hostname: active-webserver 
    depends_on: 
     - redis 
    links: 
     - redis 
    expose: 
     - "8081" 
    ports: 
     - "8090:8081" 

    passive-webserver: 
    image: xxx.xx.xx.xx:5000/webserver:0.1 
    hostname: passive-webserver 
    depends_on: 
     - redis 
     - kafka 
    links: 
     - redis 
     - kafka 
    expose: 
     - "8081" 
    ports: 
     - "8091:8081" 

しかしkubernetesに来たとき、私はどのように進んでするか見当もつかない。私はkomposeを使用した後にサービスとデプロイメントファイルを作成しましたが、実際にコード間​​のリンクが壊れました。

サービスファイル:

apiVersion: v1 
kind: Service 
metadata: 
    annotations: 
    kompose.cmd: kompose convert -f docker-compose.yaml 
    kompose.version: 1.5.0 (999278f) 
    creationTimestamp: null 
    labels: 
    io.kompose.service: nginx 
    name: nginx 
spec: 
    ports: 
    - name: "8080" 
    port: 8080 
    targetPort: 8080 
    selector: 
    io.kompose.service: nginx 
status: 
    loadBalancer: {} 

そして、私の配布ファイルには、次のとおりです。

apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
    annotations: 
    kompose.cmd: kompose convert -f docker-compose.yaml 
    kompose.version: 1.5.0 (999278f) 
    creationTimestamp: null 
    labels: 
    io.kompose.service: nginx 
    name: nginx 
spec: 
    replicas: 1 
    strategy: {} 
    template: 
    metadata: 
     creationTimestamp: null 
     labels: 
     io.kompose.service: nginx 
    spec: 
     containers: 
     - image: xxx.xx.xx.xx:5000/nginx:0.1 
     name: nginx 
     ports: 
     - containerPort: 8080 
     resources: {} 
     restartPolicy: Always 
status: {} 

答えて

0

それは依存しています。

kubernetesでは、コンテナスケジューリングの原子単位はポッドです。ポッドは複数のコンテナを含むことができますが、ポッドはスケーリングの単位です。したがって、コンテナがリンクされていて、常にそれらを一緒に拡大縮小し、それらをすべて同じポッドに入れたい場合は、

あなたがそうでない場合は、コンテナを複数用意したい場合や独立してコンテナを作成する場合は、次のうちの1つまたはいくつかを使用して何らかの注文を達成してください。

名前空間を作成して、全体の "スタック"を配置します。独自に拡大/縮小したいが、1つの名前空間にまとめるコンテナのグループごとに配備します。そうすれば、内部DNS名(kubednsを使用している場合)は、たとえばredis.mystack.svc.cluster.localとなります(ここで、mystackは名前空間の名前で、redisはこのサービスの前にあるサービスの名前です)。ケース、赤いポッド)。

ラベルを使用して、アプリのさまざまな部分を結合します。ラベルは、あなたが積み重ねるのに最適な方法です。たとえば、各リソースに「app:mystack」というラベルを付けます。 kubectl get pods -l app=mystack

helm(https://github.com/kubernetes/helm)のようなツールを使用すると、リソースをまとめて1つの「アプリケーション」にまとめることができます。

これらはいずれも問題なく併用できます。

+0

これは、1つの名前空間にポッドを配置しますが、私の本当の疑問は、アプリケーションが依存関係をどのように解決するかです。上記のdocker-compseファイルにあるように、私たちはリンクを与えてyamlに依存しますが、kubernetesマニフェストに相当するものは何ですか? –

+0

https://github.com/Mirantis/k8s-AppController/blob/master/README.md –

+0

未処理のkubernetesには何もありません。コンテナが同じポッドにある場合は、localhost(127.0.0.1)を使ってアドレス指定することができます。kubedns kubernetesサービスを実行している場合、内部DNS名はになります。 .svc.cluster.local –

関連する問題