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
---
apiVersion apps/v1
kind Deployment
metadata
name metrics-server
namespace kube-system
labels
k8s-app metrics-server
kubernetes.io/cluster-service"true"
addonmanager.kubernetes.io/mode Reconcile
version v0.3.6
spec
selector
matchLabels
k8s-app metrics-server
version v0.3.6
template
metadata
name metrics-server
labels
k8s-app metrics-server
version v0.3.6
annotations
scheduler.alpha.kubernetes.io/critical-pod''
seccomp.security.alpha.kubernetes.io/pod'docker/default'
spec
priorityClassName system-cluster-critical
serviceAccountName metrics-server
containers
name metrics-server
image k8s.gcr.io/metrics-server-amd64 v0.3.6
imagePullPolicy IfNotPresent
command
/metrics-server
--metric-resolution=30s
--kubelet-preferred-address-types=InternalIP
--kubelet-insecure-tls
ports
containerPort443
name https
protocol TCP
name metrics-server-nanny
image k8s.gcr.io/addon-resizer1.8.4
imagePullPolicy IfNotPresent #镜像拉取策略
resources#Pod资源限制
limits
cpu 100m
memory 300Mi
requests
cpu 5m
memory 50Mi
env
name MY_POD_NAME
valueFrom
fieldRef
fieldPath metadata.name
name MY_POD_NAMESPACE
valueFrom
fieldRef
fieldPath metadata.namespace
volumeMounts
name metrics-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配置挂载到持久卷中
name metrics-server-config-volume
configMap
name metrics-server-config
tolerations#容忍度
key"CriticalAddonsOnly"
operator"Exists"
key node-role.kubernetes.io/master
effect NoSchedule
--
apiVersion v1
kind Service
metadata
name metrics-server
namespace kube-system
labels
addonmanager.kubernetes.io/mode Reconcile
kubernetes.io/cluster-service"true"
kubernetes.io/name"Metrics-server"
spec
selector
k8s-app metrics-server
ports
port443
protocol TCP
targetPort https
创建APIService资源对象
---
apiVersion apiregistration.k8s.io/v1
kind APIService
metadata
name v1beta1.metrics.k8s.io
labels
kubernetes.io/cluster-service"true"
addonmanager.kubernetes.io/mode Reconcile
spec
service
name metrics-server
namespace kube-system
group metrics.k8s.io
version v1beta1
insecureSkipTLSVerifytrue
groupPriorityMinimum100
versionPriority100