目錄
基于Prometheus監控Kubernetes集群安裝部署
一、環境準備
二、部署kubernetes集群
三、部署Prometheus監控平臺
四、部署Grafana服務
五、grafana? web操作
基于Prometheus監控Kubernetes集群安裝部署
一、環境準備
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+
項目拓撲
?
所有主機配置禁用防火墻和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/hosts192.168.100.131 k8s-master192.168.100.132 k8s-node01192.168.100.133 k8s-node02EOF
[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環境
1)三臺主機上分別部署 Docker 環境,因為 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集群
三個節點都需要安裝下面三個組件
kubeadm:安裝工具,使所有的組件都會以容器的方式運行
kubectl:客戶端連接K8S API工具
kubelet:運行在node節點,用來啟動容器的工具
使用 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 方式是無法啟動的,需要加入節點或初始化為 master 后才可啟動成功。
????????Kubeadm 提供了很多配置項,Kubeadm 配置在 Kubernetes 集群中是存儲在ConfigMap 中的,也可將這些配置寫入配置文件,方便管理復雜的配置項。Kubeadm 配內容是通過 kubeadm config 命令寫入配置文件的。
????????在master節點安裝,master 定于為192.168.100.131,通過如下指令創建默認的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節點
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節點
[root@k8s-master ~]# kubeadm init --config=init-config.yaml //初始化安裝K8S
?
3)根據提示操作
????????kubectl 默認會在執行的用戶家目錄下面的.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 通過初始化安裝是不包括網絡插件的,也就是說初始化之后是不具備相關網絡功能的,比如 k8s-master 節點上查看節點信息都是“Not Ready”狀態、Pod 的 CoreDNS無法提供服務等。
?
6、安裝node節點
1)根據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
?
????????前面已經提到,在初始化 k8s-master 時并沒有網絡相關配置,所以無法跟 node 節點通信,因此狀態都是“NotReady”。但是通過 kubeadm join 加入的 node 節點已經在k8s-master 上可以看到。
Master 節點NotReady 的原因就是因為沒有使用任何的網絡插件,此時Node 和Master的連接還不正常。目前最流行的Kubernetes 網絡插件有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
?
已經是ready狀態
8、部署測試應用
1)所有node主機導入測試鏡像
[root@k8s-master?~]# docker pull??nginx
?
2)在Kubernetes集群中創建一個pod,驗證是否正常運行。
[root@k8s-master ~]# mkdir demo
[root@k8s-master ~]# cd demo
[root@k8s-master demo]# vim nginx-deployment.yaml
????????創建完 Deployment 的資源清單之后,使用 create 執行資源清單來創建容器。通過 get pods 可以查看到 Pod 容器資源已經自動創建完成。
[root@k8s-master demo]# kubectl create -f nginx-deployment.yaml
[root@k8s-master demo]# kubectl get pods
[root@k8s-master demo]# kubectl get pods -o wide
?
3)創建Service資源清單
????????在創建的 nginx-service 資源清單中,定義名稱為 nginx-service 的 Service、標簽選擇器為 app: nginx、type 為 NodePort 指明外部流量可以訪問內部容器。在 ports 中定義暴露的端口庫號列表,對外暴露訪問的端口是 80,容器內部的端口也是 80。
[root@k8s-master demo]# vim nginx-service.yaml
[root@k8s-master1 demo]# kubectl create -f nginx-service.yaml
[root@k8s-master demo]# kubectl get svc
?
.訪問測試
[root@k8s-master demo]# curl 10.101.253.90:80
?
通過瀏覽器訪問nginx:http://192.168.100.131:31367?
?
三、部署Prometheus監控平臺
在master節點/opt目錄下新建pgmonitor目錄
[root@k8s-master ~]# mkdir pgmonitor
[root@k8s-master ~]# cd pgmonitor/
將下載yaml包上傳至/opt/pgmonitor目錄并解壓
[root@k8s-master ~]# unzip k8s-prometheus-grafana-master.zip
?
1)部署守護進程
[root@k8s-master pgmonitor]# cd k8s-prometheus-grafana-master/
[root@k8s-master k8s-prometheus-grafana-master]# kubectl create -f node-exporter.yaml
2)部署其他yaml文件
進入/pgmonitor/k8s-prometheus-grafana-master/prometheus目錄
[root@k8s-master k8s-prometheus-grafana-master]# cd prometheus
3)部署rbac
[root@k8s-master prometheus]# kubectl create -f rbac-setup.yaml
4)部署configmap.yaml
[root@k8s-master prometheus]# kubectl create -f configmap.yaml
5)部署prometheus.deploy.yml
[root@k8s-master prometheus]# kubectl create -f prometheus.deploy.yml
6)部署prometheus.svc.yml
[root@k8s-master prometheus]# kubectl create -f prometheus.svc.yml
7)查看prometheus狀態
[root@k8s-master prometheus]# kubectl get pods -n kube-system
稍等一會,再次查看!
[root@k8s-master prometheus]# kubectl get pods -n kube-system
?
四、部署Grafana服務
進入/opt/pgmonitor/k8s-prometheus-grafana-master/grafana目錄
[root@k8s-master prometheus]# cd ../grafana/
1)部署grafana-deploy.yaml
[root@k8s-master grafana]# kubectl create -f grafana-deploy.yaml
2)部署grafana-svc.yaml
[root@k8s-master grafana]# kubectl create -f grafana-svc.yaml
3)部署grafana-ing.yaml
[root@k8s-master grafana]# kubectl create -f grafana-ing.yaml
4)查看Grafana狀態
[root@k8s-master grafana]# kubectl get pods -n
2、配置Grafana數據源
1)查看grafana的端口
[root@k8s-master grafana]# kubectl get svc -n
?
五、grafana? web操作
2)通過瀏覽器訪問
grafana,http://[masterIP]:[grafana端口]
例如:http://192.168.100.131:30503,默認的用戶名和密碼:admin/admin
?
3)設置DataSource
設置顯示數據的模版
?
輸入315并移除光標,等一會兒即可進入下一個頁面
?
選擇自己定義的數據源名稱
?
至此已經利用Prometheus+Granfana監控了Kubernetes平臺。