2016-12-25 17 views
0

Я пытаюсь настроить стек EFK на моем кластере k8s, используя ansible repo.kubelet не создает символические ссылки на/var/log/container

Когда я попытался просмотреть kibana панели он показывает мне следующий вывод:

kibana dash

После проведения некоторых исследований, я обнаружил, что у меня нет никакого журнала, обнаруженного Fluentd. Я бегу k8s 1.2.4 на миньонов и 1.2.0 на мастера. Что мне удалось понять, так это то, что kubelet создает каталог/var/log/container и создает символические ссылки из всех контейнеров, запущенных в кластере. После этого Fluentd монтирует share/var/log volume от миньона и в конечном итоге получает доступ ко всем контейнерам журналов. Таким образом, он может отправлять эти журналы для поиска эластичности.

В моем случае у меня были/var/log/контейнеры, но он пуст, даже/var/lib/docker/container не содержит никакого файла журнала. я имел обыкновение использовать следующие контроллеры и услуги для настройки стека EFK:

эс-controller.yaml

apiVersion: v1 kind: ReplicationController metadata: name: elasticsearch-logging-v1 namespace: kube-system labels: k8s-app: elasticsearch-logging version: v1 kubernetes.io/cluster-service: "true" spec: replicas: 2 selector: k8s-app: elasticsearch-logging version: v1 template: metadata: labels: k8s-app: elasticsearch-logging version: v1 kubernetes.io/cluster-service: "true" spec: containers: - image: gcr.io/google_containers/elasticsearch:v2.4.1 name: elasticsearch-logging resources: # need more cpu upon initialization, therefore burstable class limits: cpu: 1000m requests: cpu: 100m ports: - containerPort: 9200 name: db protocol: TCP - containerPort: 9300 name: transport protocol: TCP volumeMounts: - name: es-persistent-storage mountPath: /data env: - name: "NAMESPACE" valueFrom: fieldRef: fieldPath: metadata.namespace volumes: - name: es-persistent-storage emptyDir: {}

эс-service.yaml

apiVersion: v1 kind: Service metadata: name: elasticsearch-logging namespace: kube-system labels: k8s-app: elasticsearch-logging kubernetes.io/cluster-service: "true" kubernetes.io/name: "Elasticsearch" spec: ports: - port: 9200 protocol: TCP targetPort: db selector: k8s-app: elasticsearch-logging

fluentd-ES .yaml

apiVersion: v1 kind: Pod metadata: name: fluentd-es-v1.20 namespace: kube-system labels: k8s-app: fluentd-es version: v1.20 spec: containers: - name: fluentd-es image: gcr.io/google_containers/fluentd-elasticsearch:1.20 command: - '/bin/sh' - '-c' - '/usr/sbin/td-agent 2>&1 >> /var/log/fluentd.log' resources: limits: cpu: 100m volumeMounts: - name: varlog mountPath: /var/log - name: varlibdockercontainers mountPath: /var/lib/docker/containers readOnly: true terminationGracePeriodSeconds: 30 volumes: - name: varlog hostPath: path: /var/log - name: varlibdockercontainers hostPath: path: /var/lib/docker/containers

kibana-controller.yaml

apiVersion: extensions/v1beta1 kind: Deployment metadata: name: kibana-logging namespace: kube-system labels: k8s-app: kibana-logging kubernetes.io/cluster-service: "true" spec: replicas: 1 selector: matchLabels: k8s-app: kibana-logging template: metadata: labels: k8s-app: kibana-logging spec: containers: - name: kibana-logging image: gcr.io/google_containers/kibana:v4.6.1 resources: # keep request = limit to keep this container in guaranteed class limits: cpu: 100m requests: cpu: 100m env: - name: "ELASTICSEARCH_URL" value: "http://elasticsearch-logging:9200" ports: - containerPort: 5601 name: ui protocol: TCP

kibana-service.yaml

apiVersion: v1 kind: Service metadata: name: kibana-logging namespace: kube-system labels: k8s-app: kibana-logging kubernetes.io/cluster-service: "true" kubernetes.io/name: "Kibana" spec: type: NodePort ports: - port: 5601 protocol: TCP targetPort: ui selector: k8s-app: kibana-logging

обновление:

Я изменил fluentd-es.yaml следующим образом:

apiVersion: v1 kind: Pod metadata: name: fluentd-elasticsearch namespace: kube-system labels: k8s-app: fluentd-logging spec: containers: - name: fluentd-elasticsearch image: gcr.io/google_containers/fluentd-elasticsearch:1.15 resources: limits: memory: 200Mi requests: cpu: 100m memory: 200Mi volumeMounts: - name: varlog mountPath: /var/log - name: varlibdockercontainers mountPath: /var/lib/docker/containers readOnly: true terminationGracePeriodSeconds: 30 volumes: - name: varlog hostPath: path: /var/log - name: varlibdockercontainers hostPath: path: /var/lib/docker/containers

Но когда я запускаю стручок «под названием шлюз», я попал в fluentd лог следующей ошибки: /var/log/containers/gateway-c3cuu_default_gateway-d5966a86e7cb1519329272a0b900182be81f55524227db2f524e6e23cd75ba04.log unreadable. It is excluded and would be examined next time.

ответ

1

Наконец я узнал, что вызывает проблему. при установке докеры из CentOS 7 repo существует опция (--log-driver = journald), которая заставляет докер запускать выход журнала в журнал. Поведение по умолчанию заключается в том, чтобы записывать эти журналы в файлы json.log. Так что единственное, что мне нужно было сделать, удалить последнюю указанную опцию из/etc/sysconfig/docker.

+0

'printf" OPTIONS = '- selinux-enabled -signature-verification = false' "| sudo tee -a/etc/sysconfig/docker' переопределяет другое определение OPTIONS ранее в том же файле с OPTIONS, в котором отсутствует переключатель -log-driver. Обратите внимание, что просто запись противоположного входа в '/ etc/docker/daemon.json' не будет отрицать значение в'/etc/sysconfig/docker' Docker Daemon будет жаловаться на двойное объявление коммутатора. Таким образом, необходимо удалить его из файла '/ etc/sysconfig/docker' – ddotsenko

 Смежные вопросы

  • Нет связанных вопросов^_^