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-192e168e100e30 | 192.168.100.30 |
almalinux-node01-192e168e100e31 | 192.168.100.31 |
almalinux-node02-192e168e100e32 | 192.168.100.32 |
版本信息:
描述 | 版本 |
---|---|
almalinux9.6 | 5.14.0-570.12.1.el9_6.x86_64 |
ingress | v1.13.1 |
dashboard | v2.7.0 |
promethues+grafana | v0.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为基础然后安装其他可选组件,那个看起来比这个舒服,一个页面就可以展现这些功能,不用看个监控页面还需要登录不同的域名。