2016-07-13 27 views
0

Ich betreibe einen Kubernetes-Cluster auf Ubuntu (trusty) lokal über Docker.Kubernetes entfernt Heapster & Grafana-Dienste wegen bereits verwendetem NodePort

Da ich Vagrant bin mit dem Ubuntu VM erstellen hatte ich den docker run Befehl von den offiziellen Kubernetes Führung ein wenig zu ändern:

docker run -d \ 
    --volume=/:/rootfs:ro \ 
    --volume=/sys:/sys:ro \ 
    --volume=/var/lib/docker/:/var/lib/docker:rw \ 
    --volume=/var/lib/kubelet/:/var/lib/kubelet:rw \ 
    --volume=/var/run:/var/run:rw \ 
    --net=host \ 
    --privileged=true \ 
    --pid=host \ 
    gcr.io/google_containers/hyperkube:v1.3.0 \ 
    /hyperkube kubelet \ 
     --allow-privileged=true \ 
     --api-servers=http://localhost:8080 \ 
     --v=2 \ 
     --address=0.0.0.0 \ 
     --enable-server \ 
     --hostname-override=192.168.10.30 \ 
     --config=/etc/kubernetes/manifests-multi \ 
     --containerized \ 
     --cluster-dns=10.0.0.10 \ 
     --cluster-domain=cluster.local 

Zusätzlich einen Reverse-Proxy läuft ermöglicht es mir, meine Clusters Dienste zugreifen über einen Browser von außerhalb der VM:

docker run -d --net=host --privileged gcr.io/google_containers/hyperkube:v1.3.0 \ 
/hyperkube proxy --master=http://127.0.0.1:8080 --v=2 

Diese Schritte funktionieren und schließlich die Kubernetes UI in meinem Browser zugreifen ich bin in der Lage.

[email protected]:~$ kubectl cluster-info 
Kubernetes master is running at http://localhost:8080 
KubeDNS is running at http://localhost:8080/api/v1/proxy/namespaces/kube-system/services/kube-dns 
kubernetes-dashboard is running at http://localhost:8080/api/v1/proxy/namespaces/kube-system/services/kubernetes-dashboard 

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'. 

Nun möchte Ich mag Heapster in diesem Kubernetes Cluster mit einem InfluxDB Backend und einem Grafana UI laufen, genauso wie in this guide beschrieben. Um dies zu tun, habe ich die Heapster Repo geklont und grafana-service.yaml eine externe IP-type: NodePort, indem verwenden konfiguriert:

apiVersion: v1 
kind: Service 
metadata: 
    labels: 
    kubernetes.io/cluster-service: 'true' 
    kubernetes.io/name: monitoring-grafana 
    name: monitoring-grafana 
    namespace: kube-system 
spec: 
    # In a production setup, we recommend accessing Grafana through an external Loadbalancer 
    # or through a public IP. 
    type: NodePort 
    ports: 
    - port: 80 
    targetPort: 3000 
    selector: 
    name: influxGrafana 

Erstellen der Dienste, rcs, etc .:

[email protected]:~/heapster$ kubectl create -f deploy/kube-config/influxdb/ 
You have exposed your service on an external port on all nodes in your 
cluster. If you want to expose this service to the external internet, you may 
need to set up firewall rules for the service port(s) (tcp:30593) to serve traffic. 

See http://releases.k8s.io/release-1.3/docs/user-guide/services-firewalls.md for more details. 
service "monitoring-grafana" created 
replicationcontroller "heapster" created 
service "heapster" created 
replicationcontroller "influxdb-grafana" created 
service "monitoring-influxdb" created 

[email protected]:~/heapster$ kubectl cluster-info 
Kubernetes master is running at http://localhost:8080 
Heapster is running at http://localhost:8080/api/v1/proxy/namespaces/kube-system/services/heapster 
KubeDNS is running at http://localhost:8080/api/v1/proxy/namespaces/kube-system/services/kube-dns 
kubernetes-dashboard is running at http://localhost:8080/api/v1/proxy/namespaces/kube-system/services/kubernetes-dashboard 
monitoring-grafana is running at http://localhost:8080/api/v1/proxy/namespaces/kube-system/services/monitoring-grafana 

[email protected]:~/heapster$ kubectl get pods --all-namespaces 
NAMESPACE  NAME        READY  STATUS    RESTARTS AGE 
kube-system heapster-y2yci      1/1  Running    0   32m 
kube-system influxdb-grafana-6udas    2/2  Running    0   32m 
kube-system k8s-master-192.168.10.30   4/4  Running    0   58m 
kube-system k8s-proxy-192.168.10.30    1/1  Running    0   58m 
kube-system kube-addon-manager-192.168.10.30 2/2  Running    0   57m 
kube-system kube-dns-v17-y4cwh     3/3  Running    0   58m 
kube-system kubernetes-dashboard-v1.1.0-bnbnp 1/1  Running    0   58m 

[email protected]:~/heapster$ kubectl get svc --all-namespaces 
NAMESPACE  NAME     CLUSTER-IP EXTERNAL-IP PORT(S)    AGE 
default  kubernetes    10.0.0.1  <none>  443/TCP    18m 
kube-system heapster    10.0.0.234 <none>  80/TCP    3s 
kube-system kube-dns    10.0.0.10 <none>  53/UDP,53/TCP  18m 
kube-system kubernetes-dashboard 10.0.0.58 <none>  80/TCP    18m 
kube-system monitoring-grafana  10.0.0.132 <nodes>  80/TCP    3s 
kube-system monitoring-influxdb 10.0.0.197 <none>  8083/TCP,8086/TCP 16m 

Wie Sie kann sehen, alles scheint reibungslos zu laufen und ich kann auch auf Grafanas Benutzeroberfläche unter http://localhost:8080/api/v1/proxy/namespaces/kube-system/services/monitoring-grafana/ über einen Browser zugreifen.

Nach wie 1 Minute jedoch verschwinden beide Endpunkte von Heapster und Grafana von kubectl cluster-info.

[email protected]:~/heapster$ kubectl cluster-info 
Kubernetes master is running at http://localhost:8080 
KubeDNS is running at http://localhost:8080/api/v1/proxy/namespaces/kube-system/services/kube-dns 
kubernetes-dashboard is running at http://localhost:8080/api/v1/proxy/namespaces/kube-system/services/kubernetes-dashboard 

Browser Ausgabe:

{ 
    "kind": "Status", 
    "apiVersion": "v1", 
    "metadata": {}, 
    "status": "Failure", 
    "message": "endpoints \"monitoring-grafana\" not found", 
    "reason": "NotFound", 
    "details": { 
    "name": "monitoring-grafana", 
    "kind": "endpoints" 
    }, 
    "code": 404 
} 

Pods laufen noch bis & ...

[email protected]:~/heapster$ kubectl get pods --all-namespaces 
NAMESPACE  NAME        READY  STATUS    RESTARTS AGE 
kube-system heapster-y2yci      1/1  Running    0   32m 
kube-system influxdb-grafana-6udas    2/2  Running    0   32m 
kube-system k8s-master-192.168.10.30   4/4  Running    0   58m 
kube-system k8s-proxy-192.168.10.30    1/1  Running    0   58m 
kube-system kube-addon-manager-192.168.10.30 2/2  Running    0   57m 
kube-system kube-dns-v17-y4cwh     3/3  Running    0   58m 
kube-system kubernetes-dashboard-v1.1.0-bnbnp 1/1  Running    0   58m 

... aber Heapster und Grafana Dienste sind verschwunden:

[email protected]:~/heapster$ kubectl get svc --all-namespaces 
NAMESPACE  NAME     CLUSTER-IP EXTERNAL-IP PORT(S)    AGE 
default  kubernetes    10.0.0.1  <none>  443/TCP    19m 
kube-system kube-dns    10.0.0.10 <none>  53/UDP,53/TCP  19m 
kube-system kubernetes-dashboard 10.0.0.58 <none>  80/TCP    19m 
kube-system monitoring-influxdb 10.0.0.197 <none>  8083/TCP,8086/TCP 17m 

Während die Ausgabe von kubectl cluster-info dump Überprüfung entdeckte ich folgende Fehler:

I0713 09:31:09.088567  1 proxier.go:427] Adding new service "kube-system/monitoring-grafana:" at 10.0.0.227:80/TCP 
E0713 09:31:09.273385  1 proxier.go:887] can't open "nodePort for kube-system/monitoring-grafana:" (:30593/tcp), skipping this nodePort: listen tcp :30593: bind: address alread$ 
I0713 09:31:09.395280  1 proxier.go:427] Adding new service "kube-system/heapster:" at 10.0.0.111:80/TCP 
E0713 09:31:09.466306  1 proxier.go:887] can't open "nodePort for kube-system/monitoring-grafana:" (:30593/tcp), skipping this nodePort: listen tcp :30593: bind: address alread$ 
I0713 09:31:09.480468  1 proxier.go:502] Setting endpoints for "kube-system/monitoring-grafana:" to [172.17.0.5:3000] 
E0713 09:31:09.519698  1 proxier.go:887] can't open "nodePort for kube-system/monitoring-grafana:" (:30593/tcp), skipping this nodePort: listen tcp :30593: bind: address alread$ 
I0713 09:31:09.532026  1 proxier.go:502] Setting endpoints for "kube-system/heapster:" to [172.17.0.4:8082] 
E0713 09:31:09.558527  1 proxier.go:887] can't open "nodePort for kube-system/monitoring-grafana:" (:30593/tcp), skipping this nodePort: listen tcp :30593: bind: address alread$ 
E0713 09:31:17.249001  1 server.go:294] Starting health server failed: listen tcp 127.0.0.1:10249: bind: address already in use 
E0713 09:31:22.252280  1 server.go:294] Starting health server failed: listen tcp 127.0.0.1:10249: bind: address already in use 
E0713 09:31:27.257895  1 server.go:294] Starting health server failed: listen tcp 127.0.0.1:10249: bind: address already in use 
E0713 09:31:31.126035  1 proxier.go:887] can't open "nodePort for kube-system/monitoring-grafana:" (:30593/tcp), skipping this nodePort: listen tcp :30593: bind: address alread$ 
E0713 09:31:32.264430  1 server.go:294] Starting health server failed: E0709 09:32:01.153168  1 proxier.go:887] can't open "nodePort for kube-system/monitoring-grafana:" ($ 
E0713 09:31:37.265109  1 server.go:294] Starting health server failed: listen tcp 127.0.0.1:10249: bind: address already in use 
E0713 09:31:42.269035  1 server.go:294] Starting health server failed: listen tcp 127.0.0.1:10249: bind: address already in use 
E0713 09:31:47.270950  1 server.go:294] Starting health server failed: listen tcp 127.0.0.1:10249: bind: address already in use 
E0713 09:31:52.272354  1 server.go:294] Starting health server failed: listen tcp 127.0.0.1:10249: bind: address already in use 
E0713 09:31:57.273424  1 server.go:294] Starting health server failed: listen tcp 127.0.0.1:10249: bind: address already in use 
E0713 09:32:01.153168  1 proxier.go:887] can't open "nodePort for kube-system/monitoring-grafana:" (:30593/tcp), skipping this nodePort: listen tcp :30593: bind: address alread$ 
E0713 09:32:02.276318  1 server.go:294] Starting health server failed: listen tcp 127.0.0.1:10249: bind: address already in use 
I0713 09:32:06.105878  1 proxier.go:447] Removing service "kube-system/monitoring-grafana:" 
I0713 09:32:07.175025  1 proxier.go:447] Removing service "kube-system/heapster:" 
I0713 09:32:07.210270  1 proxier.go:517] Removing endpoints for "kube-system/monitoring-grafana:" 
I0713 09:32:07.249824  1 proxier.go:517] Removing endpoints for "kube-system/heapster:" 

, offenbar die Dienste und Endpunkte von Heapster & Grafana entfernt werden aufgrund nodePort bereits im Einsatz ist. Ich habe keine nodePort in grafana-service.yaml angegeben, was bedeutet, dass Kubernetes könnte eine wählen, die nicht bereits verwendet wird - so wie kann dies ein Fehler sein? Gibt es auch Möglichkeiten, dies zu beheben?


OS: Ubuntu 14.04.4 LTS (treue) | Kubernetes: v1.3.0 | Docker: v1.11.2

Antwort

0

Das gleiche Problem in unserer Umgebung. K8S Version = 1.3.4, Docker 1.12, Heapster ist späteste vom Meisterzweig

1

Ich lief in ein sehr ähnliches Problem.

In der Datei grafana-service.yaml (und wahrscheinlich der Datei hapster-service.yaml) haben Sie die Zeile: kubernetes.io/cluster-service: 'true'. Dieses Label bedeutet, dass dieser Service vom Addon-Manager verwaltet wird. Wenn der Add-On-Manager seine periodischen Prüfungen durchführt, wird er sehen, dass kein Grafana/Heapster-Dienst in /etc/kubernetes/addons definiert ist und die Dienste entfernen wird.

Um dies zu umgehen, haben Sie zwei Möglichkeiten:

  1. ändern das Etikett auf kubernetes.io/cluster-service: 'false'.
  2. Verschieben Sie die Controller- und Service-YAML-Dateien in den Ordner /etc/kubernetes/addons (oder wo immer der Addon-Manager für die Suche nach Yaml-Dateien konfiguriert ist) auf dem Master-Knoten.

Hoffnung, die

hilft