K8S(17)二進位制的1.15版本部署hpa自動伸縮

發表於2021-04-29

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

零、參考檔案:

參考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%

相關文章