在 GCE (kubernetes) 上设置环境变量

Setting Environment Variables on GCE (kubernetes)

很抱歉这个菜鸟问题来自 https://github.com/kubernetes/kubernetes/blob/release-1.1/docs/getting-started-guides/logging-elasticsearch.md 它说:

To use Elasticsearch and Kibana for cluster logging you should set the following environment variable as shown below:

KUBE_LOGGING_DESTINATION=elasticsearch

在哪里以及如何设置此 Env Var?我在想我应该使用

gcloud container clusters create   

并在那里传递选项,但没有选项...

该文档适用于通过 GCE 的开源 shell 脚本启动集群的用户。 Google 容器引擎的集群创建命令目前不支持 Elasticsearch。您可以在创建集群后手动将其添加到您的集群中。

正如 Robert 的回答中已经提到的,如果集群应该在 Google 容器引擎 (GKE) 上 运行,则需要手动添加 Elasticsearch/Kibana 堆栈。使用此 post 中提供的信息,我能够通过执行以下步骤使其工作:

  1. 在没有云日志记录的情况下启动 GKE 集群

    gcloud container --project <PROJECT_ID> clusters create <CLUSTER_ID> --no-enable-cloud-logging
    
  2. 使用 kubernetes DaemonSet 向每个 运行ning 节点添加一个已配置的 fluentd 容器。

    kubectl create -f fluentd-es.yaml
    

    fluentd-es.yaml

    apiVersion: extensions/v1beta1
    kind: DaemonSet
    metadata:
      name: fluentd-elasticsearch
      namespace: kube-system
      labels:
        app: fluentd-logging
    
    spec:
      template:
        metadata:
          labels:
            app: fluentd-es
        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
          volumes:
          - name: varlog
            hostPath:
              path: /var/log
          - name: varlibdockercontainers
            hostPath:
              path: /var/lib/docker/containers
    
  3. 添加 elasticsearch 和 kibana pods 和服务。

    kubectl create -f es-controller.yaml
    kubectl create -f es-service.yaml
    kubectl create -f kibana-controller.yaml
    kubectl create -f kibana-service.yaml
    

    请注意下面的 kubernetes.io/cluster-service: "true" 标签(现在 原来的 files) 已被删除。 在定义中使用此标签导致 运行ning pods.

    终止

    es-controller.yaml

    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: elasticsearch-logging-v1
      namespace: kube-system
      labels:
        k8s-app: elasticsearch-logging
        version: v1
    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:1.8
            name: elasticsearch-logging
            resources:
              limits:
                cpu: 100m
              requests:
                cpu: 100m
            ports:
            - containerPort: 9200
              name: db
              protocol: TCP
            - containerPort: 9300
              name: transport
              protocol: TCP
            volumeMounts:
            - name: es-persistent-storage
              mountPath: /data
          volumes:
          - name: es-persistent-storage
            emptyDir: {}
    

    es-service.yaml

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

    kibana-controller.yaml

    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: kibana-logging-v1
      namespace: kube-system
      labels:
        k8s-app: kibana-logging
        version: v1
    spec:
      replicas: 1
      selector:
        k8s-app: kibana-logging
        version: v1
      template:
        metadata:
          labels:
            k8s-app: kibana-logging
            version: v1
            kubernetes.io/cluster-service: "true"
        spec:
          containers:
          - name: kibana-logging
            image: gcr.io/google_containers/kibana:1.3
            resources:
              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/name: "Kibana"
    spec:
      ports:
      - port: 5601
        protocol: TCP
        targetPort: ui
      selector:
        k8s-app: kibana-logging
    
  4. 创建一个 kubectl 代理

    kubectl proxy
    
  5. 使用 kibana 查看您的日志

    http://localhost:8001/api/v1/proxy/namespaces/kube-system/services/kibana-logging/