如何在Node上的一处将所有Pod的日志存储在kubernetes中?

时间:2019-06-14 09:00:27

标签: logging kubernetes kubernetes-pod

我想将Pod的日志存储在kubernetes中的一个位置。即 kubectl日志podname

的输出

我提到了这个问题Kubernetes basic pod logging,这使我成功地获得了用于计数器的日志...如何在规范中修改此args属性,以获取存储在文件中的 kubectl日志podname 的输出?

这是我创建的pod.yaml,但无法在 / tmp / logs /

位置看到任何文件
apiVersion: v1
kind: Service
metadata:
  name: spring-boot-demo-pricing
spec:
  ports:
  - name: spring-boot-pricing
    port: 8084
    targetPort: 8084
  selector:
    app: spring-boot-demo-pricing

---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: spring-boot-demo-pricing
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: spring-boot-demo-pricing
    spec:
      containers:
      - name: spring-boot-demo-pricing
        image: djtijare/a2ipricing12062019:v1
        imagePullPolicy: IfNotPresent
       # envFrom:
        #- configMapRef:
        #    name: spring-boot-demo-config-map
        resources:
          requests:
            cpu: 100m
            memory: 1Gi
        ports:
        - containerPort: 8084
        args: [/bin/sh, -c,
          'i=0; while true; do echo "$i: $(date)" >> /u01/kubernetes_prac/logs/log_output.txt; i=$((i+1)); sleep 1; done']
        volumeMounts:
        - name: varlog
          mountPath: /u01/kubernetes_prac/logs
      volumes:
       - name: varlog
         hostPath:
           path: /tmp/logs

1 个答案:

答案 0 :(得分:1)

正确的方法是将日志存储在集群外部,例如,如果您使用AWS,则有诸如将日志存储到cloudwatch,s3等之类的规定。示例可能是fluentd,它写了许多资料来源。 Kubernetes集群在VPC(虚拟私有云)上运行并提供对集群中节点的访问的原因可能并非总是正确的。因此,这是一种遵循的方法。

link提供了将所有容器的日志公开给EFK(Elasticsearch,Fluentd和Kibana)的指南。