2016-12-22 9 views
4

いくつかの情報:kubernetesはAWS上のロードバランサに追加するノードをどのように選択しますか?

  • Kubernetes(1.5.1)
  • AWS
  • 1マスタと1つのノード(両方のUbuntu 16.04)
  • によって作らkubeadm
  • テラフォーム経由でインストールK8S

返信しないでください。kube-up、kopsなどを使用してください。これはk8がどのようにフードの下で動作するかを理解することです。システム内に説明できない魔法があまりにも多くあり、私はそれを理解したい。

==質問:

(例えば)AWS] K8S上型ロード・バランサのサービスの作成:

apiVersion: v1 
kind: Service 
metadata: 
    name: kubernetes-dashboard 
    namespace: kube-system 
    labels: 
    k8s-addon: kubernetes-dashboard.addons.k8s.io 
    k8s-app: kubernetes-dashboard 
    kubernetes.io/cluster-service: "true" 
    facing: external 
spec: 
    type: LoadBalancer 
    selector: 
    k8s-app: kubernetes-dashboard 
    ports: 
    - port: 80 

私は正常内部またはELBに面する外部しかしのどれを作成しますマシンがELBに追加されます(私はマスターを汚すことができますが、何も変わりません)。私の問題は基本的にはこれです:

https://github.com/kubernetes/kubernetes/issues/29298#issuecomment-260659722

サブネットおよびノー​​ド(ただし、VPC)すべて(再び... ELBが正しい場所に作成された)「KubernetesCluster」でタグ付けされています。ただし、ノードは追加されません。ログに

kubectl logs kube-controller-manager-ip-x-x-x-x -n kube-system 

後:

aws_loadbalancer.go:63] Creating load balancer for 
kube-system/kubernetes-dashboard with name: 
acd8acca0c7a111e69ca306f22de69ae 

他の出力はありません(それは追加または削除されたノードを印刷しなければなりません)。私はコードを理解しようとしました:

https://github.com/kubernetes/kubernetes/blob/master/pkg/cloudprovider/providers/aws/aws_loadbalancer.go しかし、理由は何でも、この機能はノードを追加しません。

ドキュメントは、k8の意思決定の背後にある「プロセス」について説明しようとしていません。 k8sを理解しようとすると、kops、kube up、kubeadm、kubernetesを難しい方法でrepoして気をつけたコードを読んでみましたが、まだaws上のk8sがノードを選択してelbに追加する方法を理解できません。

したがって、セキュリティグループはどこにも変更されません。

ec2のタグですか? キューブ設定? 他に何か?

ご協力いただきまして誠にありがとうございます。

おかげで、 F.

答えて

0

私はノード登録がKubernetesの外で管理されていると思います。私はkopsを使用しています。AWSでASGのサイズを編集すると、新しいノードはサービスELBに登録されません。しかし、私がkopsを使ってノードの数を編集すると、新しいノードがそこにあります。

docs a kops instance groupは、AWSで実行しているときにASGにマップします。codeでは、k8s APIではなく呼び出し側AWSのように見えます。

あなたはkopsを使用していないことは知っていますが、Terraformではkopsが作成しているAWS APIコールを複製する必要があります。

0

kubeadm(http://kubernetes.io/docs/admin/kubeadm/)で正しいクラウドプロバイダー設定を設定していることを確認してください。

AWSクラウドプロバイダは、ELBで利用可能なノードを自動的に同期します。私はタイプLoadBalancerを作成してクラスターをスケールし、新しいノードには最終的にELBが追加されました。https://github.com/kubernetes/kubernetes/blob/master/pkg/cloudprovider/providers/aws/aws_loadbalancer.go#L376

1

私はスティーブが正しい軌道にいると思います。 kubelets、apiserver、およびcontroller-managerコンポーネントのすべてが引数リストに--cloud-provider=awsを含んでいることを確認してください。

あなたのサブネットとインスタンスにはすべて一致するKubernetesClusterタグがあります。あなたのコントローラ&ワーカーセキュリティグループをしていますか? K8は特に、作成したサービスELBとの間でトラフィックを送受信できるように、ワーカーSGを変更します。私はVPCにもタグを付けるが、それは必須ではないと思うが、別のクラスタが同じVPCに入らないようにするかもしれない。

プライベートサブネットにはkubernetes.io/role/internal-elb=true、公開ドメインにはkubernetes.io/role/elb=trueとタグ付けして、内部ELBと公開ELBの作成場所を特定します。

タグと注釈の完全リスト(AFAIK)は、https://github.com/kubernetes/kubernetes/blob/master/pkg/cloudprovider/providers/aws/aws.go

にあります。
関連する問題