From 52f7695f0071a89895f00614e098fdca79e6f42c Mon Sep 17 00:00:00 2001 From: Karol Wychowaniec Date: Tue, 14 Nov 2017 17:09:32 +0100 Subject: [PATCH] Add deployment for Stackdriver Metadata Agent with version and resource requirement controlled by env variable --- cluster/addons/metadata-agent/OWNERS | 6 +++ cluster/addons/metadata-agent/README.md | 4 ++ .../stackdriver/metadata-agent.yaml | 38 +++++++++++++++++++ cluster/common.sh | 2 + cluster/gce/config-default.sh | 10 +++++ .../gce/container-linux/configure-helper.sh | 14 +++++++ cluster/gce/gci/configure-helper.sh | 14 +++++++ 7 files changed, 88 insertions(+) create mode 100644 cluster/addons/metadata-agent/OWNERS create mode 100644 cluster/addons/metadata-agent/README.md create mode 100644 cluster/addons/metadata-agent/stackdriver/metadata-agent.yaml diff --git a/cluster/addons/metadata-agent/OWNERS b/cluster/addons/metadata-agent/OWNERS new file mode 100644 index 0000000000..6fda00e6c9 --- /dev/null +++ b/cluster/addons/metadata-agent/OWNERS @@ -0,0 +1,6 @@ +approvers: +- kawych +- piosz +reviewers: +- kawych +- piosz diff --git a/cluster/addons/metadata-agent/README.md b/cluster/addons/metadata-agent/README.md new file mode 100644 index 0000000000..2e4dbc9849 --- /dev/null +++ b/cluster/addons/metadata-agent/README.md @@ -0,0 +1,4 @@ +# Kubernetes Metadata Agent + +Metadata Agent is a source of metadata required by logging and monitoring agents +running on a cluster. diff --git a/cluster/addons/metadata-agent/stackdriver/metadata-agent.yaml b/cluster/addons/metadata-agent/stackdriver/metadata-agent.yaml new file mode 100644 index 0000000000..9f602e32b9 --- /dev/null +++ b/cluster/addons/metadata-agent/stackdriver/metadata-agent.yaml @@ -0,0 +1,38 @@ +kind: DaemonSet +apiVersion: extensions/v1beta1 +metadata: + labels: + app: stackdriver-agents + kubernetes.io/cluster-service: "true" + addonmanager.kubernetes.io/mode: Reconcile + name: stackdriver-agents + namespace: kube-system +spec: + selector: + matchLabels: + app: stackdriver-agents + template: + metadata: + labels: + app: stackdriver-agents + spec: + containers: + - image: us.gcr.io/container-monitoring-storage/stackdriver-metadata-agent:{{ metadata_agent_version }} + imagePullPolicy: IfNotPresent + name: metadata-agent + ports: + - containerPort: 8000 + hostPort: 8000 + protocol: TCP + resources: + requests: + cpu: {{ metadata_agent_cpu_request }} + memory: {{ metadata_agent_memory_request }} + dnsPolicy: ClusterFirst + restartPolicy: Always + schedulerName: default-scheduler + terminationGracePeriodSeconds: 30 + updateStrategy: + rollingUpdate: + maxUnavailable: 1 + type: RollingUpdate diff --git a/cluster/common.sh b/cluster/common.sh index faa4623692..dfc3265519 100755 --- a/cluster/common.sh +++ b/cluster/common.sh @@ -610,6 +610,8 @@ KUBERNETES_MASTER_NAME: $(yaml-quote ${KUBERNETES_MASTER_NAME}) ALLOCATE_NODE_CIDRS: $(yaml-quote ${ALLOCATE_NODE_CIDRS:-false}) ENABLE_CLUSTER_MONITORING: $(yaml-quote ${ENABLE_CLUSTER_MONITORING:-none}) ENABLE_METRICS_SERVER: $(yaml-quote ${ENABLE_METRICS_SERVER:-false}) +ENABLE_METADATA_AGENT: $(yaml-quote ${ENABLE_METADATA_AGENT:-none}) +METADATA_AGENT_VERSION: $(yaml-quote ${METADATA_AGENT_VERSION:-}) DOCKER_REGISTRY_MIRROR_URL: $(yaml-quote ${DOCKER_REGISTRY_MIRROR_URL:-}) ENABLE_L7_LOADBALANCING: $(yaml-quote ${ENABLE_L7_LOADBALANCING:-none}) ENABLE_CLUSTER_LOGGING: $(yaml-quote ${ENABLE_CLUSTER_LOGGING:-false}) diff --git a/cluster/gce/config-default.sh b/cluster/gce/config-default.sh index 3f42437c25..d28bbe4dfc 100755 --- a/cluster/gce/config-default.sh +++ b/cluster/gce/config-default.sh @@ -145,6 +145,16 @@ ENABLE_CLUSTER_MONITORING="${KUBE_ENABLE_CLUSTER_MONITORING:-influxdb}" # TODO(piosz) remove this option once Metrics Server became a stable thing. ENABLE_METRICS_SERVER="${KUBE_ENABLE_METRICS_SERVER:-true}" +# Optional: Metadata agent to setup as part of the cluster bring up: +# none - No metadata agent +# stackdriver - Stackdriver metadata agent +# Metadata agent is a daemon set that provides metadata of kubernetes objects +# running on the same node for exporting metrics and logs. +ENABLE_METADATA_AGENT="${KUBE_ENABLE_METADATA_AGENT:-none}" + +# Version tag of metadata agent +METADATA_AGENT_VERSION="${KUBE_METADATA_AGENT_VERSION:-0.2-0.0.13-5}" + # One special node out of NUM_NODES would be created of this type if specified. # Useful for scheduling heapster in large clusters with nodes of small size. HEAPSTER_MACHINE_TYPE="${HEAPSTER_MACHINE_TYPE:-}" diff --git a/cluster/gce/container-linux/configure-helper.sh b/cluster/gce/container-linux/configure-helper.sh index ac54e662f3..67a9b82d17 100755 --- a/cluster/gce/container-linux/configure-helper.sh +++ b/cluster/gce/container-linux/configure-helper.sh @@ -1289,6 +1289,20 @@ EOF sed -i -e "s@{{ *metrics_cpu_per_node *}}@${metrics_cpu_per_node}@g" "${controller_yaml}" update-prometheus-to-sd-parameters ${controller_yaml} fi + if [[ "${ENABLE_CLUSTER_MONITORING:-}" == "stackdriver" ]] || + ([[ "${ENABLE_CLUSTER_LOGGING:-}" == "true" ]] && + [[ "${LOGGING_DESTINATION:-}" == "gcp" ]]); then + if [[ "${ENABLE_METADATA_AGENT:-}" == "stackdriver" ]] && + [[ "${METADATA_AGENT_VERSION:-}" != "" ]]; then + metadata_agent_cpu_request="${METADATA_AGENT_CPU_REQUEST:-40m}" + metadata_agent_memory_request="${METADATA_AGENT_MEMORY_REQUEST:-50Mi}" + setup-addon-manifests "addons" "metadata-agent/stackdriver" + deployment_yaml="${dst_dir}/metadata-agent/stackdriver/metadata-agent.yaml" + sed -i -e "s@{{ metadata_agent_version }}@${METADATA_AGENT_VERSION}@g" "${deployment_yaml}" + sed -i -e "s@{{ metadata_agent_cpu_request }}@${metadata_agent_cpu_request}@g" "${deployment_yaml}" + sed -i -e "s@{{ metadata_agent_memory_request }}@${metadata_agent_memory_request}@g" "${deployment_yaml}" + fi + fi if [[ "${ENABLE_METRICS_SERVER:-}" == "true" ]]; then setup-addon-manifests "addons" "metrics-server" fi diff --git a/cluster/gce/gci/configure-helper.sh b/cluster/gce/gci/configure-helper.sh index e55570f4a0..e94c8fac44 100644 --- a/cluster/gce/gci/configure-helper.sh +++ b/cluster/gce/gci/configure-helper.sh @@ -1854,6 +1854,20 @@ EOF sed -i -e "s@{{ *metrics_cpu_per_node *}}@${metrics_cpu_per_node}@g" "${controller_yaml}" update-prometheus-to-sd-parameters ${controller_yaml} fi + if [[ "${ENABLE_CLUSTER_MONITORING:-}" == "stackdriver" ]] || + ([[ "${ENABLE_CLUSTER_LOGGING:-}" == "true" ]] && + [[ "${LOGGING_DESTINATION:-}" == "gcp" ]]); then + if [[ "${ENABLE_METADATA_AGENT:-}" == "stackdriver" ]] && + [[ "${METADATA_AGENT_VERSION:-}" != "" ]]; then + metadata_agent_cpu_request="${METADATA_AGENT_CPU_REQUEST:-40m}" + metadata_agent_memory_request="${METADATA_AGENT_MEMORY_REQUEST:-50Mi}" + setup-addon-manifests "addons" "metadata-agent/stackdriver" + deployment_yaml="${dst_dir}/metadata-agent/stackdriver/metadata-agent.yaml" + sed -i -e "s@{{ metadata_agent_version }}@${METADATA_AGENT_VERSION}@g" "${deployment_yaml}" + sed -i -e "s@{{ metadata_agent_cpu_request }}@${metadata_agent_cpu_request}@g" "${deployment_yaml}" + sed -i -e "s@{{ metadata_agent_memory_request }}@${metadata_agent_memory_request}@g" "${deployment_yaml}" + fi + fi if [[ "${ENABLE_METRICS_SERVER:-}" == "true" ]]; then setup-addon-manifests "addons" "metrics-server" fi