当前位置: 首页 > news >正文

almalinux9.6系统:k8s可选组件安装(2)

almalinux9.6系统:k8s可选组件安装(2)

  • 一、介绍
  • 二、可选组件
    • 1、ingress
      • 安装前修改
      • 外部nginx转发
    • 2、dashboard
      • 安装前修改
      • 创建dashboard-ingress
      • 创建访问用户dashboard-admin
    • 3、系统监控-Promethues+grafana
      • 安装前修改
      • 创建promethues-ingress
      • promethues和grafana初始化

一、介绍

上篇文章我们介绍了kubernetes的flannel和metrics组件,然后通过metrics监控做了HPA/VPA自动扩缩容实验还看到了现象。
本来计划是用一篇文章写完kubernetes的可选组件,但是上一篇HPA/VPA实验太长了避免大家审美疲劳我就将剩下的可选组件放到这里了。
绝对不是我想水一篇文章,绝对不是!

机器信息:

主机名IP地址
almalinux-master-192e168e100e30192.168.100.30
almalinux-node01-192e168e100e31192.168.100.31
almalinux-node02-192e168e100e32192.168.100.32

版本信息:

描述版本
almalinux9.65.14.0-570.12.1.el9_6.x86_64
ingressv1.13.1
dashboardv2.7.0
promethues+grafanav0.15

容器镜像压缩包:百度云

二、可选组件

1、ingress

Ingress是kubernetes中管理HTTP/HTTPS流量入口的核心组件,通过统一规则实现域名路由、SSL终止、路径转发等功能,适用于多服务共享入口、需要HTTPS加密、路径极路由等场景,是构建kubernetes集群外部访问层的首选方案。实际使用时需要配合具体的ingress控制器如nginx-ingress才能生效。
我部署环境到现在理解ingress就是方便我们访问了——》比如之前做实验创建了svc之后需要再浏览器输入【IP地址:端口号】来进行访问,现在安装了ingress之后,我们创建svc之后在创建一个ingress之后就可以通过【域名】来访问了。好比你访问百度,直接输入www.baidu.com和输入公网地址:端口号来访问百度是一样的(这个公网地址还会变化)。

github地址:ingress仓库
在这里插入图片描述
我们登录ingress仓库之后,往下划拉下,在README就能看到版本适配了。k8s-1.33版本对应可以部署1.13.0和1.13.1,整个最新的就部署1.13.1。
在这里插入图片描述

我这里还是用yaml方式部署——》点击tag找controller开头的,这里你就往下巴拉,就能看到contriller的1.13.1版本了。
在这里插入图片描述
接着我们查看那下要执行的yaml文件位置——》ingress-nginx/deploy/static/provider/cloud/
在这里插入图片描述

下载这里我们可以使用wget直接下载或者是浏览器页面进行下载然后上传——》我这里wget无法正常下载,我只能浏览器下载文件上传到机器上了。

wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.13.1/deploy/static/provider/baremetal/deploy.yaml

在这里插入图片描述
还是老样子,我们将容器镜像导入【两台node节点】

ll /tmp/docker-images/kubernetes-ingress-1.13.1/
ls /tmp/docker-images/kubernetes-ingress-1.13.1/* | awk '{print "ctr -n=k8s.io images import " $1}' | bash

在这里插入图片描述

安装前修改

这里我们需要修改下ingress的部署方式,默认他是deployemt部署的,副本数默认还是1。我这测试环境拢共就两个node节点,按照默认的deployment方式部署在一个node节点上,要是我做个将node节点踢出环境的实验,还得等ingress在另一个节点拉起。不如在部署的时候将deployment修改为DaemonSet方式,让他在两个node节点上都启动。
正常ingress部署的网络模式是Loadbalancer的,他是需要一个外部网络的IP地址,这里没得储备没准备配置。那么如果弥补这个没有外部网络的情况呢?先分析下外部网络IP地址的作用,如果正常配置了,这个外部网络IP地址扔到DNS中解析成域名能够直接访问ingress,那么我可以手动来。在集群外用nginx作为负载均衡器转发端口,然后手动在笔记本上配置hosts文件,实现域名dns解析。最后集群中只要正确配置了ingress,我们外部就能通过域名来进行访问。实际效果大差不多!

下面是修改示例,不是一定要修改,不修改也行哈——》这里你可以直接用我百度云目录中的,那是修改好了的。

——》修改部署方式将deployment修改为DaemonSet
390 ---
391 apiVersion: apps/v1
392 kind: DaemonSet									### 将Deployment修改为DaemonSet每个节点部署一个
393 metadata:
394   labels:
395     app.kubernetes.io/component: controller
396     app.kubernetes.io/instance: ingress-nginx
397     app.kubernetes.io/name: ingress-nginx
398     app.kubernetes.io/part-of: ingress-nginx
399     app.kubernetes.io/version: 1.13.1
400   name: ingress-nginx-controller
401   namespace: ingress-nginx因为修改了DaemonSet下面还需要修改下
410   updateStrategy:			### 修改从strategy修改为updateStrategy-注意缩进
411     rollingUpdate:
412       maxSurge: 0			### 新增
413       maxUnavailable: 1
414     type: RollingUpdate
415   template:
416     metadata:
417       labels:
418         app.kubernetes.io/component: controller——》镜像这里也需要修改下,将@之后都删除了,不然无法匹配到我们导入的容器镜像。
447         image: registry.k8s.io/ingress-nginx/controller:v1.13.1@sha256:37e489b22ac77576576e52e474941cd7754238438847c1ee795ad6d59c02b12a
448         imagePullPolicy: IfNotPresent
……
550         image: registry.k8s.io/ingress-nginx/kube-webhook-certgen:v1.6.1@sha256:e63459ec5965840af34d6d6a2f4c017eb6e212db83e054908d0bd148e1f35489
551         imagePullPolicy: IfNotPresent
……
606         image: registry.k8s.io/ingress-nginx/kube-webhook-certgen:v1.6.1@sha256:e63459ec5965840af34d6d6a2f4c017eb6e212db83e054908d0bd148e1f35489
607         imagePullPolicy: IfNotPresent447         image: registry.k8s.io/ingress-nginx/controller:v1.13.1
448         imagePullPolicy: IfNotPresent
550         image: registry.k8s.io/ingress-nginx/kube-webhook-certgen:v1.6.1
551         imagePullPolicy: IfNotPresent
606         image: registry.k8s.io/ingress-nginx/kube-webhook-certgen:v1.6.1
607         imagePullPolicy: IfNotPresent

这里可以自己下载然后修改或者是用我压缩包中的,那是修改好的。

pwd	——》 /home/secure/kubeadmin-kubernetes-v1.33
ll deploy.yaml
kubectl apply -f deploy.yaml

在这里插入图片描述

等待个一两分钟我们可以检查下ingress的pod——》应该是正常启动的;
查看下创建svc我们可以看到他对外暴露的两个短裤端口【80:31077】+【443:30469】
最后看下ingressclass,我们调用ingress的就是需要指定他的,默认这里会命名为nginx。

kubectl get pods -n ingress-nginx -o wide -l app.kubernetes.io/name=ingress-nginx
kubectl get svc -n ingress-nginx ingress-nginx-controller
kubectl get ingressclasses.networking.k8s.io

在这里插入图片描述
我们准备下测试环境,还是老样子nginx,创建一个nginx-app然后创建一个svc在创建一个对应的ingress。
这里我们使用yaml文件来进行创建!

[root@master kubeadmin-kubernetes-v1.33 (?|kubernetes-admin@kubernetes:demo-ns)]# cat test-nginx-app.yaml 
apiVersion: apps/v1
kind: Deployment					### 创建一个deployemtn
metadata:name: nginx-app					### deploy名称为nginx-app
spec:replicas: 3						### 副本数指定为3selector:matchLabels:app: nginx-app				### 标签为nginx-apptemplate:metadata:labels:app: nginx-app				### 模版标签为nginx-appspec:containers:- name: nginximage: nginx:1.27.0			### 指定nginx镜像版本ports:- containerPort: 80			### 端口指定80
---
apiVersion: v1
kind: Service						### 创建一个svc
metadata:name: nginx-app-svc				### svc的名称这里要和ingress中对应的
spec:selector:app: nginx-app					### 标签也是nginx-appports:- port: 80						### service的端口targetPort: 80					### nginx-app上pod的端口[root@master kubeadmin-kubernetes-v1.33 (?|kubernetes-admin@kubernetes:demo-ns)]# 
[root@master kubeadmin-kubernetes-v1.33 (|kubernetes-admin@kubernetes:demo-ns)]# cat test-nginx-app-ingress.yaml 
apiVersion: networking.k8s.io/v1
kind: Ingress							### 创建一个ingress类型
metadata:name: test-nginx-ingress				### ingress名字
spec:ingressClassName: nginx  				### 匹配 Ingress 控制器的 classrules:- host: test.example.com				### 我们要访问的域名http:paths:- path: /pathType: Prefixbackend:service:name: nginx-app-svc			### 指向后端的svc,要和上面对应的,不然无法正常访问到页面port:number: 80				### 访问端口80
[root@master kubeadmin-kubernetes-v1.33 (|kubernetes-admin@kubernetes:demo-ns)]# 

通过yaml文件将deployment+svc+ingress创建出来,然后查看下ingress-controller-ip进行页面访问,可以正常显示出来就哦了。

kubectl apply -f test-nginx-app.yaml
kubectl apply -f test-nginx-app-ingress.yamlkubectl get pods
kubectl get svc
kubectl get ingresses.networking.k8s.iokubectl -n ingress-nginx get svc
curl -H "Host: test.example.com" http://10.99.82.254  ### 这个是ingress的Loadbalancer类型的集群内地址哈!!!

在这里插入图片描述
这里有个现象,我们查看ingress的svc时候他集群外地址这里是Pending的,这是为什么?——》正常情况下如果你的service类型是Loadbalancer的这里需要分配一个公网地址或者是外部地址,我这里没有所以他是Pending。
也是因为我们没有划分这个带外地址,他现在只能在集群内访问,这就麻烦了,我这有个ingress就是为了替换之前访问页面的【IP:PORT】方式,现在只能集群内访问了,这就鸡肋了。——》我这有个折中的办法,集群外部准备一个转发,集群外访问然后将请求转发到后面,也能实现我们外部访问。
在这里插入图片描述

外部nginx转发

部署前先查看下转发端口,就是ingress的svc暴露的那两个端口【80:31077/TCP,443:30469/TCP】。
外部转发nginx我们就部署到master节点上了,这里我们将nginx软件安装下,这里需要使用到后端代理所以需要将mod-stream也进行安装。

kubectl -n ingress-nginx get svc
yum install nginx nginx-mod-stream -y
vim /etc/nginx/nginx.conf
[root@master kubeadmin-kubernetes-v1.33 (|kubernetes-admin@kubernetes:demo-ns)]# cat /etc/nginx/nginx.conf
……
http {
……server {listen       8080;						### 端口从80修改到8080,80端口下面调用了listen       [::]:8080;					### 端口从80修改到8080,80端口下面调用了server_name  _;root         /usr/share/nginx/html;
……
}
### 下面都是新增的
stream {upstream http_k8s_nodes {server 192.168.100.31:31077;				### 后端转发到node节点,这里端口是上面查看出来的-80server 192.168.100.32:31077;				### 后端转发到node节点,这里端口是上面查看出来的-80}server {listen 80;proxy_pass http_k8s_nodes;proxy_timeout 3s;proxy_connect_timeout 5s;}upstream https_k8s_nodes {server 192.168.100.31:30469;				### 后端转发到node节点,这里端口是上面查看出来的-443server 192.168.100.32:30469;				### 后端转发到node节点,这里端口是上面查看出来的-443}server {listen 443;proxy_pass https_k8s_nodes;proxy_timeout 3s;proxy_connect_timeout 5s;}
}[root@master kubeadmin-kubernetes-v1.33 (|kubernetes-admin@kubernetes:demo-ns)]# systemctl enable --now nginx

在这里插入图片描述
外部转发的nginx启动之后我们可以看下80/443/8080是正常监听状态的。

ss -tunpl | grep nginx

在这里插入图片描述

我们还可以到两个node节点查看下放开的端口这里是对应的,查看那系统端口我们是没看到的,这是因为新版的k8s都是通过防火墙映射的方式进行端口打开了,而不是之前的通过kebe-proxy在系统中打开对应端口。

iptables -t nat -nL | egrep '31077|30469'		### 因为创建ingress的时候没指定,这个端口号是随机的,查看自己的哈!

在这里插入图片描述

现在我们可以在外面浏览器访问了吗?——》不可以,我们是通过域名访问的,我的笔记本怎么知道这个域名对应的地址是多少呢?
这里修改下我们win的hosts文件,然后浏览器就可以访问到了。

C:\Windows\System32\drivers\etc——》
192.168.100.30 test.example.com
浏览器访问——》http://test.example.com/	### 建议使用无痕浏览器访问

在这里插入图片描述

在这里插入图片描述
我们第一次访问的时候会出现这个不安全提示——》继续访问就好了。
在这里插入图片描述
这就正常访问到了。
在这里插入图片描述
我们还有个问题,只要是个nginx都是这个浏览页面,怎么证明这是我们创建的pod提供的页面呢?——》让我们改造下后端的访问页面

kubectl get pods
kubectl exec pods/nginx-app-65cb4f5cd8-bp7xd -- bash -c "echo 'nginx-app-1.27.0-1111111111' > /usr/share/nginx/html/index.html"
kubectl exec pods/nginx-app-65cb4f5cd8-slb6d -- bash -c "echo 'nginx-app-1.27.0-2222222222' > /usr/share/nginx/html/index.html"
kubectl exec pods/nginx-app-65cb4f5cd8-t7n5c -- bash -c "echo 'nginx-app-1.27.0-3333333333' > /usr/share/nginx/html/index.html"

在这里插入图片描述
浏览器访问——》http://test.example.com/
浏览器有缓存可能不太好看到后端切换。
在这里插入图片描述
我们在master上将地址解析做一下,然后进行curl就能看到变化了,这就明显多了。

cat /etc/hosts ——》 192.168.100.30 test.example.com
curl http://test.example.com/

在这里插入图片描述
以上就是kubernetes中ingress的部署和实验了,说实话,我现在对他的理解比较简单,表现出来就是替换ip地址通过域名访问,而且还是http的连个https都没做,实验式比较简单的,但是现象好出来也是真的。

2、dashboard

dashboard是kubernetes官方提供的一款轻量化的可视化管理工具,核心价值在于降低操作门槛、简化日常巡检与应急操作,尤其是适合初学者、运维人员进行快速管理和问题排查。但他不能完全替代命令行工具,实际使用中通常与kubectl结合使用。

github地址:dashboard仓库
在这里插入图片描述
这个位置就是我们使用的yaml文件。
在这里插入图片描述

我们通过wget进行下载——》这里能正常下载就不用手动下载上传文件了。

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

在这里插入图片描述
还是老样子,我们将容器镜像导入【两台node节点】

ll /tmp/docker-images/kubernetes-dashboard-2.7.0/
ls /tmp/docker-images/kubernetes-dashboard-2.7.0/* | awk '{print "ctr -n=k8s.io images import " $1}' | bash

在这里插入图片描述

安装前修改

默认dashboard是在集群内访问,我这里系统是个字符终端,连个浏览器都打不开,只能将他设置的暴露外部端口了。

vim recommended.yaml30 ---31 32 kind: Service						### 找services33 apiVersion: v134 metadata:35   labels:36     k8s-app: kubernetes-dashboard37   name: kubernetes-dashboard		### 名称是dashboard的38   namespace: kubernetes-dashboard39 spec:40   type: NodePort					### 添加端口类型41   ports:42     - port: 44343       targetPort: 844344       nodePort: 30001				### 添加暴露的端口45   selector:46     k8s-app: kubernetes-dashboard195           image: kubernetesui/dashboard:v2.7.0
196           imagePullPolicy: Always ——》IfNotPresent		### 修改下镜像获取方式always是拉取最新的,我是本地导入镜像,修改为IfNotPresent先检查本地没有在拉取;
kubectl apply -f recommended.yaml 

在这里插入图片描述

等待三五分钟我们检查下pod状态是正常的,查看svc也是NodePort类型暴露端口是我们设置的3001。

kubectl -n kubernetes-dashboard get pods -owide
kubectl -n kubernetes-dashboard get svc

在这里插入图片描述
浏览器访问下——》https://192.168.100.30:30001/
在这里插入图片描述
登录页面就是这个样子了,让我输入toekn或者是kubeconfig来证明下我们的身份用来访问集群。
在这里插入图片描述

创建dashboard-ingress

查看下dashboard的svc获取下services的name和port,接着编写下ingress的yaml文件,最后apply执行。

pwd	——》/home/secure/kubeadmin-kubernetes-v1.33
kubectl get svc
vim dashboard-ingress.yaml
kubectl apply -f dashboard-ingress.yaml
[root@master kubeadmin-kubernetes-v1.33 (⎈|kubernetes-admin@kubernetes:kubernetes-dashboard)]# cat dashboard-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress								### 创建类型ingress
metadata:name: kubernetes-dashboard-ingress		### 创建的ingress的名称namespace: kubernetes-dashboard  			### 指定命名空间创建annotations:# 启用 SSL 重定向(可选,根据需求配置)nginx.ingress.kubernetes.io/ssl-redirect: "true"# 若使用自签证书,添加以下注解跳过证书验证(生产环境不推荐)nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:ingressClassName: nginx  					### 匹配你的 Ingress Controller 类型(如 nginx)rules:- host: dashboard.example.com  			### 替换为你的访问域名http:paths:- path: /pathType: Prefixbackend:service:name: kubernetes-dashboard  	### 对应 Dashboard Service 名称port:number: 443  					### 对应 Dashboard Service 端口(默认 443)# 若有 SSL 证书,添加 tls 配置(可选)# tls:# - hosts:#   - dashboard.example.com#   secretName: dashboard-tls-secret  # 存储证书的 Secret 名称
[root@master kubeadmin-kubernetes-v1.33 (⎈|kubernetes-admin@kubernetes:kubernetes-dashboard)]#

在这里插入图片描述
修改下我们win上的hosts文件,然后使用浏览器就能正常访问了。

C:\Windows\System32\drivers\etc——》
192.168.100.30 test.example.com grafana.example.com prometheus.example.com dashboard.example.com 
dashboard——》https://dashboard.example.com

在这里插入图片描述

在这里插入图片描述

创建访问用户dashboard-admin

通过yaml方式我们创建一个用户,授予他超级用户的权限,用于访问dashboard。

[root@master kubeadmin-kubernetes-v1.33 (?|kubernetes-admin@kubernetes:demo-ns)]# cat dashboard-user.yaml
# 创建 ServiceAccount-相当于创建用户
apiVersion: v1
kind: ServiceAccount
metadata:name: dashboard-admin   # 用户名namespace: kubernetes-dashboard  # Dashboard 的命名空间 
---
# 创建集群角色授予权限然后用户进行绑定
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: dashboard-admin-binding
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-admin      # 内置超级权限角色
subjects:
- kind: ServiceAccountname: dashboard-adminnamespace: kubernetes-dashboard
---
# 在 Kubernetes 1.33 版本中创建 dashboard-admin 账户后未自动生成 Secret,这是由于 Kubernetes v1.24+ 的 API 变更所致
apiVersion: v1
kind: Secret
metadata:name: dashboard-admin-secret # Secret的名称namespace: kubernetes-dashboardannotations:kubernetes.io/service-account.name: "dashboard-admin" # 关联SA账户
type: kubernetes.io/service-account-token # 指定token类型
[root@master kubeadmin-kubernetes-v1.33 (?|kubernetes-admin@kubernetes:demo-ns)]# kubectl apply -f dashboard-user.yaml

在这里插入图片描述

这里查看secret是正常创建出来,这个就是我们登录dashboard页面需要用的,查看信息复制下,我们登录页面看一看。

kubectl -n kubernetes-dashboard get secrets
kubectl -n kubernetes-dashboard describe secrets dashboard-admin-secret

在这里插入图片描述
将我们复制的token复制过来,点击登录就好了。
在这里插入图片描述
这就是dashboard页面了,点击右边头像我们可以看到用户名,是我们创建用来登录的。默认一进来实在default的命名空间的,这里啥也没有,啥也看不到。
在这里插入图片描述
点击default可以将命名空间切换到demo-ns,这里我们创建的测试deployemtn还是在的。
在这里插入图片描述
也可以选择全部命令空间,能查看到环境中所有的pod状态。
在这里插入图片描述
往下划拉能看到pod信息,这里还有监控数据显示,就是我们之前安装的metrics收集的监控数据。
在这里插入图片描述
点击左侧的ingress还能看到我们创建的信息。
在这里插入图片描述
到这里dashboard部署、创建用户登录查看就都完事了,这个页面怎么说了,也就那样毕竟是官方出的,能使就好。kubernetes有个类似的kuboard他页面更加友好,我下篇文章会以kuboard为基准进行然后进行可选组件安装,他的页面就友好很多。

3、系统监控-Promethues+grafana

Prometheus + Grafana 监控系统在kubernetes中提供了什么功能?——》
Prometheus + Grafana 为kubernetes提供了【采集-存储-查询-告警-可视化】的全链路监控能力,帮助运维和开发团队实时掌握集群健康状态、快速排查故障、优化资源配置,是kubernetes生态中不可或缺的监控方案。

github地址:kube-promethues
在这里插入图片描述
查看readme我们可以看到版本适配的信息,k8s集群是1.33版本的,这里部署最新版或者是0.15版本都是可以的。——》果断选择0.15
在这里插入图片描述

在这里插入图片描述
下载压缩包这里网络好使你就直接git,网络不好使你就用我压缩包中下载的都可以。

git clone git@github.com:prometheus-operator/kube-prometheus.git

在这里插入图片描述

pwd	——》 /home/secure/kubeadmin-kubernetes-v1.33
unzip kube-prometheus-0.15.0.zip
cd kube-prometheus-0.15.0/

在这里插入图片描述
还是老样子,我们将容器镜像导入。

master节点
pwd	——》 /home/secure/kubeadmin-kubernetes-v1.33
ll docker-images/kubernetes-prometheus+grafana-0.15/quay.io_brancz_kube-rbac-proxy_v0.19.1.tar 
ll docker-images/kubernetes-prometheus+grafana-0.15/quay.io-prometheus-node-exporter-v1.9.1.tar 
ctr -n=k8s.io images import docker-images/kubernetes-prometheus+grafana-0.15/quay.io_brancz_kube-rbac-proxy_v0.19.1.tar 
ctr -n=k8s.io images import docker-images/kubernetes-prometheus+grafana-0.15/quay.io-prometheus-node-exporter-v1.9.1.tar 
node节点
ll /tmp/docker-images/kubernetes-prometheus+grafana-0.15/
ls /tmp/docker-images/kubernetes-prometheus+grafana-0.15/* | awk '{print "ctr -n=k8s.io images import " $1}' | bash

在这里插入图片描述
在这里插入图片描述

安装前修改

默认安装services是创建集群内IP,这样我们没法外部访问,所以手动修改下services增加nodeport暴露下外部端口方便我们访问。

pwd	——》 /home/secure/kubeadmin-kubernetes-v1.33/kube-prometheus-0.15.0
ll manifests/prometheus-service.yaml manifests/grafana-service.yaml 

在这里插入图片描述

修改promethues的创建service的yaml,修改类型为nodeport然后指定端口为30090。
PS:这里修改时候注意他是有两个端口的,修改name为web然后pod端口指定为9090的,别写成下面那个。

pwd	——》 /home/secure/kubeadmin-kubernetes-v1.33/kube-prometheus-0.15.0
vim manifests/prometheus-service.yaml12 spec:13   type: NodePort				### 新增-指定类型为nodeport外部端口14   ports:15   - name: web16     port: 909017     targetPort: web18     nodePort: 30090				### 新增-指定端口,如果不指定会随机分配(30000-32767 范围内)19   - name: reloader-web20     port: 808021     targetPort: reloader-web

在这里插入图片描述

修改grafana创建service的yaml文件,将类型修改为nodeport然后端口指定30000。

vim manifests/grafana-service.yaml 11 spec:12   type: NodePort			### 新增-指定类型为nodeport外部端口13   ports:14   - name: http15     port: 300016     targetPort: http		### 新增-指定端口,如果不指定会随机分配(30000-32767 范围内)17     nodePort: 30000

在这里插入图片描述

先部署基础组件,将CRD和命名空间等创建出来。

kubectl apply --server-side -f manifests/setup
kubectl wait     --for condition=Established     --all CustomResourceDefinition     --namespace=monitoring

在这里插入图片描述

在创建核心组件,等个三五分钟就好了。

kubectl delete -f manifests/

在这里插入图片描述
默认promethues会创建一个monitoring的命名空间,属于他的pod都在这里存放。只要pod状态都是running的就没问题,还可以看下svc能明显看到两个nodeport类型的,再查看端口是我们修改的【promethues:30090;grafana:30000】。
在这里插入图片描述
在笔记本上浏览器通过端口就可以正常访问promethues和grafana的页面了。

http://192.168.100.30:30090/query
http://192.168.100.30:30000/login

在这里插入图片描述
在这里插入图片描述

创建promethues-ingress

我们上面插件安装了ingress,可以通过域名访问页面,这里我们给promethues也配置上。

pwd	——》 /home/secure/kubeadmin-kubernetes-v1.33
vim prometheus-ingress.yaml
kubectl apply -f prometheus-ingress.yaml
kubectl -n monitoring get ingresses.networking.k8s.io 
[root@master kubeadmin-kubernetes-v1.33 (⎈|kubernetes-admin@kubernetes:demo-ns)]# cat prometheus-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress								### 创建类型指定ingress
metadata:name: prometheus-grafana-ingress			### 创建ingress的名称namespace: monitoring						### 创建ingress所属的命名空间
spec:ingressClassName: nginx 					### 需与你的Ingress Controller的class匹配rules:- host: grafana.example.com  				### 替换为你的域名http:paths:- path: /pathType: Prefixbackend:service:name: grafana					### service名称是对应的,别写错!port:number: 3000					### 端口号这里写集群内的,别写我们设置的那个nodeport端口- host: prometheus.example.com  			### 替换为你的域名http:paths:- path: /pathType: Prefixbackend:service:name: prometheus-k8s			### service名称是对应的,别写错!port:number: 9090					### 端口号这里写集群内的,别写我们设置的那个nodeport端口
[root@master kubeadmin-kubernetes-v1.33 (⎈|kubernetes-admin@kubernetes:demo-ns)]#

在这里插入图片描述

C:\Windows\System32\drivers\etc——》
192.168.100.30 test.example.com grafana.example.com prometheus.example.com
promethues——》http://prometheus.example.com/
grafana——》http://grafana.example.com/

在这里插入图片描述
浏览器通过域名就可以正常访问了。
在这里插入图片描述
在这里插入图片描述

promethues和grafana初始化

我们部署完promethues和grafana需要登录到grafana添加下模版,就能看到监控数据了。
promethues登录页面就是这样的,他就是个收集数据的工具不用管。
在这里插入图片描述
接着我们登录grafana——》左侧点击dashboard——》然后NEW——》然后import
在这里插入图片描述
这里输入监控模版的数字——》1860——》load
在这里插入图片描述
grafana会解析ID获取监控模版——》下面选择下数据源【promethues】——》import导入
在这里插入图片描述
现在我们导入监控模版就能看到监控数据展示了。
在这里插入图片描述
我这里还有些其他模版,有兴趣可以尝试导入下看看。

ID监控数据描述
Node Exporter Full (ID: 1860)基于 Node Exporter 暴露的指标构建,可用于监控 Linux 节点的资源使用情况,包括 CPU、内存、磁盘、网络等方面的指标,帮助用户全面了解节点的运行状态。
K8S Dashboard CN 20240513 StarsL.cn(ID:13105)这是一个中文的 Kubernetes 仪表盘模板,全面展示 Kubernetes 资源,包含 K8S 整体资源总览、微服务资源明细、Pod 资源明细及 K8S 网络带宽等信息,还增加了 PVC 的使用情况、各命名空间的 CPU 和内存使用曲线图等。
Kubernetes cluster monitoring (via Prometheus)(ID:3119)使用 Prometheus 监控 Kubernetes 集群,展示集群的总体 CPU、内存、文件系统使用情况,以及单个 Pod、容器、控制平面(如通过 Kops 部署的)的统计信息,仅使用 cAdvisor 指标。
Kubernetes cluster monitoring (via Prometheus) (ID:315)基于 Prometheus 监控 Kubernetes 集群,适用于 Kubernetes v1.16 及以上版本,展示集群整体的 CPU、内存、文件系统使用情况,以及单个 Pod、容器、systemd 服务的统计信息,仅使用 cAdvisor 指标。
Kubernetes Cluster (Prometheus) (ID: 6417)提供关于在 Kubernetes 节点上运行的容器的摘要指标,可通过 Helm chart 将 Grafana 部署到 Kubernetes 集群中使用该仪表盘。
Kubernetes Pods (Prometheus)(ID: 6336)用于按命名空间和 Pod 名称查看 Pod 指标,可帮助用户深入了解各个 Pod 的资源使用情况和运行状态。
Kubernetes Cluster(ID:7249)未找到明确的官方描述,根据常见情况推测,可能是用于监控 Kubernetes 集群的整体状态和资源使用情况的模板。
HTTP Services Status(ID:4859)通过 Blackbox Exporter 检查任何服务的 HTTP 状态,用户可以配置 Prometheus 从 Blackbox Exporter 的探针获取指标,还可以使用图表设置警报。
HTTP Services Status Timeline(ID:4865)未找到明确的官方描述,推测其可能是用于监控 HTTP 服务状态的时间序列变化,帮助用户分析 HTTP 服务状态随时间的波动情况。
Blackbox Exporter Overview(ID:5345)未找到明确的官方描述,一般来说,Blackbox Exporter 用于探测外部服务的可达性和性能,该模板可能是对 Blackbox Exporter 所收集数据的一个综合展示,包括对不同端点的探测结果、响应时间、成功率等指标的监控。
kube-state-metrics-v2(ID:13332)提供关于 kube-state-metrics v2 版本的摘要指标,基于 kube-state-metrics 项目,可帮助用户了解 Kubernetes 集群中各种资源的状态和统计信息。
Node Overview(ID:13824)提供 Kubernetes 集群中所有节点的概述,涵盖 CPU、内存、网络、磁盘和文件系统等方面的信息,仅显示前 N 个(可配置)结果,以防止数据过载。
Kubernetes Cluster Overall Dashboard(ID:14518)使用 Prometheus 监控 Kubernetes 集群,展示集群或节点的 CPU、内存、文件系统等信息,基于 k8s cluster detail dashboard 和 Kubernetes for Prometheus dashboard cn 20201209 修改,调整了布局。

到这里kubernetes1.33版本安装可选组件就算是完事,总结起来安装了flannel网络插件、metrics监控、HPA/VPA自动扩缩容、ingress域名访问、dashboard页面访问、promethues+grafana资源监控。这些都是我目前自己安装过多次的,通过导入容器镜像的方式进行安装。
下一篇文章还是k8s集群的可选组件安装但不是现在这种分开的,各个组件分别安装,而是基于kuboard为基础然后安装其他可选组件,那个看起来比这个舒服,一个页面就可以展现这些功能,不用看个监控页面还需要登录不同的域名。

http://www.dtcms.com/a/343420.html

相关文章:

  • 部署Qwen2.5-VL-7B-Instruct-GPTQ-Int3
  • 数据结构 -- 链表--双向链表的特点、操作函数
  • EEA架构介绍
  • CH347 USB转JTAG芯片 SVF下载程序
  • pandas扩展:apply自定义函数、分组进阶(五大核心)、透视表
  • C6.0:晶体管放大器的原理与应用(基极偏置篇)
  • 单词记忆-轻松记忆10个实用英语单词(13)
  • 【openGauss】1分钟掌握:openGauss活动会话CPU占用率获取
  • Java获取被nginx代理的emqx客户端真实ip
  • STM32F030/070芯片解密及应用
  • DAY 23|动态规划1
  • LeetCode234~258题解
  • 深入解析JUC线程间通信:使用ReentrantLock与Condition实现精准线程调度
  • 32、智能仓库管理与优化系统 (模拟) - /物流与仓储组件/warehouse-optimization-system
  • IPSec 与 IKE 核心知识点总结
  • 使用Python 创建虚拟环境的两种方式
  • 订单簿数据深度学习方法在大单发现应用
  • 让医学数据更直观——MedCalc 23.1.7 最新版使用体验
  • sageattention低比特量化注意力机制,比FlashAttention快5 倍
  • DeepSeek-V3.1 Claude Code: 革命性的AI编码助手详解与应用指南
  • 论文图片在要求dpi下,压缩尺寸
  • ES_预处理
  • java18学习笔记-Simple Web Server
  • 美国联邦调查局警告俄罗斯针对思科设备的网络间谍活动
  • 残差神经网络(ResNet)
  • 矫平机与纵剪:一条钢卷“变身”的全过程
  • 【UE5-Airsim】Windows10下安装UE5-Airsim的仿真环境
  • leetcode 1658 将x减到0的最小操作数
  • 同题异构解决leetcode第3646题下一个特殊回文数
  • Linux网络socket套接字(上)