Metrics Server是kubernetes集群中用于数据采集的插件,用于采集node和Pod的CPU、内存使用情况。
创建SA账号并做RBAC授权
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: metrics-server
  namespace: kube-system
  labels:
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: metrics-server:system:auth-delegator
  labels:
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: system:auth-delegator
subjects:
- kind: ServiceAccount
  name: metrics-server
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: metrics-server-auth-reader
  namespace: kube-system
  labels:
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: extension-apiserver-authentication-reader
subjects:
- kind: ServiceAccount
  name: metrics-server
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: system:metrics-server
  labels:
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
rules:
- apiGroups:
  - ""
  resources:
  - pods
  - nodes
  - nodes/stats
  - namespaces
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - "extensions"
  resources:
  - deployments
  verbs:
  - get
  - list
  - update
  - watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: system:metrics-server
  labels:
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: system:metrics-server
subjects:
- kind: ServiceAccount
  name: metrics-server
  namespace: kube-system创建ConfigMap配置
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: metrics-server-config
  namespace: kube-system
  labels:
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: EnsureExists
data:
  NannyConfiguration: |-
    apiVersion: nannyconfig/v1alpha1
    kind: NannyConfiguration使用Deployment控制器创建Metics Server
---
apiVersionapps/v1
kindDeployment
metadata
  namemetrics-server
  namespacekube-system
  labels
    k8s-appmetrics-server
    kubernetes.io/cluster-service"true"
    addonmanager.kubernetes.io/modeReconcile
    versionv0.3.6
spec
  selector
    matchLabels
      k8s-appmetrics-server
      versionv0.3.6
  template
    metadata
      namemetrics-server
      labels
        k8s-appmetrics-server
        versionv0.3.6
      annotations
        scheduler.alpha.kubernetes.io/critical-pod''
        seccomp.security.alpha.kubernetes.io/pod'docker/default'
    spec
      priorityClassNamesystem-cluster-critical
      serviceAccountNamemetrics-server
      containers
namemetrics-server
        imagek8s.gcr.io/metrics-server-amd64v0.3.6
        imagePullPolicyIfNotPresent
        command
/metrics-server
--metric-resolution=30s
--kubelet-preferred-address-types=InternalIP
--kubelet-insecure-tls
        ports
containerPort443
          namehttps
          protocolTCP
namemetrics-server-nanny
        imagek8s.gcr.io/addon-resizer1.8.4
        imagePullPolicyIfNotPresent   #镜像拉取策略
        resources#Pod资源限制
          limits
            cpu100m
            memory300Mi
          requests
            cpu5m
            memory50Mi
        env
nameMY_POD_NAME
            valueFrom
              fieldRef
                fieldPathmetadata.name
nameMY_POD_NAMESPACE
            valueFrom
              fieldRef
                fieldPathmetadata.namespace
        volumeMounts
namemetrics-server-config-volume
          mountPath/etc/config
        command
/pod_nanny
--config-dir=/etc/config
--cpu=300m
--extra-cpu=20m
--memory=200Mi
--extra-memory=10Mi
--threshold=5
--deployment=metrics-server
--container=metrics-server
--poll-period=300000
--estimator=exponential
--minClusterSize=2
      volumes#将configmap配置挂载到持久卷中
namemetrics-server-config-volume
          configMap
            namemetrics-server-config
      tolerations#容忍度
key"CriticalAddonsOnly"
          operator"Exists"
keynode-role.kubernetes.io/master
          effectNoSchedule
--
apiVersionv1
kindService
metadata
  namemetrics-server
  namespacekube-system
  labels
    addonmanager.kubernetes.io/modeReconcile
    kubernetes.io/cluster-service"true"
    kubernetes.io/name"Metrics-server"
spec
  selector
    k8s-appmetrics-server
  ports
port443
    protocolTCP
    targetPorthttps创建APIService资源对象
---
apiVersionapiregistration.k8s.io/v1
kindAPIService
metadata
  namev1beta1.metrics.k8s.io
  labels
    kubernetes.io/cluster-service"true"
    addonmanager.kubernetes.io/modeReconcile
spec
  service
    namemetrics-server
    namespacekube-system
  groupmetrics.k8s.io
  versionv1beta1
  insecureSkipTLSVerifytrue
  groupPriorityMinimum100
  versionPriority100









