2

Docker ガイドを使用してローカルで Kubernetesを実行するガイドに基づいて Ubuntu (信頼できる) に Kubernetes クラスターをセットアップし、DNS をデプロイし、InfluxDB バックエンドと Grafana UI を使用して Heapster を実行しました。

Grafana を除いて、すべてがスムーズに実行されているように見えますが、グラフは表示されませんが、No datapoints図にはメッセージが表示されます

Docker コンテナーのログを確認したところ、Heapster が kubelet API にアクセスできない (?) ため、メトリクスが InfluxDB に永続化されていないことがわかりました。

user@host:~$ docker logs e490a3ac10a8
I0701 07:07:30.829745       1 heapster.go:65] /heapster --source=kubernetes:https://kubernetes.default --sink=influxdb:http://monitoring-influxdb:8086
I0701 07:07:30.830082       1 heapster.go:66] Heapster version 1.2.0-beta.0
I0701 07:07:30.830809       1 configs.go:60] Using Kubernetes client with master "https://kubernetes.default" and version v1
I0701 07:07:30.831284       1 configs.go:61] Using kubelet port 10255
E0701 07:09:38.196674       1 influxdb.go:209] issues while creating an InfluxDB sink: failed to ping InfluxDB server at "monitoring-influxdb:8086" - Get http://monitoring-influxdb:8086/ping: dial tcp 10.0.0.223:8086: getsockopt: connection timed out, will retry on use
I0701 07:09:38.196919       1 influxdb.go:223] created influxdb sink with options: host:monitoring-influxdb:8086 user:root db:k8s
I0701 07:09:38.197048       1 heapster.go:92] Starting with InfluxDB Sink
I0701 07:09:38.197154       1 heapster.go:92] Starting with Metric Sink
I0701 07:09:38.228046       1 heapster.go:171] Starting heapster on port 8082
I0701 07:10:05.000370       1 manager.go:79] Scraping metrics start: 2016-07-01 07:09:00 +0000 UTC, end: 2016-07-01 07:10:00 +0000 UTC
E0701 07:10:05.008785       1 kubelet.go:230] error while getting containers from Kubelet: failed to get all container stats from Kubelet URL "http://127.0.0.1:10255/stats/container/": Post http://127.0.0.1:10255/stats/container/: dial tcp 127.0.0.1:10255: getsockopt: connection refused
I0701 07:10:05.009119       1 manager.go:152] ScrapeMetrics: time: 8.013178ms size: 0
I0701 07:11:05.001185       1 manager.go:79] Scraping metrics start: 2016-07-01 07:10:00 +0000 UTC, end: 2016-07-01 07:11:00 +0000 UTC
E0701 07:11:05.007130       1 kubelet.go:230] error while getting containers from Kubelet: failed to get all container stats from Kubelet URL "http://127.0.0.1:10255/stats/container/": Post http://127.0.0.1:10255/stats/container/: dial tcp 127.0.0.1:10255: getsockopt: connection refused
I0701 07:11:05.007686       1 manager.go:152] ScrapeMetrics: time: 5.945236ms size: 0
W0701 07:11:25.010298       1 manager.go:119] Failed to push data to sink: InfluxDB Sink
I0701 07:12:05.000420       1 manager.go:79] Scraping metrics start: 2016-07-01 07:11:00 +0000 UTC, end: 2016-07-01 07:12:00 +0000 UTC
E0701 07:12:05.002413       1 kubelet.go:230] error while getting containers from Kubelet: failed to get all container stats from Kubelet URL "http://127.0.0.1:10255/stats/container/": Post http://127.0.0.1:10255/stats/container/: dial tcp 127.0.0.1:10255: getsockopt: connection refused
I0701 07:12:05.002467       1 manager.go:152] ScrapeMetrics: time: 1.93825ms size: 0
E0701 07:12:12.309151       1 influxdb.go:150] Failed to create infuxdb: failed to ping InfluxDB server at "monitoring-influxdb:8086" - Get http://monitoring-influxdb:8086/ping: dial tcp 10.0.0.223:8086: getsockopt: connection timed out
I0701 07:12:12.351348       1 influxdb.go:201] Created database "k8s" on influxDB server at "monitoring-influxdb:8086"
I0701 07:13:05.001052       1 manager.go:79] Scraping metrics start: 2016-07-01 07:12:00 +0000 UTC, end: 2016-07-01 07:13:00 +0000 UTC
E0701 07:13:05.015947       1 kubelet.go:230] error while getting containers from Kubelet: failed to get all container stats from Kubelet URL "http://127.0.0.1:10255/stats/container/": Post http://127.0.0.1:10255/stats/container/: dial tcp 127.0.0.1:10255: getsockopt: connection refused
...

Heapster が (ノードのループバックを介して) kubelet にアクセスするのではなく、代わりにそれ自体 (コンテナーのループバックを介して) にアクセスすることを理解させる同様の問題を説明する GitHub でいくつかの問題を見つけました。ただし、解決策を再現できません。

github.com/kubernetes/heapster/issues/1183

Heapster ポッドにホスト ネットワークを使用するか、ノードが 127.0.0.1 ではない通常の名前を持つようにクラスターを構成する必要があります。現在の問題は、ノード名が Heapster localhost に解決されることです。さらに問題が発生した場合は、再開してください。

-@piosz

  • Heapster ポッドの「ホスト ネットワーク」を有効にするにはどうすればよいですか?
  • 127.0.0.1 ではない通常の名前を使用するようにクラスター/ノードを構成するにはどうすればよいですか?

github.com/kubernetes/heapster/issues/744

hyperkube でより良いオプションを使用して修正しました。助けてくれてありがとう!

-@ddispaltro

  • で kubelet のオプション フラグを追加/変更することで、この問題を解決する方法はありますdocker runか?
    (このGitHubの問題の最後の回答で提案されているように)設定を試み--hostname-override=<host's eth0 IP>まし--address=127.0.0.1たが、Heapsterのコンテナログには次のように記載されています:

    I0701 08:23:05.000566 1 manager.go:79] Scraping metrics start: 2016-07-01 08:22:00 +0000 UTC, end: 2016-07-01 08:23:00 +0000 UTC E0701 08:23:05.000962 1 kubelet.go:279] Node 127.0.0.1 is not ready E0701 08:23:05.003018 1 kubelet.go:230] error while getting containers from Kubelet: failed to get all container stats from Kubelet URL "http://<host's eth0 IP>:10255/stats/container/": Post http://<host's eth0 IP>/stats/container/: dial tcp <host's eth0 IP>:10255: getsockopt: connection refused

名前空間の問題

defaultこの問題は、Kubernetes API を名前空間で実行し、Heapster を で実行していることが原因kube-systemでしょうか?

user@host:~$ kubectl get --all-namespaces pods
NAMESPACE     NAME                     READY     STATUS    RESTARTS   AGE
default       k8s-etcd-127.0.0.1       1/1       Running   0          18h
default       k8s-master-127.0.0.1     4/4       Running   1          18h
default       k8s-proxy-127.0.0.1      1/1       Running   0          18h
kube-system   heapster-lizks           1/1       Running   0          18h
kube-system   influxdb-grafana-e0pk2   2/2       Running   0          18h
kube-system   kube-dns-v10-4vjhm       4/4       Running   0          18h

OS: Ubuntu 14.04.4 LTS (信頼できる) | Kubernetes: v1.2.5 | ドッカー: v1.11.2

4

2 に答える 2

1

Heapster は Kubernetes からノードのリストを取得し、各ノードの kublete プロセスから統計を取得しようとしています (ノードの統計を収集する cAdvisor が組み込まれています)。この場合、ノードは 1 つしかなく、127.0.0.1 によって kubernetes に認識されます。そして、問題があります。Heapster コンテナーは、それ自体である 127.0.0.1 のノードに到達しようとしていますが、もちろん、Heapster コンテナー内で問い合わせる kublete プロセスは見つかりません。

この問題を解決するには、2 つのことが必要です。

  1. 127.0.0.1 のループバック ネットワーク アドレス以外で、kublete ワーカー ノード (kubernetes を実行しているホスト マシン) を参照する必要があります。
  2. kublete プロセスは、新しいネットワーク インターフェイス/アドレスからのトラフィックを受け入れる必要があります

ローカル インストール ガイドを使用していて、kubernetes を次のコマンドで開始するとします。

hack/local-up-cluster.sh

kublete を参照するホスト名を変更するのは非常に簡単です。より複雑なアプローチを取ることもできますが、これを eth0 ip に設定するとうまくいきました (ifconfig eth0)。欠点は、eth0 インターフェイスが必要であり、これは DHCP の影響を受けるため、これがどれほど便利かによって、マイレージが異なる場合があることです。

export HOSTNAME_OVERRIDE=10.0.2.15

任意のネットワーク インターフェースからのトラフィックを受け入れるように kublete プロセスを取得するのも同様に簡単です。

export KUBELET_HOST=0.0.0.0
于 2016-09-08T20:09:54.690 に答える