1-k8s1.24-底座搭建-基于containerd
文章目录
- 一、服务器准备
- 二、安装Containerd
- 三、安装k8s
- 四、安装部署dashboard
ps:第一遍搭建ks8的时候,由于k8s在1.24版本之后就放弃了对docker的支持,如果要继续使用docker需要自己加载插件。所以一开始就是直接使用 k8s1.24+containerd进行搭建。
后续相关的文章,原来是基于 k8s1.24+containerd操作编写的。但是。搭建过程中发现相对于 k8s1.24+containerd组合,网上查阅资料相对较少。所以后来就回退到 k8s1.23.6+docker重新实操一遍,重新整了下文档。不过也只是改变了底层的容器使用方式,后续的文章操作大体上对container也是适用的。
个人觉得docker现在还行,如果习惯使用docker的,可以继续使用8s1.24之前的版本,功能够用就行。
一、服务器准备
-
as asdf 服务器准备
服务器名称 服务器IP 角色 CPU(最低要求) 内存(最低要求) master 192.168.248.10 master 2核 2G worker1 192.168.248.11 node 2核 2G worker2 192.168.248.12 node 2核 2G -
修改ip:vi /etc/sysconfig/network-scripts/ifcfg-ens33
-
修改主机名:hostnamectl set-hostname master
-
修改主机名与ip映射:vi /etc/hosts
192.168.248.10 master 192.168.248.11 worker1 192.168.248.12 worker2
-
重置网络:service network restart
-
关闭防火墙:systemctl stop firewalld
二、安装Containerd
ps:本文章所有的配置,没有提示的默认三台都要配置
-
下载安装包:https://github.com/containerd/containerd/releases/download/v1.4.12/cri-containerd-cni-1.4.12-linux-amd64.tar.gz
-
创建文件夹:mkdir /opt/cri-containerd-cni
-
上传文件夹并且解压:tar -xvf cri-containerd-cni-1.4.12-linux-amd64.tar.gz
-
将解压的文件,复制到系统的配置目录和执行目录
cp -a /opt/cri-containerd-cni/etc/systemd/system/containerd.service /etc/systemd/system cp -a /opt/cri-containerd-cni/etc/crictl.yaml /etc cp -a /opt/cri-containerd-cni/etc/cni /etc cp -a /opt/cri-containerd-cni/usr/local/sbin/runc /usr/local/sbin cp -a /opt/cri-containerd-cni/usr/local/bin/* /usr/local/bin cp -a /opt/cri-containerd-cni/opt/* /opt
-
启动containerd
systemctl daemon-reload systemctl enable containerd --now
-
创建文件夹:mkdir /etc/containerd
-
配置containerd:containerd config default | tee /etc/containerd/config.toml
-
修改配置文件:/etc/containerd/config.toml
1. 修改配置:sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2" 2. 在[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]下面加一行SystemdCgroup = true 3. 将[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]替换成下面三行endpoint = ["https://bh9y01q2.mirror.aliyuncs.com"][plugins."io.containerd.grpc.v1.cri".registry.mirrors."k8s.gcr.io"]endpoint = ["https://registry.cn-hangzhou.aliyuncs.com/google_containers"] 弃用:endpoint = ["https://docker.mirrors.ustc.edu.cn"]
ps:endpoint = [“https://bh9y01q2.mirror.aliyuncs.com”],这个地址可以自己取阿里云注册使用
1)登录阿里云:https://www.aliyun.com/
2)获取平台分配的镜像加速地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
-
重启containerd
systemctl daemon-reload systemctl restart containerd
-
安装nerdctl
1)概念
nerdctl是containerd原生的命令行管理工具。和Docker的命令行兼容 nerdctl管理的容器、镜像与Kubernetes的容器、镜像是完全隔离的,不能互通。目前只能通过crictl命令行工具来查看、拉取Kubernetes的容器、镜像 nerdctl和containerd的版本对应关系,参考:https://github.com/containerd/nerdctl/blob/v0.6.1/go.mod
2)下载安装包:https://github.com/containerd/nerdctl/releases/download/v0.6.1/nerdctl-0.6.1-linux-amd64.tar.gz
3)创建文件夹:mkdir /opt/nerdctl
4)上传并且解压:tar -xvf nerdctl-0.6.1-linux-amd64.tar.gz
5)拷贝:cp -a /opt/nerdctl/nerdctl /usr/bin
6)查看镜像:nerdctl images
ps: nerdctl run -p containerPort:hostPort的端口映射无效,只能通过
nerdctl run -net host
来实现 -
安装crictl
1)概念:crictl是Kubernetes用于管理Containerd上的镜像和容器的一个命令行工具,主要用于Debug
2)下载:https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.24.0/crictl-v1.24.0-linux-amd64.tar.gz
3)创建文件夹:mkdir /opt/crictl
4)解压:tar -zxvf crictl-v1.24.0-linux-amd64.tar.gz -C /usr/local/bin
5)创建crictl的配置文件:vi /etc/crictl.yaml
runtime-endpoint: unix:///var/run/containerd/containerd.sock image-endpoint: unix:///var/run/containerd/containerd.sock timeout: 10 debug: false pull-image-on-create: false
6)加载:systemctl daemon-reload
7)测试:crictl images
-
安装buildkit
1)概念:使用
nerdctl build
进行Dockerfile的镜像构建时,报缺少buildkit,所以需要进行安装 ps:buildkit和containerd的版本对应关系,参考:https://github.com/moby/buildkit/blob/v0.8.3/go.mod
2)下载安装包:https://github.com/moby/buildkit/releases/download/v0.8.3/buildkit-v0.8.3.linux-amd64.tar.gz
3)创建文件夹:mkdir /opt/buildkit
4)解压:tar -xvf buildkit-v0.8.3.linux-amd64.tar.gz
5)拷贝:cp -a bin /usr/local
6)编写buildkitd的启动文件:vi /etc/systemd/system/buildkit.service
[Unit] Description=BuildKit Documentation=https://github.com/moby/buildkit[Service] ExecStart=/usr/local/bin/buildkitd --oci-worker=false --containerd-worker=true[Install] WantedBy=multi-user.target
7)启动buildkitd服务端程序:systemctl enable buildkit --now
三、安装k8s
ps:本文章所有的配置,没有提示的默认三台都要配置
-
禁用selinux
[root@localhost ~]# setenforce 0 [root@localhost ~]# getenforce Permissive
ps:永久禁用方法(需重启服务器)
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
-
关闭swap:wapoff -a
ps1:swap分区指的是虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间虚拟成内存来使用。但是会对系统性能产生影响。所以这里需要关闭。如果不能关闭,则在需要修改集群的配置参数
ps2:永久关闭方法,需重启服务器
sed -ri 's/.*swap.*/#&/' /etc/fstab
-
查看:free -m
-
bridged网桥设置
1)概念:为了让服务器的iptables能发现bridged traffic,需要添加网桥过滤和地址转发功能
2)新建modules-load.d/k8s.conf文件:vi /etc/modules-load.d/k8s.conf
overlay br_netfilter
3)新建sysctl.d/k8s.conf文件:vi /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-iptables = 1
4)加载配置文件:sysctl --system
5)加载br_netfilter网桥过滤模块 :modprobe br_netfilter
6)加载网络虚拟化技术模块:modprobe overlay
7)检验网桥过滤模块是否加载成功:lsmod | grep -e br_netfilter -e overlay
-
配置IPVS
1)概念:service有基于iptables和基于ipvs两种代理模型。基于ipvs的性能要高一些。需要手动载入才能使用ipvs模块
2)安装ipset和ipvsadm:yum install ipset ipvsadm
3)新建脚本文件:vi /etc/sysconfig/modules/ipvs.modules
modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack_ipv4
4)添加执行权限给脚本文件,然后执行脚本文件
chmod +x /etc/sysconfig/modules/ipvs.modules /bin/bash /etc/sysconfig/modules/ipvs.modules
5)检验模块是否加载成功:lsmod | grep -e ip_vs -e nf_conntrack_ipv4
-
安装kubelet、kubeadm、kubectl
1)添加yum源:vi /etc/yum.repos.d/kubernetes.repo
[kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpghttp://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
2)下载:yum install -y --setopt=obsoletes=0 kubelet-1.24.0 kubeadm-1.24.0 kubectl-1.24.0
3)配置: systemctl enable kubelet --now
4)相关概念
1. obsoletes等于1表示更新旧的rpm包的同时会删除旧包,0表示更新旧的rpm包不会删除旧包 2. kubelet启动后,可以用命令journalctl -f -u kubelet查看kubelet更详细的日志 3. kubelet默认使用systemd作为cgroup driver 4. 启动后,kubelet现在每隔几秒就会重启,因为它陷入了一个等待kubeadm指令的死循环
-
下载各个机器需要的镜像
1)查看集群所需镜像的版本:kubeadm config images list
2)创建文件夹:mkdir /opt/k8s
3)创建文件:vi /opt/k8s/images.sh
#!/bin/bashimages=( kube-apiserver:v1.24.0 kube-controller-manager:v1.24.0 kube-scheduler:v1.24.0 kube-proxy:v1.24.0 pause:3.7 etcd:3.5.3-0 coredns:v1.8.6 ) for imageName in ${images[@]} ; do crictl pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName done
kube-apiserver:v1.24.0 #接口服务,给予rest风格开放k8s的接口服务 kube-controller-manager:v1.24.0 #控制管理器,管理各个类型的控制器,针对k8s中的各个资源进行管理 kube-scheduler:v1.24.0 #调度器,将pod根据一定的算法调用到合适的节点上 kube-proxy:v1.24.0 #网络代理,负责service的服务发现负载均衡 pause:3.7 etcd:3.5.3-0 #理解为ks的数据库,键值类型存储的分布式数据库,提供了基于Raft算法实现自主的集群高可用。老版本:基于内存。新版本:持久化存储 coredns:v1.8.6 #网络配置
4)赋权: chmod +x /opt/k8s/images.sh
5)执行下载: /opt/k8s/images.sh
-
初始化主节点(只在master节点执行)
kubeadm init --apiserver-advertise-address=192.168.248.10 --control-plane-endpoint=master --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --kubernetes-version v1.24.0 --service-cidr=10.96.0.0/16 --pod-network-cidr=192.169.0.0/16
ps:–pod-network-cidr跟主机网络必须不同
ps:将最后一段标黑的保存,后续使用
参数说明
--apiserver-advertise-address string 设置 apiserver 绑定的 IP.--apiserver-bind-port int32 设置apiserver 监听的端口. (默认 6443)--apiserver-cert-extra-sans strings api证书中指定额外的Subject Alternative Names (SANs) 可以是IP 也可以是DNS名称。 证书是和SAN绑定的。--cert-dir string 证书存放的目录 (默认 "/etc/kubernetes/pki")--certificate-key string kubeadm-cert secret 中 用于加密 control-plane 证书的key--config string kubeadm 配置文件的路径.--cri-socket string CRI socket 文件路径,如果为空 kubeadm 将自动发现相关的socket文件; 只有当机器中存在多个 CRI socket 或者 存在非标准 CRI socket 时才指定.--dry-run 测试,并不真正执行;输出运行后的结果.--feature-gates string 指定启用哪些额外的feature 使用 key=value 对的形式。--help -h 帮助文档--ignore-preflight-errors strings 忽略前置检查错误,被忽略的错误将被显示为警告. 例子: 'IsPrivilegedUser,Swap'. Value 'all' ignores errors from all checks.--image-repository string 选择拉取 control plane images 的镜像repo (default "k8s.gcr.io")--kubernetes-version string 选择K8S版本. (default "stable-1")--node-name string 指定node的名称,默认使用 node 的 hostname.--pod-network-cidr string 指定 pod 的网络, control plane 会自动将 网络发布到其他节点的node,让其上启动的容器使用此网络--service-cidr string 指定service 的IP 范围. (default "10.96.0.0/12")--service-dns-domain string 指定 service 的 dns 后缀, e.g. "myorg.internal". (default "cluster.local")--skip-certificate-key-print 不打印 control-plane 用于加密证书的key.--skip-phases strings 跳过指定的阶段(phase)--skip-token-print 不打印 kubeadm init 生成的 default bootstrap token --token string 指定 node 和control plane 之间,简历双向认证的token ,格式为 [a-z0-9]{6}\.[a-z0-9]{16} - e.g. abcdef.0123456789abcdef--token-ttl duration token 自动删除的时间间隔。 (e.g. 1s, 2m, 3h). 如果设置为 '0', token 永不过期 (default 24h0m0s)--upload-certs 上传 control-plane 证书到 kubeadm-certs Secret.
ps:如果想要回退,可执行以下指令
kubeadm reset -f rm -rf /etc/kubernetes rm -rf /var/lib/etcd/ rm -rf $HOME/.kube
-
查看状态:systemctl status kubelet
ps:如果报错,可以使用journalctl -xefu kubelet看下哪里的问题
-
设置.kube/config(只在master执行)
1)mkdir -p $HOME/.kube
2)cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
3)chown ( i d − u ) : (id -u): (id−u):(id -g) $HOME/.kube/config
-
安装网络插件calico(只在master执行)
1)切换目录:cd /opt/k8s
2)下载:curl https://docs.projectcalico.org/archive/v3.19/manifests/calico.yaml -O
3)修改内容,其中value为上一步的–pod-network-cidr的ip
- name: CALICO_IPV4POOL_CIDR value: "192.169.0.0"
4)查看需要的镜像:cat calico.yaml | grep image
5)编辑镜像下载文件:vi /opt/calicoImages.sh
#!/bin/bashimages=( docker.io/calico/cni:v3.19.4 docker.io/calico/pod2daemon-flexvol:v3.19.4 docker.io/calico/node:v3.19.4 docker.io/calico/kube-controllers:v3.19.4 ) for imageName in ${images[@]} ; do crictl pull $imageName done
6)赋权:chmod +x /opt/calicoImages.sh
7)执行:/opt/calicoImages.sh
8)部署calico(只在master执行):kubectl apply -f calico.yaml
9)此时查看master的状态:kubectl get pods -A
10)kubectl get nodes
-
加入node节点(只在node执行)
1)执行:kubeadm join master:6443 --token x3mk8z.fzaqp9swqxl2o6r3 --discovery-token-ca-cert-hash sha256:f4ced0c25b14a796e02b3300b011f7ec8e120c01e95595d78b6d1b38b8805dfc
2)令牌有效期24小时,可以在master节点生成新令牌命令: kubeadm token create --print-join-command
3)查看master的状态:kubectl get pods -A
4)kubectl get nodes
5)拷贝主节点文件使node节点可以执行kubectl命令:scp -r H O M E / . k u b e w o r k e r 1 : HOME/.kube worker1: HOME/.kubeworker1:HOME
ps:拷贝完,自行在node节点测试kubectl命令
6)将主节点中的/etc/kubernetes/admin.conf文件拷贝到从node节点相同目录下
7)导入环境
echo export KUBECONFIG=/etc/kubernetes/admin.conf >> ~/.bash_profile source ~/.bash_profile
四、安装部署dashboard
ps:只在master执行
-
dashboard和kubernetes的版本对应关系,参考:https://github.com/kubernetes/dashboard/blob/v2.5.1/go.mod
-
下载镜像:kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.1/aio/deploy/recommended.yaml
ps:会下载kubernetesui/dashboard:v2.5.1、kubernetesui/metrics-scraper:v1.0.7两个镜像
-
定时刷新查看进度:watch -n 3 kubectl get pods -A
-
设置访问端口:kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard
将type: ClusterIP改为:type: NodePort 添加 nodePort: 32414
-
查看端口命令:kubectl get svc -A | grep kubernetes-dashboard
-
访问dashborad页面:
https://192.168.248.11:32414
,如下所示
-
创建访问账号
1)vi /opt/dash.yaml
创建用户–》申明角色–》用户和角色绑定
apiVersion: v1 kind: ServiceAccount metadata:name: admin-usernamespace: kubernetes-dashboard --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata:name: admin-user roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-admin subjects: - kind: ServiceAccountname: admin-usernamespace: kubernetes-dashboard
2)应用:
3)获取访问令牌: kubectl -n kubernetes-dashboard create token admin-user
4)将获取的token填入页面登录即可
相关文章:

1-k8s1.24-底座搭建-基于containerd
文章目录 一、服务器准备二、安装Containerd三、安装k8s四、安装部署dashboard ps:第一遍搭建ks8的时候,由于k8s在1.24版本之后就放弃了对docker的支持,如果要继续使用docker需要自己加载插件。所以一开始就是直接使用 k8s1.24containerd进行…...
Java文件前后端上传下载工具类
任何非压缩格式下载 package com.pisx.pd.eco.util;import java.io.*; import java.util.Collections; import java.util.HashMap; import java.util.Map;import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse;import org.springframewo…...
内燃机可变气门驱动研究进展
Review of Advancement in Variable Valve Actuation of Internal Combustion Engines AbstractIntroduction燃烧和气体交换需要电子控制 paper Abstract 近年来,人们对空气污染和能源使用的日益关注导致了车辆动力总成系统的电气化。 另一方面,一个多世…...
NEFU离散数学实验2-容斥原理
相关概念 离散数学中的容斥原理是一种使用集合运算的技巧,通常用于计算两个或更多集合的并集或交集的大小。以下是一些与容斥原理相关的常见概念和公式。 概念: 1. 集合:由元素组成的对象,通常用大写字母表示,如A、B、…...

解决Windows内存溢出/占满死机问题-PoolMon工具
某一天, 工作所用笔记本突然越来越卡直至死机 以为只是windows11的抽风行为,之前就因为windows11资源管理器经常卡死(后升级小版本好多了)。 遂长按电源键强制关机重启。 然慢慢又越来越卡,直至卡死,无…...

【ROS】ros-noetic和anaconda联合使用【教程】
【ROS】ros-noetic和anaconda联合使用【教程】 文章目录 【ROS】ros-noetic和anaconda联合使用【教程】1. 安装anaconda2. 创建虚拟环境3. 查看python解释器路径4. 在虚拟环境中使用任意的包5. 创建工作空间和ros功能包进行测试Reference 1. 安装anaconda 在Ubuntu20.04中安装…...
自动化RPA开发 --获取所有窗口信息和进程信息
场景 准备做一个RPA工具,可以从桌面和浏览器选择元素,获取窗口信息和进程信息是必要的,因为获取了窗口信息和进程,可用对程序做一些想要的操作。 coding 工具类 /*** Windows系统工具类*/ public class WinOsUtils {static fi…...

【Qt之布局】QVBoxLayout、QHBoxLayout、QGridLayout、QFormLayout介绍及使用
在Qt中,布局管理器(Layout)用于管理窗口中的控件的位置和大小,以适应不同大小的窗口。 常用的布局管理器包括QVBoxLayout、QHBoxLayout、QGridLayout和QFormLayout。 先放张布局UI: 1. QVBoxLayout(垂直布…...

【计算机毕业设计】python在线课程培训学习考试系统637r7-PyCharm项目
使用说明 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件; 使用PyCharm 导入项目,修改配置,运行项目; 将项目中config.ini配置文件中的数据库配置改为自己的配置,…...

vue3后台管理系统之登录界面和业务的实现
1.静态页面的搭建 <template><div class"login_container"><el-row><el-col :span"12" :xs"0" /><el-col :span"12" :xs"24"><!-- 登录的表单 --><el-form ref"loginForms&qu…...

GEE19:基于Landsat8的常见的植被指数逐年获取
植被指数逐年获取 1. 常见的植被指数1.1 比值植被指数(Ratio vegetation index,RVI)1.2 归一化植被指数(Normalized Difference Vegetation Index,NDVI)1.3 增强植被指数(Enhanced Vegetation I…...
Python【多分支实际应用的练习】
要求:某商店T恤的价格为35元/件(2件9折,3件以上8折),裤子的价格为120 元/条(2条以上9折)小明在该店买了3件T恤和2条裤子,请计算并显示小明应该付多少钱? 代码如下: tshirt_price 35 # T恤的单价 pan…...

LeetCode 343. 整数拆分(动态规划)
LeetCode 343. 整数拆分 思路: 通过题目我们可以知道,一个正整数最少拆成2个数,最多拆成n个数,即可拆分的个数为2~n 若将拆除的第一个正整数令为k,那么剩下的数则为n-k,此时可以不拆分&#x…...

C++对象模型(12)-- 构造函数语义学:构造函数
1、默认构造函数生成规则 编译器不一定会为类生成默认构造函数,但在下列情况下,编译器会生成默认构造函数。 (1)该类没有任何构造函数,但包含一个类类型的成员变量,且成员变量所属的类有默认构造函数。 …...

[23] T^3Bench: Benchmarking Current Progress in Text-to-3D Generation
3D生成蓬勃发展,主流方法通过事例比较和用户调查来评价方法好坏,缺少客观比较指标;本文提出Bench,首次综合比较了不同生成方法;具体来说,本文设计了质量评估(Quality Assessment)和对…...
linux系统如何定时关机
立刻关机 poweroff 10分钟后自动关机 shutdown -h 10 如果希望终止上面执行的10分钟关机,则执行: shutdown -c 希望在22:00关闭计算机 shutdown -h 22:00...

构建高性能物联网数据平台:EMQX和CnosDB的完整教程
CnosDB 是一款高性能、高压缩率、高易用性的开源分布式时序数据库。主要应用场景为物联网、工业互联网、车联网和IT运维。所有代码均已在GitHub开源。本文将介绍如何使用EMQX 这一MQTT 服务器 CnosDB 构建物联网数据平台,实现物联网数据的实时流处理。 前言 在物联…...
【vim 学习系列文章 11 -- vim filetype | execute | runtimepath 详细介绍】
文章目录 filetype plugin indent on 什么功能?vim runtimepath 详细介绍vim 中 execute 命令详细介绍execute pathogen#infect() 详细介绍 filetype plugin indent on 什么功能? 在网上我们经常可以看到vimrc配置中有 filetype plugin indent on 这个配…...

[备忘]WindowsLinux上查看端口被什么进程占用|端口占用
Windows上 查看端口占用: netstat -aon|findstr <端口号> 通过进程ID查询进程信息 tasklist | findstr <上一步查出来的进程号> 图例: Linux 上 查看端口占用: netstat -tuln | grep <端口号> lsof -i:<端口号&…...
函数的扩展
文章目录 函数的扩展1.函数参数的默认值1.1 基本用法-- 参数变量是默认声明的,所以不能用 let或const 再次声明-- 使用参数默认值时,函数不能有同名参数1.2 与解构赋值默认值结合使用☆☆☆ 函数参数的默认值生效以后,参数解构赋值依然会进行…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...

CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...

JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...

FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...

【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅
目录 前言 操作系统与驱动程序 是什么,为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中,我们在使用电子设备时,我们所输入执行的每一条指令最终大多都会作用到硬件上,比如下载一款软件最终会下载到硬盘上&am…...

热烈祝贺埃文科技正式加入可信数据空间发展联盟
2025年4月29日,在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上,可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞,强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...