Kubernetes(k8s)安装Metrics Server详解

目录

1. Metrics Server 与 Kubernetes 版本对照

2. 下载部署清单

3. 修改镜像和配置(重要)

3.1 替换镜像源

3.2 添加安全参数

4. 部署与验证

5. 完整的yaml文件

6. 注意事项

6.1 版本兼容性

6.2 生产环境安全

6.3 问题排查

7. 参考链接


1. Metrics Server 与 Kubernetes 版本对照

Metrics ServerMetrics API group/versionSupported Kubernetes version
0.8.xmetrics.k8s.io/v1beta11.31+
0.7.xmetrics.k8s.io/v1beta11.27+
0.6.xmetrics.k8s.io/v1beta11.25+
0.5.xmetrics.k8s.io/v1beta1*1.8+
0.4.xmetrics.k8s.io/v1beta1*1.8+
0.3.xmetrics.k8s.io/v1beta11.8-1.21

本文以社区版 v0.6.1 为例,说明安装流程和常见问题处理。

2. 下载部署清单

wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.6.1/components.yaml

3. 修改镜像和配置(重要)

由于网络原因,直接拉取 k8s.gcr.io 的镜像可能失败,你需要替换部署文件中的镜像地址,并添加必要的启动参数。

3.1 替换镜像源

将原镜像 k8s.gcr.io/metrics-server/metrics-server:v0.6.1 替换为可访问的镜像源,例如阿里云镜像仓库。

# 修改 components.yaml 中的 image 字段
image: registry.aliyuncs.com/google_containers/metrics-server:v0.6.1

3.2 添加安全参数

在测试环境中,为避免 TLS 证书验证导致 metrics-server 无法启动,你需要在 Deployment 的 args 中添加以下参数。

- --kubelet-insecure-tls
kubectl edit deployment metrics-server -n kube-system
containers:
- args:
  - --cert-dir=/tmp
  - --secure-port=4443
  # ... 可能还有其他参数 ...
  - --kubelet-insecure-tls  # 添加这一行
  image: registry.k8s.io/metrics-server/metrics-server:vx.x.x  # 您的镜像地址
  name: metrics-server

不加参数- --kubelet-insecure-tls,会报错如下图所示:

4. 部署与验证

应用修改后的配置,并检查运行状态。

kubectl apply -f components.yaml
# 查看 metrics-server Pod 是否运行正常
kubectl get pods -n kube-system -l k8s-app=metrics-server

如果 Pod 状态为 Running,通常表示安装成功。你可以通过以下命令验证资源监控数据是否正常采集:

kubectl top nodes
kubectl top pods --all-namespaces

5. 完整的yaml文件

修改镜像和- --kubelet-insecure-tls参数后的yaml文件

apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    k8s-app: metrics-server
  name: metrics-server
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  labels:
    k8s-app: metrics-server
    rbac.authorization.k8s.io/aggregate-to-admin: "true"
    rbac.authorization.k8s.io/aggregate-to-edit: "true"
    rbac.authorization.k8s.io/aggregate-to-view: "true"
  name: system:aggregated-metrics-reader
rules:
- apiGroups:
  - metrics.k8s.io
  resources:
  - pods
  - nodes
  verbs:
  - get
  - list
  - watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  labels:
    k8s-app: metrics-server
  name: system:metrics-server
rules:
- apiGroups:
  - ""
  resources:
  - nodes/metrics
  verbs:
  - get
- apiGroups:
  - ""
  resources:
  - pods
  - nodes
  verbs:
  - get
  - list
  - watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  labels:
    k8s-app: metrics-server
  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: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  labels:
    k8s-app: metrics-server
  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: ClusterRoleBinding
metadata:
  labels:
    k8s-app: metrics-server
  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
---
apiVersion: v1
kind: Service
metadata:
  labels:
    k8s-app: metrics-server
  name: metrics-server
  namespace: kube-system
spec:
  ports:
  - name: https
    port: 443
    protocol: TCP
    targetPort: https
  selector:
    k8s-app: metrics-server
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    k8s-app: metrics-server
  name: metrics-server
  namespace: kube-system
spec:
  selector:
    matchLabels:
      k8s-app: metrics-server
  strategy:
    rollingUpdate:
      maxUnavailable: 0
  template:
    metadata:
      labels:
        k8s-app: metrics-server
    spec:
      containers:
      - args:
        - --cert-dir=/tmp
        - --secure-port=4443
        - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
        - --kubelet-use-node-status-port
        - --metric-resolution=15s
        - --kubelet-insecure-tls
        image: registry.aliyuncs.com/google_containers/metrics-server:v0.6.1
        imagePullPolicy: IfNotPresent
        livenessProbe:
          failureThreshold: 3
          httpGet:
            path: /livez
            port: https
            scheme: HTTPS
          periodSeconds: 10
        name: metrics-server
        ports:
        - containerPort: 4443
          name: https
          protocol: TCP
        readinessProbe:
          failureThreshold: 3
          httpGet:
            path: /readyz
            port: https
            scheme: HTTPS
          initialDelaySeconds: 20
          periodSeconds: 10
        resources:
          requests:
            cpu: 100m
            memory: 200Mi
        securityContext:
          allowPrivilegeEscalation: false
          readOnlyRootFilesystem: true
          runAsNonRoot: true
          runAsUser: 1000
        volumeMounts:
        - mountPath: /tmp
          name: tmp-dir
      nodeSelector:
        kubernetes.io/os: linux
      priorityClassName: system-cluster-critical
      serviceAccountName: metrics-server
      volumes:
      - emptyDir: {}
        name: tmp-dir
---
apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:
  labels:
    k8s-app: metrics-server
  name: v1beta1.metrics.k8s.io
spec:
  group: metrics.k8s.io
  groupPriorityMinimum: 100
  insecureSkipTLSVerify: true
  service:
    name: metrics-server
    namespace: kube-system
  version: v1beta1
  versionPriority: 100

6. 注意事项

6.1 版本兼容性

不同版本的 metrics-server 对 Kubernetes 集群有兼容性要求。选择版本时,请务必参考官方或云服务商提供的兼容性矩阵

​​​​​​​6.2 生产环境安全

在上述示例中,我们使用了 --kubelet-insecure-tls 参数来跳过证书验证,这仅在测试环境中推荐使用。在生产环境中,为了安全起见,你应该配置和使用有效的 TLS 证书。

6.3 ​​​​​​​问题排查

如果安装后 metrics-server 无法正常运行,一个有效的排查方法是查看其 Pod 的日志

kubectl logs -n kube-system [metrics-server-pod-name]

7. 参考链接

https://github.com/kubernetes-sigs/metrics-server

回答: 安装k8smetrics-server有多种方法。根据引用\[1\],可以通过执行安装命令来安装metrics-server。在执行安装命令之前,需要先下载metrics-server镜像,并创建一个components.yaml文件,将相应的脚本复制到文件中。然后执行安装命令,即可完成安装安装完成后,可以通过查看metrics-server的pod运行状态来确认安装是否成功。另外,可以使用kubectl top命令来测试metrics-server的使用。根据引用\[2\],在k8s集群中下载metrics-server镜像,并创建一个components-v0.5.0.yaml文件,将相应的脚本复制到文件中。然后执行安装命令,并查看metrics-server的pod运行状态,以及测试kubectl top命令的使用。根据引用\[3\],根据metrics-server的要求,需要下载metrics-server0.6版本的yaml文件并进行修改,然后执行安装。 #### 引用[.reference_title] - *1* [k8s || 安装metrics server](https://blog.youkuaiyun.com/qq_60271706/article/details/129800732)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [k8s安装部署metrics-server;监测集群状况](https://blog.youkuaiyun.com/weixin_39589455/article/details/128620213)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [二十五、Kubernetes安装metrics-server详解、实例](https://blog.youkuaiyun.com/u011837804/article/details/128487211)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值