小阿轩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…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
