10:部署Dashboard|部署Prometheus|HPA集群

news2024/11/19 9:35:08

部署Dashboard|部署Prometheus|HPA集群

  • Dashboard
    • 部署Dashboard
      • 上传镜像到私有仓库
      • 安装服务
      • 发布服务
      • 创建管理用户
      • 查看登录的Token信息
  • Prometheus
    • 步骤一:导入所有后续需要的镜像到私有镜像仓库(在master主机操作操作)
    • 步骤二:修改资源文件部署各种容器服务(在master主机操作操作)
    • 步骤三:对外发布grafana服务(在master主机操作)
    • 步骤四:配置grafana
      • 步骤一:配置grafana(在任意主机操作)
  • HPA
    • 步骤一:部署一个弹性集群(在master主机操作)
    • 步骤二:查看动态扩容效果

Dashboard

在这里插入图片描述

部署Dashboard

上传镜像到私有仓库

# 上传dashboard
[root@master dashboard]# docker load -i dashboard.tar.gz
[root@master dashboard]# docker tag kub../dashboard:v2.0.0 192.168....
[root@master dashboard]# docker push 192...:v2.0.0
# 上传metrics-scraper镜像
[root@master dashboard]# docker load -i metrics-scraper.tar.gz
[root@master dashboard]# docker tag kub../metrics-scraper:v2.0.0 192.168....
[root@master dashboard]# docker push 192...:v2.0.0

安装服务

[root@master dashboard]# kubectl apply -f recommended.yaml
[root@master dashboard]# kubectl -n kubernetes-dashboard get pods
NAME                                         READY   STATUS    RESTARTS   AGE
dashboard-metrics-scraper-844d8585c9-w26m4   1/1     Running   0          10s
kubernetes-dashboard-6c58946f65-4bdtb        1/1     Running   0          10s

发布服务

在这里插入图片描述

ClusterIP 只能在集群内部访问
NodePort 和 Ingress 可以在外部访问

[root@master dashboard]# kubectl -n kubernetes-dashboard get service
NAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
dashboard-metrics-scraper   ClusterIP   10.245.205.236   <none>        8000/TCP   13s
kubernetes-dashboard        ClusterIP   10.245.215.40    <none>        443/TCP    14s

[root@master dashboard]# sed -n '30,45p' recommended.yaml >dashboard-svc.yaml
[root@master dashboard]# vim dashboard-svc.yaml
---
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  type: NodePort
  ports:
    - port: 443
      nodePort: 30443
      targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard

[root@master dashboard]# kubectl apply -f dashboard-svc.yaml 
service/kubernetes-dashboard configured
[root@master dashboard]# kubectl -n kubernetes-dashboard get service
NAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
dashboard-metrics-scraper   ClusterIP   10.245.205.236   <none>        8000/TCP        5m50s
kubernetes-dashboard        NodePort    10.245.215.40    <none>        443:30443/TCP   5m51s

浏览器访问任意节点IP的30443端口(http://任意节点:30443 端口
在这里插入图片描述

创建管理用户

[root@master dashboard]# cat admin-token.yaml          #查看、学习资源文件
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard
[root@master dashboard]# kubectl create -f admin-token.yaml   #创建资源

查看登录的Token信息

先通过get screts查看名称,该名称是随机的,然后再通过查询到的名称继续查询对应的Token信息。

[root@master ~]# kubectl -n kubernetes-dashboard get secrets 
NAME             TYPE                                  
admin-user-token-xxx    kubernetes.io/service-account-token  ... ...
[root@master ~]# kubectl -n kubernetes-dashboard describe secrets \
... ...
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IjJyTE9nZWpWLWFhTXV6cnJla3U4aX
NngxVTZjV2M5Y0FYOWR0ancifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9 ... ...

再次使用浏览器访问任意节点IP的30090端口(http://任意节点:30090 端口)即可查看Web页面,输入Token,效果如图-2所示。
在这里插入图片描述

Prometheus

在这里插入图片描述
镜像及资源文件
在这里插入图片描述

步骤一:导入所有后续需要的镜像到私有镜像仓库(在master主机操作操作)

所有镜像文件在云盘第四阶段kubernetes/v1.17.6/prometheus/images目录下,各位同学需要提前下载。

需要导入的镜像包括:

prometheus.tar.gz
prometheus-operator.tar.gz
prometheus-config-reloader.tar.gz
prometheus-adapter.tar.gz
node-exporter.tar.gz
kube-rbac-proxy.tar.gz
kube-metrics.tar.gz
grafana.tar.gz
configmap-reload.tar.gz
alertmanager.tar.gz

注意:tab修改标签时,只需要修改服务器即可,禁止修改镜像原来的名称与标签。
[root@master ~]# docker load -i prometheus.tar.gz
[root@master ~]# docker images            #查看镜像的名称
[root@master ~]# docker tag  旧名称   192.168.1.100:5000/prometheus:v2.11.0
[root@master ~]# docker push  192.168.1.100:5000/prometheus:v2.11.0
[root@master ~]# docker load -i prometheus-operator.tar.gz
[root@master ~]# docker images            #查看镜像的名称
[root@master ~]# docker tag  \
旧名称  192.168.1.100:5000/prometheus-operator:v0.35.1
[root@master ~]# docker push  192.168.1.100:5000/prometheus-operator:v0.35.1
[root@master ~]# docker load -i prometheus-config-reloader.tar.gz
[root@master ~]# docker images            #查看镜像的名称
[root@master ~]# docker tag  \
旧名称  192.168.1.100:5000/prometheus-config-reloader:v0.35.1
[root@master ~]# docker push \
192.168.1.100:5000/prometheus-config-reloader:v0.35.1
[root@master ~]# docker load -i prometheus-adapter.tar.gz
[root@master ~]# docker images            #查看镜像的名称
[root@master ~]# docker tag  \
旧名称  192.168.1.100:5000/prometheus-operator:v0.35.1
[root@master ~]# docker push 192.168.1.100:5000/prometheus-operator:v0.35.1
[root@master ~]# docker load -i node-exporter.tar.gz
[root@master ~]# docker images            #查看镜像的名称
[root@master ~]# docker tag  \
旧名称  192.168.1.100:5000/node-exporter:v1.0.0
[root@master ~]# docker push 192.168.1.100:5000/node-exporter:v1.0.0
[root@master ~]# docker load -i kube-rbac-proxy.tar.gz
[root@master ~]# docker images            #查看镜像的名称
[root@master ~]# docker tag  \
旧名称  192.168.1.100:5000/kube-rbac-proxy:v0.4.1
[root@master ~]# docker push 192.168.1.100:5000/kube-rbac-proxy:v0.4.1
[root@master ~]# docker load -i kube-metrics.tar.gz
[root@master ~]# docker images            #查看镜像的名称
[root@master ~]# docker tag  \
旧名称  192.168.1.100:5000/kube-state-metrics:v1.9.2
[root@master ~]# docker push 192.168.1.100:5000/kube-state-metrics:v1.9.2
[root@master ~]# docker load -i alertmanager.tar.gz
[root@master ~]# docker images            #查看镜像的名称
[root@master ~]# docker tag  \
旧名称  192.168.1.100:5000/grafana:6.4.3
[root@master ~]# docker push 192.168.1.100:5000/grafana:6.4.3
[root@master ~]# docker load -i    configmap-reload.tar.gz
[root@master ~]# docker images            #查看镜像的名称
[root@master ~]# docker tag  \
旧名称  192.168.1.100:5000/configmap-reload:v0.3.0
[root@master ~]# docker push 192.168.1.100:5000/configmap-reload:v0.3.0
[root@master ~]# docker load -i    alertmanager.tar.gz
[root@master ~]# docker images            #查看镜像的名称
[root@master ~]# docker tag  \
旧名称  192.168.1.100:5000/alertmanager:v0.18.0
[root@master ~]# docker push 192.168.1.100:5000/alertmanager:v0.18.0

步骤二:修改资源文件部署各种容器服务(在master主机操作操作)

1)安装operator
需要修改资源文件,默认资源文件制定的是从官网下载镜像启动容器,我们需要修改为自己的192.168.1.100私有镜像仓库的路径。

[root@master prometheus]# vim setup/prometheus-operator-deployment.yaml
27  - --config-reloader-image=192.168.1.100:5000/configmap-reload:v0.3.0
28  - --prometheus-config-reloader=192.168.1.100:5000/prometheus-config-reloader:v0.35.1
29  image: 192.168.1.100:5000/prometheus-operator:v0.35.1
#提示:上面这些镜像的链接路径如果不知道,可以使用docker images查看。
[root@master prometheus]# kubectl apply -f setup/

在这里插入图片描述
2)安装Prometheus server

需要修改资源文件,默认资源文件制定的是从官网下载镜像启动容器,我们需要修改为自己的192.168.1.100私有镜像仓库的路径。

[root@master prometheus]# vim prom-server/prometheus-prometheus.yaml
14      baseImage: 192.168.1.100:5000/prometheus
34      version: v2.11.0
#提示:上面这些镜像的链接路径如果不知道,可以使用docker images查看。
[root@master prometheus]# kubectl apply -f prom-server/

在这里插入图片描述
3)安装prom-adapter

需要修改资源文件,默认资源文件制定的是从官网下载镜像启动容器,我们需要修改为自己的192.168.1.100私有镜像仓库的路径。

[root@master prometheus]# vim prom-adapter/prometheus-adapter-deployment.yaml
28         image: 192.168.1.100:5000/k8s-prometheus-adapter-amd64:v0.5.0
#提示:上面这些镜像的链接路径如果不知道,可以使用docker images查看。
[root@master prometheus]# kubectl apply -f prom-adapter/

4)安装metrics-state

需要修改资源文件,默认资源文件制定的是从官网下载镜像启动容器,我们需要修改为自己的192.168.1.100私有镜像仓库的路径。

[root@master prometheus]# vim metrics-state/kube-state-metrics-deployment.yaml
24            image: 192.168.1.100:5000/kube-rbac-proxy:v0.4.1
41            image: 192.168.1.100:5000/kube-rbac-proxy:v0.4.1
58            image: 192.168.1.100:5000/kube-state-metrics:v1.9.2
#提示:上面这些镜像的链接路径如果不知道,可以使用docker images查看。
[root@master prometheus]# kubectl apply -f metrics-state/

5)安装node-exporter

需要修改资源文件,默认资源文件制定的是从官网下载镜像启动容器,我们需要修改为自己的192.168.1.100私有镜像仓库的路径。

[root@master prometheus]# vim node-exporter/node-exporter-daemonset.yaml
27            image: 192.168.1.100:5000/node-exporter:v1.0.0
57            image: 192.168.1.100:5000/kube-rbac-proxy:v0.4.1
#提示:上面这些镜像的链接路径如果不知道,可以使用docker images查看。
[root@master prometheus]# kubectl apply -f node-exporter/

6)安装alertmanager

需要修改资源文件,默认资源文件制定的是从官网下载镜像启动容器,我们需要修改为自己的192.168.1.100私有镜像仓库的路径。

[root@master prometheus]# vim alertmanager/alertmanager-alertmanager.yaml
09     baseImage: 192.168.1.100:5000/alertmanager
18     version: v0.18.0
#提示:上面这些镜像的链接路径如果不知道,可以使用docker images查看。
[root@master prometheus]# kubectl apply -f alertmanager/

7)安装grafana

[root@master prometheus]# vim grafana/grafana-deployment.yaml
19    - image: 192.168.1.100:5000/grafana:6.4.3
#提示:上面这些镜像的链接路径如果不知道,可以使用docker images查看。
[root@master prometheus]# kubectl apply -f grafana/

在这里插入图片描述

步骤三:对外发布grafana服务(在master主机操作)

相关资源文件共享在云盘第四阶段kubernetes/v1.17.6/prometheus/ grafana/grafana-service.yaml。

下面使用使用nodePort发布服务将容器的3000端口映射到真机节点的30000端口。

[root@master prometheus]# vim grafana/grafana-service.yaml
... ...
spec:
  type: NodePort
  ports:
  - name: http
    port: 3000
    nodePort: 30000
    targetPort: http
... ...
[root@master prometheus]# kubectl  apply  -f  grafana/grafana-service.yaml

使用浏览器访问任意节点的30002端口,即可访问到Web网页,效果如图所示。
在这里插入图片描述

步骤四:配置grafana

步骤一:配置grafana(在任意主机操作)

1)登录

登录的默认用户和密码:admin/admin

第一次登录需要修改密码
在这里插入图片描述
2)修改数据源地址

我们添加的数据为prometheus
数据源就是 Prometheus service 的地址
可以填写prometheus的Service内部的DNS名称
http://prometheus-k8s.monitoring.svc.cluster.local:9090
如何查看到这个DNS的域名呢?可以执行如下的命令即可。

[root@master ~]# kubectl -n monitoring get service
NAME               TYPE             CLUSTER-IP       EXTERNAL-IP    PORT(S)
grafana          NodePort       10.254.169.248        <none>         3000:30002/TCP
prometheus-k8s  NodePort       10.254.44.72    <none>              9090:30001/TCP
... ...
# 找到这里的prometheus-k8s名称后
# 在它的后面附加一个固定的monitoring.svc.cluster.local:9090
# 连接在一起就是:http://prometheus-k8s.monitoring.svc.cluster.local:9090

修改数据源。
添加数据源Prometheus,名字随意,URL需要填写Prometheus内部的DNS名称,
默认端口号 9090。
在这里插入图片描述
在这里插入图片描述

3)导入模板
导入模板,需要正确配置后点击保存和测试后开始添加仪表盘
点开import,输入模板ID,
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
最后查看监控效果
在这里插入图片描述

HPA

在这里插入图片描述

步骤一:部署一个弹性集群(在master主机操作)

[root@master ~]# vim myhpa.yaml 
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myweb
spec:
  selector:
    matchLabels:
      app: apache
  replicas: 1
  template:
    metadata:
      labels:
        app: apache
    spec:
      containers:
      - name: apache
        image: 192.168.1.100:5000/myos:httpd
        ports:
        - containerPort: 80
        resources:
          requests:
            cpu: 200m
      restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
  name: web-service
spec:
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  selector:
    app: apache
  type: ClusterIP
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-app
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  backend:
    serviceName: web-service
    servicePort: 80
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: myweb
spec:
  minReplicas: 1 # 最小资源
  maxReplicas: 3 # 最大资源 
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: myweb # 监视资源
  targetCPUUtilizationPercentage: 50 # 警戒线 大于50%扩容
[root@master ~]# kubectl apply -f hpa-example.yaml
[root@master ~]# kubectl get hpa
NAME    REFERENCE          TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
myweb   Deployment/myweb   0%/50%    1         3         1          15m

步骤二:查看动态扩容效果

[root@master ~]# kubectl get hpa 
NAME    REFERENCE          TARGETS    MINPODS   MAXPODS   REPLICAS   AGE
myweb  Deployment/myweb   287%/50%   1         3         3          16m
[root@master ~]# kubectl  get pod
NAME                     READY   STATUS    RESTARTS   AGE
myweb-7f89fc7b66-kzhj5   1/1     Running   0          16m
myweb-7f89fc7b66-nh4kn   1/1     Running   0          21s
myweb-7f89fc7b66-q2jnf   1/1     Running   0          21s
#当容器CPU占用过高时,集群可以自动扩容
-----------------------------------------------------------------------------
[root@master ~]# kubectl get hpa 
NAME    REFERENCE          TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
myweb   Deployment/myweb   1%/50%    1         3         3          20m
[root@master ~]# kubectl  get pod
NAME                     READY   STATUS    RESTARTS   AGE
myweb-7f89fc7b66-kzhj5   1/1     Running   0          22m
# 当容器CPU占用率恢复正常时,容器可以自动缩减

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1466614.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LangChain原理学习笔记

最新越发觉得AI的发展&#xff0c;对未来是一场革命&#xff0c;LangChain已经在工程设计上有了最佳实践&#xff0c;类似于AI时代的编程模型或编程框架&#xff0c;有点Spring框架的意思。之前在LangChain上也有些最佳实践&#xff0c;所以在这里分享记录下。 LangChain解决什…

计算机网络面经-TCP三次握手一文说清

目录 说一下TCP的三次握手&#xff1f; 为什么要三次握手&#xff1f;两次行不行&#xff1f;四次呢&#xff1f; 为什么建立连接是三次握手&#xff0c;关闭连接确是四次挥手呢&#xff1f; TCP四次挥手的过程&#xff1f; 如果已经建立了连接&#xff0c;但是客户端突然出…

编译GreatSQL with RocksDB引擎

GreatSQL里也能用上RocksDB引擎 1. 前言 RocksDB 是基于Facebook 开源的一种支持事务的、高度可压缩、高性能的MyRocks存储引擎&#xff0c;特别适用于高度压缩和大容量的数据。以下是一些关键特点&#xff1a; 高性能&#xff1a; LSM 树结构使得RocksDB在写入密集型负载下表现…

苹果分拣检测YOLOV8NANO

苹果分拣&#xff0c;可以检测成熟、切片、损坏、不成熟四种类型&#xff0c;YOLOV8NANO&#xff0c;训练得到PT模型&#xff0c;然后转换成ONNX&#xff0c;OPENCV的DNN调用&#xff0c;支持C,PYTHON 苹果分拣检测YOLOV8NANO&#xff0c;检测四种类型苹果

React18源码: React调度中的3种优先级类型和Lane的位运算

优先级类型 React内部对于优先级的管理&#xff0c;贯穿运作流程的4个阶段&#xff08;从输入到输出&#xff09;&#xff0c;根据其功能的不同&#xff0c;可以分为3种类型&#xff1a; 1 &#xff09;fiber优先级(LanePriority) 位于 react-reconciler包&#xff0c;也就是L…

【电路笔记】-RC放电电路

RC放电电路 文章目录 RC放电电路1、概述2、RC放电电路3、RC放电电路示例当电压源从完全充电的 RC 电路中移除时,电容器 C 将通过电阻 R 放电。 1、概述 RC 放电电路利用电阻器-电容器组合的固有 RC 时间常数以指数衰减率对电容器进行放电。 在之前的 RC 充电电路教程中,我们…

4 buuctf解题

[CISCN 2019 初赛]Love Math1 打开题目 题目源码 <?php error_reporting(0); //听说你很喜欢数学&#xff0c;不知道你是否爱它胜过爱flag if(!isset($_GET[c])){show_source(__FILE__); }else{//例子 c20-1$content $_GET[c];if (strlen($content) > 80) {die("…

前端项目打包体积分析与优化

一、安装依赖分析工具 npm install webpack-bundle-analyz 二、修改webpack.config.js文件 1、导入上面下载的包 2、在plugins里创建实例 三、启动打包命令 npm run build 会弹出如下界面&#xff1a; 四、优化 1、通过CDN导入react-dom文件 修改webpack.config.js文件里…

Upload-Labs-Linux1【CTF】

拿到这道题目一看&#xff0c;发现是upload靶场&#xff1b;这不简简单单吗&#xff1b;结果中间还是遇到了一些小问题 小坑总结&#xff1a;该关只识别标准php语法&#xff1a;<?php phpinfo()?>格式&#xff1b;即<?php ?> 不识别<? phpinfo()?> &…

大模型综述总结--第一部分

1 目录 本文是学习https://github.com/le-wei/LLMSurvey/blob/main/assets/LLM_Survey_Chinese.pdf的总结&#xff0c;仅供学习&#xff0c;侵权联系就删 目录如下图 本次只总结一部分&#xff0c;刚学习有错请指出&#xff0c;VX关注晓理紫&#xff0c;关注后续。 2、概述…

Spark: a little summary

转眼写spark一年半了&#xff0c;从之前写机器学习组件、做olap到后面做图计算&#xff0c;一直都是用的spark&#xff0c;惭愧的是没太看过里面的源码。这篇文章的目的是总结一下Spark里面比较重要的point&#xff0c;重点部分会稍微看一下源代码&#xff0c;因为spark是跟cli…

HL祭记汇

一.写在前面 如果说廿四10天集训&#xff0c;对于我&#xff0c;是完成了从入门到蒟蒻的蜕变&#xff0c;那么&#xff0c;HL7天&#xff0c;可以说是真正成为了OIer&#xff0c;虽然是被小学生、初中生&#xff08;南方的&#xff09;薄纱的那种高中OIer…… 二.目录 Day 1…

微服务三十五关

1.微服务有什么好处&#xff1f; 微服务优点很多&#xff0c;但是我们通常说一个东西好肯定会跟另一个东西比较&#xff0c; 通常说微服务好会和单体项目进行比较。以下是微服务相对于单体项目的一些显著好处&#xff1a; 首先&#xff0c;让我们讨论单体项目的一些主要缺点&a…

IDEA生成Java Doc帮助文档

使用场景 使用IDEA&#xff08;本次使用2020.3版&#xff09;将自己写的常用的工具类打成jar包&#xff0c;安装到maven本地仓库&#xff0c;最后生成对应的doc参考文档。 操作流程 方法一 选中项目 右键 show in Explor&#xff0c;如下图&#xff1a; 选中地址栏 cmd 输入…

C#,计算几何,计算机图形学(Computer Graphics)洪水填充算法(Flood Fill Algorithm)与源代码

1 泛洪填充算法(Flood Fill Algorithm) 泛洪填充算法(Flood Fill Algorithm) &#xff0c;又称洪水填充算法&#xff0c;是在很多图形绘制软件中常用的填充算法&#xff0c;最熟悉不过就是 windows 自带画图软件的油漆桶功能。 2 源程序 using System; using System.Collecti…

【LeetCode刷题笔记】242.有效的字母异位词

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 更多算法知识专栏&#xff1a;算法分析&#x1f525; 给大家跳段街舞感谢…

vue手写卡片切换,并且点击获取到卡片信息

需求&#xff1a;做一个卡片样式的列表&#xff0c;之后有一些基本信息&#xff0c;之后卡片选中后样式不一样&#xff0c;默认选中第一个卡片&#xff0c;点击卡片后可以获取到卡片的信息 一、效果 二、关键代码 index默认重0开始,activeTable默认为0,0-0等于0&#xff0c;但…

vscode与vue环境配置

一、下载并安装VScode 安装VScode 官网下载 二、配置node.js环境 安装node.js 官网下载 会自动配置环境变量和安装npm包(npm的作用就是对Node.js依赖的包进行管理)&#xff0c;此时可以执行 node -v 和 npm -v 分别查看node和npm的版本号&#xff1a; 配置系统变量 因为在执…

【openGL教程08】着色器(02)

LearnOpenGL - Shaders 一、说明 着色器是openGL渲染的重要内容&#xff0c;客户如果想自我实现渲染灵活性&#xff0c;可以用着色器进行编程&#xff0c;这种程序小脚本被传送到GPU的显卡内部&#xff0c;起到动态灵活的着色作用。 二、着色器简述 正如“Hello Triangle”一章…

[NCTF2019]True XML cookbook --不会编程的崽

题目的提示很明显了&#xff0c;就是xxe攻击&#xff0c;直接抓包。 <?xml version "1.0"?> <!DOCTYPE ANY [ <!ENTITY xxe SYSTEM "file:///etc/passwd" > ]> <user><username> &xxe; </username><passwor…