1. Implementar la interfaz de interfaz de usuario web del panel
1. Descarga el archivo yaml
// panel de búsqueda de github para encontrar el proyecto
//下载yaml文件
[root@docker-k8s01 ~]# wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml
//编辑yaml文件
[root@docker-k8s01 ~]# vim recommended.yaml
//跳转到40行左右,修改其对应的service,类型配置为Nodeport
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
type: NodePort //添加类型为NodePort
ports:
- port: 443
targetPort: 8443
nodePort: 31010 //映射到宿主机的端口为31010
selector:
k8s-app: kubernetes-dashboard
//执行yaml文件
[root@docker-k8s01 ~]# kubectl apply -f recommended.yaml
//查看Pod是否运行
[root@docker-k8s01 ~]# kubectl get pod -n kubernetes-dashboard
//查看其详细信息
[root@docker-k8s01 ~]# kubectl describe pod -n kubernetes-dashboard dashboard-metrics-scraper-76679bc5b9-sbcvw
//确保该yaml文件提供的pod都正常运行
[root@docker-k8s01 ~]# kubectl get svc -n kubernetes-dashboard
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
dashboard-metrics-scraper ClusterIP 10.103.65.117 <none> 8000/TCP 3m3s
kubernetes-dashboard NodePort 10.110.154.42 <none> 443:31010/TCP 3m3s
2. Prueba de visita
// La versión del panel utilizada aquí es superior. En comparación con la versión anterior, debe utilizar el navegador Firefox para acceder a él, que no es necesario aquí.
Visite https://192.168.171.151:31010 (puede acceder a cualquier IP de nodo en el clúster)
//创建dashboard的管理用户
[root@docker-k8s01 ~]# kubectl create serviceaccount dashboard-admin -n kube-system
//绑定用户为集群的管理员
[root@docker-k8s01 ~]# kubectl create clusterrolebinding dashboard-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
//获取刚刚创建的用户Token
[root@docker-k8s01 ~]# kubectl get secrets -n kube-system | grep dashboard-admin
dashboard-admin-token-zbdqm kubernetes.io/service-account-token 3 63s
[root@docker-k8s01 ~]# kubectl describe secrets -n kube-system dashboard-admin-token-zbdqm
//注意:上面的最后一段取决于上面查看到的用户的secrets名字。
Name: dashboard-admin-token-zbdqm
Namespace: kube-system
Labels: <none>
Annotations: kubernetes.io/service-account.name: dashboard-admin
kubernetes.io/service-account.uid: e9716e34-581a-4c30-b601-0a2a254d4a26
Type: kubernetes.io/service-account-token
Data
====
namespace: 11 bytes
token: //将token字段后面的值复制下来,如下图
Pegue el valor del Token debajo
// Hasta ahora, puede monitorear la información de los nodos del clúster en la interfaz web y crear objetos de recursos
Nota: Generalmente, los objetos de recursos no se crearán en este
Método dos
//查看刚才创建的token
[root@master ~]# kubectl get secrets -n kube-system | grep dashboard
dashboard-admin-token-22n2v kubernetes.io/service-account-token 3 11m
//查看token的详细信息,会获取token
[root@master ~]# kubectl describe secrets -n kube-system dashboard-admin-token-22n2v
//将token的信息生成一个变量
[root@master ~]# DASH_TOKEN=$(kubectl get secrets -n kube-system dashboard-admin-token-22n2v -o jsonpath={.data.token} | base64 -d)
//将k8s集群的配置信息写入到一个文件中,文件可自定义
[root@master ~]# kubectl config set-cluster kubernets --server=192.168.10.52:6443 --kubeconfig=/root/.dashboard-admin.conf
Cluster "kubernets" set.
//将token的信息也写入到文件中(同一个文件)
[root@master ~]# kubectl config set-credentials dashboard-admin --token=${DASH_TOKEN} --kubeconfig=/root/.dashboard-admin.conf
User "dashboard-admin" set.
//用户信息也写入文件中(同一个文件)
[root@master ~]# kubectl config set-context dashboard-admin@kubernetes --cluster=kubernetes --user=dashboard-admin --kubeconfig=/root/.dashboard-admin.conf
Context "dashboard-admin@kubernetes" created.
//将上下文的配置信息也写入文件中(同一个文件)
[root@master ~]# kubectl config use-context dashboard-admin@kubernetes --kubeconfig=/root/.dashboard-admin.conf
Switched to context "dashboard-admin@kubernetes".
//最后将配置信息导入到客户端本地
[root@master ~]# sz /root/.dashboard-admin.conf
// Después de exportar el archivo, inicie sesión en la interfaz donde acaba de ingresar el token, seleccione kubeconfig y luego cargue el archivo que acaba de exportar aquí y haga clic en iniciar sesión.
Soy vago, no tengo foto aquí, perdóname.
Dos, implemente weave-scope para monitorear el clúster k8s
1. Descarga el archivo yaml
// Buscar "alcance" en github
// Despliega la página, haz clic en kubernetes
// Tire hacia abajo nuevamente después de ingresar a la nueva página
//将获得的链接下载
[root@docker-k8s01 ~]# wget https://cloud.weave.works/k8s/scope.yaml
//修改yaml文件
[root@docker-k8s01 ~]# vim scope.yaml
//跳转到大概197行左右,修改其service的端口类型
spec:
type: NodePort //类型为NodePort
ports:
- name: app
port: 80
protocol: TCP
targetPort: 4040
nodePort: 30123 //配置映射到宿主机的端口
[root@docker-k8s01 ~]# kubectl apply -f scope.yaml
//查看容器的运行情况
[root@docker-k8s01 ~]# kubectl get pod -o wide -n weave
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
weave-scope-agent-9vj2w 1/1 Running 0 119s 192.168.171.151 docker-k8s01 <none> <none>
weave-scope-agent-h4gt6 1/1 Running 0 119s 192.168.171.152 docker-k8s03 <none> <none>
weave-scope-agent-lqzbq 1/1 Running 0 119s 192.168.171.150 docker-k8s02 <none> <none>
weave-scope-app-b965dccb7-ph6zg 1/1 Running 0 119s 10.244.1.3 docker-k8s02 <none> <none>
weave-scope-cluster-agent-6598584d8-h8b9q 1/1 Running 0 119s 10.244.2.3 docker-k8s03 <none> <none>
//DaemonSet资源对象:weave-scope-agent(代理):负责收集节点的信息;
//deployment资源对象:weave-scope-app(应用):从agent获取数据,通过web UI展示并与用户交互;
//DaemonSet资源对象的特性和deployment相比,就是DaemonSet资源对象会在每个节点上都运行且只能运行一个pod。
//由于每个节点都需要监控,所以用到了DaemonSet这种资源对象
2. Prueba de visita
// Acceda al puerto mapeado 30123 del clúster
// En la interfaz web de scope, puede ver muchas cosas, pod, nodo y otra información detallada, incluida la apertura de la terminal del contenedor, ver su información de registro, etc.
Tres, implementar el servicio Prometheus
El papel de los componentes de Prometheus:
- MertricServer: es un agregador del uso de recursos del clúster k8s, que recopila datos para su uso en el clúster K8s, como: kubectl, hpa, planificador
- PrometheusOperator: es una caja de herramientas de detección y alarma del sistema que se utiliza para almacenar datos de monitoreo;
- NodeExporter: se utiliza para los datos de estado de la métrica clave de cada nodo;
- kubeStateMetrics: recopile datos de objetos de recursos en el clúster k8s y especifique reglas de alarma;
- Prometheus: recopile un servidor, un programador, un controlador-administrador, datos de componentes de kubelet mediante el método de extracción y transmítalos a través del protocolo http;
- Grafana: Es una plataforma de seguimiento y estadísticas de datos visuales.
1. Descarga los archivos requeridos por prometheus
// Busque prometheus en github para obtener el enlace de descarga de git
//安装git命令
[root@docker-k8s01 ~]# yum -y install git
//创建目录(可忽略)
[root@docker-k8s01 ~]# mkdir prometheus
[root@docker-k8s01 ~]# cd prometheus/
//克隆github库
[root@docker-k8s01 prometheus]# git clone https://github.com/imirsh/kube-prometheus.git
//进入到克隆目录
[root@docker-k8s01 prometheus]# cd kube-prometheus/manifests/
2. Modifica el archivo yaml de cada componente Service
//修改grafana的yaml文件
[root@docker-k8s01 manifests]# cat grafana-service.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: grafana
name: grafana
namespace: monitoring
spec:
type: NodePort //改为NodePort类型
ports:
- name: http
port: 3000
targetPort: http
nodePort: 30333 //映射端口为30333
selector:
app: grafana
//修改prometheus的yaml文件
[root@docker-k8s01 manifests]# cat prometheus-service.yaml
apiVersion: v1
kind: Service
metadata:
labels:
prometheus: k8s
name: prometheus-k8s
namespace: monitoring
spec:
type: NodePort //类型为NodePort
ports:
- name: web
port: 9090
targetPort: web
nodePort: 30444 //映射端口为30444
selector:
app: prometheus
prometheus: k8s
sessionAffinity: ClientIP
//修改alertmanager的yaml文件
[root@docker-k8s01 manifests]# cat alertmanager-service.yaml
apiVersion: v1
kind: Service
metadata:
labels:
alertmanager: main
name: alertmanager-main
namespace: monitoring
spec:
type: NodePort //类型为NodePort
ports:
- name: web
port: 9093
targetPort: web
nodePort: 30555 //映射端口为30555
selector:
alertmanager: main
app: alertmanager
sessionAffinity: ClientIP
3. Ejecute el archivo yaml
//确定当前路径
[root@docker-k8s01 manifests]# pwd
/root/prometheus/kube-prometheus/manifests
//执行setup目录下的所有yaml文件,记住是所有!
[root@docker-k8s01 manifests]# kubectl apply -f setup/
//建议多执行几次,因为目录下的yaml文件太多,可能执行的时候可能会落下一两个没有执行
[root@docker-k8s01 manifests]# cd .. //返回上级目录
[root@docker-k8s01 kube-prometheus]# pwd
/root/prometheus/kube-prometheus
//执行该目录下的所有yaml
[root@docker-k8s01 kube-prometheus]# kubectl apply -f manifests/
//确保所有pod都正常运行
[root@docker-k8s01 kube-prometheus]# kubectl get pod -n monitoring -w
Cuando se ejecuta el siguiente archivo yaml, cada nodo descargará muchas imágenes en Internet. Para evitar que la descarga de la imagen tarde demasiado, primero puede descargar la imagen localmente, luego importarla a cada nodo y luego ejecutar el archivo yaml, que guardará Algún tiempo.
4. Cuando el cliente accede al puerto IP + 30100 de cualquier nodo del clúster, puede ver la siguiente interfaz (el nombre de usuario y la contraseña predeterminados son admin)
// Agregar plantilla
// Haga clic en "importar" para importar las siguientes tres plantillas
Por supuesto, también puede ir al sitio web de grafana para encontrar una plantilla adecuada para descargar. No explicaré cómo agregar una plantilla en detalle aquí.