mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	Merge pull request #107553 from liggitt/fluentd
Remove fluentd-elasticsearch addon
This commit is contained in:
		@@ -90,8 +90,6 @@ dependencies:
 | 
			
		||||
    version: 1.17.5
 | 
			
		||||
    refPaths:
 | 
			
		||||
    - path: build/build-image/cross/VERSION
 | 
			
		||||
    - path: cluster/addons/fluentd-elasticsearch/es-image/Dockerfile
 | 
			
		||||
      match: 'FROM golang\:\d+.\d+(alpha|beta|rc)?\.?(\d+)?'
 | 
			
		||||
    - path: staging/publishing/rules.yaml
 | 
			
		||||
      match: 'default-go-version\: \d+.\d+(alpha|beta|rc)?\.?(\d+)?'
 | 
			
		||||
    - path: test/images/Makefile
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +0,0 @@
 | 
			
		||||
# See the OWNERS docs at https://go.k8s.io/owners
 | 
			
		||||
 | 
			
		||||
approvers:
 | 
			
		||||
  - coffeepac
 | 
			
		||||
  - monotek
 | 
			
		||||
  - sig-instrumentation-approvers
 | 
			
		||||
reviewers:
 | 
			
		||||
  - sig-instrumentation-reviewers
 | 
			
		||||
labels:
 | 
			
		||||
  - sig/instrumentation
 | 
			
		||||
@@ -1,90 +0,0 @@
 | 
			
		||||
# Elasticsearch Add-On
 | 
			
		||||
 | 
			
		||||
This add-on consists of a combination of [Elasticsearch][elasticsearch],
 | 
			
		||||
[Fluentd][fluentd] and [Kibana][kibana]. Elasticsearch is a search engine
 | 
			
		||||
that is responsible for storing our logs and allowing for them to be queried.
 | 
			
		||||
Fluentd sends log messages from Kubernetes to Elasticsearch, whereas Kibana
 | 
			
		||||
is a graphical interface for viewing and querying the logs stored in
 | 
			
		||||
Elasticsearch.
 | 
			
		||||
 | 
			
		||||
**Note:** this addon should **not** be used as-is in production. This is
 | 
			
		||||
an example and you should treat it as such. Please see at least the
 | 
			
		||||
[Security](#security) and the [Storage](#storage) sections for more
 | 
			
		||||
information.
 | 
			
		||||
 | 
			
		||||
## Elasticsearch
 | 
			
		||||
 | 
			
		||||
Elasticsearch is deployed as a [StatefulSet][statefulSet], which is like
 | 
			
		||||
a Deployment, but allows for maintaining state on storage volumes.
 | 
			
		||||
 | 
			
		||||
### Security
 | 
			
		||||
 | 
			
		||||
Elasticsearch has capabilities to enable authorization using the [X-Pack
 | 
			
		||||
plugin][xPack]. For the sake of simplicity this example uses the fully open
 | 
			
		||||
source prebuild images from elastic that do not contain the X-Pack plugin. If
 | 
			
		||||
you need these features, please consider building the images from either the
 | 
			
		||||
"basic" or "platinum" version. After enabling these features, follow [official
 | 
			
		||||
documentation][setupCreds] to set up credentials in Elasticsearch and Kibana.
 | 
			
		||||
Don't forget to propagate those credentials also to Fluentd in its
 | 
			
		||||
[configuration][fluentdCreds]. You can utilize [ConfigMaps][configMap] and
 | 
			
		||||
[Secrets][secret] to store credentials in the Kubernetes apiserver.
 | 
			
		||||
 | 
			
		||||
### Initialization
 | 
			
		||||
 | 
			
		||||
The Elasticsearch StatefulSet manifest specifies that there shall be an
 | 
			
		||||
[init container][initContainer] executing before Elasticsearch containers
 | 
			
		||||
themselves, in order to ensure that the kernel state variable
 | 
			
		||||
`vm.max_map_count` is at least 262144, since this is a requirement of
 | 
			
		||||
Elasticsearch. You may remove the init container if you know that your host
 | 
			
		||||
OS meets this requirement.
 | 
			
		||||
 | 
			
		||||
### Storage
 | 
			
		||||
 | 
			
		||||
The Elasticsearch StatefulSet will use the [EmptyDir][emptyDir] volume to
 | 
			
		||||
store data. EmptyDir is erased when the pod terminates, here it is used only
 | 
			
		||||
for testing purposes. **Important:** please change the storage to persistent
 | 
			
		||||
volume claim before actually using this StatefulSet in your setup!
 | 
			
		||||
 | 
			
		||||
## Fluentd
 | 
			
		||||
 | 
			
		||||
Fluentd is deployed as a [DaemonSet][daemonSet] which spawns a pod on each
 | 
			
		||||
node that reads logs, generated by kubelet, container runtime and containers
 | 
			
		||||
and sends them to Elasticsearch.
 | 
			
		||||
 | 
			
		||||
Learn more in the [official Kubernetes documentation][k8sElasticsearchDocs].
 | 
			
		||||
 | 
			
		||||
## Building
 | 
			
		||||
 | 
			
		||||
Both images are now being hosted in quay.io and are built locally via `make` and `docker`.
 | 
			
		||||
To build locally run `make build` and then `make push` to publish.  
 | 
			
		||||
 | 
			
		||||
### Known problems
 | 
			
		||||
 | 
			
		||||
Since Fluentd talks to the Elasticsearch service inside the cluster, instances
 | 
			
		||||
on masters won't work, because masters have no kube-proxy. Don't mark masters
 | 
			
		||||
with the label mentioned in the previous paragraph or add a taint on them to
 | 
			
		||||
avoid Fluentd pods scheduling there.
 | 
			
		||||
 | 
			
		||||
[fluentd]: http://www.fluentd.org/
 | 
			
		||||
[elasticsearch]: https://www.elastic.co/products/elasticsearch
 | 
			
		||||
[kibana]: https://www.elastic.co/products/kibana
 | 
			
		||||
[xPack]: https://www.elastic.co/products/x-pack
 | 
			
		||||
[setupCreds]: https://www.elastic.co/guide/en/x-pack/current/setting-up-authentication.html#reset-built-in-user-passwords
 | 
			
		||||
[fluentdCreds]: https://github.com/uken/fluent-plugin-elasticsearch#user-password-path-scheme-ssl_verify
 | 
			
		||||
[configMap]: https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/
 | 
			
		||||
[secret]: https://kubernetes.io/docs/concepts/configuration/secret/
 | 
			
		||||
[statefulSet]: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset
 | 
			
		||||
[initContainer]: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
 | 
			
		||||
[emptyDir]: https://kubernetes.io/docs/concepts/storage/volumes#emptydir
 | 
			
		||||
[daemonSet]: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/
 | 
			
		||||
[k8sElasticsearchDocs]: https://kubernetes.io/docs/tasks/debug-application-cluster/logging-elasticsearch-kibana
 | 
			
		||||
 | 
			
		||||
## Running EFK stack in production
 | 
			
		||||
 | 
			
		||||
The configurations provided here for Elasticsearch, Fluentd & Kibana (EFK),
 | 
			
		||||
are a starting point and should not be considered to be production ready.
 | 
			
		||||
 | 
			
		||||
If you like to run these tools in a production environment you could use the
 | 
			
		||||
[Helm](https://helm.sh) charts, provided by the Helm community, which are used
 | 
			
		||||
by a lot of people and therefore are widely tested. You can find them all via the
 | 
			
		||||
[Helm Hub](https://hub.helm.sh/) or the [Artifact hub](https://artifacthub.io/).
 | 
			
		||||
@@ -1,8 +0,0 @@
 | 
			
		||||
kind: Namespace
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
metadata:
 | 
			
		||||
 name: logging
 | 
			
		||||
 labels:
 | 
			
		||||
   k8s-app: logging
 | 
			
		||||
   kubernetes.io/cluster-service: "true"
 | 
			
		||||
   addonmanager.kubernetes.io/mode: Reconcile
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
elasticsearch_logging_discovery
 | 
			
		||||
@@ -1,31 +0,0 @@
 | 
			
		||||
# Copyright 2017 The Kubernetes Authors.
 | 
			
		||||
#
 | 
			
		||||
# Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
# you may not use this file except in compliance with the License.
 | 
			
		||||
# You may obtain a copy of the License at
 | 
			
		||||
#
 | 
			
		||||
#     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
#
 | 
			
		||||
# Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
# distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
# See the License for the specific language governing permissions and
 | 
			
		||||
# limitations under the License.
 | 
			
		||||
 | 
			
		||||
FROM golang:1.17.5 AS builder
 | 
			
		||||
COPY elasticsearch_logging_discovery.go go.mod go.sum /
 | 
			
		||||
RUN CGO_ENABLED=0 GOOS=linux GO111MODULE=on go build -a -ldflags "-w" -o /elasticsearch_logging_discovery /elasticsearch_logging_discovery.go
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
FROM docker.elastic.co/elasticsearch/elasticsearch:7.16.2
 | 
			
		||||
 | 
			
		||||
VOLUME ["/data"]
 | 
			
		||||
EXPOSE 9200 9300
 | 
			
		||||
 | 
			
		||||
COPY --from=builder /elasticsearch_logging_discovery bin/
 | 
			
		||||
COPY run.sh bin/
 | 
			
		||||
COPY config/elasticsearch.yml config/log4j2.properties config/
 | 
			
		||||
 | 
			
		||||
USER root
 | 
			
		||||
RUN chown -R elasticsearch:elasticsearch ./
 | 
			
		||||
CMD ["bin/run.sh"]
 | 
			
		||||
@@ -1,27 +0,0 @@
 | 
			
		||||
# Copyright 2017 The Kubernetes Authors.
 | 
			
		||||
#
 | 
			
		||||
# Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
# you may not use this file except in compliance with the License.
 | 
			
		||||
# You may obtain a copy of the License at
 | 
			
		||||
#
 | 
			
		||||
#     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
#
 | 
			
		||||
# Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
# distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
# See the License for the specific language governing permissions and
 | 
			
		||||
# limitations under the License.
 | 
			
		||||
 | 
			
		||||
.PHONY:	build push
 | 
			
		||||
 | 
			
		||||
PREFIX = quay.io/fluentd_elasticsearch
 | 
			
		||||
IMAGE = elasticsearch
 | 
			
		||||
TAG = v7.16.2
 | 
			
		||||
 | 
			
		||||
build:
 | 
			
		||||
	docker build --tag ${PREFIX}/${IMAGE}:${TAG} .
 | 
			
		||||
	docker build --tag ${PREFIX}/${IMAGE}:latest .
 | 
			
		||||
 | 
			
		||||
push:
 | 
			
		||||
	docker push ${PREFIX}/${IMAGE}:${TAG}
 | 
			
		||||
	docker push ${PREFIX}/${IMAGE}:latest
 | 
			
		||||
@@ -1,11 +0,0 @@
 | 
			
		||||
cluster.name: kubernetes-logging
 | 
			
		||||
 | 
			
		||||
node.name: ${NODE_NAME}
 | 
			
		||||
node.master: ${NODE_MASTER}
 | 
			
		||||
node.data: ${NODE_DATA}
 | 
			
		||||
 | 
			
		||||
transport.profiles.default.port: ${TRANSPORT_PORT}
 | 
			
		||||
http.port: ${HTTP_PORT}
 | 
			
		||||
 | 
			
		||||
path.data: /data
 | 
			
		||||
 | 
			
		||||
@@ -1,11 +0,0 @@
 | 
			
		||||
status = error
 | 
			
		||||
 | 
			
		||||
appender.console.type = Console
 | 
			
		||||
appender.console.name = console
 | 
			
		||||
appender.console.layout.type = PatternLayout
 | 
			
		||||
appender.console.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] %marker%m%n
 | 
			
		||||
 | 
			
		||||
rootLogger.level = info
 | 
			
		||||
rootLogger.appenderRef.console.ref = console
 | 
			
		||||
rootLogger.action = debug
 | 
			
		||||
rootLogger.com.amazonaws = warn
 | 
			
		||||
@@ -1,157 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
Copyright 2017 The Kubernetes Authors.
 | 
			
		||||
 | 
			
		||||
Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
you may not use this file except in compliance with the License.
 | 
			
		||||
You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
See the License for the specific language governing permissions and
 | 
			
		||||
limitations under the License.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"flag"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"net"
 | 
			
		||||
	"os"
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	corev1 "k8s.io/api/core/v1"
 | 
			
		||||
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
			
		||||
	clientset "k8s.io/client-go/kubernetes"
 | 
			
		||||
	restclient "k8s.io/client-go/rest"
 | 
			
		||||
	"k8s.io/client-go/tools/clientcmd"
 | 
			
		||||
	clientapi "k8s.io/client-go/tools/clientcmd/api"
 | 
			
		||||
	"k8s.io/klog/v2"
 | 
			
		||||
	utilnet "k8s.io/utils/net"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func buildConfigFromEnvs(masterURL, kubeconfigPath string) (*restclient.Config, error) {
 | 
			
		||||
	if kubeconfigPath == "" && masterURL == "" {
 | 
			
		||||
		kubeconfig, err := restclient.InClusterConfig()
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return kubeconfig, nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return clientcmd.NewNonInteractiveDeferredLoadingClientConfig(
 | 
			
		||||
		&clientcmd.ClientConfigLoadingRules{ExplicitPath: kubeconfigPath},
 | 
			
		||||
		&clientcmd.ConfigOverrides{ClusterInfo: clientapi.Cluster{Server: masterURL}}).ClientConfig()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func flattenSubsets(subsets []corev1.EndpointSubset) []string {
 | 
			
		||||
	ips := []string{}
 | 
			
		||||
	for _, ss := range subsets {
 | 
			
		||||
		for _, addr := range ss.Addresses {
 | 
			
		||||
			if utilnet.IsIPv6String(addr.IP) {
 | 
			
		||||
				ips = append(ips, fmt.Sprintf(`"[%s]"`, addr.IP))
 | 
			
		||||
			} else {
 | 
			
		||||
				ips = append(ips, fmt.Sprintf(`"%s"`, addr.IP))
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return ips
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func getAdvertiseAddress() (string, error) {
 | 
			
		||||
	addrs, err := net.InterfaceAddrs()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return "", err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for _, addr := range addrs {
 | 
			
		||||
		if ipnet, ok := addr.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
 | 
			
		||||
			return ipnet.IP.String(), nil
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return "", fmt.Errorf("no non-loopback address is available")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	flag.Parse()
 | 
			
		||||
 | 
			
		||||
	klog.Info("Kubernetes Elasticsearch logging discovery")
 | 
			
		||||
 | 
			
		||||
	advertiseAddress, err := getAdvertiseAddress()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		klog.Fatalf("Failed to get valid advertise address: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
	fmt.Printf("network.host: \"%s\"\n\n", advertiseAddress)
 | 
			
		||||
 | 
			
		||||
	cc, err := buildConfigFromEnvs(os.Getenv("APISERVER_HOST"), os.Getenv("KUBE_CONFIG_FILE"))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		klog.Fatalf("Failed to make client: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
	client, err := clientset.NewForConfig(cc)
 | 
			
		||||
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		klog.Fatalf("Failed to make client: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
	namespace := metav1.NamespaceSystem
 | 
			
		||||
	envNamespace := os.Getenv("NAMESPACE")
 | 
			
		||||
	if envNamespace != "" {
 | 
			
		||||
		if _, err := client.CoreV1().Namespaces().Get(context.TODO(), envNamespace, metav1.GetOptions{}); err != nil {
 | 
			
		||||
			klog.Fatalf("%s namespace doesn't exist: %v", envNamespace, err)
 | 
			
		||||
		}
 | 
			
		||||
		namespace = envNamespace
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var elasticsearch *corev1.Service
 | 
			
		||||
	serviceName := os.Getenv("ELASTICSEARCH_SERVICE_NAME")
 | 
			
		||||
	if serviceName == "" {
 | 
			
		||||
		serviceName = "elasticsearch-logging"
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Look for endpoints associated with the Elasticsearch logging service.
 | 
			
		||||
	// First wait for the service to become available.
 | 
			
		||||
	for t := time.Now(); time.Since(t) < 5*time.Minute; time.Sleep(10 * time.Second) {
 | 
			
		||||
		elasticsearch, err = client.CoreV1().Services(namespace).Get(context.TODO(), serviceName, metav1.GetOptions{})
 | 
			
		||||
		if err == nil {
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	// If we did not find an elasticsearch logging service then log a warning
 | 
			
		||||
	// and return without adding any unicast hosts.
 | 
			
		||||
	if elasticsearch == nil {
 | 
			
		||||
		klog.Warningf("Failed to find the elasticsearch-logging service: %v", err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var endpoints *corev1.Endpoints
 | 
			
		||||
	addrs := []string{}
 | 
			
		||||
	// Wait for some endpoints.
 | 
			
		||||
	count, _ := strconv.Atoi(os.Getenv("MINIMUM_MASTER_NODES"))
 | 
			
		||||
	for t := time.Now(); time.Since(t) < 5*time.Minute; time.Sleep(10 * time.Second) {
 | 
			
		||||
		endpoints, err = client.CoreV1().Endpoints(namespace).Get(context.TODO(), serviceName, metav1.GetOptions{})
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
		addrs = flattenSubsets(endpoints.Subsets)
 | 
			
		||||
		klog.Infof("Found %s", addrs)
 | 
			
		||||
		if len(addrs) > 0 && len(addrs) >= count {
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	// If there was an error finding endpoints then log a warning and quit.
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		klog.Warningf("Error finding endpoints: %v", err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	klog.Infof("Endpoints = %s", addrs)
 | 
			
		||||
	fmt.Printf("discovery.seed_hosts: [%s]\n", strings.Join(addrs, ", "))
 | 
			
		||||
	fmt.Printf("cluster.initial_master_nodes: [%s]\n", strings.Join(addrs, ", "))
 | 
			
		||||
}
 | 
			
		||||
@@ -1,37 +0,0 @@
 | 
			
		||||
module fake/import/path
 | 
			
		||||
 | 
			
		||||
go 1.16
 | 
			
		||||
 | 
			
		||||
require (
 | 
			
		||||
	github.com/imdario/mergo v0.3.6 // indirect
 | 
			
		||||
	k8s.io/api v0.19.2
 | 
			
		||||
	k8s.io/apimachinery v0.19.2
 | 
			
		||||
	k8s.io/client-go v0.19.2
 | 
			
		||||
	k8s.io/klog/v2 v2.3.0
 | 
			
		||||
	k8s.io/utils v0.0.0-20200729134348-d5654de09c73
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
replace (
 | 
			
		||||
	k8s.io/api => k8s.io/api v0.19.2
 | 
			
		||||
	k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.19.2
 | 
			
		||||
	k8s.io/apimachinery => k8s.io/apimachinery v0.19.2
 | 
			
		||||
	k8s.io/apiserver => k8s.io/apiserver v0.19.2
 | 
			
		||||
	k8s.io/cli-runtime => k8s.io/cli-runtime v0.19.2
 | 
			
		||||
	k8s.io/client-go => k8s.io/client-go v0.19.2
 | 
			
		||||
	k8s.io/cloud-provider => k8s.io/cloud-provider v0.19.2
 | 
			
		||||
	k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.19.2
 | 
			
		||||
	k8s.io/code-generator => k8s.io/code-generator v0.19.2
 | 
			
		||||
	k8s.io/component-base => k8s.io/component-base v0.19.2
 | 
			
		||||
	k8s.io/cri-api => k8s.io/cri-api v0.19.2
 | 
			
		||||
	k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.19.2
 | 
			
		||||
	k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.19.2
 | 
			
		||||
	k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.19.2
 | 
			
		||||
	k8s.io/kube-proxy => k8s.io/kube-proxy v0.19.2
 | 
			
		||||
	k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.19.2
 | 
			
		||||
	k8s.io/kubectl => k8s.io/kubectl v0.19.2
 | 
			
		||||
	k8s.io/kubelet => k8s.io/kubelet v0.19.2
 | 
			
		||||
	k8s.io/kubernetes => k8s.io/kubernetes v1.18.0
 | 
			
		||||
	k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.19.2
 | 
			
		||||
	k8s.io/metrics => k8s.io/metrics v0.19.2
 | 
			
		||||
	k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.19.2
 | 
			
		||||
)
 | 
			
		||||
@@ -1,324 +0,0 @@
 | 
			
		||||
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
 | 
			
		||||
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
 | 
			
		||||
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
 | 
			
		||||
cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
 | 
			
		||||
cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
 | 
			
		||||
cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
 | 
			
		||||
cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
 | 
			
		||||
cloud.google.com/go v0.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw=
 | 
			
		||||
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
 | 
			
		||||
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
 | 
			
		||||
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
 | 
			
		||||
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
 | 
			
		||||
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
 | 
			
		||||
github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI=
 | 
			
		||||
github.com/Azure/go-autorest/autorest v0.9.6/go.mod h1:/FALq9T/kS7b5J5qsQ+RSTUdAmGFqi0vUdVNNx8q630=
 | 
			
		||||
github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0=
 | 
			
		||||
github.com/Azure/go-autorest/autorest/adal v0.8.2/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q=
 | 
			
		||||
github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA=
 | 
			
		||||
github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g=
 | 
			
		||||
github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
 | 
			
		||||
github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
 | 
			
		||||
github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM=
 | 
			
		||||
github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc=
 | 
			
		||||
github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk=
 | 
			
		||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
 | 
			
		||||
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
 | 
			
		||||
github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
 | 
			
		||||
github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
 | 
			
		||||
github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
 | 
			
		||||
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
 | 
			
		||||
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
 | 
			
		||||
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
 | 
			
		||||
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
 | 
			
		||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
 | 
			
		||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 | 
			
		||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 | 
			
		||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 | 
			
		||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
 | 
			
		||||
github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM=
 | 
			
		||||
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
 | 
			
		||||
github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
 | 
			
		||||
github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
 | 
			
		||||
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
 | 
			
		||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
 | 
			
		||||
github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
 | 
			
		||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
 | 
			
		||||
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
 | 
			
		||||
github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
 | 
			
		||||
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
 | 
			
		||||
github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
 | 
			
		||||
github.com/go-logr/logr v0.2.0 h1:QvGt2nLcHH0WK9orKa+ppBPAxREcH364nPUedEpK0TY=
 | 
			
		||||
github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
 | 
			
		||||
github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0=
 | 
			
		||||
github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg=
 | 
			
		||||
github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc=
 | 
			
		||||
github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I=
 | 
			
		||||
github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls=
 | 
			
		||||
github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
 | 
			
		||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
 | 
			
		||||
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
 | 
			
		||||
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
 | 
			
		||||
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
 | 
			
		||||
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
 | 
			
		||||
github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
 | 
			
		||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 | 
			
		||||
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 | 
			
		||||
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 | 
			
		||||
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
 | 
			
		||||
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
 | 
			
		||||
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
 | 
			
		||||
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
 | 
			
		||||
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
 | 
			
		||||
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
 | 
			
		||||
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
 | 
			
		||||
github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0=
 | 
			
		||||
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
 | 
			
		||||
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
 | 
			
		||||
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
 | 
			
		||||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
 | 
			
		||||
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
 | 
			
		||||
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
 | 
			
		||||
github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=
 | 
			
		||||
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 | 
			
		||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 | 
			
		||||
github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g=
 | 
			
		||||
github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 | 
			
		||||
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
 | 
			
		||||
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
 | 
			
		||||
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
 | 
			
		||||
github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
 | 
			
		||||
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
 | 
			
		||||
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 | 
			
		||||
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
 | 
			
		||||
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
 | 
			
		||||
github.com/googleapis/gnostic v0.4.1 h1:DLJCy1n/vrD4HPjOvYcT8aYQXpPIzoRZONaYwyycI+I=
 | 
			
		||||
github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg=
 | 
			
		||||
github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
 | 
			
		||||
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
 | 
			
		||||
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
 | 
			
		||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
 | 
			
		||||
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
 | 
			
		||||
github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
 | 
			
		||||
github.com/imdario/mergo v0.3.6 h1:xTNEAn+kxVO7dTZGu0CegyqKZmoWFI0rF8UxjlB2d28=
 | 
			
		||||
github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
 | 
			
		||||
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
 | 
			
		||||
github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
 | 
			
		||||
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
 | 
			
		||||
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
 | 
			
		||||
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
 | 
			
		||||
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
 | 
			
		||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
 | 
			
		||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
 | 
			
		||||
github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs=
 | 
			
		||||
github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
 | 
			
		||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
 | 
			
		||||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
 | 
			
		||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 | 
			
		||||
github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
 | 
			
		||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
 | 
			
		||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
 | 
			
		||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
 | 
			
		||||
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
 | 
			
		||||
github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
 | 
			
		||||
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
 | 
			
		||||
github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
 | 
			
		||||
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
 | 
			
		||||
github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 | 
			
		||||
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 | 
			
		||||
github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 | 
			
		||||
github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
 | 
			
		||||
github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
 | 
			
		||||
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
 | 
			
		||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 | 
			
		||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 | 
			
		||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 | 
			
		||||
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
 | 
			
		||||
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
 | 
			
		||||
github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
 | 
			
		||||
github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 | 
			
		||||
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
 | 
			
		||||
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
 | 
			
		||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 | 
			
		||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
 | 
			
		||||
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
 | 
			
		||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
 | 
			
		||||
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
 | 
			
		||||
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
 | 
			
		||||
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
			
		||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
			
		||||
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
			
		||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 | 
			
		||||
golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
 | 
			
		||||
golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
 | 
			
		||||
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
 | 
			
		||||
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
 | 
			
		||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
 | 
			
		||||
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
 | 
			
		||||
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
 | 
			
		||||
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
 | 
			
		||||
golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
 | 
			
		||||
golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
 | 
			
		||||
golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
 | 
			
		||||
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
 | 
			
		||||
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
 | 
			
		||||
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
 | 
			
		||||
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
 | 
			
		||||
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
 | 
			
		||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
			
		||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
			
		||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
			
		||||
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
			
		||||
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
			
		||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 | 
			
		||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 | 
			
		||||
golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 | 
			
		||||
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 | 
			
		||||
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
 | 
			
		||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
			
		||||
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
			
		||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
			
		||||
golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU=
 | 
			
		||||
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 | 
			
		||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 | 
			
		||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
			
		||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
			
		||||
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6 h1:pE8b58s1HRDMi8RDc79m0HISf9D4TzseP40cEA6IGfs=
 | 
			
		||||
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
			
		||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
			
		||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
			
		||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
			
		||||
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
			
		||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
			
		||||
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
			
		||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
			
		||||
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
			
		||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
			
		||||
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4 h1:5/PjkGUjvEU5Gl6BxmvKRPpqo2uNMv4rcHBMwzk/st8=
 | 
			
		||||
golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 | 
			
		||||
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 | 
			
		||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
 | 
			
		||||
golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
 | 
			
		||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 | 
			
		||||
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c h1:fqgJT0MGcGpPgpWU7VRdRjuArfcOvC4AoJmILihzhDg=
 | 
			
		||||
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 | 
			
		||||
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 | 
			
		||||
golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs=
 | 
			
		||||
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 | 
			
		||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 | 
			
		||||
golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 | 
			
		||||
golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 | 
			
		||||
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 | 
			
		||||
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
 | 
			
		||||
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 | 
			
		||||
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 | 
			
		||||
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 | 
			
		||||
golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
 | 
			
		||||
golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
 | 
			
		||||
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
 | 
			
		||||
golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
 | 
			
		||||
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
 | 
			
		||||
golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
 | 
			
		||||
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
			
		||||
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
			
		||||
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
			
		||||
golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
			
		||||
golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
 | 
			
		||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 | 
			
		||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 | 
			
		||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
 | 
			
		||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 | 
			
		||||
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
 | 
			
		||||
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
 | 
			
		||||
google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
 | 
			
		||||
google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
 | 
			
		||||
google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
 | 
			
		||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
 | 
			
		||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 | 
			
		||||
google.golang.org/appengine v1.5.0 h1:KxkO13IPW4Lslp2bz+KHP2E3gtFlrIGNThxkZQ3g+4c=
 | 
			
		||||
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 | 
			
		||||
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
 | 
			
		||||
google.golang.org/appengine v1.6.5 h1:tycE03LOZYQNhDpS27tcQdAzLCVMaj7QT2SXxebnpCM=
 | 
			
		||||
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
 | 
			
		||||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
 | 
			
		||||
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
 | 
			
		||||
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
 | 
			
		||||
google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
 | 
			
		||||
google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
 | 
			
		||||
google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
 | 
			
		||||
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
 | 
			
		||||
google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
 | 
			
		||||
google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
 | 
			
		||||
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
 | 
			
		||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
 | 
			
		||||
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
 | 
			
		||||
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
 | 
			
		||||
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
 | 
			
		||||
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
 | 
			
		||||
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
 | 
			
		||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
 | 
			
		||||
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
 | 
			
		||||
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
 | 
			
		||||
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
 | 
			
		||||
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
 | 
			
		||||
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
 | 
			
		||||
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
 | 
			
		||||
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
 | 
			
		||||
google.golang.org/protobuf v1.24.0 h1:UhZDfRO8JRQru4/+LlLE0BRKGF8L+PICnvYZmx/fEGA=
 | 
			
		||||
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
 | 
			
		||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 | 
			
		||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 | 
			
		||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
 | 
			
		||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 | 
			
		||||
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
 | 
			
		||||
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
 | 
			
		||||
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
 | 
			
		||||
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
 | 
			
		||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
 | 
			
		||||
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 | 
			
		||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 | 
			
		||||
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
 | 
			
		||||
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 | 
			
		||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 | 
			
		||||
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 | 
			
		||||
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 | 
			
		||||
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 | 
			
		||||
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
 | 
			
		||||
k8s.io/api v0.19.2 h1:q+/krnHWKsL7OBZg/rxnycsl9569Pud76UJ77MvKXms=
 | 
			
		||||
k8s.io/api v0.19.2/go.mod h1:IQpK0zFQ1xc5iNIQPqzgoOwuFugaYHK4iCknlAQP9nI=
 | 
			
		||||
k8s.io/apimachinery v0.19.2 h1:5Gy9vQpAGTKHPVOh5c4plE274X8D/6cuEiTO2zve7tc=
 | 
			
		||||
k8s.io/apimachinery v0.19.2/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA=
 | 
			
		||||
k8s.io/client-go v0.19.2 h1:gMJuU3xJZs86L1oQ99R4EViAADUPMHHtS9jFshasHSc=
 | 
			
		||||
k8s.io/client-go v0.19.2/go.mod h1:S5wPhCqyDNAlzM9CnEdgTGV4OqhsW3jGO1UM1epwfJA=
 | 
			
		||||
k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
 | 
			
		||||
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
 | 
			
		||||
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
 | 
			
		||||
k8s.io/klog/v2 v2.3.0 h1:WmkrnW7fdrm0/DMClc+HIxtftvxVIPAhlVwMQo5yLco=
 | 
			
		||||
k8s.io/klog/v2 v2.3.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
 | 
			
		||||
k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o=
 | 
			
		||||
k8s.io/utils v0.0.0-20200729134348-d5654de09c73 h1:uJmqzgNWG7XyClnU/mLPBWwfKKF1K8Hf8whTseBgJcg=
 | 
			
		||||
k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
 | 
			
		||||
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
 | 
			
		||||
sigs.k8s.io/structured-merge-diff/v4 v4.0.1 h1:YXTMot5Qz/X1iBRJhAt+vI+HVttY0WkSqqhKxQ0xVbA=
 | 
			
		||||
sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
 | 
			
		||||
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
 | 
			
		||||
sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q=
 | 
			
		||||
sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
 | 
			
		||||
@@ -1,29 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
# Copyright 2017 The Kubernetes Authors.
 | 
			
		||||
#
 | 
			
		||||
# Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
# you may not use this file except in compliance with the License.
 | 
			
		||||
# You may obtain a copy of the License at
 | 
			
		||||
#
 | 
			
		||||
#     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
#
 | 
			
		||||
# Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
# distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
# See the License for the specific language governing permissions and
 | 
			
		||||
# limitations under the License.
 | 
			
		||||
 | 
			
		||||
set -ex
 | 
			
		||||
 | 
			
		||||
export NODE_NAME=${NODE_NAME:-${HOSTNAME}}
 | 
			
		||||
export NODE_MASTER=${NODE_MASTER:-true}
 | 
			
		||||
export NODE_DATA=${NODE_DATA:-true}
 | 
			
		||||
export HTTP_PORT=${HTTP_PORT:-9200}
 | 
			
		||||
export TRANSPORT_PORT=${TRANSPORT_PORT:-9300}
 | 
			
		||||
export MINIMUM_MASTER_NODES=${MINIMUM_MASTER_NODES:-2}
 | 
			
		||||
 | 
			
		||||
chown -R elasticsearch:elasticsearch /data
 | 
			
		||||
 | 
			
		||||
./bin/elasticsearch_logging_discovery >> ./config/elasticsearch.yml
 | 
			
		||||
exec su elasticsearch -c /usr/local/bin/docker-entrypoint.sh
 | 
			
		||||
@@ -1,26 +0,0 @@
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
kind: Service
 | 
			
		||||
metadata:
 | 
			
		||||
  name: elasticsearch-logging
 | 
			
		||||
  namespace: logging
 | 
			
		||||
  labels:
 | 
			
		||||
    k8s-app: elasticsearch-logging
 | 
			
		||||
    kubernetes.io/cluster-service: "true"
 | 
			
		||||
    addonmanager.kubernetes.io/mode: Reconcile
 | 
			
		||||
    kubernetes.io/name: "Elasticsearch"
 | 
			
		||||
spec:
 | 
			
		||||
  clusterIP: None
 | 
			
		||||
  ports:
 | 
			
		||||
    - name: db
 | 
			
		||||
      port: 9200
 | 
			
		||||
      protocol: TCP
 | 
			
		||||
      targetPort: 9200
 | 
			
		||||
    - name: transport
 | 
			
		||||
      port: 9300
 | 
			
		||||
      protocol: TCP
 | 
			
		||||
      targetPort: 9300
 | 
			
		||||
  publishNotReadyAddresses: true
 | 
			
		||||
  selector:
 | 
			
		||||
    k8s-app: elasticsearch-logging
 | 
			
		||||
  sessionAffinity: None
 | 
			
		||||
  type: ClusterIP
 | 
			
		||||
@@ -1,119 +0,0 @@
 | 
			
		||||
# RBAC authn and authz
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
kind: ServiceAccount
 | 
			
		||||
metadata:
 | 
			
		||||
  name: elasticsearch-logging
 | 
			
		||||
  namespace: logging
 | 
			
		||||
  labels:
 | 
			
		||||
    k8s-app: elasticsearch-logging
 | 
			
		||||
    addonmanager.kubernetes.io/mode: Reconcile
 | 
			
		||||
---
 | 
			
		||||
kind: ClusterRole
 | 
			
		||||
apiVersion: rbac.authorization.k8s.io/v1
 | 
			
		||||
metadata:
 | 
			
		||||
  name: elasticsearch-logging
 | 
			
		||||
  labels:
 | 
			
		||||
    k8s-app: elasticsearch-logging
 | 
			
		||||
    addonmanager.kubernetes.io/mode: Reconcile
 | 
			
		||||
rules:
 | 
			
		||||
  - apiGroups:
 | 
			
		||||
      - ""
 | 
			
		||||
    resources:
 | 
			
		||||
      - "services"
 | 
			
		||||
      - "namespaces"
 | 
			
		||||
      - "endpoints"
 | 
			
		||||
    verbs:
 | 
			
		||||
      - "get"
 | 
			
		||||
---
 | 
			
		||||
kind: ClusterRoleBinding
 | 
			
		||||
apiVersion: rbac.authorization.k8s.io/v1
 | 
			
		||||
metadata:
 | 
			
		||||
  name: elasticsearch-logging
 | 
			
		||||
  labels:
 | 
			
		||||
    k8s-app: elasticsearch-logging
 | 
			
		||||
    addonmanager.kubernetes.io/mode: Reconcile
 | 
			
		||||
subjects:
 | 
			
		||||
  - kind: ServiceAccount
 | 
			
		||||
    name: elasticsearch-logging
 | 
			
		||||
    namespace: logging
 | 
			
		||||
    apiGroup: ""
 | 
			
		||||
roleRef:
 | 
			
		||||
  kind: ClusterRole
 | 
			
		||||
  name: elasticsearch-logging
 | 
			
		||||
  apiGroup: ""
 | 
			
		||||
---
 | 
			
		||||
# Elasticsearch deployment itself
 | 
			
		||||
apiVersion: apps/v1
 | 
			
		||||
kind: StatefulSet
 | 
			
		||||
metadata:
 | 
			
		||||
  name: elasticsearch-logging
 | 
			
		||||
  namespace: logging
 | 
			
		||||
  labels:
 | 
			
		||||
    k8s-app: elasticsearch-logging
 | 
			
		||||
    version: v7.16.2
 | 
			
		||||
    addonmanager.kubernetes.io/mode: Reconcile
 | 
			
		||||
spec:
 | 
			
		||||
  serviceName: elasticsearch-logging
 | 
			
		||||
  replicas: 2
 | 
			
		||||
  selector:
 | 
			
		||||
    matchLabels:
 | 
			
		||||
      k8s-app: elasticsearch-logging
 | 
			
		||||
      version: v7.16.2
 | 
			
		||||
  template:
 | 
			
		||||
    metadata:
 | 
			
		||||
      labels:
 | 
			
		||||
        k8s-app: elasticsearch-logging
 | 
			
		||||
        version: v7.16.2
 | 
			
		||||
    spec:
 | 
			
		||||
      serviceAccountName: elasticsearch-logging
 | 
			
		||||
      containers:
 | 
			
		||||
        - image: quay.io/fluentd_elasticsearch/elasticsearch:v7.16.2
 | 
			
		||||
          name: elasticsearch-logging
 | 
			
		||||
          imagePullPolicy: Always
 | 
			
		||||
          resources:
 | 
			
		||||
            # need more cpu upon initialization, therefore burstable class
 | 
			
		||||
            limits:
 | 
			
		||||
              cpu: 1000m
 | 
			
		||||
              memory: 3Gi
 | 
			
		||||
            requests:
 | 
			
		||||
              cpu: 100m
 | 
			
		||||
              memory: 3Gi
 | 
			
		||||
          ports:
 | 
			
		||||
            - containerPort: 9200
 | 
			
		||||
              name: db
 | 
			
		||||
              protocol: TCP
 | 
			
		||||
            - containerPort: 9300
 | 
			
		||||
              name: transport
 | 
			
		||||
              protocol: TCP
 | 
			
		||||
          livenessProbe:
 | 
			
		||||
            tcpSocket:
 | 
			
		||||
              port: transport
 | 
			
		||||
            initialDelaySeconds: 5
 | 
			
		||||
            timeoutSeconds: 10
 | 
			
		||||
          readinessProbe:
 | 
			
		||||
            tcpSocket:
 | 
			
		||||
              port: transport
 | 
			
		||||
            initialDelaySeconds: 5
 | 
			
		||||
            timeoutSeconds: 10
 | 
			
		||||
          volumeMounts:
 | 
			
		||||
            - name: elasticsearch-logging
 | 
			
		||||
              mountPath: /data
 | 
			
		||||
          env:
 | 
			
		||||
            - name: "NAMESPACE"
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                fieldRef:
 | 
			
		||||
                  fieldPath: metadata.namespace
 | 
			
		||||
            - name: "MINIMUM_MASTER_NODES"
 | 
			
		||||
              value: "1"
 | 
			
		||||
      volumes:
 | 
			
		||||
        - name: elasticsearch-logging
 | 
			
		||||
          emptyDir: {}
 | 
			
		||||
      # Elasticsearch requires vm.max_map_count to be at least 262144.
 | 
			
		||||
      # If your OS already sets up this number to a higher value, feel free
 | 
			
		||||
      # to remove this init container.
 | 
			
		||||
      initContainers:
 | 
			
		||||
        - image: alpine:3.6
 | 
			
		||||
          command: ["/sbin/sysctl", "-w", "vm.max_map_count=262144"]
 | 
			
		||||
          name: elasticsearch-logging-init
 | 
			
		||||
          securityContext:
 | 
			
		||||
            privileged: true
 | 
			
		||||
@@ -1,479 +0,0 @@
 | 
			
		||||
kind: ConfigMap
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
metadata:
 | 
			
		||||
  name: fluentd-es-config-v0.2.1
 | 
			
		||||
  namespace: logging
 | 
			
		||||
  labels:
 | 
			
		||||
    addonmanager.kubernetes.io/mode: Reconcile
 | 
			
		||||
data:
 | 
			
		||||
  system.conf: |-
 | 
			
		||||
    <system>
 | 
			
		||||
      root_dir /tmp/fluentd-buffers/
 | 
			
		||||
    </system>
 | 
			
		||||
 | 
			
		||||
  containers.input.conf: |-
 | 
			
		||||
    # This configuration file for Fluentd / td-agent is used
 | 
			
		||||
    # to watch changes to Docker log files. The kubelet creates symlinks that
 | 
			
		||||
    # capture the pod name, namespace, container name & Docker container ID
 | 
			
		||||
    # to the docker logs for pods in the /var/log/containers directory on the host.
 | 
			
		||||
    # If running this fluentd configuration in a Docker container, the /var/log
 | 
			
		||||
    # directory should be mounted in the container.
 | 
			
		||||
    #
 | 
			
		||||
    # These logs are then submitted to Elasticsearch which assumes the
 | 
			
		||||
    # installation of the fluent-plugin-elasticsearch & the
 | 
			
		||||
    # fluent-plugin-kubernetes_metadata_filter plugins.
 | 
			
		||||
    # See https://github.com/uken/fluent-plugin-elasticsearch &
 | 
			
		||||
    # https://github.com/fabric8io/fluent-plugin-kubernetes_metadata_filter for
 | 
			
		||||
    # more information about the plugins.
 | 
			
		||||
    #
 | 
			
		||||
    # Example
 | 
			
		||||
    # =======
 | 
			
		||||
    # A line in the Docker log file might look like this JSON:
 | 
			
		||||
    #
 | 
			
		||||
    # {"log":"2014/09/25 21:15:03 Got request with path wombat\n",
 | 
			
		||||
    #  "stream":"stderr",
 | 
			
		||||
    #   "time":"2014-09-25T21:15:03.499185026Z"}
 | 
			
		||||
    #
 | 
			
		||||
    # The time_format specification below makes sure we properly
 | 
			
		||||
    # parse the time format produced by Docker. This will be
 | 
			
		||||
    # submitted to Elasticsearch and should appear like:
 | 
			
		||||
    # $ curl 'http://elasticsearch-logging:9200/_search?pretty'
 | 
			
		||||
    # ...
 | 
			
		||||
    # {
 | 
			
		||||
    #      "_index" : "logstash-2014.09.25",
 | 
			
		||||
    #      "_type" : "fluentd",
 | 
			
		||||
    #      "_id" : "VBrbor2QTuGpsQyTCdfzqA",
 | 
			
		||||
    #      "_score" : 1.0,
 | 
			
		||||
    #      "_source":{"log":"2014/09/25 22:45:50 Got request with path wombat\n",
 | 
			
		||||
    #                 "stream":"stderr","tag":"docker.container.all",
 | 
			
		||||
    #                 "@timestamp":"2014-09-25T22:45:50+00:00"}
 | 
			
		||||
    #    },
 | 
			
		||||
    # ...
 | 
			
		||||
    #
 | 
			
		||||
    # The Kubernetes fluentd plugin is used to write the Kubernetes metadata to the log
 | 
			
		||||
    # record & add labels to the log record if properly configured. This enables users
 | 
			
		||||
    # to filter & search logs on any metadata.
 | 
			
		||||
    # For example a Docker container's logs might be in the directory:
 | 
			
		||||
    #
 | 
			
		||||
    #  /var/lib/docker/containers/997599971ee6366d4a5920d25b79286ad45ff37a74494f262e3bc98d909d0a7b
 | 
			
		||||
    #
 | 
			
		||||
    # and in the file:
 | 
			
		||||
    #
 | 
			
		||||
    #  997599971ee6366d4a5920d25b79286ad45ff37a74494f262e3bc98d909d0a7b-json.log
 | 
			
		||||
    #
 | 
			
		||||
    # where 997599971ee6... is the Docker ID of the running container.
 | 
			
		||||
    # The Kubernetes kubelet makes a symbolic link to this file on the host machine
 | 
			
		||||
    # in the /var/log/containers directory which includes the pod name and the Kubernetes
 | 
			
		||||
    # container name:
 | 
			
		||||
    #
 | 
			
		||||
    #    synthetic-logger-0.25lps-pod_default_synth-lgr-997599971ee6366d4a5920d25b79286ad45ff37a74494f262e3bc98d909d0a7b.log
 | 
			
		||||
    #    ->
 | 
			
		||||
    #    /var/lib/docker/containers/997599971ee6366d4a5920d25b79286ad45ff37a74494f262e3bc98d909d0a7b/997599971ee6366d4a5920d25b79286ad45ff37a74494f262e3bc98d909d0a7b-json.log
 | 
			
		||||
    #
 | 
			
		||||
    # The /var/log directory on the host is mapped to the /var/log directory in the container
 | 
			
		||||
    # running this instance of Fluentd and we end up collecting the file:
 | 
			
		||||
    #
 | 
			
		||||
    #   /var/log/containers/synthetic-logger-0.25lps-pod_default_synth-lgr-997599971ee6366d4a5920d25b79286ad45ff37a74494f262e3bc98d909d0a7b.log
 | 
			
		||||
    #
 | 
			
		||||
    # This results in the tag:
 | 
			
		||||
    #
 | 
			
		||||
    #  var.log.containers.synthetic-logger-0.25lps-pod_default_synth-lgr-997599971ee6366d4a5920d25b79286ad45ff37a74494f262e3bc98d909d0a7b.log
 | 
			
		||||
    #
 | 
			
		||||
    # The Kubernetes fluentd plugin is used to extract the namespace, pod name & container name
 | 
			
		||||
    # which are added to the log message as a kubernetes field object & the Docker container ID
 | 
			
		||||
    # is also added under the docker field object.
 | 
			
		||||
    # The final tag is:
 | 
			
		||||
    #
 | 
			
		||||
    #   kubernetes.var.log.containers.synthetic-logger-0.25lps-pod_default_synth-lgr-997599971ee6366d4a5920d25b79286ad45ff37a74494f262e3bc98d909d0a7b.log
 | 
			
		||||
    #
 | 
			
		||||
    # And the final log record look like:
 | 
			
		||||
    #
 | 
			
		||||
    # {
 | 
			
		||||
    #   "log":"2014/09/25 21:15:03 Got request with path wombat\n",
 | 
			
		||||
    #   "stream":"stderr",
 | 
			
		||||
    #   "time":"2014-09-25T21:15:03.499185026Z",
 | 
			
		||||
    #   "kubernetes": {
 | 
			
		||||
    #     "namespace": "default",
 | 
			
		||||
    #     "pod_name": "synthetic-logger-0.25lps-pod",
 | 
			
		||||
    #     "container_name": "synth-lgr"
 | 
			
		||||
    #   },
 | 
			
		||||
    #   "docker": {
 | 
			
		||||
    #     "container_id": "997599971ee6366d4a5920d25b79286ad45ff37a74494f262e3bc98d909d0a7b"
 | 
			
		||||
    #   }
 | 
			
		||||
    # }
 | 
			
		||||
    #
 | 
			
		||||
    # This makes it easier for users to search for logs by pod name or by
 | 
			
		||||
    # the name of the Kubernetes container regardless of how many times the
 | 
			
		||||
    # Kubernetes pod has been restarted (resulting in a several Docker container IDs).
 | 
			
		||||
 | 
			
		||||
    # Json Log Example:
 | 
			
		||||
    # {"log":"[info:2016-02-16T16:04:05.930-08:00] Some log text here\n","stream":"stdout","time":"2016-02-17T00:04:05.931087621Z"}
 | 
			
		||||
    # CRI Log Example:
 | 
			
		||||
    # 2016-02-17T00:04:05.931087621Z stdout F [info:2016-02-16T16:04:05.930-08:00] Some log text here
 | 
			
		||||
    <source>
 | 
			
		||||
      @id fluentd-containers.log
 | 
			
		||||
      @type tail
 | 
			
		||||
      path /var/log/containers/*.log
 | 
			
		||||
      pos_file /var/log/es-containers.log.pos
 | 
			
		||||
      tag raw.kubernetes.*
 | 
			
		||||
      read_from_head true
 | 
			
		||||
      <parse>
 | 
			
		||||
        @type multi_format
 | 
			
		||||
        <pattern>
 | 
			
		||||
          format json
 | 
			
		||||
          time_key time
 | 
			
		||||
          time_format %Y-%m-%dT%H:%M:%S.%NZ
 | 
			
		||||
        </pattern>
 | 
			
		||||
        <pattern>
 | 
			
		||||
          format /^(?<time>.+) (?<stream>stdout|stderr) [^ ]* (?<log>.*)$/
 | 
			
		||||
          time_format %Y-%m-%dT%H:%M:%S.%N%:z
 | 
			
		||||
        </pattern>
 | 
			
		||||
      </parse>
 | 
			
		||||
    </source>
 | 
			
		||||
 | 
			
		||||
    # Detect exceptions in the log output and forward them as one log entry.
 | 
			
		||||
    <match raw.kubernetes.**>
 | 
			
		||||
      @id raw.kubernetes
 | 
			
		||||
      @type detect_exceptions
 | 
			
		||||
      remove_tag_prefix raw
 | 
			
		||||
      message log
 | 
			
		||||
      stream stream
 | 
			
		||||
      multiline_flush_interval 5
 | 
			
		||||
      max_bytes 500000
 | 
			
		||||
      max_lines 1000
 | 
			
		||||
    </match>
 | 
			
		||||
 | 
			
		||||
    # Concatenate multi-line logs
 | 
			
		||||
    <filter **>
 | 
			
		||||
      @id filter_concat
 | 
			
		||||
      @type concat
 | 
			
		||||
      key message
 | 
			
		||||
      multiline_end_regexp /\n$/
 | 
			
		||||
      separator ""
 | 
			
		||||
    </filter>
 | 
			
		||||
 | 
			
		||||
    # Enriches records with Kubernetes metadata
 | 
			
		||||
    <filter kubernetes.**>
 | 
			
		||||
      @id filter_kubernetes_metadata
 | 
			
		||||
      @type kubernetes_metadata
 | 
			
		||||
    </filter>
 | 
			
		||||
 | 
			
		||||
    # Fixes json fields in Elasticsearch
 | 
			
		||||
    <filter kubernetes.**>
 | 
			
		||||
      @id filter_parser
 | 
			
		||||
      @type parser
 | 
			
		||||
      key_name log
 | 
			
		||||
      reserve_data true
 | 
			
		||||
      remove_key_name_field true
 | 
			
		||||
      <parse>
 | 
			
		||||
        @type multi_format
 | 
			
		||||
        <pattern>
 | 
			
		||||
          format json
 | 
			
		||||
        </pattern>
 | 
			
		||||
        <pattern>
 | 
			
		||||
          format none
 | 
			
		||||
        </pattern>
 | 
			
		||||
      </parse>
 | 
			
		||||
    </filter>
 | 
			
		||||
 | 
			
		||||
  system.input.conf: |-
 | 
			
		||||
    # Example:
 | 
			
		||||
    # 2015-12-21 23:17:22,066 [salt.state       ][INFO    ] Completed state [net.ipv4.ip_forward] at time 23:17:22.066081
 | 
			
		||||
    <source>
 | 
			
		||||
      @id minion
 | 
			
		||||
      @type tail
 | 
			
		||||
      format /^(?<time>[^ ]* [^ ,]*)[^\[]*\[[^\]]*\]\[(?<severity>[^ \]]*) *\] (?<message>.*)$/
 | 
			
		||||
      time_format %Y-%m-%d %H:%M:%S
 | 
			
		||||
      path /var/log/salt/minion
 | 
			
		||||
      pos_file /var/log/salt.pos
 | 
			
		||||
      tag salt
 | 
			
		||||
    </source>
 | 
			
		||||
 | 
			
		||||
    # Example:
 | 
			
		||||
    # Dec 21 23:17:22 gke-foo-1-1-4b5cbd14-node-4eoj startupscript: Finished running startup script /var/run/google.startup.script
 | 
			
		||||
    <source>
 | 
			
		||||
      @id startupscript.log
 | 
			
		||||
      @type tail
 | 
			
		||||
      format syslog
 | 
			
		||||
      path /var/log/startupscript.log
 | 
			
		||||
      pos_file /var/log/es-startupscript.log.pos
 | 
			
		||||
      tag startupscript
 | 
			
		||||
    </source>
 | 
			
		||||
 | 
			
		||||
    # Examples:
 | 
			
		||||
    # time="2016-02-04T06:51:03.053580605Z" level=info msg="GET /containers/json"
 | 
			
		||||
    # time="2016-02-04T07:53:57.505612354Z" level=error msg="HTTP Error" err="No such image: -f" statusCode=404
 | 
			
		||||
    # TODO(random-liu): Remove this after cri container runtime rolls out.
 | 
			
		||||
    <source>
 | 
			
		||||
      @id docker.log
 | 
			
		||||
      @type tail
 | 
			
		||||
      format /^time="(?<time>[^"]*)" level=(?<severity>[^ ]*) msg="(?<message>[^"]*)"( err="(?<error>[^"]*)")?( statusCode=($<status_code>\d+))?/
 | 
			
		||||
      path /var/log/docker.log
 | 
			
		||||
      pos_file /var/log/es-docker.log.pos
 | 
			
		||||
      tag docker
 | 
			
		||||
    </source>
 | 
			
		||||
 | 
			
		||||
    # Example:
 | 
			
		||||
    # 2016/02/04 06:52:38 filePurge: successfully removed file /var/etcd/data/member/wal/00000000000006d0-00000000010a23d1.wal
 | 
			
		||||
    <source>
 | 
			
		||||
      @id etcd.log
 | 
			
		||||
      @type tail
 | 
			
		||||
      # Not parsing this, because it doesn't have anything particularly useful to
 | 
			
		||||
      # parse out of it (like severities).
 | 
			
		||||
      format none
 | 
			
		||||
      path /var/log/etcd.log
 | 
			
		||||
      pos_file /var/log/es-etcd.log.pos
 | 
			
		||||
      tag etcd
 | 
			
		||||
    </source>
 | 
			
		||||
 | 
			
		||||
    # Multi-line parsing is required for all the kube logs because very large log
 | 
			
		||||
    # statements, such as those that include entire object bodies, get split into
 | 
			
		||||
    # multiple lines by glog.
 | 
			
		||||
 | 
			
		||||
    # Example:
 | 
			
		||||
    # I0204 07:32:30.020537    3368 server.go:1048] POST /stats/container/: (13.972191ms) 200 [[Go-http-client/1.1] 10.244.1.3:40537]
 | 
			
		||||
    <source>
 | 
			
		||||
      @id kubelet.log
 | 
			
		||||
      @type tail
 | 
			
		||||
      format multiline
 | 
			
		||||
      multiline_flush_interval 5s
 | 
			
		||||
      format_firstline /^\w\d{4}/
 | 
			
		||||
      format1 /^(?<severity>\w)(?<time>\d{4} [^\s]*)\s+(?<pid>\d+)\s+(?<source>[^ \]]+)\] (?<message>.*)/
 | 
			
		||||
      time_format %m%d %H:%M:%S.%N
 | 
			
		||||
      path /var/log/kubelet.log
 | 
			
		||||
      pos_file /var/log/es-kubelet.log.pos
 | 
			
		||||
      tag kubelet
 | 
			
		||||
    </source>
 | 
			
		||||
 | 
			
		||||
    # Example:
 | 
			
		||||
    # I1118 21:26:53.975789       6 proxier.go:1096] Port "nodePort for kube-system/default-http-backend:http" (:31429/tcp) was open before and is still needed
 | 
			
		||||
    <source>
 | 
			
		||||
      @id kube-proxy.log
 | 
			
		||||
      @type tail
 | 
			
		||||
      format multiline
 | 
			
		||||
      multiline_flush_interval 5s
 | 
			
		||||
      format_firstline /^\w\d{4}/
 | 
			
		||||
      format1 /^(?<severity>\w)(?<time>\d{4} [^\s]*)\s+(?<pid>\d+)\s+(?<source>[^ \]]+)\] (?<message>.*)/
 | 
			
		||||
      time_format %m%d %H:%M:%S.%N
 | 
			
		||||
      path /var/log/kube-proxy.log
 | 
			
		||||
      pos_file /var/log/es-kube-proxy.log.pos
 | 
			
		||||
      tag kube-proxy
 | 
			
		||||
    </source>
 | 
			
		||||
 | 
			
		||||
    # Example:
 | 
			
		||||
    # I0204 07:00:19.604280       5 handlers.go:131] GET /api/v1/nodes: (1.624207ms) 200 [[kube-controller-manager/v1.1.3 (linux/amd64) kubernetes/6a81b50] 127.0.0.1:38266]
 | 
			
		||||
    <source>
 | 
			
		||||
      @id kube-apiserver.log
 | 
			
		||||
      @type tail
 | 
			
		||||
      format multiline
 | 
			
		||||
      multiline_flush_interval 5s
 | 
			
		||||
      format_firstline /^\w\d{4}/
 | 
			
		||||
      format1 /^(?<severity>\w)(?<time>\d{4} [^\s]*)\s+(?<pid>\d+)\s+(?<source>[^ \]]+)\] (?<message>.*)/
 | 
			
		||||
      time_format %m%d %H:%M:%S.%N
 | 
			
		||||
      path /var/log/kube-apiserver.log
 | 
			
		||||
      pos_file /var/log/es-kube-apiserver.log.pos
 | 
			
		||||
      tag kube-apiserver
 | 
			
		||||
    </source>
 | 
			
		||||
 | 
			
		||||
    # Example:
 | 
			
		||||
    # I0204 06:55:31.872680       5 servicecontroller.go:277] LB already exists and doesn't need update for service kube-system/kube-ui
 | 
			
		||||
    <source>
 | 
			
		||||
      @id kube-controller-manager.log
 | 
			
		||||
      @type tail
 | 
			
		||||
      format multiline
 | 
			
		||||
      multiline_flush_interval 5s
 | 
			
		||||
      format_firstline /^\w\d{4}/
 | 
			
		||||
      format1 /^(?<severity>\w)(?<time>\d{4} [^\s]*)\s+(?<pid>\d+)\s+(?<source>[^ \]]+)\] (?<message>.*)/
 | 
			
		||||
      time_format %m%d %H:%M:%S.%N
 | 
			
		||||
      path /var/log/kube-controller-manager.log
 | 
			
		||||
      pos_file /var/log/es-kube-controller-manager.log.pos
 | 
			
		||||
      tag kube-controller-manager
 | 
			
		||||
    </source>
 | 
			
		||||
 | 
			
		||||
    # Example:
 | 
			
		||||
    # W0204 06:49:18.239674       7 reflector.go:245] pkg/scheduler/factory/factory.go:193: watch of *api.Service ended with: 401: The event in requested index is outdated and cleared (the requested history has been cleared [2578313/2577886]) [2579312]
 | 
			
		||||
    <source>
 | 
			
		||||
      @id kube-scheduler.log
 | 
			
		||||
      @type tail
 | 
			
		||||
      format multiline
 | 
			
		||||
      multiline_flush_interval 5s
 | 
			
		||||
      format_firstline /^\w\d{4}/
 | 
			
		||||
      format1 /^(?<severity>\w)(?<time>\d{4} [^\s]*)\s+(?<pid>\d+)\s+(?<source>[^ \]]+)\] (?<message>.*)/
 | 
			
		||||
      time_format %m%d %H:%M:%S.%N
 | 
			
		||||
      path /var/log/kube-scheduler.log
 | 
			
		||||
      pos_file /var/log/es-kube-scheduler.log.pos
 | 
			
		||||
      tag kube-scheduler
 | 
			
		||||
    </source>
 | 
			
		||||
 | 
			
		||||
    # Example:
 | 
			
		||||
    # I0603 15:31:05.793605       6 cluster_manager.go:230] Reading config from path /etc/gce.conf
 | 
			
		||||
    <source>
 | 
			
		||||
      @id glbc.log
 | 
			
		||||
      @type tail
 | 
			
		||||
      format multiline
 | 
			
		||||
      multiline_flush_interval 5s
 | 
			
		||||
      format_firstline /^\w\d{4}/
 | 
			
		||||
      format1 /^(?<severity>\w)(?<time>\d{4} [^\s]*)\s+(?<pid>\d+)\s+(?<source>[^ \]]+)\] (?<message>.*)/
 | 
			
		||||
      time_format %m%d %H:%M:%S.%N
 | 
			
		||||
      path /var/log/glbc.log
 | 
			
		||||
      pos_file /var/log/es-glbc.log.pos
 | 
			
		||||
      tag glbc
 | 
			
		||||
    </source>
 | 
			
		||||
 | 
			
		||||
    # Example:
 | 
			
		||||
    # I0603 15:31:05.793605       6 cluster_manager.go:230] Reading config from path /etc/gce.conf
 | 
			
		||||
    <source>
 | 
			
		||||
      @id cluster-autoscaler.log
 | 
			
		||||
      @type tail
 | 
			
		||||
      format multiline
 | 
			
		||||
      multiline_flush_interval 5s
 | 
			
		||||
      format_firstline /^\w\d{4}/
 | 
			
		||||
      format1 /^(?<severity>\w)(?<time>\d{4} [^\s]*)\s+(?<pid>\d+)\s+(?<source>[^ \]]+)\] (?<message>.*)/
 | 
			
		||||
      time_format %m%d %H:%M:%S.%N
 | 
			
		||||
      path /var/log/cluster-autoscaler.log
 | 
			
		||||
      pos_file /var/log/es-cluster-autoscaler.log.pos
 | 
			
		||||
      tag cluster-autoscaler
 | 
			
		||||
    </source>
 | 
			
		||||
 | 
			
		||||
    # Logs from systemd-journal for interesting services.
 | 
			
		||||
    # TODO(random-liu): Remove this after cri container runtime rolls out.
 | 
			
		||||
    <source>
 | 
			
		||||
      @id journald-docker
 | 
			
		||||
      @type systemd
 | 
			
		||||
      matches [{ "_SYSTEMD_UNIT": "docker.service" }]
 | 
			
		||||
      <storage>
 | 
			
		||||
        @type local
 | 
			
		||||
        persistent true
 | 
			
		||||
        path /var/log/journald-docker.pos
 | 
			
		||||
      </storage>
 | 
			
		||||
      read_from_head true
 | 
			
		||||
      tag docker
 | 
			
		||||
    </source>
 | 
			
		||||
 | 
			
		||||
    <source>
 | 
			
		||||
      @id journald-container-runtime
 | 
			
		||||
      @type systemd
 | 
			
		||||
      matches [{ "_SYSTEMD_UNIT": "{{ fluentd_container_runtime_service }}.service" }]
 | 
			
		||||
      <storage>
 | 
			
		||||
        @type local
 | 
			
		||||
        persistent true
 | 
			
		||||
        path /var/log/journald-container-runtime.pos
 | 
			
		||||
      </storage>
 | 
			
		||||
      read_from_head true
 | 
			
		||||
      tag container-runtime
 | 
			
		||||
    </source>
 | 
			
		||||
 | 
			
		||||
    <source>
 | 
			
		||||
      @id journald-kubelet
 | 
			
		||||
      @type systemd
 | 
			
		||||
      matches [{ "_SYSTEMD_UNIT": "kubelet.service" }]
 | 
			
		||||
      <storage>
 | 
			
		||||
        @type local
 | 
			
		||||
        persistent true
 | 
			
		||||
        path /var/log/journald-kubelet.pos
 | 
			
		||||
      </storage>
 | 
			
		||||
      read_from_head true
 | 
			
		||||
      tag kubelet
 | 
			
		||||
    </source>
 | 
			
		||||
 | 
			
		||||
    <source>
 | 
			
		||||
      @id journald-node-problem-detector
 | 
			
		||||
      @type systemd
 | 
			
		||||
      matches [{ "_SYSTEMD_UNIT": "node-problem-detector.service" }]
 | 
			
		||||
      <storage>
 | 
			
		||||
        @type local
 | 
			
		||||
        persistent true
 | 
			
		||||
        path /var/log/journald-node-problem-detector.pos
 | 
			
		||||
      </storage>
 | 
			
		||||
      read_from_head true
 | 
			
		||||
      tag node-problem-detector
 | 
			
		||||
    </source>
 | 
			
		||||
 | 
			
		||||
    <source>
 | 
			
		||||
      @id kernel
 | 
			
		||||
      @type systemd
 | 
			
		||||
      matches [{ "_TRANSPORT": "kernel" }]
 | 
			
		||||
      <storage>
 | 
			
		||||
        @type local
 | 
			
		||||
        persistent true
 | 
			
		||||
        path /var/log/kernel.pos
 | 
			
		||||
      </storage>
 | 
			
		||||
      <entry>
 | 
			
		||||
        fields_strip_underscores true
 | 
			
		||||
        fields_lowercase true
 | 
			
		||||
      </entry>
 | 
			
		||||
      read_from_head true
 | 
			
		||||
      tag kernel
 | 
			
		||||
    </source>
 | 
			
		||||
 | 
			
		||||
  forward.input.conf: |-
 | 
			
		||||
    # Takes the messages sent over TCP
 | 
			
		||||
    <source>
 | 
			
		||||
      @id forward
 | 
			
		||||
      @type forward
 | 
			
		||||
    </source>
 | 
			
		||||
 | 
			
		||||
  monitoring.conf: |-
 | 
			
		||||
    # Prometheus Exporter Plugin
 | 
			
		||||
    # input plugin that exports metrics
 | 
			
		||||
    <source>
 | 
			
		||||
      @id prometheus
 | 
			
		||||
      @type prometheus
 | 
			
		||||
    </source>
 | 
			
		||||
 | 
			
		||||
    <source>
 | 
			
		||||
      @id monitor_agent
 | 
			
		||||
      @type monitor_agent
 | 
			
		||||
    </source>
 | 
			
		||||
 | 
			
		||||
    # input plugin that collects metrics from MonitorAgent
 | 
			
		||||
    <source>
 | 
			
		||||
      @id prometheus_monitor
 | 
			
		||||
      @type prometheus_monitor
 | 
			
		||||
      <labels>
 | 
			
		||||
        host ${hostname}
 | 
			
		||||
      </labels>
 | 
			
		||||
    </source>
 | 
			
		||||
 | 
			
		||||
    # input plugin that collects metrics for output plugin
 | 
			
		||||
    <source>
 | 
			
		||||
      @id prometheus_output_monitor
 | 
			
		||||
      @type prometheus_output_monitor
 | 
			
		||||
      <labels>
 | 
			
		||||
        host ${hostname}
 | 
			
		||||
      </labels>
 | 
			
		||||
    </source>
 | 
			
		||||
 | 
			
		||||
    # input plugin that collects metrics for in_tail plugin
 | 
			
		||||
    <source>
 | 
			
		||||
      @id prometheus_tail_monitor
 | 
			
		||||
      @type prometheus_tail_monitor
 | 
			
		||||
      <labels>
 | 
			
		||||
        host ${hostname}
 | 
			
		||||
      </labels>
 | 
			
		||||
    </source>
 | 
			
		||||
 | 
			
		||||
  output.conf: |-
 | 
			
		||||
    <match **>
 | 
			
		||||
      @id elasticsearch
 | 
			
		||||
      @type elasticsearch
 | 
			
		||||
      @log_level info
 | 
			
		||||
      type_name _doc
 | 
			
		||||
      include_tag_key true
 | 
			
		||||
      host elasticsearch-logging
 | 
			
		||||
      port 9200
 | 
			
		||||
      logstash_format true
 | 
			
		||||
      <buffer>
 | 
			
		||||
        @type file
 | 
			
		||||
        path /var/log/fluentd-buffers/kubernetes.system.buffer
 | 
			
		||||
        flush_mode interval
 | 
			
		||||
        retry_type exponential_backoff
 | 
			
		||||
        flush_thread_count 2
 | 
			
		||||
        flush_interval 5s
 | 
			
		||||
        retry_forever
 | 
			
		||||
        retry_max_interval 30
 | 
			
		||||
        chunk_limit_size 2M
 | 
			
		||||
        total_limit_size 500M
 | 
			
		||||
        overflow_action block
 | 
			
		||||
      </buffer>
 | 
			
		||||
    </match>
 | 
			
		||||
@@ -1,114 +0,0 @@
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
kind: ServiceAccount
 | 
			
		||||
metadata:
 | 
			
		||||
  name: fluentd-es
 | 
			
		||||
  namespace: logging
 | 
			
		||||
  labels:
 | 
			
		||||
    k8s-app: fluentd-es
 | 
			
		||||
    addonmanager.kubernetes.io/mode: Reconcile
 | 
			
		||||
---
 | 
			
		||||
kind: ClusterRole
 | 
			
		||||
apiVersion: rbac.authorization.k8s.io/v1
 | 
			
		||||
metadata:
 | 
			
		||||
  name: fluentd-es
 | 
			
		||||
  labels:
 | 
			
		||||
    k8s-app: fluentd-es
 | 
			
		||||
    addonmanager.kubernetes.io/mode: Reconcile
 | 
			
		||||
rules:
 | 
			
		||||
- apiGroups:
 | 
			
		||||
  - ""
 | 
			
		||||
  resources:
 | 
			
		||||
  - "namespaces"
 | 
			
		||||
  - "pods"
 | 
			
		||||
  verbs:
 | 
			
		||||
  - "get"
 | 
			
		||||
  - "watch"
 | 
			
		||||
  - "list"
 | 
			
		||||
---
 | 
			
		||||
kind: ClusterRoleBinding
 | 
			
		||||
apiVersion: rbac.authorization.k8s.io/v1
 | 
			
		||||
metadata:
 | 
			
		||||
  name: fluentd-es
 | 
			
		||||
  labels:
 | 
			
		||||
    k8s-app: fluentd-es
 | 
			
		||||
    addonmanager.kubernetes.io/mode: Reconcile
 | 
			
		||||
subjects:
 | 
			
		||||
- kind: ServiceAccount
 | 
			
		||||
  name: fluentd-es
 | 
			
		||||
  namespace: logging
 | 
			
		||||
  apiGroup: ""
 | 
			
		||||
roleRef:
 | 
			
		||||
  kind: ClusterRole
 | 
			
		||||
  name: fluentd-es
 | 
			
		||||
  apiGroup: ""
 | 
			
		||||
---
 | 
			
		||||
apiVersion: apps/v1
 | 
			
		||||
kind: DaemonSet
 | 
			
		||||
metadata:
 | 
			
		||||
  name: fluentd-es-v3.1.1
 | 
			
		||||
  namespace: logging
 | 
			
		||||
  labels:
 | 
			
		||||
    k8s-app: fluentd-es
 | 
			
		||||
    version: v3.1.1
 | 
			
		||||
    addonmanager.kubernetes.io/mode: Reconcile
 | 
			
		||||
spec:
 | 
			
		||||
  selector:
 | 
			
		||||
    matchLabels:
 | 
			
		||||
      k8s-app: fluentd-es
 | 
			
		||||
      version: v3.1.1
 | 
			
		||||
  template:
 | 
			
		||||
    metadata:
 | 
			
		||||
      labels:
 | 
			
		||||
        k8s-app: fluentd-es
 | 
			
		||||
        version: v3.1.1
 | 
			
		||||
    spec:
 | 
			
		||||
      securityContext:
 | 
			
		||||
        seccompProfile:
 | 
			
		||||
          type: RuntimeDefault
 | 
			
		||||
      priorityClassName: system-node-critical
 | 
			
		||||
      serviceAccountName: fluentd-es
 | 
			
		||||
      containers:
 | 
			
		||||
      - name: fluentd-es
 | 
			
		||||
        image: quay.io/fluentd_elasticsearch/fluentd:v3.1.0
 | 
			
		||||
        env:
 | 
			
		||||
        - name: FLUENTD_ARGS
 | 
			
		||||
          value: --no-supervisor -q
 | 
			
		||||
        resources:
 | 
			
		||||
          limits:
 | 
			
		||||
            memory: 500Mi
 | 
			
		||||
          requests:
 | 
			
		||||
            cpu: 100m
 | 
			
		||||
            memory: 200Mi
 | 
			
		||||
        volumeMounts:
 | 
			
		||||
        - name: varlog
 | 
			
		||||
          mountPath: /var/log
 | 
			
		||||
        - name: varlibdockercontainers
 | 
			
		||||
          mountPath: /var/lib/docker/containers
 | 
			
		||||
          readOnly: true
 | 
			
		||||
        - name: config-volume
 | 
			
		||||
          mountPath: /etc/fluent/config.d
 | 
			
		||||
        ports:
 | 
			
		||||
        - containerPort: 24231
 | 
			
		||||
          name: prometheus
 | 
			
		||||
          protocol: TCP
 | 
			
		||||
        livenessProbe:
 | 
			
		||||
          tcpSocket:
 | 
			
		||||
            port: prometheus
 | 
			
		||||
          initialDelaySeconds: 5
 | 
			
		||||
          timeoutSeconds: 10
 | 
			
		||||
        readinessProbe:
 | 
			
		||||
          tcpSocket:
 | 
			
		||||
            port: prometheus
 | 
			
		||||
          initialDelaySeconds: 5
 | 
			
		||||
          timeoutSeconds: 10
 | 
			
		||||
      terminationGracePeriodSeconds: 30
 | 
			
		||||
      volumes:
 | 
			
		||||
      - name: varlog
 | 
			
		||||
        hostPath:
 | 
			
		||||
          path: /var/log
 | 
			
		||||
      - name: varlibdockercontainers
 | 
			
		||||
        hostPath:
 | 
			
		||||
          path: /var/lib/docker/containers
 | 
			
		||||
      - name: config-volume
 | 
			
		||||
        configMap:
 | 
			
		||||
          name: fluentd-es-config-v0.2.1
 | 
			
		||||
@@ -1,69 +0,0 @@
 | 
			
		||||
# Copyright 2017 The Kubernetes Authors.
 | 
			
		||||
#
 | 
			
		||||
# Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
# you may not use this file except in compliance with the License.
 | 
			
		||||
# You may obtain a copy of the License at
 | 
			
		||||
#
 | 
			
		||||
#     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
#
 | 
			
		||||
# Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
# distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
# See the License for the specific language governing permissions and
 | 
			
		||||
# limitations under the License.
 | 
			
		||||
 | 
			
		||||
# This Dockerfile will build an image that is configured
 | 
			
		||||
# to run Fluentd with an Elasticsearch plug-in and the
 | 
			
		||||
# provided configuration file.
 | 
			
		||||
# The image acts as an executable for the binary /usr/sbin/td-agent.
 | 
			
		||||
# Note that fluentd is run with root permission to allow access to
 | 
			
		||||
# log files with root only access under /var/log/containers/*
 | 
			
		||||
 | 
			
		||||
# 1. Install & configure dependencies.
 | 
			
		||||
# 2. Install fluentd via ruby.
 | 
			
		||||
# 3. Remove build dependencies.
 | 
			
		||||
# 4. Cleanup leftover caches & files.
 | 
			
		||||
 | 
			
		||||
FROM ruby:2.7-slim-buster as builder
 | 
			
		||||
 | 
			
		||||
ARG DEBIAN_FRONTEND=noninteractive
 | 
			
		||||
 | 
			
		||||
COPY Gemfile /Gemfile
 | 
			
		||||
 | 
			
		||||
SHELL ["/bin/bash", "-e", "-o", "pipefail", "-c"]
 | 
			
		||||
 | 
			
		||||
# hadolint ignore=DL3008,DL3028
 | 
			
		||||
RUN apt-get update && \
 | 
			
		||||
    apt-get install -y --no-install-recommends g++ gcc make && \
 | 
			
		||||
    rm -rf /var/lib/apt/lists/* && \
 | 
			
		||||
    echo 'gem: --no-document' >> /etc/gemrc && \
 | 
			
		||||
    gem install --file Gemfile
 | 
			
		||||
 | 
			
		||||
FROM ruby:2.7-slim-buster
 | 
			
		||||
 | 
			
		||||
ARG DEBIAN_FRONTEND=noninteractive
 | 
			
		||||
 | 
			
		||||
# Copy the Fluentd configuration file for logging Docker container logs.
 | 
			
		||||
COPY fluent.conf /etc/fluent/fluent.conf
 | 
			
		||||
COPY entrypoint.sh /entrypoint.sh
 | 
			
		||||
COPY --from=builder /usr/local/bundle/ /usr/local/bundle 
 | 
			
		||||
 | 
			
		||||
SHELL ["/bin/bash", "-e", "-o", "pipefail", "-c"]
 | 
			
		||||
 | 
			
		||||
# hadolint ignore=DL3008
 | 
			
		||||
RUN apt-get update && \
 | 
			
		||||
    apt-get install -y --no-install-recommends libjemalloc2 && \
 | 
			
		||||
    apt-get clean -y && \
 | 
			
		||||
    ulimit -n 65536 && \
 | 
			
		||||
    rm -rf \
 | 
			
		||||
        /var/cache/debconf/* \
 | 
			
		||||
        /var/lib/apt/lists/* \
 | 
			
		||||
        /var/log/* \
 | 
			
		||||
        /var/tmp/* \
 | 
			
		||||
        rm -rf /tmp/*
 | 
			
		||||
 | 
			
		||||
# Expose prometheus metrics.
 | 
			
		||||
EXPOSE 80
 | 
			
		||||
 | 
			
		||||
# Start Fluentd to pick up our config that watches Docker container logs.
 | 
			
		||||
CMD ["/entrypoint.sh"]
 | 
			
		||||
@@ -1,13 +0,0 @@
 | 
			
		||||
source 'https://rubygems.org'
 | 
			
		||||
 | 
			
		||||
gem 'activesupport', '6.1.1'
 | 
			
		||||
gem 'elasticsearch-xpack', '7.10.1'
 | 
			
		||||
gem 'fluentd', '1.12.0'
 | 
			
		||||
gem 'fluent-plugin-concat', '2.4.0'
 | 
			
		||||
gem 'fluent-plugin-detect-exceptions', '0.0.13'
 | 
			
		||||
gem 'fluent-plugin-elasticsearch', '4.3.3'
 | 
			
		||||
gem 'fluent-plugin-kubernetes_metadata_filter', '2.6.0'
 | 
			
		||||
gem 'fluent-plugin-multi-format-parser', '1.0.0'
 | 
			
		||||
gem 'fluent-plugin-prometheus', '1.8.5'
 | 
			
		||||
gem 'fluent-plugin-systemd', '1.0.2'
 | 
			
		||||
gem 'oj', '3.11.0'
 | 
			
		||||
@@ -1,27 +0,0 @@
 | 
			
		||||
# Copyright 2017 The Kubernetes Authors.
 | 
			
		||||
#
 | 
			
		||||
# Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
# you may not use this file except in compliance with the License.
 | 
			
		||||
# You may obtain a copy of the License at
 | 
			
		||||
#
 | 
			
		||||
#     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
#
 | 
			
		||||
# Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
# distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
# See the License for the specific language governing permissions and
 | 
			
		||||
# limitations under the License.
 | 
			
		||||
 | 
			
		||||
.PHONY:	build push
 | 
			
		||||
 | 
			
		||||
PREFIX = quay.io/fluentd_elasticsearch
 | 
			
		||||
IMAGE = fluentd
 | 
			
		||||
TAG = v3.2.0
 | 
			
		||||
 | 
			
		||||
build:
 | 
			
		||||
	docker build --tag ${PREFIX}/${IMAGE}:${TAG} .
 | 
			
		||||
	docker build --tag ${PREFIX}/${IMAGE}:latest .
 | 
			
		||||
 | 
			
		||||
push:
 | 
			
		||||
	docker push ${PREFIX}/${IMAGE}:${TAG}
 | 
			
		||||
	docker push ${PREFIX}/${IMAGE}:latest
 | 
			
		||||
@@ -1,12 +0,0 @@
 | 
			
		||||
# Collecting Docker Log Files with Fluentd and Elasticsearch
 | 
			
		||||
This directory contains the source files needed to make a Docker image
 | 
			
		||||
that collects Docker container log files using [Fluentd][fluentd]
 | 
			
		||||
and sends them to an instance of [Elasticsearch][elasticsearch].
 | 
			
		||||
This image is designed to be used as part of the [Kubernetes][kubernetes]
 | 
			
		||||
cluster bring up process. The image resides at Quay under the name
 | 
			
		||||
[quay.io/fluentd_elasticsearch/fluentd][image].
 | 
			
		||||
 | 
			
		||||
[fluentd]: http://www.fluentd.org/
 | 
			
		||||
[elasticsearch]: https://www.elastic.co/products/elasticsearch
 | 
			
		||||
[kubernetes]: https://kubernetes.io
 | 
			
		||||
[image]: https://quay.io/repository/fluentd_elasticsearch/fluentd?tab=tags
 | 
			
		||||
@@ -1,44 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
# Copyright 2017 The Kubernetes Authors.
 | 
			
		||||
#
 | 
			
		||||
# Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
# you may not use this file except in compliance with the License.
 | 
			
		||||
# You may obtain a copy of the License at
 | 
			
		||||
#
 | 
			
		||||
#     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
#
 | 
			
		||||
# Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
# distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
# See the License for the specific language governing permissions and
 | 
			
		||||
# limitations under the License.
 | 
			
		||||
 | 
			
		||||
# These steps must be executed once the host /var and /lib volumes have
 | 
			
		||||
# been mounted, and therefore cannot be done in the docker build stage.
 | 
			
		||||
 | 
			
		||||
# For systems without journald
 | 
			
		||||
mkdir -p /var/log/journal
 | 
			
		||||
 | 
			
		||||
# set ld preload
 | 
			
		||||
if dpkg --print-architecture | grep -q amd64;then
 | 
			
		||||
    export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2
 | 
			
		||||
else
 | 
			
		||||
    export LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libjemalloc.so.2
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# For disabling elasticsearch ruby client sniffering feature.
 | 
			
		||||
# Because, on k8s, sniffering feature sometimes causes failed to flush buffers error
 | 
			
		||||
# due to between service name and ip address glitch.
 | 
			
		||||
# And this should be needed for downstream helm chart configurations
 | 
			
		||||
# for sniffer_class_name parameter.
 | 
			
		||||
SIMPLE_SNIFFER=$( gem contents fluent-plugin-elasticsearch | grep elasticsearch_simple_sniffer.rb )
 | 
			
		||||
if [ -n "$SIMPLE_SNIFFER" ] && [ -f "$SIMPLE_SNIFFER" ] ; then
 | 
			
		||||
    FLUENTD_ARGS="$FLUENTD_ARGS -r $SIMPLE_SNIFFER"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Use exec to get the signal
 | 
			
		||||
# A non-quoted string and add the comment to prevent shellcheck failures on this line.
 | 
			
		||||
# See https://github.com/koalaman/shellcheck/wiki/SC2086
 | 
			
		||||
# shellcheck disable=SC2086
 | 
			
		||||
exec /usr/local/bundle/bin/fluentd $FLUENTD_ARGS
 | 
			
		||||
@@ -1,10 +0,0 @@
 | 
			
		||||
# This is the root config file, which only includes components of the actual configuration
 | 
			
		||||
 | 
			
		||||
# Do not collect fluentd's own logs to avoid infinite loops.
 | 
			
		||||
<label @FLUENT_LOG>
 | 
			
		||||
  <match fluent.*>
 | 
			
		||||
    @type stdout
 | 
			
		||||
  </match>
 | 
			
		||||
</label>
 | 
			
		||||
 | 
			
		||||
@include /etc/fluent/config.d/*.conf
 | 
			
		||||
@@ -1,55 +0,0 @@
 | 
			
		||||
apiVersion: apps/v1
 | 
			
		||||
kind: Deployment
 | 
			
		||||
metadata:
 | 
			
		||||
  name: kibana-logging
 | 
			
		||||
  namespace: logging
 | 
			
		||||
  labels:
 | 
			
		||||
    k8s-app: kibana-logging
 | 
			
		||||
    addonmanager.kubernetes.io/mode: Reconcile
 | 
			
		||||
spec:
 | 
			
		||||
  replicas: 1
 | 
			
		||||
  selector:
 | 
			
		||||
    matchLabels:
 | 
			
		||||
      k8s-app: kibana-logging
 | 
			
		||||
  template:
 | 
			
		||||
    metadata:
 | 
			
		||||
      labels:
 | 
			
		||||
        k8s-app: kibana-logging
 | 
			
		||||
    spec:
 | 
			
		||||
      securityContext:
 | 
			
		||||
        seccompProfile:
 | 
			
		||||
          type: RuntimeDefault
 | 
			
		||||
      containers:
 | 
			
		||||
        - name: kibana-logging
 | 
			
		||||
          image: docker.elastic.co/kibana/kibana-oss:7.10.2
 | 
			
		||||
          resources:
 | 
			
		||||
            # need more cpu upon initialization, therefore burstable class
 | 
			
		||||
            limits:
 | 
			
		||||
              cpu: 1000m
 | 
			
		||||
            requests:
 | 
			
		||||
              cpu: 100m
 | 
			
		||||
          env:
 | 
			
		||||
            - name: ELASTICSEARCH_HOSTS
 | 
			
		||||
              value: http://elasticsearch-logging:9200
 | 
			
		||||
            - name: SERVER_NAME
 | 
			
		||||
              value: kibana-logging
 | 
			
		||||
            - name: SERVER_BASEPATH
 | 
			
		||||
              value: /api/v1/namespaces/logging/services/kibana-logging/proxy
 | 
			
		||||
            - name: SERVER_REWRITEBASEPATH
 | 
			
		||||
              value: "false"
 | 
			
		||||
          ports:
 | 
			
		||||
            - containerPort: 5601
 | 
			
		||||
              name: ui
 | 
			
		||||
              protocol: TCP
 | 
			
		||||
          livenessProbe:
 | 
			
		||||
            httpGet:
 | 
			
		||||
              path: /api/status
 | 
			
		||||
              port: ui
 | 
			
		||||
            initialDelaySeconds: 5
 | 
			
		||||
            timeoutSeconds: 10
 | 
			
		||||
          readinessProbe:
 | 
			
		||||
            httpGet:
 | 
			
		||||
              path: /api/status
 | 
			
		||||
              port: ui
 | 
			
		||||
            initialDelaySeconds: 5
 | 
			
		||||
            timeoutSeconds: 10
 | 
			
		||||
@@ -1,17 +0,0 @@
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
kind: Service
 | 
			
		||||
metadata:
 | 
			
		||||
  name: kibana-logging
 | 
			
		||||
  namespace: logging
 | 
			
		||||
  labels:
 | 
			
		||||
    k8s-app: kibana-logging
 | 
			
		||||
    kubernetes.io/cluster-service: "true"
 | 
			
		||||
    addonmanager.kubernetes.io/mode: Reconcile
 | 
			
		||||
    kubernetes.io/name: "Kibana"
 | 
			
		||||
spec:
 | 
			
		||||
  ports:
 | 
			
		||||
  - port: 5601
 | 
			
		||||
    protocol: TCP
 | 
			
		||||
    targetPort: ui
 | 
			
		||||
  selector:
 | 
			
		||||
    k8s-app: kibana-logging
 | 
			
		||||
@@ -1,15 +0,0 @@
 | 
			
		||||
apiVersion: rbac.authorization.k8s.io/v1
 | 
			
		||||
kind: RoleBinding
 | 
			
		||||
metadata:
 | 
			
		||||
  name: gce:podsecuritypolicy:elasticsearch-logging
 | 
			
		||||
  namespace: kube-system
 | 
			
		||||
  labels:
 | 
			
		||||
    addonmanager.kubernetes.io/mode: Reconcile
 | 
			
		||||
roleRef:
 | 
			
		||||
  apiGroup: rbac.authorization.k8s.io
 | 
			
		||||
  kind: ClusterRole
 | 
			
		||||
  name: gce:podsecuritypolicy:privileged
 | 
			
		||||
subjects:
 | 
			
		||||
- kind: ServiceAccount
 | 
			
		||||
  name: elasticsearch-logging
 | 
			
		||||
  namespace: kube-system
 | 
			
		||||
@@ -244,7 +244,7 @@ fi
 | 
			
		||||
 | 
			
		||||
# Optional: Enable node logging.
 | 
			
		||||
export ENABLE_NODE_LOGGING="${KUBE_ENABLE_NODE_LOGGING:-true}"
 | 
			
		||||
export LOGGING_DESTINATION="${KUBE_LOGGING_DESTINATION:-gcp}" # options: elasticsearch, gcp
 | 
			
		||||
export LOGGING_DESTINATION="${KUBE_LOGGING_DESTINATION:-gcp}" # options: gcp
 | 
			
		||||
 | 
			
		||||
# Optional: When set to true, Elasticsearch and Kibana will be setup as part of the cluster bring up.
 | 
			
		||||
export ENABLE_CLUSTER_LOGGING="${KUBE_ENABLE_CLUSTER_LOGGING:-true}"
 | 
			
		||||
 
 | 
			
		||||
@@ -300,7 +300,7 @@ fi
 | 
			
		||||
 | 
			
		||||
# Optional: Enable node logging.
 | 
			
		||||
export ENABLE_NODE_LOGGING=${KUBE_ENABLE_NODE_LOGGING:-true}
 | 
			
		||||
export LOGGING_DESTINATION=${KUBE_LOGGING_DESTINATION:-gcp} # options: elasticsearch, gcp
 | 
			
		||||
export LOGGING_DESTINATION=${KUBE_LOGGING_DESTINATION:-gcp} # options: gcp
 | 
			
		||||
 | 
			
		||||
# Optional: When set to true, Elasticsearch and Kibana will be setup as part of the cluster bring up.
 | 
			
		||||
export ENABLE_CLUSTER_LOGGING=${KUBE_ENABLE_CLUSTER_LOGGING:-true}
 | 
			
		||||
 
 | 
			
		||||
@@ -2816,9 +2816,9 @@ EOF
 | 
			
		||||
  if [[ "${ENABLE_NODE_LOGGING:-}" == "true" ]] && \
 | 
			
		||||
     [[ "${LOGGING_DESTINATION:-}" == "elasticsearch" ]] && \
 | 
			
		||||
     [[ "${ENABLE_CLUSTER_LOGGING:-}" == "true" ]]; then
 | 
			
		||||
    setup-addon-manifests "addons" "fluentd-elasticsearch"
 | 
			
		||||
    local -r fluentd_es_configmap_yaml="${dst_dir}/fluentd-elasticsearch/fluentd-es-configmap.yaml"
 | 
			
		||||
    update-container-runtime ${fluentd_es_configmap_yaml}
 | 
			
		||||
    echo "fluentd-elasticsearch addon is no longer included here. Terminate cluster initialization."
 | 
			
		||||
    echo "The addon can be installed from https://github.com/kubernetes-sigs/instrumentation-addons"
 | 
			
		||||
    exit 1
 | 
			
		||||
  fi
 | 
			
		||||
  if [[ "${ENABLE_NODE_LOGGING:-}" == "true" ]] && \
 | 
			
		||||
     [[ "${LOGGING_DESTINATION:-}" == "gcp" ]]; then
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user