Kubernetes metrics-server unable to add metric-resolution flag

9/27/2018

I am using kubernetes v1.9.7-gke.6. I am trying to edit the metrics-server deployment yaml and add --metric-resolution flag, when I add the flag and save the change I see on the terminal that the edit was successful. When I edit again the metrics-server deployment file the flag that I added it doesn't exist. Is there any way to edit the metrics server deployment yaml?

Here is the deployment , its the default that created when I create a new kuberentes cluster at google cloud.

{
"apiVersion": "extensions/v1beta1",
"kind": "Deployment",
"metadata": {
    "annotations": {
        "deployment.kubernetes.io/revision": "12",
        "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"extensions/v1beta1\",\"kind\":\"Deployment\",\"metadata\":{\"annotations\":{},\"labels\":{\"addonmanager.kubernetes.io/mode\":\"Reconcile\",\"k8s-app\":\"metrics-server\",\"kubernetes.io/cluster-service\":\"true\",\"version\":\"v0.2.1\"},\"name\":\"metrics-server-v0.2.1\",\"namespace\":\"kube-system\"},\"spec\":{\"selector\":{\"matchLabels\":{\"k8s-app\":\"metrics-server\",\"version\":\"v0.2.1\"}},\"template\":{\"metadata\":{\"annotations\":{\"scheduler.alpha.kubernetes.io/critical-pod\":\"\"},\"labels\":{\"k8s-app\":\"metrics-server\",\"version\":\"v0.2.1\"},\"name\":\"metrics-server\"},\"spec\":{\"containers\":[{\"command\":[\"/metrics-server\",\"--source=kubernetes.summary_api:''\"],\"image\":\"gcr.io/google_containers/metrics-server-amd64:v0.2.1\",\"name\":\"metrics-server\",\"ports\":[{\"containerPort\":443,\"name\":\"https\",\"protocol\":\"TCP\"}]},{\"command\":[\"/pod_nanny\",\"--config-dir=/etc/config\",\"--cpu=40m\",\"--extra-cpu=0.5m\",\"--memory=40Mi\",\"--extra-memory=4Mi\",\"--threshold=5\",\"--deployment=metrics-server-v0.2.1\",\"--container=metrics-server\",\"--poll-period=300000\",\"--estimator=exponential\"],\"env\":[{\"name\":\"MY_POD_NAME\",\"valueFrom\":{\"fieldRef\":{\"fieldPath\":\"metadata.name\"}}},{\"name\":\"MY_POD_NAMESPACE\",\"valueFrom\":{\"fieldRef\":{\"fieldPath\":\"metadata.namespace\"}}}],\"image\":\"gcr.io/google_containers/addon-resizer:1.8.1\",\"name\":\"metrics-server-nanny\",\"resources\":{\"limits\":{\"cpu\":\"100m\",\"memory\":\"300Mi\"},\"requests\":{\"cpu\":\"5m\",\"memory\":\"50Mi\"}},\"volumeMounts\":[{\"mountPath\":\"/etc/config\",\"name\":\"metrics-server-config-volume\"}]}],\"serviceAccountName\":\"metrics-server\",\"tolerations\":[{\"key\":\"CriticalAddonsOnly\",\"operator\":\"Exists\"}],\"volumes\":[{\"configMap\":{\"name\":\"metrics-server-config\"},\"name\":\"metrics-server-config-volume\"}]}}}}\n"
    },
    "creationTimestamp": "2018-09-20T13:04:03Z",
    "generation": 14,
    "labels": {
        "addonmanager.kubernetes.io/mode": "Reconcile",
        "k8s-app": "metrics-server",
        "kubernetes.io/cluster-service": "true",
        "version": "v0.2.1"
    },
    "name": "metrics-server-v0.2.1",
    "namespace": "kube-system",
    "resourceVersion": "822513",
    "selfLink": "/apis/extensions/v1beta1/namespaces/kube-system/deployments/metrics-server-v0.2.1",
    "uid": "a5cd1f4c-bcd5-11e8-9313-42010a80005f"
},
"spec": {
    "replicas": 1,
    "selector": {
        "matchLabels": {
            "k8s-app": "metrics-server",
            "version": "v0.2.1"
        }
    },
    "strategy": {
        "rollingUpdate": {
            "maxSurge": 1,
            "maxUnavailable": 1
        },
        "type": "RollingUpdate"
    },
    "template": {
        "metadata": {
            "annotations": {
                "scheduler.alpha.kubernetes.io/critical-pod": ""
            },
            "creationTimestamp": null,
            "labels": {
                "k8s-app": "metrics-server",
                "version": "v0.2.1"
            },
            "name": "metrics-server"
        },
        "spec": {
            "containers": [
                {
                    "command": [
                        "/metrics-server",
                        "--source=kubernetes.summary_api:''"
                    ],
                    "image": "gcr.io/google_containers/metrics-server-amd64:v0.2.1",
                    "imagePullPolicy": "IfNotPresent",
                    "name": "metrics-server",
                    "ports": [
                        {
                            "containerPort": 443,
                            "name": "https",
                            "protocol": "TCP"
                        }
                    ],
                    "resources": {
                        "limits": {
                            "cpu": "48m",
                            "memory": "104Mi"
                        },
                        "requests": {
                            "cpu": "48m",
                            "memory": "104Mi"
                        }
                    },
                    "terminationMessagePath": "/dev/termination-log",
                    "terminationMessagePolicy": "File"
                },
                {
                    "command": [
                        "/pod_nanny",
                        "--config-dir=/etc/config",
                        "--cpu=40m",
                        "--extra-cpu=0.5m",
                        "--memory=40Mi",
                        "--extra-memory=4Mi",
                        "--threshold=5",
                        "--deployment=metrics-server-v0.2.1",
                        "--container=metrics-server",
                        "--poll-period=300000",
                        "--estimator=exponential"
                    ],
                    "env": [
                        {
                            "name": "MY_POD_NAME",
                            "valueFrom": {
                                "fieldRef": {
                                    "apiVersion": "v1",
                                    "fieldPath": "metadata.name"
                                }
                            }
                        },
                        {
                            "name": "MY_POD_NAMESPACE",
                            "valueFrom": {
                               {
                                    "apiVersion": "v1",
                                    "fieldPath": "metadata.namespace"
                                }
                            }
                        }
                    ],
                    "image": "gcr.io/google_containers/addon-resizer:1.8.1",
                    "imagePullPolicy": "IfNotPresent",
                    "name": "metrics-server-nanny",
                    "resources": {
                        "limits": {
                            "cpu": "100m",
                            "memory": "300Mi"
                        },
                        "requests": {
                            "cpu": "5m",
                            "memory": "50Mi"
                        }
                    },
                    "terminationMessagePath": "/dev/termination-log",
                    "terminationMessagePolicy": "File",
                    "volumeMounts": [
                        {
                            "mountPath": "/etc/config",
                            "name": "metrics-server-config-volume"
                        }
                    ]
                }
            ],
            "dnsPolicy": "ClusterFirst",
            "restartPolicy": "Always",
            "schedulerName": "default-scheduler",
            "securityContext": {},
            "serviceAccount": "metrics-server",
            "serviceAccountName": "metrics-server",
            "terminationGracePeriodSeconds": 30,
            "tolerations": [
                {
                    "key": "CriticalAddonsOnly",
                    "operator": "Exists"
                }
            ],
            "volumes": [
                {
                    "configMap": {
                        "defaultMode": 420,
                        "name": "metrics-server-config"
                    },
                    "name": "metrics-server-config-volume"
                }
            ]
        }
    }
},
"status": {
    "availableReplicas": 1,    
     "conditions": [
        {
            "lastTransitionTime": "2018-09-20T13:04:03Z",
            "lastUpdateTime": "2018-09-20T13:04:03Z",
            "message": "Deployment has minimum availability.",
            "reason": "MinimumReplicasAvailable",
            "status": "True",
            "type": "Available"
        }
    ],
    "observedGeneration": 14,
    "readyReplicas": 1,
    "replicas": 1,
    "updatedReplicas": 1
}
}
-- Alexis_Ni
google-kubernetes-engine
kubernetes

1 Answer

10/2/2018

Editing the yaml/flags of anything in kube-system on GKE (Google Kubernetes Engine) will not work as it will get reverted by the master. So, that part is working as intended.

It looks like fluentd which is auto-managed by GKE for logging, is what is causing the changes to get reverted. So the option I can think of, would be to disable the gke addons (ie cloud logging), and roll your own fluentd daemonset, and then configure things yourself. I will recommend you to visit this discussion for more information

Additionally, I will request you to take a look into this guide, if you'd like to roll your own fluentd on your cluster as well.

-- Shaiq
Source: StackOverflow