2016-08-04 7 views
1

問題はkubernetes 1.2.3で発生しましたが、現在1.3.3を実行しています。ポッドiptablesマッピングへのサービスを現在監視中

kube-proxyが実行されていたが、wedgedされていて、iptablesを現在のサービス状態のポッドに更新していない2つの状況がありました。これにより、serviceA宛てのトラフィックがserviceBの一部であるポッドにルーティングされた状況が発生しました。そこで、kube-proxyのクエリー/ヘルスの後に私たちのモニタリングを改善しました。私は、kube-proxyプロセスの存在を超えて何かを監視しなければならないのか、それが/ healthzから200を返すのだろうと思っています。

ポッドマッピングへのサービスが最新のものであることを確認するために、さらに何かを監視していますか?私は、サービスの環境が変化するにつれて、すべてのホストが正確ではないかもしれないが、3分以上経過し、iptablesがすべてのノードで最新ではないというシナリオをキャッチすることに興味があるということを認識しています。何かがどこかで壊れていることを私に示すようなクラスタ。

私は、バッキング配置が5分ごとに再配置されるカナリーサービスを持っているように思っていました。そして、各ノードから、サービスクラスタIP経由ですべてのバッキングポッドに到達できることを確認します。

これが正しいアプローチであるかどうかはわかりません。私たちが以前に持っていた問題を捕まえることができるように思えるかもしれませんが、iptablesが最後に更新されたときにタイムスタンプをチェックするような他の簡単な方法があるかもしれません。

ありがとうございます!

答えて

0

あなたはKubernetesが提供するヘルスチェック/生存性プローブから、利益を(各ノードに/etc/kubernetes/manifests内のマニフェストをドロップすることによって)ポッド内kube-proxyを実行し、それがトラブルの場合にはあなたのためのサービスを再起動するの世話をしてみましょうことができ。

有効性プローブに非常に低いしきい値を設定すると、/healthzエンドポイントが応答に時間がかかりすぎるとすぐに再起動がトリガーされます。これは、iptablesのルールがあることを保証するものではありません常にに最新ではなく、(今度はiptablesのルールが一貫していることを確認します)kube-proxyが常に健康であることが保証されます

例:

kube-proxyのエンドポイントhealthzを10秒ごとにチェックしてください。ポッドが1秒以内に応答しない場合は、ポッドを再起動してください。

apiVersion: v1 
kind: Pod 

metadata: 
    name: kube-proxy 
    namespace: kube-system 

spec: 
    hostNetwork: true 

    containers: 

    - name: kube-proxy 
    image: gcr.io/google_containers/hyperkube:v1.3.4 
    command: 
    - /hyperkube 
    - proxy 
    - --master=https://master.kubernetes.io:6443 
    - --kubeconfig=/conf/kubeconfig 
    - --proxy-mode=iptables 

    livenessProbe: 
     httpGet: 
     path: /healthz 
     port: 10249 
     timeoutSeconds: 1 
     periodSeconds: 10 
     failureThreshold: 1 

    securityContext: 
     privileged: true 

    volumeMounts: 
    - mountPath: /conf/kubeconfig 
     name: kubeconfig 
     readOnly: true 
    - mountPath: /ssl/kubernetes 
     name: ssl-certs-kubernetes 
     readOnly: true 
    - mountPath: /etc/ssl/certs 
     name: ssl-certs-host 
     readOnly: true 

    volumes: 
    - hostPath: 
     path: /etc/kubernetes/proxy-kubeconfig.yml 
    name: kubeconfig 
    - hostPath: 
     path: /etc/kubernetes/ssl 
    name: ssl-certs-kubernetes 
    - hostPath: 
     path: /usr/share/ca-certificates 
    name: ssl-certs-host 
関連する問題