Форвардер Splunk с Kubernetes в образце боковой машины - PullRequest
0 голосов
/ 20 ноября 2018

Я создал собственное изображение перенаправителя Splunk.

Имя изображения: vrathore/splunkuniversalforwarder

Я убедился, что журнал отправляется на сервер. Я использую фиктивный журнал на моем хосте (c/Users/var/log). Если я запускаю эту команду Docker:

docker run --name splunkforwarder -d -v /c/Users/var/log://var/log/messages -p 8089:8089 -p 8088:8088 -e SPLUNK_SERVER_HOST=splunk-prodtest-gsp.test.com:9997 -e
FORWARD_HOSTNAME=kubernetes vrathore/splunkuniversalforwarder

Теперь я хотел использовать то же изображение в модуле Kubernetes, где 2 контейнера поделятся своей папкой журнала с моим изображением перенаправителя Splunk.

spec:
  revisionHistoryLimit: 5
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 10%
      maxSurge: 10%
  replicas: 1
  template:
    metadata:
      name: %APP_FULL_NAME%-pod
      labels:
        appname: %APP_FULL_NAME%
        stage: %APP_ENV%
        component: app-kube-pod-object
    spec:
      containers:
      - name: %APP_FULL_NAME%-service
        image: %DOCKER_IMAGE%
        imagePullPolicy: Always
        envFrom:
        - configMapRef:
            name: %APP_CONFIG_MAP%
        command: ["catalina.sh", "run"]
        ports:
        - containerPort: 8080
      imagePullSecrets:
      - name: %DOCKER_REPO_REGKEY%
  selector:
    matchLabels:
      appname: %APP_FULL_NAME%
      stage: %APP_ENV%

Kubernetes является новым для меня. Как я могу разделить папку журнала между контейнерами?

1 Ответ

0 голосов
/ 20 ноября 2018

Вам необходимо определить том типа emptyDir и прикрепить его к обоим контейнерам. Предполагая, что журналы из приложения находятся под /var/log/myapp/ (я также добавил второй контейнер)

spec:
  revisionHistoryLimit: 5
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 10%
      maxSurge: 10%
  replicas: 1
  template:
    metadata:
      name: %APP_FULL_NAME%-pod
      labels:
        appname: %APP_FULL_NAME%
        stage: %APP_ENV%
        component: app-kube-pod-object
    spec:
      containers:
      - name: %APP_FULL_NAME%-service
        image: %DOCKER_IMAGE%
        imagePullPolicy: Always
        envFrom:
        - configMapRef:
            name: %APP_CONFIG_MAP%
        command: ["catalina.sh", "run"]
        ports:
        - containerPort: 8080
        volumeMounts:
        - name: logs
          mountPath: /var/log/myapp/
      - name: uf
        image: vrathore/splunkuniversalforwarder
        ...
        volumeMounts:
        - name: logs
          mountPath: /var/log/myapp/
      imagePullSecrets:
      - name: %DOCKER_REPO_REGKEY%
      volumes:
      - name: logs
        emptyDir: {}
  selector:
    matchLabels:
      appname: %APP_FULL_NAME%
      stage: %APP_ENV%

Кроме того, я бы порекомендовал поискать альтернативное решение: с Collectord и мониторингом Kubernetes / OpenShift вы можете указать Collectord, где искать журналы, и вам не нужно запускать контейнер с коляской https://www.outcoldsolutions.com/docs/monitoring-kubernetes/v5/annotations/#application-logs, только один Collectord демон сделает всю работу.

...