kubernets集群的安装-node节点安装-(简单可用)-超详细
一、kubernetes
1、简介
kubernetes,简称K8s(库伯内特),是用8代替名字中间的8个字符“ubernete”而成的缩写
云计算的三种主要服务模式——基础设施即服务(IaaS)、平台即服务(PaaS)和软件即服务(SaaS)
Kubernetes是一个应用于大规模部署你分布式应用的平台,它管理着一系列的主机或服务器(Node节点),节点中最小单元Pod
- Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。Kubernetes 拥有一个庞大且快速增长的生态系统。Kubernetes 的服务、支持和工具广泛可用。
- Kubernetes 这个名字源于希腊语,意为
“舵手”
或“飞行员”
。k8s 这个缩写是因为 k 和 s 之间有八个字符的关系。 Google 在 2014 年开源了 Kubernetes 项目。Kubernetes 建立在Google 在大规模运行生产工作负载方面拥有十几年的经验的基础上,结合了社区中最好的想法和实践
官网地址:https://kubernetes.io/
为什么使用K8s
-
容器是打包和运行应用程序的最佳方式,在生产环境中,我们需要管理运行应用程序的容器,并且确保这些容器不会停机。如果一个容器发生了故障,则需要手动启动另一个容器,太麻烦了;如果有一个系统能够帮助我们处理这些行为,是不是会很方便?
-
Kubernetes 就能解决上面提出的一系列的问题。Kubernetes 为我们提供了一个可弹性运行的分布式系统的框架,Kubernetes 可以满足我们的扩展要求、故障转移、部署模式等,如:Kubernetes 可以轻松管理系统的 Canary(金丝雀) 部署。
-
Kubernetes 为我们提供下面的功能:
-
①
服务发现和负载均衡
:Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器,如果进入容器的流量很大,Kubernetes 可以负载均衡并分配网络流量,从而使得部署稳定。 -
②
存储编排
:Kubernetes 允许我们自动挂载自己选择的存储系统,如:本地存储、公有云提供商等。 -
③
自动部署和回滚
:我们可以使用 Kubernetes 描述已部署容器的所需状态,Kubernetes 可以以受控的速率将实际状态更改为期望状态,如:我们可以自动化 Kubernetes 来为我们的部署创建新的容器,删除现有容器并将它们的所有资源用于新的容器。 -
④
自动完成装箱计算
:Kubernetes 允许我们指定每个容器所需要的 CPU 和内存(RAM)。当容器指定了资源请求时,Kubernetes 可以做出更好的决策来管理容器的资源。 -
⑤
自我修复
:Kubernetes 重新启动失败的容器、替换容器、杀死不响应用户定义的运行状况检查的容器,并且在准备好服务之前不将其通告给客户端。 -
⑥
密钥和配置管理
:Kubernetes 允许我们存储和管理敏感信息,如:密码、OAuth2 令牌和 SSH 密钥。我们可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需再堆栈配置中暴露密钥。
2、Kubernetes的特点:
1、自我修复在节点故障时重新启动失败的容器,替换和重新部署,保证预期的副本数量;杀死健康检查失败的容器,并且在未准备好之前不会处理客户端的请求,确保线上服务不中断。2、弹性收缩使用命令、UI 或者基于 CPU 使用情况自动快速扩容和缩容应用程序实例,保证应用业务高峰并发时的高可用性;业务低峰时回收资源,以最小成本运行服务。3、自动部署和回滚采用滚动更新策略更新应用,一次更新一个 Pod,而不是同时删除所有 Pod,如果更新过程中出现问题,将回滚更改,确保升级升级过程中不影响业务运行4、服务发现和负载均衡能够为多个容器提供统一访问入库(内部 IP 地址和一个 DNS 名称),并且负载均衡关联所有容器,使用户无需考虑容器 IP 的问题5、存储编排能够挂载外部存储系统,无论是来自本地存储,公有云(如:AWS),还是网络存储(如:NFS、ClusterFS、Ceph)都可以作为集群资源的一部分使用,极大提供存储使用的灵活
3、K8S集群原理
- Master 节点(Control Plane【控制面板】):Master 节点控制整个集群。
- Controller Manager:控制管理器。
- etcd:键值数据库,类似于 Redis。
- scheduler:调度器。
- api-server:api网关(所有的控制都需要通过api-server)。
- Node 节点(worker工作节点):
- kubelet(监工):每一个 Node 节点上必须安装的组件,负责交互 master 的 api-server 以及当前机器的应用启停等,在 master 机器就是 master 的小助手。每一台机器真正干活的都是这个 Kubelet 。
- kube-proxy:代理网络。
- Pod:
- docker run 启动的是一个 container(容器),容器是 Docker 的基本单位,一个应用就是一个容器。
- kubectl run 启动的是一个应用称为一个 Pod ,Pod 是 Kubernetes 的基本单位。
- Pod 是对容器的再一次封装。
- Pod 类似于 Java 日志体系中的 Slf4j ,而 Docker 中的容器类似于 Java 日志体系中的 Logback 等日志实现。
- 一个容器往往代表不了一个基本应用,如:博客系统(WordPress,PHP + MySQL);但是一个 Pod 可以包含多个 Container,一个 Pod 可以代表一个基本的应用。
4、主控节点 / Master 组件
kubectl: 命令行工具
Dashboard: 可视化界面
api-server: 接口服务,给予REST风格开放,K8S接口的服务,集群统一入口,各组件的协调者,提供认证、授权、访问控制、API注册和发现等机制,以 RESTful API 的方式提供接口服务,所有对象资源的增删改查和监听都由 API Server 处理后提交给 Etcd 存储。
controller-manager:控制器管理器,负责各个类型的控制器针对k8S 中的各种资源进行管理,控制器管理程序,负责控制器的管理,控制器和资源一一对应,控制器用于维护集群的状态,如:故障检测、自动扩展、滚动更新等常规后台任务。
cloud-controller-manager: 云控制器管理器,第三方云平台提供控制API对接管理功能
kube-scheduler: 调度程序,负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上,调度程序根据调度算法为新创建的 Pod 选择一个 Node 节点,可以任意部署,可以部署在同一个节点上,也可以部署在不同的节点上Etcd Cluster:分布式键值存储系统集群,用于保存集群状态数据,如:Pod、Service 等资源对象信息。
5、工作节点 / Node 组件
1)Kubelet:主控节点代理程序,在 Node 节点上执行 Master 节点安排的任务,它将每个 Pod 转换成一组容器,用于管理本节点运行容器的生命周期,如:创建容器、Pod 挂载数据卷、下载 Secret 、获取容器和节点状态等工作。2)Kube-Proxy:网络代理程序,在 Node 节点上实现 Pod 网络代理,负责为 Service 提供 Cluster 内部的服务发现、网络规划和负载均衡。3)container-runtime: Docker容器引擎,负责所有具体的映像下载和容器运行、containerd、CRI-O4)Pod: 容器1 容器2
7、第三方插件
1)Flannel Finnal 是一个为 K8s 原生集成的三层网络解决方案,主要用于解决容器之间的网络(CNI 网络)通信问题,Flannel 为每个 Node 工作节点分配独立的子网网段,并将所有的网络信息存储在 Etcd 数据库中。脱离 CNI 网络的 K8s 集群是无法工作的,因此在部署 K8s 集群时必须部署 Flannel 插件。2)CoreDN SCoreDNS 是一个为 K8s 原生集成的域名发现解决方案,主要用于将 K8s 服务的动态 IP 地址自动映射成为 "<service-name>:<service-namespace>" 规则的 DNS 域名。因 K8s 在创建服务时会分配动态的 IP 地址,因此当在【B 容器 】中使用【A 容器】发布的服务,因为【A 容器】的服务对应的 IP 是动态可变的,所以应当通过该服务对应的 DNS 获取,例如:"htp(s)://:"。3)Dashboard Dashboard 是一个为 K8s 原生集成的用户界面,主要用于 K8s 的可视化管理。使用 Dashboard 可以监控、管理 K8s 集群和集群中的各类资源(如 Deployment,Job,DaemonSet 等等),还可以完成对 Deployment 实现弹性伸缩、发起滚动升级、重启 Pod 或者使用向导创建新应用等管理行为。4)Ingress-Nginx Ingress-Nginx 是一个为 K8s 原生集成的服务网关,主要用于对集群中的服务(通常是 Http 或 Https 服务)的外部访问的 API 对象,以及提供负载平衡、SSL 终端和基于名称的虚拟主机
8、应用场景
K8s 主要应用于云架构和云原生的部署场景。
“云” 是使用容器构建的一套服务集群网络,它由很多的容器构成;
“K8s” 则是用来管理云中的容器平台工具
1、云架构
PaaS(平台即服务): 运营商提供 MySQL 、Redis、MQ、Elasticsearch 等数据库或中间件等服务;用户租用(购买或分配权限)后直接使用。
SaaS(软件即服务):运营商提供应用系统的部署和发布等服务;用户租用(购买或分配权限)后直接使用
2、云原生
为了让应用程序(项目,服务软件)都运行在云上的解决方案,这样方案叫做云原生,有以下特点:容器化:所有的服务都必须部署在容器中;微服务:Web 服务架构是微服务架构;CI/CD:可持续交互和可持续部署;DevOps:开发和运维密不可分
二、K8s环境安装
一、前期准备
K8s-master01 k8s-node1 k8s-node02
kubernetes 版本: 1.23.6
Docker版本:20+
k8s: 1.23.6
docker官网版本:20.10.0 https://docs.docker.com/engine/release-notes/20.10/
清华云:docker下载离线版本https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/static/stable/x86_64/
-
根据Kubernetes官方文档和相关可靠资源,以下是一些常见Kubernetes版本推荐的Docker版本:
- Kubernetes 1.13 到 1.19:推荐使用Docker 1.13.1 到 19.03.x版本。
- Kubernetes 1.20:推荐使用Docker 1.13.1 到 19.03.x版本,但Kubernetes官方开始逐步废弃对Docker作为容器运行时的直接支持。
- Kubernetes 1.21 到 1.22:推荐使用Docker 1.19.3 到 20.10.x版本。
- Kubernetes 1.23及以上版本:建议使用符合容器运行时接口(CRI)的运行时,如containerd或CRI-O,不再支持Docker作为容器运行时。
2.注意事项:
-
从Kubernetes 1.20开始,Kubernetes官方逐步废弃了对Docker作为容器运行时的直接支持。对于Kubernetes 1.23及更高版本,kubeadm默认使用containerd作为容器运行时,不再支持Docker。
-
如果你的集群仍在使用Docker作为容器运行时,建议尽快迁移到CRI兼容的运行时,以确保与Kubernetes的兼容性。
K8S-master01:
centos7、2CPU、4G 内存、40G存储空间(将虚拟机磁盘存储为单个文件)、NAT模式、带GUI服务器安装、打开网卡
K8S-node01:
centos7、2G 内存、40G存储空间(将虚拟机磁盘存储为单个文件)、NAT模式、带GUI服务器安装、打开网卡
K8S-node02:
centos7、2G 内存、40G存储空间(将虚拟机磁盘存储为单个文件)、NAT模式、带GUI服务器安装、打开网卡
最终目标
在所有节点上安装Docker 和kubeadm
部署Kubernetes Master
部署容器网络插件
部署Kubernetes Node,将节点加入Kubernetes 集群中
部署Dashboard Web 页面,可视化查看Kubernetes 资源
二、虚拟机安装完毕进入linux操作系统-所有的节点及master配置
现在centos7不支持更新了换yum源,更新阿里云yum源
[root@localhost ~]# rm -rf /etc/yum.repos.d/*
[root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@localhost ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@localhost ~]# wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@localhost ~]# yum repolist -v
1、最小安装没有ifconfig命令: yum search ifconfig提示包名为: net-tools.x86_64使用yum安装: yum -y install net-tools.x86_64没有vim命令: yum -y install vim*
2、关闭防火墙[root@localhost ~]# systemctl stop firewalld[root@localhost ~]# systemctl disable firewalld3、关闭SELINUX:[root@k8smaster ~]# vi /etc/selinux/configSELINUX=disabled4、关闭swap:
[root@k8smaster ~]# swapoff -a
[root@k8smaster ~]# vim /etc/fstab 关闭swap那行 ##/dev/mapper/centos-swap swap swap分区指的是虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间虚拟成内存来使用启用swap设备会对系统的性能产生非常负面的影响,因此kubernetes要求每个节点都要禁用swap设备但是如果因为某些原因确实不能关闭swap分区,就需要在集群安装过程中通过明确的参数进行配置说明 5、设置主机名
[root@k8s-master ~]# hostnamectl set-hostname k8s-master
[root@k8s-node01 ~]# hostnamectl set-hostname k8s-node01[root@k8smaster ~]# vim /etc/hosts192.168.110.140 k8s-master192.168.110.141 k8s-node016、将桥接的IPv4流量传递到iptables的链
[root@k8smaster ~]# vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
[root@k8smaster ~]# sysctl --system #生效7、设置时间同步
[root@k8smaster ~]# yum -y install ntpdate
[root@k8smaster ~]# ntpdate time.windows.com #测试命令
22 Jun 18:56:53 ntpdate[8157]: adjust time server 20.189.79.72 offset -0.006902 sec
2、安装Docker
[root@k8s-master ~]#yum -y install docker-ce-20.10.16 docker-ce-cli-20.10.16 containerd.io
[root@k8s-node01 ~]#yum -y install docker-ce-20.10.16 docker-ce-cli-20.10.16 containerd.io
#启动服务及设置开机自启
[root@k8s-master ~]# systemctl start docker containerd
[root@k8s-master ~]# systemctl enable docker containerd
添加镜像加速器
cat > /etc/docker/daemon.json << EOF
{"dns": ["8.8.8.8", "8.8.4.4"],"insecure-registries":["192.168.200.15"],"registry-mirrors": ["https://docker.1ms.run","https://hub.mirrorify.net","https://docker.m.daocloud.io","https://dockerproxy.com","https://docker.mirrors.ustc.edu.cn","https://docker.nju.edu.cn","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://hub-mirror.c.163.com","https://mirror.baidubce.com"]
}
EOF
[root@k8s-master ~]# systemctl daemon-reload
[root@k8s-master ~]# systemctl restart docker containerd
3、安装k8s-配置repo文件
[root@k8s-master ~]# vim /etc/yum.repos.d/k8s.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
4、安装kubeadm kubele 和 kubectl
注意: master 和node节点都装
[root@k8s-master ~]#yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6
[root@k8s-node01 ~]#yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6
#启动服务
[root@k8s-master ~]# systemctl start kubelet
[root@k8s-master ~]# systemctl enable kubelet
5、修改containerd源
# 生成 containerd 的默认配置文件
[root@k8s-master ~]# containerd config default > /etc/containerd/config.toml
[root@k8s-master ~]# vim /etc/containerd/config.tomlsandbox_image = "registry.k8s.io/pause:3.6"#修改为:sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.6"[root@k8s-master ~]# systemctl daemon-reload
[root@k8s-master ~]# systemctl restart docker containerd
6、master配置初始化
kubeadm init --apiserver-advertise-address=192.168.110.140 --image-repository=registry.aliyuncs.com/google_containers --kubernetes-version=v1.23.6 --service-cidr=10.96.0.0/16 --pod-network-cidr=10.244.0.0/16#参数说明
-–apiserver-advertise-address:通告侦听地址
–-image-repository:指定镜像地址使用阿里云的,默认会使用谷歌镜像
–-kubernetes-version:指定当前的kubernetes的版本
–-pod-network-cidr=10.244.0.0/16:flannel网络的固定地址范围
[root@k8s-master ~]# kubeadm reset 重置
常见的错误1
解决办法:加速器配置文件
[root@k8s-master ~]# vim /etc/docker/daemon.json
"exec-opts": ["native.cgroupdriver=systemd"]
[root@k8s-node01 ~]# systemctl daemon-reload
[root@k8s-node01 ~]# systemctl restart docker
解决错误之后,重置了初始化命令
[root@k8s-master ~]# kubeadm reset 重置
继续执行如下命令
kubeadm init --apiserver-advertise-address=192.168.110.140 --image-repository=registry.aliyuncs.com/google_containers --kubernetes-version=v1.23.6 --service-cidr=10.96.0.0/16 --pod-network-cidr=10.244.0.0/16
如何执行正常的界面如下
pod节点需要加入时,执行提示命令:
kubeadm join 192.168.110.140:6443 --token 1hft5e.vb1xncstdogsk4ay \--discovery-token-ca-cert-hash sha256:a5d9376d48397caf6ed1f9daf59d51a41cfe012d0e85b15e5eb158c312cba49a
7、使用kubectl工具
[root@k8s-master ~]# mkdir -p $HOME/.kube
[root@k8s-master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s-master ~]# chown $(id -u):$(id -g) $HOME/.kube/config
[root@k8s-master ~]# export KUBECONFIG=/etc/kubernetes/admin.conf
[root@k8s-master ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-master NotReady control-plane,master 31m v1.23.6
8、node节点加入kubernetes
[root@k8s-node01 ~]# kubeadm join 192.168.110.140:6443 --token 1hft5e.vb1xncstdogsk4ay \--discovery-token-ca-cert-hash sha256:a5d9376d48397caf6ed1f9daf59d51a41cfe012d0e85b15e5eb158c312cba49a
常见错误2:端口被占用了
[root@k8s-node01 ~]# kubeadm reset #重置,根据提示输入y
9、网络插件的安装
CNI(Container Network Interface)是 Kubernetes 集群的网络模型,用于定义容器与容器之间的通信方式。在部署 CNI 网络组件之前,需要选择合适的 CNI 插件,例如 Calico、Flannel 等。 在部署 CNI 插件之前,需要安装相应的依赖软件,例如 Docker、etcd 等。然后,根据所选的 CNI 插件的文档,进行相应的配置和安装。一旦 CNI 插件安装完成,Kubernetes 集群中的节点将自动加入到网络中,并能够与其他节点进行通信
9.1部署Calico插件
[root@k8s-master ~]# mkdir /opt/k8s
[root@k8s-master ~]# cd /opt/k8s
[root@k8s-master k8s]# wget https://calico-v3-25.netlify.app/archive/v3.25/manifests/calico.yaml
#如果是下载到Windows下,上传到系统的/root/再执行如下命令
[root@k8s-master k8s]# cp /root/calico.yaml /opt/k8s/[root@k8s-master k8s]# grep image calico.yamlimage: docker.io/calico/cni:v3.25.0imagePullPolicy: IfNotPresentimage: docker.io/calico/cni:v3.25.0imagePullPolicy: IfNotPresentimage: docker.io/calico/node:v3.25.0imagePullPolicy: IfNotPresentimage: docker.io/calico/node:v3.25.0imagePullPolicy: IfNotPresentimage: docker.io/calico/kube-controllers:v3.25.0imagePullPolicy: IfNotPresent#修改配置文件,不适用默认的dokcer.io网站下载
[root@k8s-master k8s]# sed -i 's#docker.io/##g' calico.yaml
# 执行calico.yml
[root@k8s-master k8s]# kubectl apply -f calico.yaml
#查看节点的状态
[root@k8s-master k8s]# kubectl get pod -n kube-system
[root@k8s-master k8s]# kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-cd8566cf-rcqpf 1/1 Running 0 6m39s
calico-node-d2hvm 1/1 Running 0 6m39s
calico-node-mfdqw 1/1 Running 0 6m39s
coredns-6d8c4cb4d-js7jd 1/1 Running 0 4h14m
coredns-6d8c4cb4d-n9m22 1/1 Running 0 4h14m
etcd-k8s-master 1/1 Running 0 4h14m
kube-apiserver-k8s-master 1/1 Running 0 4h14m
kube-controller-manager-k8s-master 1/1 Running 0 4h14m
kube-proxy-fm5gr 1/1 Running 0 3h39m
kube-proxy-grw5b 1/1 Running 0 4h14m
kube-scheduler-k8s-master 1/1 Running 0 4h14m
[root@k8s-master k8s]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane,master 4h16m v1.23.6
k8s-node01 Ready <none> 3h41m v1.23.6
[root@k8s-master k8s]#
总结整体的部署思路/过程
1、根据要求安装虚拟机 k8s-master (2个CPU 4G内存) k8s-node
2、对系统初始化设置:Yum源配置 防火墙配置 SELINUX 主机名配置 虚拟内存 hosts文件设置
3、安装docker kubelet kubeadm kubectl
4、在k8s-master上配置 初始化 kubeadm init
5、在k8s-node 上 kubeadm join
6、互通:网络管理插件
相关文章:
kubernets集群的安装-node节点安装-(简单可用)-超详细
一、kubernetes 1、简介 kubernetes,简称K8s(库伯内特),是用8代替名字中间的8个字符“ubernete”而成的缩写 云计算的三种主要服务模式——基础设施即服务(IaaS)、平台即服务(PaaS࿰…...
【Linux内核设计与实现】第三章——进程管理04
文章目录 8. exit() 进程退出8.1. exit() 系统调用的定义8.2. do_exit() 函数8.2.0. do_exit() 的参数和返回值8.2.1. 检查和同步线程组退出8.2.2. 清理与调试相关的资源8.2.3. 取消 I/O 和信号处理8.2.4. 检查线程组是否已终止8.2.5. 释放系统资源8.2.6. 释放线程和调度相关资…...
Golang | 迭代器模式
迭代器模式(Iterator Pattern)是一种行为型设计模式,它提供了一种顺序访问聚合对象(如列表、树等集合结构)中元素的方法,而无需暴露其底层实现细节。通过将遍历逻辑与集合本身解耦,迭代器模式使…...
美颜SDK动态贴纸实战教程:从选型、开发到上线的完整流程
在直播、短视频、社交娱乐全面崛起的当下,美颜SDK早已不再局限于“磨皮瘦脸”,而是逐步迈向更智能、更富互动体验的方向发展。动态贴纸功能,作为提升用户参与感和内容趣味性的关键手段,正在被越来越多的平台采纳并深度定制。本文将…...
ArkTS中的空安全:全面解析与实践
# ArkTS中的空安全:全面解析与实践 在ArkTS编程领域,空安全是一个极为关键的特性,它在很大程度上影响着代码的稳定性和可靠性。今天,我们就深入探究一下ArkTS中的空安全机制,看看它是如何保障我们的代码质量的。 ## A…...
C语言基础语法详解:从入门到掌握
C 基础语法 C 语言是一种通用的编程语言,广泛应用于系统编程、嵌入式开发和高性能计算等领域。 C 语言具有高效、灵活、可移植性强等特点,是许多其他编程语言的基础。 在 C 语言中,令牌(Token)是程序的基本组成单位…...
如何把两个视频合并成一个视频?无需视频编辑器即可搞定视频合并
在日常生活中,我们经常需要将多个视频片段合并成一个完整的视频,例如制作旅行记录、剪辑教学视频或拼接短视频素材。简鹿视频格式转换器是一款功能强大的工具,不仅可以进行视频格式转换,还支持视频合并功能。以下是使用简鹿视频格…...
Servlet小结
视频链接:黑马servlet视频全套视频教程,快速入门servlet原理servlet实战 什么是Servlet? 菜鸟教程:Java Servlet servlet: server applet Servlet是一个运行在Web服务器(如Tomcat、Jetty)或应用…...
C语言面试高频题——define 和typedef 的区别?
1. 基本概念 (1) #define 定义:#define 是预处理指令,用于定义宏。作用:在编译之前进行文本替换。语法:#define 宏名 替换内容示例:#define PI 3.14159 #define SQUARE(x) ((x) * (x))(2) typedef 定义:…...
计算机组成原理:指令系统
计算机组成原理:指令集系统 指令集体系结构(ISA)ISA定义ISA包含的内容举个栗子指令的基本组成(操作码+地址码)指令分类:地址码的个数定长操作码变长操作码变长操作码的原则变长操作码的设计指令寻址寻址方式的目的寻址方式分类有效地址直接在指令中给出有效地址间接给出有效地…...
自动清空 maven 项目临时文件,vue 的 node_modules 文件
echo off setlocal enabledelayedexpansion :: vue 的 node_modules 太大 :: maven 打包后的 target 文件也很大, :: 有些项目日志文件也很大,导致磁盘空间不足了, :: 所以写了个脚本,只要配置一下各项目目录, :: 双击…...
服务网格助力云原生后端系统升级:原理、实践与案例剖析
📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:微服务的“通信焦虑”与服务网格的出现 云原生架构的兴起推动了微服务的大规模落地,系统拆分为成百上千个小服务,这些服务之间需要频繁通信。然而,通信带来的问题也开始显现: 如何确保服务间…...
基于DrissionPage的表情包爬虫实现与解析(含源码)
目录 编辑 一、环境配置与技术选型 1.1 环境要求 1.2 DrissionPage优势 二、爬虫实现代码 三、代码解析 3.1 类结构设计 3.2 目录创建方法 3.3 图片链接获取 3.4 图片下载方法 四、技术升级对比 4.1 代码复杂度对比 4.2 性能测试数据 五、扩展优化建议 5.1 并…...
Spring Cloud Gateway 如何将请求分发到各个服务
前言 在微服务架构中,API 网关(API Gateway)扮演着非常重要的角色。它负责接收客户端请求,并根据预定义的规则将请求路由到对应的后端服务。Spring Cloud Gateway 是 Spring 官方推出的一款高性能网关,支持动态路由、…...
【深度强化学习 DRL 快速实践】Value-based 方法总结
强化学习中的 Value-based 方法总结 在强化学习(Reinforcement Learning, RL)中,Value-based 方法主要是学习一个价值函数(Value Function),然后基于价值函数来决策。常见的 Value-based 方法包括…...
【计算机视觉】CV实战项目 - 基于YOLOv5的人脸检测与关键点定位系统深度解析
基于YOLOv5的人脸检测与关键点定位系统深度解析 1. 技术背景与项目意义传统方案的局限性YOLOv5多任务方案的优势 2. 核心算法原理网络架构改进关键点回归分支损失函数设计 3. 实战指南:从环境搭建到模型应用环境配置数据准备数据格式要求数据目录结构 模型训练配置文…...
git版本回退 | 远程仓库的回退 (附实战Demo)
目录 前言1. 基本知识2. Demo3. 彩蛋 前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 爬虫神器,无代码爬取,就来:bright.cn 本身暂存区有多个文件,但手快了&…...
【KWDB 创作者计划】_深度学习篇---数据获取
文章目录 前言一、公开数据集资源库1. 综合型数据集平台Kaggle Datasets (https://www.kaggle.com/datasets)Google Dataset Search (https://datasetsearch.research.google.com)UCI Machine Learning Repository (https://archive.ics.uci.edu/ml) 2. 计算机视觉专用ImageNet…...
DeepSeek本地部署手册
版本:v1.0 适用对象:零基础开发者 一、部署前准备 1.1 硬件要求 组件最低配置推荐配置说明CPUIntel i5 8代Xeon Gold 6230需支持AVX指令集内存16GB64GB模型越大需求越高GPUNVIDIA GTX 1060 (6GB)RTX 3090 (24GB)需CUDA 11.7+存储50GB可用空间1TB NVMe SSD建议预留2倍模型大小…...
OpenCV中的SIFT特征提取
文章目录 引言一、SIFT算法概述二、OpenCV中的SIFT实现2.1 基本使用2.1.1 导入库2.1.2 图片预处理2.1.3 创建SIFT检测器2.1.4 检测关键点并计算描述符2.1.5 检测关键点并计算描述符并对关键点可视化2.1.6 印关键点和描述符的形状信息 2.2 参数调优 三、SIFT的优缺点分析3.1 优点…...
Kubernetes in action-初相识
初相识Kubernetes 1、构建、运行以及共享镜像1.1 运行镜像1.2 构建镜像1.3 推送镜像 2、Kubernetes初相识2.1 介绍Pod2.2 从构建到运行整体流程2.3 kubectl命令行工具 如有侵权,请联系~ 如有错误,也欢迎批评指正~ 本篇文章大部分是…...
九、小白如何用Pygame制作一款跑酷类游戏(添加前进小动物作为动态障碍物)
九、小白如何用Pygame制作一款跑酷类游戏(添加前进小动物作为动态障碍物) 文章目录 九、小白如何用Pygame制作一款跑酷类游戏(添加前进小动物作为动态障碍物)前言一、添加小动物素材1. 在根目录的图片文件夹下新建两个目录分别存放…...
Unity3D IK解算器技术分析
前言 在Unity3D中,逆向运动学(IK Solver)是实现角色动画自然交互的核心技术之一。以下是Unity中常见的IK解算器及其特点的综合分析,结合了原生功能、第三方插件与开源方案的对比: 对惹,这里有一个游戏开发…...
7.11 Python CLI开发实战:API集成与异步处理核心技术解析
Python CLI开发实战:API集成与异步处理核心技术解析 #mermaid-svg-fXGFud0phX2N2iZj {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-fXGFud0phX2N2iZj .error-icon{fill:#552222;}#mermaid-svg-fXGFud0phX2N2iZj .…...
百度Create2025 AI开发者大会:模型与应用的未来已来
今日,2025百度AI开发者大会(Create2025)在武汉体育中心盛大开幕。这场以“模型的世界,应用的天下”为主题的盛会,不仅汇聚了李彦宏、王海峰、沈抖等百度高层及行业领袖,更以多项重磅技术发布、前沿议题探讨…...
Java实现HTML转PDF(deepSeekAi->html->pdf)
Java实现HTML转PDF,主要为了解决将ai返回的html文本数据转为PDF文件方便用户下载查看。 一、deepSeek-AI提问词 基于以上个人数据。总结个人身体信息,分析个人身体指标信息。再按一个月为维度,详细列举一个月内训练计划,维度详细至每周每天…...
区间和数量统计 之 前缀和+哈希表
文章目录 1512.好数对的数目2845.统计趣味子数组的数目1371.每个元音包含偶数次的最长子字符串 区间和的数量统计是一类十分典型的问题:记录左边,枚举右边策略前置题目:统计nums[j]nums[i]的对数进阶版本:统计子数组和%modulo k的…...
【服务器操作指南】从 Hugging Face 上下载文件 | 从某一个网址上下载文件到 Linux 服务器的指定目录
引言 在服务器操作中,下载和管理文件是常见且重要的任务。从 Hugging Face 平台获取模型资源,或从特定网址下载文件至 Linux 服务器并进行解压,都需要明确的操作步骤。本指南旨在为您提供清晰的操作流程,帮助您快速上手相关任务并…...
PyCharm 中 FREECAD 二次开发:从基础建模到深度定制
一、引言 在当今的三维建模与设计领域,FREECAD 以其开源、参数化设计的强大特性,成为众多工程师、设计师和开发者的首选工具。然而,面对日益复杂和多样化的设计需求,仅仅依靠 FREECAD 的原生功能往往难以满足。此时,二…...
C++入侵检测与网络攻防之网络嗅探以及ARP攻击
目录 1.tcpdump基本使用 2.tcpdump条件过滤 3.wireshark介绍 4.wireshark的介绍 5.tcp握手挥手分析 6.telnet服务的介绍和部署 7.复习 8.telnet服务的报文嗅探 9.网络嗅探基础 10.arp协议的解析 11.arp攻击原理以及试验环境 12.arp实验以及防御方式 1.tcpdump基本使…...
Integer[]::new方法引用
Integer[]::new 这种写法是 Java 中方法引用的一种具体应用,它遵循 Java 方法引用的语法规则。 方法引用概述 方法引用是 Java 8 引入的一种简化 Lambda 表达式的语法糖,它允许你通过方法的名称直接引用已有的方法或构造函数。方法引用可以使代码更加简…...
Pycharm(三):梯度下降法
梯度下降算法(Gradient Descent Algorithm)是深度学习中常用的更新权重的方法,它采用的贪心法的思想,每次都往函数值下降最快的方向去更新,梯度方向是增长最快的方向,负梯度方向是下降最快的方向。 一、梯…...
系统测试的技术要求
文章目录 一、系统测试的概念二、测试对象三、测试目的四、进入条件五、内容要求1、基于需求的考核要求2、基于任务的考核要求 六、测试环境 一、系统测试的概念 系统测试(System Testing),主要是对多个软件组成的系统进行的整体测试。系统测…...
升级Ubuntu 20.04 LTS到22.04 LTS
按照 Ubuntu发布周期 每2年会发布一个 "长期支持版" (LTS, Long Term Support)。具体来说,就是每2年的4月份会发布一个支持周期长达5年的稳定版本,如: 20.04 和 22.04 分别代表 2020年4月 和 2022年4月 发布的长期支持版本. 当前(2022年9月)&a…...
【神经网络与深度学习】训练集与验证集的功能解析与差异探究
引言 在深度学习模型的训练过程中,训练集和验证集是两个关键组成部分,它们在模型性能的提升和评估中扮演着不可替代的角色。通过分析这两者的区别和作用,可以帮助我们深入理解模型的学习过程和泛化能力,同时为防止过拟合及优化超…...
单精度浮点运算/定点运算下 MATLAB (VS) VIVADO
VIVADO中单精度浮点数IP核计算结果与MATLAB单精度浮点数计算结果的对比 MATLAB定点运算仿真,对比VIVADO计算的结果 目录 前言 一、VIVADO与MATLAB单精度浮点数运算结果对比 二、MATLAB定点运算仿真 总结 前言 本文介绍了怎么在MATLAB中使用单精度浮点数进行运算…...
如何让 HTML 文件嵌入另一个 HTML 文件:详解与实践
目录 一、为什么需要在HTML中嵌入其他HTML文件? 二、常用的方法概览 三、利用 1. 基本原理 2. 使用场景 3. 优缺点 4. 实践示例 5. 适用建议 四、利用JavaScript动态加载内容 1. 原理简介 2. 实现步骤 示例代码 3. 优缺点分析 4. 应用场景 5. 实践建…...
7.10 GitHub Sentinel CLI开发实战:Python构建企业级监控工具的5大核心技巧
GitHub Sentinel CLI开发实战:Python构建企业级监控工具的5大核心技巧 GitHub Sentinel Agent 用户界面设计与实现:命令行工具开发实战 关键词:命令行工具开发、Python argparse、API 集成、错误处理、测试覆盖率 设计并实现基本的命令行工具 命令行界面(CLI)是企业级工…...
将AAB转APK的两种好用方法AAB to APK Converter
文章目录 第一种方法:Unity工具转换第二种方法:Python转换参数填写 第一种方法:Unity工具转换 适用人群: 策划,程序等装Unity的人 需要安装: Unity 下载AAB-to-APK-Converter 导入unity,点…...
netcore8.0项目部署到windows服务器中(或个人windows电脑),利用nginx反向代理
1、发布netcore项目,默认即可 1.1、前提,需在appsettings添加Kestrel代理 配置如下: {"Kestrel": {"Endpoints": {"http": {"Url": "http://localhost:7022"},"Https": {&qu…...
Python数据分析案例73——基于多种异常值监测算法探查内幕交易信息
背景 之前有监督模型案例都做烂了,现在来做一下无监督的模型吧,异常检测模型。 其实这个案例主要目的是为了展示这些异常值的无监督算法怎么使用的,本文是一个无监督算法的总结大全。只是恰巧有同学需要做这个内幕交易的数据,因…...
电商数据中台架构:淘宝 API 实时采集与多源数据融合技术拆解
引言 在当今竞争激烈的电商领域,数据已成为企业决策和业务发展的核心驱动力。电商数据中台能够整合和管理企业内外部的各种数据,为业务提供有力支持。其中,淘宝 API 实时采集与多源数据融合技术是数据中台架构中的关键部分。本文将深入探讨这…...
【C语言】动态经典试题练习
前言: 在上一章节讲解了动态的常见错误,在上上章节讲解了动态内存的概念。 古人云: 习题一 请大家看下面的习题,试着分析输出结果 / 找出代码错误的地方。 #include <stdio.h>void GetMemory(char* p) {p (char*)mall…...
Memcached 主主复制架构搭建与 Keepalived 高可用实现
实验目的 掌握基于 repcached 的 Memcached 主主复制配置 实现通过 Keepalived 的 VIP 高可用机制 验证数据双向同步及故障自动切换能力 实验环境 角色IP 地址主机名虚拟 IP (VIP)主节点10.1.1.78server-a10.1.1.80备节点10.1.1.79server-b10.1.1.80 操作系统: CentOS 7 软…...
详解 Servlet 处理表单数据
Servlet 处理表单数据 1. 什么是 Servlet?2. 表单数据如何发送到 Servlet?2.1 GET 方法2.2 POST 方法 3. Servlet 如何接收表单数据?3.1 获取单个参数:getParameter()示例: 3.2 获取多个参数:getParameterV…...
八大排序——冒泡排序/归并排序
八大排序——冒泡排序/归并排序 一、冒泡排序 1.1 冒泡排序 1.2 冒泡排序优化 二、归并排序 1.1 归并排序(递归) 1.2 递归排序(非递归) 一、冒泡排序 1.1 冒泡排序 比较相邻的元素。如果第一个比第二个大,就交换…...
高等数学第三章---微分中值定理与导数的应用(3.1微分中值定理3.2洛必达法则)
3.1 微分中值定理 一、罗尔(Rolle)中值定理 1. 费马(Fermat)引理 定义: 设函数 y f ( x ) y f(x) yf(x) 满足以下条件: 在点 x 0 x_0 x0 的某邻域 U ( x 0 ) U(x_0) U(x0) 内有定义࿱…...
AI超级智能体项目教程(二)---后端项目初始化(设计knif4j接口文档的使用)
文章目录 1.选择JDK的版本和相关配置2.添加依赖信息2.1指定lombok版本信息2.2引入hutool工具类2.3了解knif4j依赖2.4引入knif4j依赖 3.contrller测试3.1完成yml文件配置3.2修改默认扫描路径3.3controller具体的内容3.4配置接口和访问路径3.5如何访问3.6调试接口3.6调试接口 1.选…...
C++面试复习日记(8)2025.4.25,malloc,free和new,delete的区别
1,malloc,free和new,delete的区别 答:malloc和free是c语言中库函数; new和delete是c的操作符; 分配内存:malloc和new 区别: malloc:需要手动计算存储空间 new&#…...
14.ArkUI Radio的介绍和使用
ArkUI Radio 组件介绍与使用指南 什么是 Radio 组件? Radio(单选框)是 ArkUI 中的单选按钮组件,允许用户从一组互斥的选项中选择一个选项。它通常用于表单、设置界面等需要用户做出单一选择的场景。 Radio 的核心特性 单选功能…...