小阿轩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 HTTP | K8S ApiServer 组件指标模板 |
| Kubernetes cluster state by HTTP | k8S 集群指标模板 |
| Kubernetes controller manager by HTTP | K8S ControllerManager 组件指标模板 |
| Kubernetes kubelet by HTTP | K8S Kubelet 组件指标模板 |
| Kubernetes nodes by HTTP | K8S 集群节点发现以及状态指标模板 |
| Kubernetes scheduler by HTTP | K8S Scheduler 组件指标模板 |
K8S 节点基础信息指标模板
- 对 kubernetes 的主机进行监控的时候,仍然可以使用 Linux by zabbix agent 模板对集群中的各个主机进行晚上的监控。
| 模板名称 | 备注 |
| Linux by Zabbix agent | OS 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-master | 192.168.10.101 |
| k8s-node01 | 192.168.10.102 |
| k8s-node02(zabbix server) | 192.168.10.103 |
| mariadb-10、NFS | 192.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-案例:Zabbix监控kubernetes云原生环境 前言 传统监控的本质 就是收集、分析和使用信息来观察一段时间内监控对象的运行进度,并且进行相应的决策管理的过程,监控侧重于观察特定指标。 随着云原生时代的到来 我们对监控的功能提出…...
量化交易的个人见解
程序化交易在国内兴起有些年数了,个人以为,程序化交易与量化投资的关系,在于两者侧重点有差别。程序化交易侧重于下单的动作是机器自动执行的,量化投资则侧重于投资分析的过程是通过一个量化模型来实现的,所以量化投资…...
Java集合(一)
目录 Java集合(一) 集合介绍 单列集合分类 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.创建主机,设置ip,hostname,关闭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中,用好样式表,不但可以做出意想不到的酷炫效果,有时候也能减轻开发量,可能由于你不了解某些样式使用,想破脑袋通过代码实现的效果,反倒不如别人用样式,一两句样式脚本就搞定。 Qt中ÿ…...
React源码学习(一):如何学习React源码
本系列源码学习,是基于 v16.13.1,v17.x与v16.x区别并不太大! 一、如何正确的学习React源码? 找到Github,转到React仓库,fork / clone源码:React 查看Readme,在Documentation中有Cont…...
云计算服务的底层,虚拟化技术的实现原理
虚拟化技术: 一、 从cpu说起, intel和amd等cpu制造商 为了提高其cpu对 虚拟化程序的运算速度, 给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,kube-apiserver,kube-controller-manager,kube-scheduler,kubelet,kube-proxy,containerd 2C 4G 192.168.204.130 k8s-w…...
网络通信流程
目录 ♫IP地址 ♫子网掩码 ♫MAC地址 ♫相关设备 ♫ARP寻址 ♫网络通信流程 ♫IP地址 我们已经知道 IP 地址由网络号主机号组成,根据 IP 地址的不同可以有5钟划分网络号和主机号的方案: 其中,各类地址的表示范围是: 分类范围适用…...
数据结构一:绪论
(一)数据结构的基本概念 1.相关名词 【1】数据 1.信息的载体,描述客观事物 2.能被输入到计算机中 3.能被计算机程序识别和处理的符号的集合。 【2】数据元素 1.数据的一个“个体” 2.数据的基本单位 3.有时候也被称为元素、结点、顶点…...
使用OpenFeign在不同微服务之间传递用户信息时失败
文章目录 起因原因解决方法: 起因 从pay-service中实现下单时,会调用到user-service中的扣减余额。 因此这里需要在不同微服务之间传递用户信息。 但是user-service中始终从始至终拿不到user的信息。 原因 在pay-service中,不仅要Enable O…...
js中【Worker】相关知识点详细解读
什么是 JavaScript 中的 Worker? JavaScript 中的 Worker 是一个可以在后台线程中运行代码的 API,这样可以避免主线程(通常是 UI 线程)被阻塞。使用 Worker 时,JavaScript 可以在多线程环境中工作,解决了单…...
使用Apify加载Twitter消息以进行微调的完整指南
# 使用Apify加载Twitter消息以进行微调的完整指南## 引言在自然语言处理领域,微调模型以适应特定任务是提升模型性能的常见方法。本文将介绍如何使用Apify从Twitter导出聊天信息,以便进一步进行微调。## 主要内容### 使用Apify导出推文首先,我…...
【C++算法】滑动窗口
长度最小的子数组 题目链接: 209. 长度最小的子数组 - 力扣(LeetCode)https://leetcode.cn/problems/minimum-size-subarray-sum/description/ 算法原理 代码步骤: 设置left0,right0设置sum0,len0遍历l…...
(c++)猜数字(含根据当前时间生成伪随机数代码)
#include<iostream> #include<ctime>/*用srand((unsigned int)time(NULL));要包含这个头文件,如果没有这两个,rand()函数会一直生成42这个伪随机数。*/using namespace std;int main() {srand((unsigned int)time(NULL));//种子,…...
优化批处理流程:自定义BatchProcessorUtils的设计与应用
优化批处理流程:自定义BatchProcessorUtils的设计与应用 | 原创作者/编辑:凯哥Java | 分类:个人小工具类 在我们开发过程中,处理大量的数据集是一项常见的任务。特别是在数据库操作、文件处理或者…...
Framebuffer应用编程
目录 前言 LCD操作原理 涉及的 API 函数 open函数 ioctl 函数 mmap 函数 Framebuffer程序分析 源码 1.打开设备 2.获取LCD参数 3.映射Framebuffer 4.描点函数 5.随便画几个点 上机实验 前言 本文介绍LCD的操作原理和涉及到的API函数,分析Framebuffer…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...
