第四階段
時 ?間:2023年8月18日
參加人:全班人員
內(nèi) ?容:
基于metrics-server彈性伸縮
目錄
一、Kubernetes部署方式
(一)minikube
(二)二進制包
(三)Kubeadm
二、基于kubeadm部署K8S集群
(一)環(huán)境準備
(二)部署kubernetes集群
(三)安裝Dashboard UI
(四)metrics-server服務(wù)部署
(五)彈性伸縮
一、Kubernetes部署方式
官方提供Kubernetes部署3種方式
(一)minikube
????????Minikube是一個工具,可以在本地快速運行一個單點的Kubernetes,嘗試Kubernetes或日常開發(fā)的用戶使用。不能用于生產(chǎn)環(huán)境。
官方文檔:Install Tools | Kubernetes
(二)二進制包
????????從官方下載發(fā)行版的二進制包,手動部署每個組件,組成Kubernetes集群。目前企業(yè)生產(chǎn)環(huán)境中主要使用該方式。
下載地址:
https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.11.md#v1113
(三)Kubeadm
????????Kubeadm 是谷歌推出的一個專門用于快速部署 kubernetes 集群的工具。在集群部署的過程中,可以通過 kubeadm init 來初始化 master 節(jié)點,然后使用 kubeadm join 將其他的節(jié)點加入到集群中。
????????1、Kubeadm 通過簡單配置可以快速將一個最小可用的集群運行起來。它在設(shè)計之初關(guān)注點是快速安裝并將集群運行起來,而不是一步步關(guān)于各節(jié)點環(huán)境的準備工作。同樣的,kubernetes 集群在使用過程中的各種插件也不是 kubeadm 關(guān)注的重點,比如 kubernetes集群 WEB Dashboard、prometheus 監(jiān)控集群業(yè)務(wù)等。kubeadm 應(yīng)用的目的是作為所有部署的基礎(chǔ),并通過 kubeadm 使得部署 kubernetes 集群更加容易。
????????2、Kubeadm 的簡單快捷的部署可以應(yīng)用到如下三方面:
·新用戶可以從 kubeadm 開始快速搭建 Kubernete 并了解。
·熟悉 Kubernetes 的用戶可以使用 kubeadm 快速搭建集群并測試他們的應(yīng)用。
·大型的項目可以將 kubeadm 配合其他的安裝工具一起使用,形成一個比較復(fù)雜的系統(tǒng)。
·官方文檔:
Kubeadm | Kubernetes
Installing kubeadm | Kubernetes
二、基于kubeadm部署K8S集群
(一)環(huán)境準備
IP地址 |
主機名 |
組件 |
192.168.100.131 |
k8s-master |
kubeadm、kubelet、kubectl、docker-ce |
192.168.100.132 |
k8s-node01 |
kubeadm、kubelet、kubectl、docker-ce |
192.168.100.133 |
k8s-node02 |
kubeadm、kubelet、kubectl、docker-ce |
注意:所有主機配置推薦CPU:2C+ ?Memory:2G+
1、主機初始化配置
所有主機配置禁用防火墻和selinux
[root@localhost ~]# setenforce 0
[root@localhost ~]# iptables -F
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# systemctl stop NetworkManager
[root@localhost ~]# systemctl disable NetworkManager
[root@localhost ~]# sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config
2、配置主機名并綁定hosts,不同主機名稱不同
[root@localhost ~]# hostname k8s-master
[root@localhost ~]# bash
[root@k8s-master ~]# cat << EOF >> /etc/hosts
192.168.100.131 k8s-master
192.168.100.132 k8s-node01
192.168.100.133 k8s-node02
EOF
[root@localhost ~]# hostname k8s-node01
[root@k8s-node01 ~]#?cat?/etc/hosts
[root@localhost ~]# hostname k8s-node02
[root@k8s-node02 ~]#cat?/etc/hosts
3、主機配置初始化
[root@k8s-master ~]# yum -y install vim wget net-tools lrzsz
[root@k8s-master ~]# swapoff -a
[root@k8s-master ~]# sed -i '/swap/s/^/#/' /etc/fstab
[root@k8s-master ~]# cat << EOF >> /etc/sysctl.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
[root@k8s-master ~]# modprobe br_netfilter
[root@k8s-master ~]# sysctl -p
4、部署docker環(huán)境
1)三臺主機上分別部署 Docker 環(huán)境,因為 Kubernetes 對容器的編排需要 Docker 的支持。
[root@k8s-master ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@k8s-master ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
2)使用 YUM 方式安裝 Docker 時,推薦使用阿里的 YUM 源。
[root@k8s-master ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3)清除緩存
[root@k8s-master ~]# yum clean all && yum makecache fast
4)啟動docker
[root@k8s-master ~]# yum -y install docker-ce
[root@k8s-master ~]# systemctl start docker
[root@k8s-master ~]# systemctl enable docker
5)鏡像加速器(所有主機配置)
[root@k8s-master ~]# cat << END > /etc/docker/daemon.json
{ ????"registry-mirrors":[ "https://nyakyfun.mirror.aliyuncs.com" ]
}
END
6)重啟docker
[root@k8s-master ~]# systemctl daemon-reload
[root@k8s-master ~]# systemctl restart docker
(二)部署kubernetes集群
1、組件介紹
三個節(jié)點都需要安裝下面三個組件
kubeadm:安裝工具,使所有的組件都會以容器的方式運行
kubectl:客戶端連接K8S API工具
kubelet:運行在node節(jié)點,用來啟動容器的工具
2、配置阿里云yum源
使用 YUM 方式安裝 Kubernetes時,推薦使用阿里的 YUM 源。
[root@k8s-master ~]# ls /etc/yum.repos.d/
[root@k8s-master ~]# cat > /etc/yum.repos.d/kubernetes.repo
3、安裝kubelet kubeadm kubectl
所有主機配置
[root@k8s-master ~]# yum install -y kubelet-1.20.0?kubeadm-1.20.0?kubectl-1.20.0
[root@k8s-master ~]# systemctl enable kubelet
[root@k8s-master ~]# kubectl version
????????kubelet 剛安裝完成后,通過 systemctl start kubelet 方式是無法啟動的,需要加入節(jié)點或初始化為 master 后才可啟動成功。
4、配置init-config.yaml
Kubeadm 提供了很多配置項,Kubeadm 配置在 Kubernetes 集群中是存儲在ConfigMap 中的,也可將這些配置寫入配置文件,方便管理復(fù)雜的配置項。Kubeadm 配內(nèi)容是通過 kubeadm config 命令寫入配置文件的。
在master節(jié)點安裝,master 定于為192.168.100.131,通過如下指令創(chuàng)建默認的init-config.yaml文件:
[root@k8s-master ~]# kubeadm config print init-defaults > init-config.yaml
init-config.yaml配置
[root@k8s-master ~]# cat init-config.yaml
5、安裝master節(jié)點
1)拉取所需鏡像
[root@k8s-master ~]# kubeadm config images list --config init-config.yaml
[root@k8s-master ~]# kubeadm config images pull?--config init-config.yaml
2)安裝matser節(jié)點
[root@k8s-master ~]# kubeadm init --config=init-config.yaml //初始化安裝K8S
3)根據(jù)提示操作
kubectl 默認會在執(zhí)行的用戶家目錄下面的.kube 目錄下尋找config 文件。這里是將在初始化時[kubeconfig]步驟生成的admin.conf 拷貝到.kube/config
[root@k8s-master ~]# mkdir -p $HOME/.kube
[root@k8s-master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s-master ~]# chown $(id -u):$(id -g) $HOME/.kube/config
????????Kubeadm 通過初始化安裝是不包括網(wǎng)絡(luò)插件的,也就是說初始化之后是不具備相關(guān)網(wǎng)絡(luò)功能的,比如 k8s-master 節(jié)點上查看節(jié)點信息都是“Not Ready”狀態(tài)、Pod 的 CoreDNS無法提供服務(wù)等。
6、安裝node節(jié)點
1)根據(jù)master安裝時的提示信息
[root@k8s-node01 ~]# kubeadm join 192.168.100.131:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:78bdd0f01660f4e84355b70aa8807cf1d0d6325b0b28502b29c241563e93b4ae
[root@k8s-master ~]# kubectl get nodes
[root@k8s-node02 ~]# kubeadm join 192.168.100.131:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:78bdd0f01660f4e84355b70aa8807cf1d0d6325b0b28502b29c241563e93b4ae
Master操作:
[root@k8s-master ~]# kubectl get nodes
????????前面已經(jīng)提到,在初始化 k8s-master 時并沒有網(wǎng)絡(luò)相關(guān)配置,所以無法跟 node 節(jié)點通信,因此狀態(tài)都是“NotReady”。但是通過 kubeadm join 加入的 node 節(jié)點已經(jīng)在k8s-master 上可以看到。
7、安裝flannel
????????Master 節(jié)點NotReady 的原因就是因為沒有使用任何的網(wǎng)絡(luò)插件,此時Node 和Master的連接還不正常。目前最流行的Kubernetes 網(wǎng)絡(luò)插件有Flannel、Calico、Canal、Weave 這里選擇使用flannel。
所有主機:
master上傳kube-flannel.yml,所有主機上傳flannel_v0.12.0-amd64.tar,cni-plugins-linux-amd64-v0.8.6.tgz
[root@k8s-master ~]# docker load < flannel_v0.12.0-amd64.tar
上傳插件:
[root@k8s-master ~]# tar xf cni-plugins-linux-amd64-v0.8.6.tgz
[root@k8s-master ~]# cp flannel /opt/cni/bin/
master上傳kube-flannel.yml
master主機配置:
[root@k8s-master ~]# kubectl apply -f kube-flannel.yml
[root@k8s-master ~]# kubectl get nodes
[root@k8s-master ~]# kubectl get pods -n kube-system
已經(jīng)是ready狀態(tài)
(三)安裝Dashboard UI
1、部署Dashboard
dashboard的github倉庫地址:https://github.com/kubernetes/dashboard
代碼倉庫當(dāng)中,有給出安裝示例的相關(guān)部署文件,我們可以直接獲取之后,直接部署即可
[root@k8s-master ~]# wget https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended.yaml
????????默認這個部署文件當(dāng)中,會單獨創(chuàng)建一個名為kubernetes-dashboard的命名空間,并將kubernetes-dashboard部署在該命名空間下。dashboard的鏡像來自docker hub官方,所以可不用修改鏡像地址,直接從官方獲取即可。
2、開放端口設(shè)置
????????在默認情況下,dashboard并不對外開放訪問端口,這里簡化操作,直接使用nodePort的方式將其端口暴露出來,修改serivce部分的定義:
所有主機下載鏡像
[root@k8s-master ~]# docker pull kubernetesui/dashboard:v2.0.0
[root@k8s-master ~]# docker pull kubernetesui/metrics-scraper:v1.0.4
[root@k8s-master ~]# vim recommended.yaml
3、權(quán)限配置
配置一個超級管理員權(quán)限
[root@k8s-master ~]# vim recommended.yaml
[root@k8s-master ~]# kubectl apply -f recommended.yaml
[root@k8s-master ~]# kubectl get pods -n ?kubernetes-dashboard
[root@k8s-master ~]# kubectl get pods -A ?-o wide
4、訪問Token配置
使用谷歌瀏覽器測試訪問 https://192.168.100.131:32443
????????可以看到出現(xiàn)如上圖畫面,需要我們輸入一個kubeconfig文件或者一個token。事實上在安裝dashboard時,也為我們默認創(chuàng)建好了一個serviceaccount,為kubernetes-dashboard,并為其生成好了token,
我們可以通過如下指令獲取該sa的token:
[root@k8s-master ~]# kubectl describe secret -n kubernetes-dashboard $(kubectl get secret -n kubernetes-dashboard |grep kubernetes-dashboard-token | awk '{print $1}') |grep token | awk '{print $2}'
輸入獲取的token
查看集群概況:
查看集群roles:
查看集群namespaces:
查看集群nodes:
查看集群pods:
(四)metrics-server服務(wù)部署
1、在Node節(jié)點上下載鏡像
heapster已經(jīng)被metrics-server取代,metrics-server是K8S中的資源指標獲取工具
所有node節(jié)點上
[root@k8s-node01 ~]# docker pull bluersw/metrics-server-amd64:v0.3.6
[root@k8s-node01 ~]# docker tag bluersw/metrics-server-amd64:v0.3.6 k8s.gcr.io/metrics-server-amd64:v0.3.6
2、修改 Kubernetes apiserver 啟動參數(shù)
在kube-apiserver項中添加如下配置選項 修改后apiserver會自動重啟
[root@k8s-master ~]# vim /etc/kubernetes/manifests/kube-apiserver.yaml
3、Master上進行部署
[root@k8s-master ~]# wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.6/components.yaml
修改安裝腳本:
[root@k8s-master ~]# vim components.yaml
[root@k8s-master ~]# kubectl create -f components.yaml
等待1-2分鐘后查看結(jié)果
[root@k8s-master ~]# kubectl top nodes
再回到dashboard界面可以看到CPU和內(nèi)存使用情況了
(五)彈性伸縮
1、彈性伸縮介紹
????????HPA(Horizontal Pod Autoscaler,Pod水平自動伸縮)的操作對象是replication controller, deployment, replica set, stateful set 中的pod數(shù)量。注意,Horizontal Pod Autoscaling不適用于無法伸縮的對象,例如DaemonSets。
????????HPA根據(jù)觀察到的CPU使用量與用戶的閾值進行比對,做出是否需要增減實例(Pods)數(shù)量的決策??刂破鲿ㄆ谡{(diào)整副本控制器或部署中副本的數(shù)量,以使觀察到的平均CPU利用率與用戶指定的目標相匹配。
2、彈性伸縮工作原理
????????Horizontal Pod Autoscaler 會實現(xiàn)為一個控制循環(huán),其周期由--horizontal-pod-autoscaler-sync-period選項指定(默認15秒)。
????????在每個周期內(nèi),controller manager都會根據(jù)每個HorizontalPodAutoscaler定義的指定的指標去查詢資源利用率。 controller manager從資源指標API(針對每個pod資源指標)或自定義指標API(針對所有其他指標)獲取指標。
3、彈性伸縮實戰(zhàn)
[root@k8s-master ~]# mkdir hpa
[root@k8s-master ~]# cd hpa
創(chuàng)建hpa測試應(yīng)用的deployment
[root@k8s-master hpa]# vim nginx.yaml
使用的資源是: CPU 0.010個核,內(nèi)存100M
[root@k8s-master hpa]# kubectl apply -f nginx.yaml
[root@k8s-master hpa]# kubectl get pod
創(chuàng)建hpa策略
[root@k8s-master hpa]# kubectl autoscale --max=10 --min=1 --cpu-percent=5 deployment hpa-test
[root@k8s-master ~]# kubectl get hpa
模擬業(yè)務(wù)壓力測試
[root@k8s-master ~]# kubectl get pod -o wide
[root@k8s-master ~]# while true;do curl -I 10.244.1.4?;done
觀察資源使用情況及彈性伸縮情況
[root@k8s-master ~]# kubectl get hpa文章來源:http://www.zghlxwxcb.cn/news/detail-652248.html
[root@k8s-master ~]# kubectl get pod
查看cpu情況:
將壓力測試終止后,稍等一小會兒pod數(shù)量會自動縮減到1
[root@k8s-master ~]# kubectl get pod
刪除hpa策略
[root@k8s-master ~]# kubectl delete hpa hpa-test
[root@k8s-master ~]# kubectl get hpa
文章來源地址http://www.zghlxwxcb.cn/news/detail-652248.html
到了這里,關(guān)于【k8s、云原生】基于metrics-server彈性伸縮的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!