基础配置
主机名 |
IP |
系统版本 |
k8s-master |
172.21.3.20 |
CentOS7.8 |
k8s-node1 |
172.21.3.21 |
CentOS7.8 |
k8s-node2 |
172.21.3.22 |
CentOS7.8 |
下载metric-server部署的yaml文件到本地
# wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.7/components.yaml
拉取metric-server的镜像到本地
# docker pull zhaoqinchang/metrics-server:0.3.7
0.3.7: Pulling from zhaoqinchang/metrics-server
9ff2acc3204b: Pull complete
9d14b55ff9a0: Pull complete
Digest: sha256:c0efe772bb9e5c289db6cc4bc2002c268507d0226f2a3815f7213e00261c38e9
Status: Downloaded newer image for zhaoqinchang/metrics-server:0.3.7
docker.io/zhaoqinchang/metrics-server:0.3.7
修改components.yaml文件为如下内容
cat components.yaml
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: system:aggregated-metrics-reader
labels:
rbac.authorization.k8s.io/aggregate-to-view: "true"
rbac.authorization.k8s.io/aggregate-to-edit: "true"
rbac.authorization.k8s.io/aggregate-to-admin: "true"
rules:
- apiGroups: ["metrics.k8s.io"]
resources: ["pods", "nodes"]
verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: metrics-server:system:auth-delegator
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
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: extension-apiserver-authentication-reader
subjects:
- kind: ServiceAccount
name: metrics-server
namespace: kube-system
---
apiVersion: apiregistration.k8s.io/v1beta1
kind: APIService
metadata:
name: v1beta1.metrics.k8s.io
spec:
service:
name: metrics-server
namespace: kube-system
group: metrics.k8s.io
version: v1beta1
insecureSkipTLSVerify: true
groupPriorityMinimum: 100
versionPriority: 100
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: metrics-server
namespace: kube-system
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: metrics-server
namespace: kube-system
labels:
k8s-app: metrics-server
spec:
selector:
matchLabels:
k8s-app: metrics-server
template:
metadata:
name: metrics-server
labels:
k8s-app: metrics-server
spec:
serviceAccountName: metrics-server
volumes:
# mount in tmp so we can safely use from-scratch images and/or read-only containers
- name: tmp-dir
emptyDir: {}
containers:
- name: metrics-server
image: zhaoqinchang/metrics-server:0.3.7 #修改镜像为刚刚拉取下来的镜像
imagePullPolicy: IfNotPresent
args:
- --cert-dir=/tmp
- --secure-port=4443
command: #添加以下三行command命令
- /metrics-server
- --kubelet-preferred-address-types=InternalIP
- --kubelet-insecure-tls
ports:
- name: main-port
containerPort: 4443
protocol: TCP
securityContext:
readOnlyRootFilesystem: true
runAsNonRoot: true
runAsUser: 1000
volumeMounts:
- name: tmp-dir
mountPath: /tmp
nodeSelector:
kubernetes.io/os: linux
---
apiVersion: v1
kind: Service
metadata:
name: metrics-server
namespace: kube-system
labels:
kubernetes.io/name: "Metrics-server"
kubernetes.io/cluster-service: "true"
spec:
selector:
k8s-app: metrics-server
ports:
- port: 443
protocol: TCP
targetPort: main-port
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: system:metrics-server
rules:
- apiGroups:
- ""
resources:
- pods
- nodes
- nodes/stats
- namespaces
- configmaps
verbs:
- get
- list
- watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: system:metrics-server
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: system:metrics-server
subjects:
- kind: ServiceAccount
name: metrics-server
namespace: kube-system
部署metric-server
kubectl apply -f components.yaml
clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created
clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created
rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created
apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created
serviceaccount/metrics-server created
deployment.apps/metrics-server created
service/metrics-server created
clusterrole.rbac.authorization.k8s.io/system:metrics-server created
clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created
查看metric-server部署节点
kubectl get pods -n kube-system -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
coredns-66bff467f8-h7rjz 1/1 Running 21 72d 10.244.0.142 master
coredns-66bff467f8-jvqf8 1/1 Running 21 72d 10.244.0.144 master
etcd-master 1/1 Running 23 72d 172.16.2.200 master
kube-apiserver-master 1/1 Running 97 72d 172.16.2.200 master
kube-controller-manager-master 1/1 Running 23 72d 172.16.2.200 master
kube-flannel-ds-amd64-26qv9 1/1 Running 28 72d 172.16.2.200 master
kube-flannel-ds-amd64-fzxxc 1/1 Running 16 72d 172.16.2.101 node1
kube-flannel-ds-amd64-lgggd 1/1 Running 3 3d5h 172.16.2.202 node2
kube-proxy-255z5 1/1 Running 23 72d 172.16.2.200 master
kube-proxy-8mh7c 1/1 Running 17 72d 172.16.2.101 node1
kube-proxy-gsbn6 1/1 Running 16 72d 172.16.2.202 node2
kube-scheduler-master 1/1 Running 23 72d 172.16.2.200 master
metrics-server-7b8dbfc8bc-l8sxd 1/1 Running 0 16s 10.244.1.163 node1
查看metric-server资源对象的详细信息
# kubectl describe pods metrics-server-7b8dbfc8bc-4ck84 -n kube-system
Name: metrics-server-7b8dbfc8bc-4ck84
Namespace: kube-system
Priority: 0
Node: node1/172.16.2.101
Start Time: Sun, 27 Sep 2020 15:25:03 +0800
Labels: k8s-app=metrics-server
pod-template-hash=7b8dbfc8bc
Annotations:
Status: Running
IP: 10.244.1.165
IPs:
IP: 10.244.1.165
Controlled By: ReplicaSet/metrics-server-7b8dbfc8bc
Containers:
metrics-server:
Container ID: docker://7db90ed46c704a75fbf42c0e7ad7996a0968ab26e1b04ec56367324865fb3abd
Image: zhaoqinchang/metrics-server:0.3.7
Image ID: docker-pullable://zhaoqinchang/metrics-server@sha256:c0efe772bb9e5c289db6cc4bc2002c268507d0226f2a3815f7213e00261c38e9
Port: 4443/TCP
Host Port: 0/TCP
Args:
--cert-dir=/tmp
--secure-port=4443
State: Running
Started: Sun, 27 Sep 2020 15:25:04 +0800
Ready: True
Restart Count: 0
Environment:
Mounts:
/tmp from tmp-dir (rw)
/var/run/secrets/kubernetes.io/serviceaccount from metrics-server-token-vszdg (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
tmp-dir:
Type: EmptyDir (a temporary directory that shares a pod's lifetime)
Medium:
SizeLimit:
metrics-server-token-vszdg:
Type: Secret (a volume populated by a Secret)
SecretName: metrics-server-token-vszdg
Optional: false
QoS Class: BestEffort
Node-Selectors: kubernetes.io/os=linux
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 31s default-scheduler Successfully assigned kube-system/metrics-server-7b8dbfc8bc-4ck84 to node1
Normal Pulled kubelet, node1 Container image "zhaoqinchang/metrics-server:0.3.7" already present on machine
Normal Created kubelet, node1 Created container metrics-server
Normal Started kubelet, node1 Started container metrics-server
查看metric.k8s.io是否出现在Kubernetes集群的API群组列表中
# kubectl api-versions | grep metrics
metrics.k8s.io/v1beta1
使用kubectl top命令
# kubectl top node
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
master 179m 8% 1660Mi 43%
node1 81m 4% 908Mi 23%
node2 78m 3% 1036Mi 26%
查看容器使用情况
[root@k8s-master kubernetes]# kubectl top pod
NAME CPU(cores) MEMORY(bytes)
nginxdocker-59845fd65f-kgnmc 0m 3Mi
nginxdocker-59845fd65f-rnvzg 0m 3Mi
nginxdocker-59845fd65f-zgrlc 0m 4Mi
tomcat7-54fb6dbfdc-ch42r 2m 123Mi
tomcat7-54fb6dbfdc-cmljd 2m 123Mi
tomcat7-54fb6dbfdc-ln4hk 2m 125Mi
Dashboard可视化插件就可以看到容器运行所占资源图形数据

