目录

一.为什么需要kubernetes

  1.对于开发人员

  2.对于运维人员

二.kubernetes带来的挑战

三.kubernetes架构解析

  1.master节点的组件

  2.node节点包含的组件

  3.kubernetes网络插件

四.kubernetes快速安装kubernetes集群

  1.部署docker环境

  2.部署kubernetes集群

五.Metrics-server部署

  1.修改yaml文件并安装

  2.测试安装结果


一.为什么需要kubernetes

很多人会有疑问,有了 Docker 为什么还用 Kubernetes?

   在业务开始进行容器化时,前期需要容器化的项目可能并不多,涉及的容器也并不多,此时基于 Docker 容器直接部署至宿主机也能实现基本的需求。但是随着项目越来越多,管理的容器也会越来越多,此时使用 “裸容器” 部署的方式管理起来就显得很吃力,并且随着业务量的增加,会明显体会到 “裸容器” 的不足。比如:

  • 宿主机宕机造成该宿主机上的容器不可用,且无法自动恢复。

  • 容器明明在运行,接口就是不通(健康检查做得不到位)

  • 应用程序部署、回滚、扩缩容困难。

  • 成百上千的容器和涉及的端口难以维护。

   上面的问题知识做一个简单的罗列,真正使用时还有很多其他的问题。大家也可能使用过 Docker - compose、Docker - swarm 等编排工具,但是这些工具的功能和 Kubernetes 比起来还是相差很多的。所以注定 Kubernetes 编排工具将成为主流的容器编排工具。

1.对于开发人员

   对于开发人员而言,Kubernetes 是提升开发效率、保障应用稳定交付的重要助力,核心价值体现在以下方面:

一、环境一致性,告别 “本地能跑线上崩”

   开发时用 Docker 打包应用及依赖成镜像,K8s 能让镜像在开发、测试、生产环境以统一方式运行,消除环境差异导致的调试成本,开发人员只需专注代码逻辑,无需反复适配环境。

二、简化复杂应用部署

   开发微服务等复杂应用,涉及多个服务、依赖,K8s 可通过配置文件(如 Deployment、Service),定义服务副本数、网络规则等,一键部署整套应用,无需手动逐个启动容器、配置网络,降低部署复杂度。

2.对于运维人员

   对于运维人员来说,Kubernetes 是大幅提升运维效率、保障系统稳定可靠的 “利器”,核心价值体现在以下关键场景:

一、自动化运维,解放人力

  • 批量部署与管理:面对成百上千容器,无需逐台操作。通过 K8s 配置文件(如 Deployment),定义应用副本数、资源限额等,一键部署 / 更新多实例,轻松管理复杂应用集群。

  • 故障自愈:自动监控容器、节点状态,容器崩溃自动重启,节点故障时迁移容器到健康节点,无需人工值守排查、重启,减少服务中断时间。

二、资源精细化管控

  • 资源调度:智能分配容器到集群节点,平衡 CPU、内存负载,避免节点过载或闲置,提升服务器资源利用率(比如把低负载容器调度到空闲节点)。

  • 资源隔离:为不同应用 / 服务设置 CPU、内存限额(Requests/Limits),防止某一应用 “抢占” 资源导致其他服务故障,保障多业务稳定共存。

二.kubernetes带来的挑战

     Kubernetes 从诞生至今,一路突飞猛进,在容器编排的领域过关斩将,最终拿下了容器编排的冠军宝座,成为最无可替代、不可撼动的佼佼者,但是针对 Kubernetes 的学习和使用始终是一个很大的难题。

    首先,Kubernetes 本身的学习就很困难,因为 Kubernetes 概念太多,涉及的知识面也非常广泛,可能学习了一个月也无法入门,甚至连集群也搭建不出来,使人望而却步。并且 Kubernetes 的技术能力要求也比较高,因为运维不仅仅均线于传统运维,有时候可能要修改业务代码、制定业务上线体系、给研发人员在开发应用中提供更好的建议等。需要掌握的知识也有很多,可能需要掌握公司内所有使用带的代码,比如代码如何进行编译、如何正确发布、如何修改代码配置文件等,这对于运维人员也是一种挑战。Kubernetes 的诞生把运维从传统的运维转变到了 DevOps 方向,需要面临的问题更多,需要面临的新技术也很多,但是当真正掌握 Kubernetes 的核心和涉及理念,就会收益终身。

三.kubernetes架构解析

1.master节点组件

    master 节点是 Kubernetes 集群的控制节点,在生产环境中不建议部署集群核心组件外的任何容器(在 kubeadm 安装方式下,系统组件以容器方式运行在 master 节点的宿主机器上;二进制安装方式下,系统组件以守护进程的方式运行,master 节点可以不运行任何容器 ),公司业务程序的容器是不建议部署在 master 节点上,以避免升级或者维护时对业务造成影响。

(1) API server
API server 提供了集群网关,是整个集群的控制中枢,提供集群中各个模块之间的数据交换,并将集群信息存储到 ETCD 集群中。同时,它也是集群管理、资源配额、提供完备的集群安全机制的入口,为集群各类资源对象提供增删改查,API server 在客户端对集群进行访问。客户端需要通过认证,并使用 API server 作为访问节点和 pod (以及服务)的堡垒和代理 / 通道。

  • API 服务器公开 Kubernetes API。

  • REST/kubectl 的入口点 —— 它是 Kubernetes 控制平面的前端。

  • 它跟踪所有集群组件的状态并管理它们之间的交互。

  • 它旨在水平扩展。

  • 它使用 YAML/JSON manifest 文件。

  • 它验证和处理通过 API 发出的请求。

(2) Scheduler
Scheduler 主要功能是资源调度,将 pod 调度到对应的主机上。依据请求资源的可用性、服务请求的质量等约束条件,k8s 也支持用户自己提供的调度器。

  • 它将 pod 调度到工作节点。

  • 它监视 api-server 以查找没有分配节点的新创建的 Pod,并选择一个健康的节点让它们运行。

  • 如果没有合适的节点,则 Pod 将处于挂起状态,直到出现这样一个健康的节点。

  • 它监视 API Server 的新工作任务。

(3) Controller Manager
Controller Manager 负责维护集群的状态,比如故障检测、内存垃圾回收、滚动更新等,也执行 API 业务逻辑;k8s 默认提供 replication controller、replicaset controller、daemonset controller 等控制器。

  • 它监视它管理的对象的期望状态并通过 API 服务器监视它们的当前状态。

  • 采取纠正措施以确保当前状态与所需状态相同。

  • 它是控制器的控制器。

  • 它运行控制器进程,从逻辑上讲,每个控制器都是一个单独的进程,但为了降低复杂性,它们都被编译成一个二进制文件并在单个进程中运行。

(4) etcd
etcd 用于可靠的存储集群的配置数据,是一种持久性、轻量级、分布式的键值数据存储组件,可以理解为一种分布式的非关系型数据库。etcd 是集群的状态,k8s 默认使用分布式的 etcd 集群整体存储用来实现发现服务和共享配置集群的所有状态都存储在 etcd 实例中,并具有监控的能力,因此当 etcd 中的信息发生变化时,能够快速地通知集群中相关的组件。

  • 它是一个一致的、分布式的、高度可用的键值存储。

  • 它是有状态的持久存储,用于存储所有 Kubernetes 集群数据(集群状态和配置 )。

  • 它是集群的真相来源。

  • 它可以是控制平面的一部分,也可以在外部进行配置。

   etcd 集群最少 3 个节点,容错点才会有 1 个。3 个节点和 4 个节点的容错能力是一样的,所以有时候保持奇数节点更好,从这里可以判断出我们在部署 k8s 的时候,至少有 3 个节点,才保证 etcd 有 1 个节点容错性。

   另外,etcd 的 Leader 选举和数据写入都需要半数以上的成员投票通过确认,因此,集群最好由奇数个成员组成,以确保集群内部一定能够产生多数投票通过的场景。所以 etcd 集群至少需要 3 个以上的奇数个成员。

   如果使用偶数个节点,可能出现以下问题:

  • 偶数个节点集群不可用风险更高,表现在选主(Leader 选举)过程中,有较大概率的等额选票,从而触发下一轮选举。

  • 偶数个节点集群在某些网络分割的场景下无法正常工作。当网络分割发生后,将集群节点对半分割开,形成脑裂。

2.node节点包含的组件

   Node 节点也被成为 worker 节点,是主要负责部署容器的主机,集群中的每个节点都必须具备容器的 Runtime(运行时),比如 docker

   kubelet 作为守护进程运行在每个 Node 节点上,负责监测该节点上所有的 pod,同时负责上报该节点上所有 pod 的运行状态,确保节点上的所有容器都能正常运行。当 Node 节点宕机或故障时,该节点上运行的 pod 会被自动转移到其他节点上。

(1)容器运行时

   docker 引擎是本地的容器运行时环境,负责镜像管理以及 pod 和容器的真正运行。K8s 本身并不提供容器运行时环境,但提供了接口,可以插入所选择的容器运行时环境,目前支持 Docker 和 rkt。容器运行时是负责运行容器(在 Pod 中)的软件,为了运行容器,每个工作节点都有一个容器运行时引擎,它从容器镜像注册表(container image registry)中提取镜像并启动和停止容器。

Kubernetes 支持多种容器运行时:

  • Docker

  • containerd

  • CRI - O

  • Kubernetes CRI(Container Runtime Interface,容器运行时接口)的任何实现。

(2)kubelet

   kubelet 是 node 节点上最主要的工作代理,用于汇报节点状态并负责维护 pod 的生命周期,也负责 volume(CVI)和网络(CNI)的管理。kubelet 是 pod 和节点 API 的主要实现者,负责驱动容器执行层。作为基本的执行单元,pod 可以拥有多个容器和存储卷,能够方便地在每个容器中打包一个单一的应用,从而解脱了应用构建时和部署时所关心的事项,方便在物理机或虚拟机之间进行迁移。

  • 它是在集群中的每个节点上运行的代理。

  • 它充当着 API Server 和节点之间的管道。

  • 它确保容器在 Pod 中运行并且它们是健康的。

  • 它实例化并执行 Pod。

  • 它监视 API Server 的工作任务。

  • 它从主节点那里得到指令并报告给主节点。

(3)kube - proxy 代理

   kube - proxy 代理对抽象的应用地址的访问,服务提供了一种访问一群 pod 的途径,kube - proxy 负责为服务提供集群内部的服务发现和应用的负载均衡(通常利用 iptables 规则),实现服务到 pod 的路由和转发,此方式通过创建一个虚拟的 IP 来实现,客户端能够访问此 IP,并能够将服务透明地代理至 pod。

  • 它是网络组件,在网络中起着至关重要的作用。

  • 它管理 IP 转换和路由。

  • 它是运行在集群中每个节点上的网络代理。

  • 它维护节点上的网络规则,这些网络规则允许从集群内部或外部与 Pod 进行网络通信。

  • 它确保每个 Pod 获取唯一的 IP 地址。

  • 这使得 pod 中的所有容器共享一个 IP 成为可能。

  • 它促进了 Kubernetes 网络服务和服务中所有 pod 的负载平衡。

  • 它处理单个主机子网并确保服务可供外部各方使用。

3.kubernetes网络插件

   CNI(容器网络接口)是一个云原生计算基金会项目,它包含了一些规范和库,用于编写在 Linux 容器中配置网络接口的一系列插件。CNI 只关注容器的网络连接,并在容器被删除时移除所分配的资源。Kubernetes 使用 CNI 作为网络提供商和 Kubernetes Pod 网络之间的接口。

(1) Flannel 网络

    由 CoreoSk 开发的一个项目,很多部署工具或者 k8s 的发行版都是默认安装,flannel 是可以用集群现有的 etcd,利用 api 方式存储自身状态信息,不需要专门的数据存储,是配置第三层的 ipv4 Overlay 网络,在此网络内,每个节点一个子网,用于分配 ip 地址,配置 pod 时候,节点上的网桥接口会为每个新容器分配一个地址,同一主机中的 pod 可以使用网桥通信,不同主机的 pod 流量封装在 udp 数据包中,路由到目的地。

    Flannel 通过每个节点上启动一个 flnnel 的进程,负责给每一个节点上的子网划分、将子网网段等信息保存至 etcd,具体的报文转发是后端实现,在启动时可以通过配置文件指定不同的后端进行通信,目前有 UDP、VXLAN、host-gateway 三种,VXLAN 是官方推荐,因为性能良好,不需人工干预。UDP、VXLAN 是基于三层网络即可实现,host-gateway 模式需要集群所有机器都在同一个广播域、就是需要在二层网络在同一个交换机下才能实现,host-gateway 用于对网络性能要求较高的常见,需要基础网络架构支持,UDP 用于测试或者不支持 VXLAN 的 linux 内核。反正一般小规模集群是完全够用的,直到很多功能无法提供时在考虑其他插件。

(2) Calico 网络

   虽然 falnnel 很好,但是 calico 因为其性能、灵活性都好而备受欢迎,calico 的功能更加全面,不但具有提供主机和 pod 间网络通信的功能,还有网络安全和管理的功能,而且在 CNI 框架之内封装了 calico 的功能,calico 还能与服务网络技术 Istio 集成,不但能够更加清楚的看到网络架构也能进行灵活的网络策略的配置,calico 不使用 Overlay 网络,配置在第三层网络,使用 BGP 路由协议在主机之间路由数据包,意味着不需要包装额外的封装层。主要点在网络策略配置这一点,可以提高安全性和网络环境的控制。

   如果集群规模较大,选择 calico 没错,当然 calico 提供长期支持,对于一次配置长期使用的目的来说,是个很好的选择。

四.kubeadm快速安装kubernetes集群

主机名IP 地址操作系统主要软件
k8s-master192.168.10.101CentOS7.9

两核、4G
Docker CE, Kube-apiserver,

Kube-controller-manager,

Kube-scheduler,

Kubelet, Etcd, Kube-proxy
k8s-node01192.168.10.102CentOS7.9

两核、2G
Docker CE , Kubectl ,

Kube-proxy,Calico
k8s-node02192.168.10.103CentOS7.9

两核、2G
Docker CE , Kubectl ,

Kube-proxy,Calico

1. 部署docker环境(此步骤在三个节点都执行)

(1)关闭防火墙

systemctl stop firewalld   

systemctl disable firewalld

(2)禁用selinux

sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config

setenforce 0 

 (3)安装docker

下载docker的repo文件

curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-cd.repo

替换仓库地址

sed -i 's/$releasever/8/g' /etc/yum.repos.d/docker-ce.repo

sed -i 's/$basearch/x86_64/g' /etc/yum.repos.d/docker-ce.repo

更新索引文件并安装docker

dnf clean all

dnf makecache

dnf -y install docker-ce 

添加国内镜像站

mkdir /etc/docker/
vim /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://docker.imgdb.de",
    "https://docker-0.unsee.tech",
    "https://docker.hlmirror.com"
  ]
}

开启docker服务

systemctl daemon-reload 

systemctl restart docker 

systemctl enable docker 

docker version

优化内核参数 

vim /etc/sysctl.conf 
net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

 

sysctl -p

 2.部署kubernetes集群

(1)配置三台主机的主机名

主机一

hostnamectl set-hostname k8s-master 

bash

主机二 

hostnamectl set-hostname k8s-node01 

bash

主机三

hostnamectl set-hostname k8s-node02

bash

 (2)在三台主机上绑定hosts

vim /etc/hosts

192.168.10.101        k8s-master

192.168.10.102        k8s-node01

192.168.10.103        k8s-node02 

(3)关闭交换分区

swapoff -a

sed -i '/swap/s/^/#/' /etc/fstab 

(4)配置kubernetes的yum源

操作节点:k8s-master,k8s-node01,k8s-node02

 vim  /etc/yum.repos.d/kubernetes.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

 dnf clean all

(5)安装kubelet,kubeadm和kubectl

 操作节点:k8s-master,k8s-node01,k8s-node02

dnf -y install kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0

(6)kubelet设置开机启动

操作节点:k8s-master,k8s-node01,k8s-node02

systemctl enable kubelet

 (7)生成初始化配置文件

操作节点:k8s-master

kubeadm config print init-defaults > init-config.yaml

(8)修改初始化配置文件

 操作节点:k8s-master

vim init-config.yaml

apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:

- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.10.101
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  name: k8s-master
  taints: null

apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: v1.23.0

networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
  podSubnet: 10.244.0.0/16
scheduler: {}

 (9)拉取所需镜像

 操作节点:k8s-master

kubeadm config images list --config init-config.yaml

(10) 初始化k8s-master

 操作节点:k8s-master

kubeadm init --config=init-config.yaml

(11)复制配置文件到用户的home目录

 操作节点:k8s-master

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

 (12)node节点加入集群

kubeadm join 192.168.10.101:6443 --token abcdef.0123456789abcdef \
  --discovery-token-ca-cert-hash \
sha256:8b17b7d607ab7f79c2249c58d74525368bbb15ad884c365aaa1a968b9833d107 

 (13)在k8s-master节点设置环境变量并查看节点信息

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile

source ~/.bash_profile

kubectl get nodes
NAME         STATUS     ROLES    AGE   VERSION
k8s-master   NotReady   master   13m   v1.19.4
k8s-node01   NotReady   <none>   2m30s v1.19.4
k8s-node02   NotReady   <none>   21s   v1.19.4

kubectl get pod -A
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE
kube-system   coredns-6d8c4cb4d-7swl9                    0/1     Pending   0          3m58s
kube-system   coredns-6d8c4cb4d-rrlpp                    0/1     Pending   0          3m58s
kube-system   etcd-k8s-master                            1/1     Running   1 (85s ago)   4m11s
kube-system   kube-apiserver-k8s-master                  1/1     Running   1 (75s ago)   4m12s
kube-system   kube-controller-manager-k8s-master         1/1     Running   1 (84s ago)   4m12s
kube-system   kube-proxy-5hgbq                           1/1     Running   1 (82s ago)   3m54s
kube-system   kube-proxy-sdq9b                           1/1     Running   1 (79s ago)   3m46s
kube-system   kube-proxy-txdcr                           1/1     Running   1 (85s ago)   3m58s
kube-system   kube-scheduler-k8s-master                  1/1     Running 

 (14)部署calico网络插件

 

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
[root@k8s-master ~]# kubectl create -f calico.yaml

kubectl get nodes
NAME         STATUS   ROLES                  AGE   VERSION
k8s-master   Ready    control-plane,master   22h   v1.23.0
k8s-node01   Ready    <none>                 22h   v1.23.0
k8s-node02   Ready    <none>                 22h   v1.23.0

kubectl get pod --all-namespaces

 五. Metrics-server部署

1.修改yaml文件并安装

vim components.yaml
spec:
  containers:
  - args:
    - --kubelet-insecure-tls  ##添加
    - --cert-dir=/tmp
    - --secure-port=4443
    - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
    - --kubelet-use-node-status-port

    - --metric-resolution=15s
    image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.6.3
kubectl create -f components.yaml

2. 测试安装结果

kubectl top node
NAME         CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
k8s-master   99m          4%     1201Mi          31%       
k8s-node01   57m          2%     1597Mi          42%       
k8s-node02   37m          3%     616Mi           16%       

kubectl top pod -A
NAMESPACE     NAME                                       CPU(cores)   MEMORY(bytes)   
kube-system   calico-kube-controllers-64cc74d646-vtjgc   1m           27Mi            
kube-system   calico-node-jswkq                          17m          156Mi           
kube-system   calico-node-kfcr7                          18m          169Mi           
kube-system   calico-node-sr28f                          15m          161Mi           
kube-system   coredns-6d8c4cb4d-gggss                    2m           64Mi            
kube-system   coredns-6d8c4cb4d-l6plx                    2m           21Mi            
kube-system   etcd-k8s-master                            14m          64Mi            
kube-system   kube-apiserver-k8s-master                  37m          361Mi           
kube-system   kube-controller-manager-k8s-master         9m           55Mi            
kube-system   kube-proxy-4vn4c                           1m           23Mi            
kube-system   kube-proxy-5dgbm                           1m           69Mi            
kube-system   kube-proxy-tbqkz                           1m           24Mi            
kube-system   kube-scheduler-k8s-master                  3m           25Mi            
kube-system   metrics-server-66bdc46d86-4mfqw            3m           25Mi   

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/89455.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/89455.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/89455.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

百度权重提升技巧分析:从底层逻辑到实战策略

在搜索引擎优化&#xff08;SEO&#xff09;领域&#xff0c;百度权重始终是网站运营者关注的核心指标之一。它不仅反映了网站在百度搜索中的综合表现&#xff0c;更直接影响着流量获取能力与商业价值。然而&#xff0c;百度权重并非百度官方直接公布的数据&#xff0c;而是第三…

模拟数据生成---使用NGS数据模拟软件VarBen

目录 1.在BAM文件中根据指定的变异等位基因分数的指定位置或区域随机选择read。 2.筛选变异等位基因分数的reads: 3.装BWA和samtools软件包(samtools在linux系统中下载过,前文有讲过) 4.写py脚本 5.下载pysam库模块 6.下载参考基因组hg38 7.解压gz 8.建立samtools索引…

Redis-典型应用-分布式锁

目录 1.什么是分布式锁? 2.分布式锁的实现 3.引入过期时间 4.引入校验ID 5.引入lua脚本: 6.引入看门狗(watch dog) 7.引入redislock算法: 1.什么是分布式锁? 在 分布式系统中,会出现多个节点同时访问同一个公共资源, 此时就需要通过锁来作互斥控制,避免出现类似于多线程…

Dinky (Mac) 本地开发环境搭建指南

目录 一、前置条件 二、代码准备 三、前端环境搭建 1. 安装Node环境 2. 安装PNPM 3. 构建前端 四、后端环境搭建 1. 本地编译依赖 2. 添加必要依赖 3. 启动后端服务 五、访问系统 附录&#xff1a;官方参考 一、前置条件 确保已安装以下软件&#xff1a; 软件要求…

Java Set 集合详解:从基础语法到实战应用,彻底掌握去重与唯一性集合

作为一名 Java 开发工程师&#xff0c;你一定在实际开发中遇到过需要去重、唯一性校验、快速查找等场景。这时候&#xff0c;Set 集合 就成为你不可或缺的工具。本文将带你全面掌握&#xff1a;Set 接口的定义与核心方法常见实现类&#xff08;如 HashSet、TreeSet、LinkedHash…

在分布式系统中,如何保证缓存与数据库的数据一致性?

口诀&#xff1a; 读多写少用旁路&#xff0c;先更库再删缓存&#xff1b; 强一致选写透&#xff0c;缓存代理更库走&#xff1b; 性能优先用写回&#xff0c;异步批量有风险&#xff1b; 高并发加双删&#xff0c;延迟兜底防旧残&#xff1b; 强一致用锁串&#xff0c;并发虽低…

【洛谷P1417】烹调方案 题解

题目大意 一共有 nnn 件食材&#xff0c;每件食材有三个属性&#xff0c;aia_iai​&#xff0c;bib_ibi​ 和 cic_ici​&#xff0c;如果在 ttt 时刻完成第 iii 样食材则得到 ai−tbia_i-t\times b_iai​−tbi​ 的美味指数&#xff0c;用第 iii 件食材做饭要花去 cic_ici​ 的…

vue svg实现一个环形进度条组件

svg实现一个环形进度条设计初衷&#xff1a;本来想直接使用element的进度条组件的&#xff0c;但是好多属性都没有办法控制。 UI设计的图如下&#xff0c;需要控制未完成和已完成的颜色&#xff0c;端点的形状改为普通的butt 所以使用svg实现了一个环形进度条组件element组件设…

02 51单片机之LED闪烁

文章目录1、单片机1-1、简介1-2、应用场景2、51单片机2-1、背景2-2、主要品牌及其产品2-3、基本组成2-4、命名规则3、单片机内部结构3-1、单片机内部结构图3-2、单片机内部结构3-3、单片机内部管脚图3-4、单片机最小系统3-5、开发板介绍4、点亮LED4-1、新建工程4-1-1、创建工程…

Typecho博客集成算术验证码防御垃圾评论实战指南

文章目录 Typecho实现算术验证码防御机器人垃圾评论的完整方案 背景与问题分析 技术方案设计 系统架构 技术选型 核心实现步骤 1. 创建验证码生成函数 2. 修改评论表单模板 3. 添加AJAX刷新功能 4. 创建验证码刷新接口 5. 添加评论提交验证 安全增强措施 1. 防止暴力破解 2. 增…

clonezilla 导出自动化恢复iso

clonezilla 下载及U盘工具下载 clonezilla rufus U盘写入工具ventoy U盘工具downloaddownloaddownload clonezilla 备份&#xff0c;连贯上一篇文章参考 Choose Clonezilla live (VGA 800x600) Wait for it to complete Language selection Keyboard Settings Select Mode …

深度学习模型开发部署全流程:以YOLOv11目标检测任务为例

深度学习模型开发部署全流程&#xff1a;以YOLOv11目标检测任务为例 深度学习模型从开发到部署的完整流程包含需求分析、数据准备、模型训练、模型优化、模型测试和部署运行六大核心环节。YOLOv11作为新一代目标检测模型&#xff0c;不仅延续了YOLO系列的高效实时性能&#xff…

单片机(STM32-串口通信)

一、串口通信基础概念串口通信&#xff08;Serial Communication&#xff09;是一种在计算机和外部设备之间进行数据传输的通信方式。它通过串行方式逐位传输数据&#xff0c;是最基本和常用的通信接口之一。主要特点1. 串行传输(1)数据按位顺序传输&#xff0c;一次只能传输一…

Redis学习其三(订阅发布,主从复制,哨兵模式)

文章目录9.Redis订阅与发布9.1发布订阅命令9.2示例10.Redis主从复制10.1概念10.2环境配置10.3集群搭建&#xff08;一主二从配置&#xff09;10.4使用规则&原理11.哨兵模式11.1基本概念11.2工作原理11.3使用案例12.缓存穿透,雪崩&#xff08;待拓展&#xff09;12.1缓存穿透…

跨平台 App 如何无痛迁移到鸿蒙系统?全流程实战+Demo 教程

摘要 目前&#xff0c;随着 HarmonyOS&#xff08;鸿蒙系统&#xff09;的快速发展&#xff0c;越来越多开发者和企业希望将已有的 Android、Flutter、React Native 等跨平台应用迁移到鸿蒙生态中。鸿蒙不仅具备分布式能力、原生性能和统一的开发范式&#xff0c;还提供了丰富的…

智慧后厨检测算法构建智能厨房防护网

智慧后厨检测&#xff1a;构建安全洁净厨房的智能解决方案背景&#xff1a;传统后厨管理的痛点与智慧化需求餐饮行业后厨管理长期面临操作规范难落实、安全隐患难察觉、卫生状况难追溯等痛点。传统人工巡检效率低、覆盖面有限&#xff0c;难以实现24小时无死角监管。例如&#…

LatentSync: 一键自动生成对嘴型的视频

LatentSync是什么 字节跳动与北京交通大学联合推出了全新的唇形同步框架 LatentSync&#xff0c;它基于音频驱动的潜在扩散模型&#xff0c;跳过了传统的3D建模或2D特征点提取&#xff0c;直接生成自然逼真的说话视频。 LatentSync借助Stable Diffusion强大的图像生成能力&am…

在断网情况下,网线直接连接 Windows 笔记本和 Ubuntu 服务器进行数据传输

在断网情况下&#xff0c;通过网线直接连接 Windows 笔记本 和 Ubuntu 服务器上的容器 进行数据传输&#xff0c;可以按照以下步骤操作&#xff1a;1. 物理连接 使用网线直连&#xff1a;用一根 普通网线&#xff08;直通线&#xff09; 连接 Windows 笔记本和 Ubuntu 服务器的…

机器学习17-Mamba

深度学习之 Mamba 学习笔记 一、Mamba 的背景与意义 在深度学习领域&#xff0c;序列建模是一项核心任务&#xff0c;像自然语言处理、语音识别和视频分析等领域&#xff0c;都要求模型能有效捕捉长序列里的依赖关系。之前&#xff0c;Transformer 凭借强大的注意力机制成为序列…

Java实现word、pdf转html保留格式

一、word转html 依赖&#xff1a; <properties><poi.version>5.2.3</poi.version><xhtml.version>2.0.4</xhtml.version> </properties><!--word转html--> <dependency><groupId>org.apache.poi</groupId><a…