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

小阿轩yx-案例:Zabbix监控kubernetes云原生环境

小阿轩yx-案例:Zabbix监控kubernetes云原生环境

前言

传统监控的本质

  • 就是收集、分析和使用信息来观察一段时间内监控对象的运行进度,并且进行相应的决策管理的过程,监控侧重于观察特定指标。

随着云原生时代的到来

  • 我们对监控的功能提出了更多的要求,要实现这些功能,就要实现的云原生的“可观测性”。
  • 可观测性是云原生时代必须具备的能力。

目前,“可观测性” 逐渐取代 “监控”,成为云原生技术领域最热门的话题之一。

Zabbix 新版本功能介绍

zabbix 新功能

  • 是一个基于 web 界面的分布式系统监控的企业级开源软件。
  • 可以监视各种系统与设备的参数,保障服务器及设备的安全运营。

Zabbix 6.0 LTS

  • 新增 Kubernetes 监控功能,可以在 Kubernetes 系统从多个维度采集指标。

zabbix 特点

  • 安装与配置简单。
  • 可视化 web 管理界面。
  • 免费开源。
  • 支持中文。
  • 自动发现。
  • 分布式监控。
  • 实时绘图。

zabbix 的主要功能

硬件监控

  • 如交换机、路由器、打印机等。

系统监控

  • 如 CPU、内存,磁盘。硬盘 IO,系统负载等。

服务监控

  • 如 apache、nginx、tomcat、redis、TCP 连接数等。

性能监控

  • 如网站性能,服务器性能,数据库性能。

日志监控

  • 如访问日志,错误日志。

安全监控

  • 如用户登录数,本地文件改动,passwd 文件变化。

网络监控

  • 如端口,SMTP,网络使用率,网络入流量,网络出流量。

kubernetes 集群及组件监控模板

新版本的 zabbix 中

  • 提供了专门针对 kubernetes 原生架构的监控模板,用户可以直接使用这些模板对 kubernetes 的原生组件进行监控。
模板名称备注
Kubernetes API server by HTTPK8S ApiServer 组件指标模板
Kubernetes cluster state by HTTPk8S 集群指标模板
Kubernetes controller manager by HTTPK8S ControllerManager 组件指标模板
Kubernetes kubelet by HTTPK8S Kubelet 组件指标模板
Kubernetes nodes by HTTPK8S 集群节点发现以及状态指标模板
Kubernetes scheduler by HTTPK8S Scheduler 组件指标模板

K8S 节点基础信息指标模板

  • 对 kubernetes 的主机进行监控的时候,仍然可以使用 Linux by zabbix agent 模板对集群中的各个主机进行晚上的监控。
模板名称备注
Linux by Zabbix agentOS Linux 系统监控模板

监控指标

  • 云原生环境中,需要监控的指标很多
监控名称监控对象
节点基础信息CPU、内存,磁盘 ,IO ,网络,system info等
集群指标 [组件]Api Server 、controllerManage、SchedulerServer,、kubelet等
资源对象指标Daemonset、Deployment、Replicaset,Endpoint,Pod等
Pod 容器指标Container:Menory max usage,Pod CpU:User seconds等

Agentless

  • 通过 Zabbix 内置的 “HTTP agent”,“Script” 两种类型的监控项,无需安装客户端,通过访问被监控端的 API 接口即可采集监控指标数据,主要用于K8S 集群、服务组件、pod 容器状态及性能指标的采集。

项目环境

设备列表

主机IP
k8s-master192.168.10.101
k8s-node01192.168.10.102
k8s-node02(zabbix server)192.168.10.103
mariadb-10、NFS192.168.10.108

案例拓扑图

数据库配置

关闭防火墙、内核机制(在108主机上) 

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# vim /etc/sysconfig/selinux
##修改为永久关闭
SELINUX=disabled

将 mysql-8.0.31-linux 的源码包通过 Xftp 上传至主机108

用 bash 快速部署 mysql

[root@localhost ~]# bash mysql-8.0.31-linux-glibc2.12-x86_64.tar.xz

NFS 配置

开启会话同步(101、102、103)

创建 NFS 存储目录

[root@k8s-master ~]# mkdir -p /nfs
[root@k8s-node01 ~]# mkdir -p /nfs
[root@k8s-node02 ~]# mkdir -p /nfs

安装 nfs 服务

[root@k8s-master ~]# yum -y install nfs-utils rpcbind
[root@k8s-node01 ~]# yum -y install nfs-utils rpcbind
[root@k8s-node02 ~]# yum -y install nfs-utils rpcbind

重定向配置文件

[root@k8s-master ~]# echo "/nfs *(rw,sync,no_root_squash)" >> /etc/exports
[root@k8s-node01 ~]# echo "/nfs *(rw,sync,no_root_squash)" >> /etc/exports
[root@k8s-node02 ~]# echo "/nfs *(rw,sync,no_root_squash)" >> /etc/exports

启动服务

[root@k8s-master ~]# systemctl start nfs && systemctl start rpcbind
[root@k8s-node01 ~]# systemctl start nfs && systemctl start rpcbind
[root@k8s-node02 ~]# systemctl start nfs && systemctl start rpcbind

设置开机自启

[root@k8s-master ~]# systemctl enable nfs-server && systemctl enable rpcbind
[root@k8s-node01 ~]# systemctl enable nfs-server && systemctl enable rpcbind
[root@k8s-node02 ~]# systemctl enable nfs-server && systemctl enable rpcbind

在所有 k8s 节点安装 nfs

[root@k8s-master ~]# yum -y install nfs-utils
[root@k8s-node01 ~]# yum -y install nfs-utils
[root@k8s-node02 ~]# yum -y install nfs-utils
  • 所有节点都要安装 nfs-utils,否则无法使用 pv

安装 zabbix server 和 web

将镜像文件通过 Xftp 上传至master、node01、node02(101、102、103)

开启会话同步

进入镜像文件目录

[root@k8s-master ~]# cd images/
[root@k8s-node01 ~]# cd images/
[root@k8s-node02 ~]# cd images/

导入镜像

[root@k8s-master images]# bash imp_docker_img.sh
[root@k8s-node01 images]# bash imp_docker_img.sh
[root@k8s-node02 images]# bash imp_docker_img.sh

取消会话同步

创建动态 PV

编辑 nfs 的 yaml 文件

[root@localhost ~]# vim storageclass-nfs.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: managed-nfs-storage
provisioner: fuseim.pri/ifs
parameters:archiveOnDelete: "true"---
kind: ServiceAccount
apiVersion: v1
metadata:name: nfs-client-provisioner---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: nfs-client-provisioner-runner
rules:- apiGroups: [""]resources: ["persistentvolumes"]verbs: ["get", "list", "watch", "create", "delete"]- apiGroups: [""]resources: ["persistentvolumeclaims"]verbs: ["get", "list", "watch", "update"]- apiGroups: ["storage.k8s.io"]resources: ["storageclasses"]verbs: ["get", "list", "watch"]- apiGroups: [""]resources: ["events"]verbs: ["create", "update", "patch"]---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: run-nfs-client-provisioner
subjects:- kind: ServiceAccountname: nfs-client-provisionernamespace: default
roleRef:kind: ClusterRolename: nfs-client-provisioner-runnerapiGroup: rbac.authorization.k8s.io---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: leader-locking-nfs-client-provisioner
rules:- apiGroups: [""]resources: ["endpoints"]verbs: ["get", "list", "watch", "create", "update", "patch"]---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: leader-locking-nfs-client-provisioner
subjects:- kind: ServiceAccountname: nfs-client-provisionernamespace: default
roleRef:kind: Rolename: leader-locking-nfs-client-provisionerapiGroup: rbac.authorization.k8s.io---
apiVersion: v1
kind: ServiceAccount
metadata:name: nfs-client-provisioner---
kind: Deployment
apiVersion: apps/v1
metadata:name: nfs-client-provisioner
spec:replicas: 1strategy:type: Recreateselector:matchLabels:app: nfs-client-provisionertemplate:metadata:labels:app: nfs-client-provisionerspec:serviceAccountName: nfs-client-provisionercontainers:- name: nfs-client-provisionerimage: arawak/nfs-client-provisionervolumeMounts:- name: nfs-client-rootmountPath: /persistentvolumesenv:- name: PROVISIONER_NAMEvalue: fuseim.pri/ifs- name: NFS_SERVERvalue: 192.168.10.108   #指定nfs地址- name: NFS_PATHvalue: /nfsvolumes:- name: nfs-client-rootnfs:server: 192.168.10.108   #指定nfs地址path: /nfs

生成动态 PV

[root@localhost ~]# kubectl apply -f storageclass-nfs.yaml

安装 zabbix-server

编写 zabbix_server.yaml

[root@localhost ~]# zabbix-server.yaml
apiVersion: v1
kind: Namespace
metadata:name: zabbix
---
apiVersion: v1
kind: Service
metadata:name: zabbix-servernamespace: zabbixlabels:app: zabbix-server
spec:selector:app: zabbix-serverports:- name: zabbix-serverport: 10051nodePort: 30051type: NodePort---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: zabbix-scriptsnamespace: zabbix
spec:storageClassName: "managed-nfs-storage"accessModes:- ReadWriteManyresources:requests:storage: 1Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: zabbix-servername: zabbix-servernamespace: zabbix
spec:replicas: 1selector:matchLabels:app: zabbix-servertemplate:metadata:labels:app: zabbix-serverspec:nodeSelector:zabbix-server: "true"hostNetwork: truecontainers:- image: zabbix/zabbix-server-mysql:6.4.8-centosimagePullPolicy: IfNotPresentname: zabbix-server-mysqlvolumeMounts:- mountPath: /usr/lib/zabbix/alertscriptsname: zabbix-scriptsenv:- name: DB_SERVER_HOSTvalue: 192.168.10.108- name: DB_SERVER_PORTvalue: "3306"- name: MYSQL_DATABASEvalue: zabbix- name: MYSQL_USERvalue: zabbix- name: MYSQL_PASSWORDvalue: zabbix- name: ZBX_CACHESIZEvalue: "512M"- name: ZBX_HISTORYCACHESIZEvalue: "128M"- name: ZBX_HISTORYINDEXCACHESIZEvalue: "128M"- name: ZBX_TRENDCACHESIZEvalue: "128M"- name: ZBX_VALUECACHESIZEvalue: "256M"- name: ZBX_TIMEOUTvalue: "30"resources:requests:cpu: 500mmemory: 500Milimits:cpu: 1000mmemory: 1Givolumes:- name: zabbix-scriptspersistentVolumeClaim:claimName: zabbix-scripts

为 node02 节点设置标签

[root@localhost ~]# kubectl label node k8s-node02 zabbix-server=true

安装 zabbix-server

[root@localhost ~]# kubectl apply -f zabbix-server.yaml

查看 pod 状态

[root@localhost ~]# kubectl get pod -n zabbix
NAME                              READY        STATUS      RESTARTS    AGE
zabbix-server-5f48d9d57d-rkr5p    1/1          Running     0           66s

部署 zabbix-web

编写 zabbix_web.yaml 文件

[root@localhost ~]# vim zabbix-web.yaml
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: zabbix-webname: zabbix-webnamespace: zabbix
spec:replicas: 1selector:matchLabels:app: zabbix-webtemplate:metadata:labels:app: zabbix-webspec:containers:- image: zabbix/zabbix-web-nginx-mysql:6.4.8-centosimagePullPolicy: IfNotPresentname: zabbix-web-nginx-mysqlenv:- name: DB_SERVER_HOSTvalue: 192.168.10.108- name: MYSQL_USERvalue: zabbix- name: MYSQL_PASSWORDvalue: zabbix- name: ZBX_SERVER_HOSTvalue: zabbix-server- name: PHP_TZvalue: Asia/shanghairesources:requests:cpu: 500mmemory: 500Milimits:cpu: 1000mmemory: 1Gi
---
apiVersion: v1
kind: Service
metadata:labels:app: zabbix-webname: zabbix-webnamespace: zabbix
spec:ports:- name: webport: 8080protocol: TCPtargetPort: 8080nodePort: 30008selector:app: zabbix-webtype: NodePort

安装 zabbix-web

[root@localhost ~]# kubectl apply -f zabbix-web.yaml

查看 pod 状态

[root@localhost ~]# kubectl get pod -n zabbix
NAME                              READY        STATUS      RESTARTS    AGE
zabbix-server-5f48d9d57d-rkr5p    1/1          Running     0           66s
zabbix-web-55cd66f74f-9f284       1/1          Running     0           44s

访问 zabbix 的 web

查看 svc

[root@localhost ~]# kubectlget svc -n zabbix
NAME             TYPE        CLUSTER-IP        EXTERNAL-IP  PORT(S)            AGE
zabbix-server    NodePort    10.100.40.247     <none>       10051:30051/TCP    2m39s
zabbix-web       NodePort    10.100.202.232    <none>       8080:30008/TCP     21s

登录 web

  • 等待片刻后访问网站
  • http://192.168.10.101:30008/

初始账号

  • Admin
  • zabbix

安装 zabbix proxy 和 agent

  • 官方给我们提供了全套的容器化服务部署方式,这里采用官方提供的 Helm chart 来安装。

安装 helm 工具(如果有 helm,忽略此步)

  • 将 zabbix-helm-chrt-1.3.4 源码包上传至 master(101) 

解压 

[root@localhost ~]# tar zxvf zabbix-helm-chrt-1.3.4.tgz

拷贝文件到指定目录下

[root@localhost ~]# cp linux-amd64/helm /usr/local/bin/helm

添加仓库(已有离线包,此步可忽略)

[root@localhost ~]# helm repo add zabbix-chart-6.2 https://cdn.zabbix.com/zabbix/integrations/kubernetes-helm/6.2/

查看列表

[root@localhost ~]# helm repo list
NAME                URL
zabbix-chart-6.0    https://cdn.zabbix.com/zabbix/integrations/kubernetes-helm/6.4

搜索仓库中的 helm 包(已有离线包,此步可忽略)

[root@localhost ~]# helm search repo zabbix-chart-6.2
NAME                                CHART    VERSION   APP    VERSION   DESCRIPTION
zabbix-chart-6.0/zabbix-helm-chrt   1.3.4    6.0.21    A      Helm      chart    for deploying ZAbbix agent and proxy

拉取 helm 包(已有离线包,此步可忽略)

[root@localhost ~]# helm pull zabbix-chart-6.2/zabbix-helm-chrt

配置 values.yaml

解压

[root@localhost ~]# tar zxvf zabbix-helm-chrt-1.3.4.tgz

进入目录

[root@localhost ~]# cd zabbix-helm-chrt

修改配置文件

[root@localhost zabbix-helm-chrt]# vim values.yaml
#修改以下内容
zabbixProxy:image:repository: zabbix/zabbix-proxy-sqlite3tag: 6.4.8-centospullPolicy: IfNotPresent- name: ZBX_SERVER_HOSTvalue: "192.168.10.103"
zabbixAgent:image:repository: zabbix/zabbix-agent2tag: 6.4.8-centospullPolicy: IfNotPresent- name: ZBX_SERVER_HOSTvalue: 0.0.0.0/0## Zabbix server port- name: ZBX_SERVER_PORTvalue: 10051- name: ZBX_PASSIVE_ALLOWvalue: true- name: ZBX_ACTIVE_ALLOWvalue: true
  • zabbixProxy:
  •         tag: 6.4.8-centos
  •            value: "192.168.10.103"
  • zabbixAgent:
  •     tag: 6.4.8-centos
  •       value: true

IP 地址为 zabbix server 主机的地址,我们是将 zabbix server 安装到了 node82 的节点上,此节点的 IP 地址为 192.168.10.103。

安装 Zabbix Chart

创建 zabbix agent 和 proxy 的命名空间

[root@localhost zabbix-helm-chrt]# kubectl create namespace monitoring

利用 helm 部署 agent 和 proxy 组件

[root@localhost zabbix-helm-chrt]# kubectl taint node k8s-master node-role.kubernetes.io/master:NoSchedule-
[root@localhost zabbix-helm-chrt]# helm install zabbix .--dependency-update -n monitoring
[root@localhost zabbix-helm-chrt]# kubectl taint node k8s-master node-role.kubernetes.io/master:NoSchedule
  • 如果需要在 master 节点上安装 agent 程序,需要将 master 节点的污点去掉,本案例的 k8s 集群使用 kubeadm 安装,默认 master 节点为污点。
  • 部署好后还可以再将 master 设置为污点。

查看安装结果

[root@localhost ~]# kubectl get pod -n monitoring
NAME                                        READY  STATUS    RESTARTS   AGE
zabbix-agent-78kvh                          1/1    Running   0          20s
zabbix-agent-hxjns                          1/1    Running   0          20s
zabbix-agent-lpw9j                          1/1    Running   0          20s
zabbix-kube-state-metrics-6b588697b8-gw422  1/1    Running   0          20s
zabbix-proxy-59bcf6d9c4-44dt2               1/1    Running   0          20s

如果要卸载 helm 安装的程序,可以使用下面的命令

helm uninstall zabbix -n monitoring

验证安装结果

  • 如果 proxy 和 agnet 正常安装,则会看到 zabbix server 主机已经处于正常的监控状态。

修改 UI 界面语言

  • “Administration” --> “General”,找到 “Default language”,在下拉菜单中选择 “chinese(zh_CN)”,然后点击下方的 “update” 按钮,页面即可修改为中文界面。

在 Web 管理界面添加 proxy

添加 zabbix-proxy

  • “管理” --> “Proxy”,在右上角点击 “创建 Proxy” 按钮,打开创建 proxy 的界面。
  • 填写信息,其中 agnet 代理程序名称是在 value.yaml 中设置的 ZBX_HOSTNAME 的值,系统代理模式为主动式,代理地址不用填写。

等待一会,刷新一下页面,观察 proxy 的状态,如果不正常,Last seen 的位置会显示成红色的 Never 字样。

创建主机群组

  • 创建主机群组,群组命名为 k8s Server
  • “数据采集” --> “主机群组”,添加主机组。

节点状态监控

  • 创建 k8s-node 主机,用于自动发现 K8S 各个节点主机

添加主机模板

  • “数据采集” --> “主机”,创建主机 k8s-nodes,用于自动发现节点。

需要配置的信息

  • 主机名:k8s-nodes
  • 模板:Templates 下的Kubernetes nodes by HTTP
  • 主机群组:K8S Server
  • 代理程序检测:zabbix-proxy
  • 已启用:true

为主机设置宏参数

配置信息宏变量表

宏变量
{$KUBE.API.ENDPOINT.URL}https://192.168.10.101:6443/api
{$KUBE.API.TOKEN}你的 Token 值
{$KUBE.NODES.ENDPOINT.NAME}zabbix-zabbix-helm-chrt-agent

获取 Token 值

kubectl get secret zabbix-service-account -n monitoring -o jsonpath={.data.token}base64 -d

获取endpoint

kubectl get ep -n monitoring

集群服务监控

添加主机模板

  • “数据采集” --> “主机”,创建主机 k8s-cluster
  • 关联模板 “Kubernetes cluster state by HTTP”,用于自动发现服务组件。

设置宏变量

  • 需要填写的宏变量表
宏变量
{$KUBE.API.HOST}192.168.10.101
{$KUBE.API.PORT}6443
{$KUBE.API.TOKEN}你的Token值
{$KUBE.API.URL}https://192.168.10.101:6443
{$KUBE.API_SERVER.PORT}6443
{$KUBE.API_SERVER.SCHEME}https
{$KUBE.CONTROLLER_MANAGER.PORT}10252
{$KUBE.CONTROLLER_MANAGER.SCHEME}http
{$KUBE.KUBELET.PORT}10250
{$KUBE.KUBELET.SCHEME}https
{$KUBE.SCHEDULER.PORT}10251
{$KUBE.SCHEDULER.SCHEME}http
{$KUBE.STATE.ENDPOINT.NAME}zabbix-zabbix-helm-chrt-agent

验证监控主机

  • 因为没有使用 Linux by Zabbix agent 模板,所以集群服务相关的监控项,ZBX 为灰色的。
  • 只要能査看到监控信息就是成功的。
  • 如果想让其他的主机的 ZBX 也显示为绿色,可以单独给他们添加一个 Zabbix agent 模板,结果如图

查看监控数据

  • “检测” --> “主机”,可以看到所有被检测的主机。

点击某一个主机或组件的 “最新数据”,可以看到对应的具体监控到的信息。

小阿轩yx-案例:Zabbix监控kubernetes云原生环境

相关文章:

小阿轩yx-案例:Zabbix监控kubernetes云原生环境

小阿轩yx-案例&#xff1a;Zabbix监控kubernetes云原生环境 前言 传统监控的本质 就是收集、分析和使用信息来观察一段时间内监控对象的运行进度&#xff0c;并且进行相应的决策管理的过程&#xff0c;监控侧重于观察特定指标。 随着云原生时代的到来 我们对监控的功能提出…...

量化交易的个人见解

程序化交易在国内兴起有些年数了&#xff0c;个人以为&#xff0c;程序化交易与量化投资的关系&#xff0c;在于两者侧重点有差别。程序化交易侧重于下单的动作是机器自动执行的&#xff0c;量化投资则侧重于投资分析的过程是通过一个量化模型来实现的&#xff0c;所以量化投资…...

Java集合(一)

目录 Java集合&#xff08;一&#xff09; 集合介绍 单列集合分类 Collection接口 创建Collection实现类对象 常用方法 迭代器 基本使用 迭代器的执行过程 迭代器底层原理 集合中的并发修改异常及原因分析 List接口 ArrayList类 介绍 常用方法 遍历集合 Array…...

车载软件架构 --- SOA设计与应用(下)

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…...

网络原理 IP协议与以太网协议

博主主页: 码农派大星. 数据结构专栏:Java数据结构 数据库专栏:MySQL数据库 JavaEE专栏:JavaEE 关注博主带你了解更多数据结构知识 目录 1.网络层 IP协议 1.IP协议格式 2.地址管理 2.1 IP地址 2.2 解决IP地址不够用的问题 2.3NAT网络地址转换 2.4网段划分 3.路由选择…...

k8s的安装

k8s的安装 1.创建主机&#xff0c;设置ip,hostname&#xff0c;关闭firewalld,selinux,NetworkManager 编号主机名称ip1k8s-master192.168.118.662k8s-node01192.168.118.773k8s-node02192.168.118.88 2.设置主机之间的ssh免密 [rootk8s-master ~]# ssh-keygen [rootk8s-ma…...

Qt中样式表常用的属性名称定义

Qt中&#xff0c;用好样式表&#xff0c;不但可以做出意想不到的酷炫效果&#xff0c;有时候也能减轻开发量&#xff0c;可能由于你不了解某些样式使用&#xff0c;想破脑袋通过代码实现的效果&#xff0c;反倒不如别人用样式&#xff0c;一两句样式脚本就搞定。 Qt中&#xff…...

React源码学习(一):如何学习React源码

本系列源码学习&#xff0c;是基于 v16.13.1&#xff0c;v17.x与v16.x区别并不太大&#xff01; 一、如何正确的学习React源码&#xff1f; 找到Github&#xff0c;转到React仓库&#xff0c;fork / clone源码&#xff1a;React 查看Readme&#xff0c;在Documentation中有Cont…...

云计算服务的底层,虚拟化技术的实现原理

虚拟化技术&#xff1a; 一、 从cpu说起&#xff0c; intel和amd等cpu制造商 为了提高其cpu对 虚拟化程序的运算速度&#xff0c; 给cpu硬件里面 增加了指令集 VMLAUNCH, VMRESUME, VMEXIT, VMXOFF 这些指令集称为硬件辅助虚拟化技术的指令集。 ---------------------…...

大数据Flink(一百一十六):Flink SQL的时间属性

文章目录 Flink SQL的时间属性 一、Flink 三种时间属性简介 二、Flink 三种时间属性的应用场景 三、​​​​​​​SQL 指定时间属性的两种方式 四、​​​​​​​​​​​​​​SQL 处理时间DDL定义 五、​​​​​​​​​​​​​​SQL 事件时间DDL定义 Flink SQL的时…...

Ansible自动化部署kubernetes集群

机器环境介绍 1.1. 机器信息介绍 IP hostname application CPU Memory 192.168.204.129 k8s-master01 etcd&#xff0c;kube-apiserver&#xff0c;kube-controller-manager&#xff0c;kube-scheduler,kubelet,kube-proxy,containerd 2C 4G 192.168.204.130 k8s-w…...

网络通信流程

目录 ♫IP地址 ♫子网掩码 ♫MAC地址 ♫相关设备 ♫ARP寻址 ♫网络通信流程 ♫IP地址 我们已经知道 IP 地址由网络号主机号组成&#xff0c;根据 IP 地址的不同可以有5钟划分网络号和主机号的方案&#xff1a; 其中&#xff0c;各类地址的表示范围是&#xff1a; 分类范围适用…...

数据结构一:绪论

&#xff08;一&#xff09;数据结构的基本概念 1.相关名词 【1】数据 1.信息的载体&#xff0c;描述客观事物 2.能被输入到计算机中 3.能被计算机程序识别和处理的符号的集合。 【2】数据元素 1.数据的一个“个体” 2.数据的基本单位 3.有时候也被称为元素、结点、顶点…...

使用OpenFeign在不同微服务之间传递用户信息时失败

文章目录 起因原因解决方法&#xff1a; 起因 从pay-service中实现下单时&#xff0c;会调用到user-service中的扣减余额。 因此这里需要在不同微服务之间传递用户信息。 但是user-service中始终从始至终拿不到user的信息。 原因 在pay-service中&#xff0c;不仅要Enable O…...

js中【Worker】相关知识点详细解读

什么是 JavaScript 中的 Worker&#xff1f; JavaScript 中的 Worker 是一个可以在后台线程中运行代码的 API&#xff0c;这样可以避免主线程&#xff08;通常是 UI 线程&#xff09;被阻塞。使用 Worker 时&#xff0c;JavaScript 可以在多线程环境中工作&#xff0c;解决了单…...

使用Apify加载Twitter消息以进行微调的完整指南

# 使用Apify加载Twitter消息以进行微调的完整指南## 引言在自然语言处理领域&#xff0c;微调模型以适应特定任务是提升模型性能的常见方法。本文将介绍如何使用Apify从Twitter导出聊天信息&#xff0c;以便进一步进行微调。## 主要内容### 使用Apify导出推文首先&#xff0c;我…...

【C++算法】滑动窗口

长度最小的子数组 题目链接&#xff1a; 209. 长度最小的子数组 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/minimum-size-subarray-sum/description/ 算法原理 代码步骤&#xff1a; 设置left0&#xff0c;right0设置sum0&#xff0c;len0遍历l…...

(c++)猜数字(含根据当前时间生成伪随机数代码)

#include<iostream> #include<ctime>/*用srand((unsigned int)time(NULL));要包含这个头文件&#xff0c;如果没有这两个&#xff0c;rand()函数会一直生成42这个伪随机数。*/using namespace std;int main() {srand((unsigned int)time(NULL));//种子&#xff0c;…...

优化批处理流程:自定义BatchProcessorUtils的设计与应用

优化批处理流程&#xff1a;自定义BatchProcessorUtils的设计与应用 | 原创作者/编辑&#xff1a;凯哥Java | 分类&#xff1a;个人小工具类 在我们开发过程中&#xff0c;处理大量的数据集是一项常见的任务。特别是在数据库操作、文件处理或者…...

Framebuffer应用编程

目录 前言 LCD操作原理 涉及的 API 函数 open函数 ioctl 函数 mmap 函数 Framebuffer程序分析 源码 1.打开设备 2.获取LCD参数 3.映射Framebuffer 4.描点函数 5.随便画几个点 上机实验 前言 本文介绍LCD的操作原理和涉及到的API函数&#xff0c;分析Framebuffer…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...