当前位置 博文首页 > noah-罗:K8S(17)二进制的1.15版本部署hpa自动伸缩

    noah-罗:K8S(17)二进制的1.15版本部署hpa自动伸缩

    作者:noah-罗 时间:2021-04-29 18:16

    K8S(17)二进制部署的K8S(1.15)部署hpa功能

    目录
    • K8S(17)二进制部署的K8S(1.15)部署hpa功能
      • 零、参考文件:
      • 一、生成metrics-proxy证书
      • 二、修改apiserver启动配置
      • 三、kubelet参数修改并重启
      • 四、下载metrics-server镜像及配置清单
        • A 获取配置清单(6个)
        • B 修改启动参数
        • C 应用配置清单并验证
      • 五、结果验证

    零、参考文件:

    参考01:https://www.cnblogs.com/tchua/p/10855001.html
    参考02:https://blog.csdn.net/jthello123/article/details/105468136
    参考03:http://blog.leanote.com/post/criss/k8s-metrics-server-2+

    友情提醒:

    #不要把启动文件中例如的
    --authentication-token-webhook=true
    # 自作聪明的改为
    --authentication-token-webhook true
    # 不然。。。。。
    

    一、生成metrics-proxy证书

    在管理机上生成证书配置文件及证书

    # metrics-proxy证书请求
    cat >metrics-proxy-csr.json <<'EOF'
    {
      "CN": "aggregator",
      "hosts": [],
      "key": {
        "algo": "rsa",
        "size": 2048
      },
      "names": [
        {
          "C": "CN",
          "ST": "beiJing",
          "L": "beiJing",
          "O": "zq",
          "OU": "ops"
        }
      ]
    }
    EOF
    
    #生成mertic证书
    cfssl gencert \
        -ca=ca.pem \
        -ca-key=ca-key.pem \
        -config=ca-config.json \
        -profile=peer \
        metrics-proxy-csr.json | cfssl-json -bare metrics-proxy
        
    #分发证书到master节点
    # profile=peer 中的peer,依据自己的配置改,反正需要有server端和client的证书权限
    #略,目录在 /opt/kubernetes/server/bin/cert/
    

    二、修改apiserver启动配置

    修改apiserver启动脚本,添加以下参数:

    vim /opt/kubernetes/server/bin/kube-apiserver.sh 
    
      --requestheader-allowed-names "" \
      --requestheader-extra-headers-prefix X-Remote-Extra- \
      --requestheader-group-headers X-Remote-Group \
      --requestheader-username-headers X-Remote-User \
      --proxy-client-cert-file ./cert/metrics-proxy.pem \
      --proxy-client-key-file  ./cert/metrics-proxy-key.pem \
    

    参数说明:

    • --requestheader-XXX --proxy-client-XXX

      是 kube-apiserver 的 aggregator layer 相关的配置参数,metrics-server & HPA 需要使用;

    • --requestheader-client-ca-file

      用于签名 --proxy-client-cert-file 和 --proxy-client-key-file 指定的证书(ca证书),在启用了 metric aggregator 时使用;

    注1:

    1. 如果 --requestheader-allowed-names 不为空,则--proxy-client-cert-file 证书的 CN 必须位于 allowed-names 中,默认为 aggregator;
    2. 如果 kube-apiserver 机器没有运行 kube-proxy,则还需要添加 --enable-aggregator-routing=true 参数

    重启apiserver

    supervisorctl restart kube-apiserver
    

    三、kubelet参数修改并重启

    vim /opt/kubernetes/server/bin/kubelet.sh
    #添加参数:
      --authentication-token-webhook=true \
    如果有参数:--read-only-port=0,则需删除
    
    
    #重启服务:
    supervisorctl restart kube-kubelet
    

    四、下载metrics-server镜像及配置清单

    A 获取配置清单(6个)

    项目地址:https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/metrics-server

    配置文件有两种,单机版和集群版获取方式:
    https://github.com/kubernetes-incubator/metrics-server (单机)
    https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/metrics-server (集群)
    集群版可以自动扩容metrics自己,推荐使用

    # 创建目录
    mkdir -p  /data/k8s-yaml/metrics/ 
    cd /data/k8s-yaml/metrics/
    
    # 下载配置文件
    metrics_url='https://raw.githubusercontent.com/kubernetes/kubernetes/v1.14.1/cluster/addons/metrics-server'
    wget $metrics_url/auth-delegator.yaml
    wget $metrics_url/auth-reader.yaml
    wget $metrics_url/metrics-apiservice.yaml
    wget $metrics_url/metrics-server-deployment.yaml
    wget $metrics_url/metrics-server-service.yaml
    wget $metrics_url/resource-reader.yaml
    

    B 修改启动参数

    ## 修改metrics-server-deployment.yaml
    ###1 mertics-server部分修改启动参数镜像地址
    containers:
          - name: metrics-server
            image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.1
            command:
            - /metrics-server
            - --metric-resolution=30s
            - --kubelet-insecure-tls
            - --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP
            
    ###2 metrics-server-nanny部分修改镜像地址及启动参数
    ......
    - name: metrics-server-nanny
            image: registry.cn-hangzhou.aliyuncs.com/google_containers/addon-resizer:1.8.4
    .....
    command:
              - /pod_nanny
              - --config-dir=/etc/config
              - --cpu=100m
              - --extra-cpu=0.5m
              - --memory=100Mi
              - --extra-memory=50Mi
              - --threshold=5
              - --deployment=metrics-server-v0.3.1
              - --container=metrics-server
              - --poll-period=300000
              - --estimator=exponential
            
    ### 在新的版本中,授权文内没有 node/stats 的权限,需要手动去添加resource-reader.yaml 
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: system:metrics-server
    rules:
    - apiGroups:
      - ""
      resources:
      - pods
      - nodes
      - nodes/stats  ## 添加此参数
      - namespaces
    

    mertics-server镜像参数解释:

    • --kubelet-insecure-tls:

      不验证客户端证书

    • --kubelet-preferred-address-types

      metrics-server连节点时默认是连接节点的主机名,但是coredns里面没有物理机主机名的解析,需要加个参数,让它连接节点的IP

    C 应用配置清单并验证

    kubectl apply -f .
    

    五、结果验证

    [root@mmkt-api01 ~]# kubectl top nodes
    NAME            CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
    xx01.host.com   411m         2%     36881Mi         57%
    xx02.host.com   509m         3%     33127Mi         51%
    
    bk