背景介绍

这篇文章主要介绍下我在k8s1.16的环境下安装metrics server的过程,以及遭遇到的问题。

步骤

  1. 配置api-server组件中的启动命令,以让其支持 Aggregation 的API形式。
vim  /etc/kubernetes/manifests/kube-apiserver.yaml 

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    component: kube-apiserver
    tier: control-plane
  name: kube-apiserver
  namespace: kube-system
spec:
  containers:
  - command:
    - kube-apiserver
    - --advertise-address=10.1.18.107
    - --allow-privileged=true
    - --authorization-mode=Node,RBAC
    - --client-ca-file=/etc/kubernetes/pki/ca.crt
    - --enable-admission-plugins=NodeRestriction
    - --enable-bootstrap-token-auth=true
    - --enable-aggregator-routing=true
    - --etcd-cafile=/etc/kubernetes/pki/etcd/ca.crt
    - --etcd-certfile=/etc/kubernetes/pki/apiserver-etcd-client.crt
    - --etcd-keyfile=/etc/kubernetes/pki/apiserver-etcd-client.key
    - --etcd-servers=https://127.0.0.1:2379
    - --insecure-port=0
    - --kubelet-client-certificate=/etc/kubernetes/pki/apiserver-kubelet-client.crt
    - --kubelet-client-key=/etc/kubernetes/pki/apiserver-kubelet-client.key
    - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
    - --proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.crt
    - --proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client.key
    - --requestheader-allowed-names=front-proxy-client
    - --requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt
    - --requestheader-extra-headers-prefix=X-Remote-Extra-
    - --requestheader-group-headers=X-Remote-Group
    - --requestheader-username-headers=X-Remote-User
    - --secure-port=6443
    - --service-account-key-file=/etc/kubernetes/pki/sa.pub
    - --service-cluster-ip-range=10.96.0.0/12
    - --tls-cert-file=/etc/kubernetes/pki/apiserver.crt
    - --tls-private-key-file=/etc/kubernetes/pki/apiserver.key
 ....

主要修改某些启动参数即可,大部分的启动参数是默认都生成好的,主要需要修改的启动参数需要看官方文档,因为文档才是最新的。不跟着文档走,很多地方都有可能出错。我这个时候看文档,给的参数是这些。让自己的启动命令包含这些内容即可。
在这里插入图片描述
k8s配置聚合API官方文档

  1. 使用官方的metrics-server资源清单文件进行部署。
    Metrics Server Github链接
    根据Github主页上的README部署即可。一定要看文档,很多Blog写的内容都已经被废弃了,你跟着走会踩很多坑。
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.6/components.yaml

踩坑环节

  1. 镜像问题。这个很好解决。换个源就好了
MY_REGISTRY=registry.cn-hangzhou.aliyuncs.com/google_containers 
docker pull ${MY_REGISTRY}/metrics-server-amd64:v0.3.6
docker tag ${MY_REGISTRY}/metrics-server-amd64:v0.3.6  k8s.gcr.io/metrics-server-amd64:v0.3.6
docker rmi ${MY_REGISTRY}/metrics-server-amd64:v0.3.6
  1. 域名解析问题
    如果你查看metrics server的日志,发现它表示无法解析hostname。那就需要解决这个问题。
# 查看容器日志命令,替换自己的pod名称
kubectl logs -f metric-metrics-server-697bd98b8b-kvg2d -n kube-system
# 报错
unable to fetch node metrics for node "master": no metrics known for node
# 这是告诉你他解析不出这个域名,主要的原因就在于测试环境中的域名,一般都是写在/etc/hosts文件中的。

这个问题一般有两种解决方式

  • DNS 服务里面添加上 hostname 的解析,将xxxx替换成自己的IP地址即可。
$ kubectl edit configmap coredns -n kube-system
apiVersion: v1
data:
  Corefile: |
    .:53 {
        errors
        health
        hosts {  # 添加集群节点hosts隐射信息
          x.x.x.x master
          x.x.x.x node1
          x.x.x.x node2
        }
        kubernetes cluster.local in-addr.arpa ip6.arpa {
           pods insecure
           upstream
           fallthrough in-addr.arpa ip6.arpa
        }
        prometheus :9153
        proxy . /etc/resolv.conf
        cache 30
        reload
    }
kind: ConfigMap
metadata:
  creationTimestamp: 2019-05-18T11:07:46Z
  name: coredns
  namespace: kube-system
  • 修改部署metrics-server的yaml文件。
vim components.yaml 
        args:
          - --cert-dir=/tmp
          - --secure-port=4443
          - --kubelet-insecure-tls
          - --kubelet-preferred-address-types=InternalIP

在这里插入图片描述
新增两个命令行参数即可。
我在同时使用了两种方式后,部署成功。

3.TLS安全认证问题
如果部署后有证书问题,就需要在部署文件中声明加载相关内容。主要是使用--kubelet-insecure-tls来跳过TLS安全认证。

总结

安装某个组件的时候,可以参考别人的安装过程,然后根据他安装过程所提到的知识点,去找到对应的官方doc,这才能够保证一定能够安装成功。命令和配置文件可能是不一样的,但知识点和思想都是相同的,官方文档才能保证你一定不出问题。还有就是报错这种东西就是疯狂套娃。。。。。

总结安装步骤

  • 修改api-server的启动命令
  • 修改metrics server的配置文件
  • 为coredns添加相关的域名解析服务
  • 遇到各种坑,请学会stack over flow 和github
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐