Part1:基于國內源完成Kubernetes集群部署

集群規劃

操作系統:CentOS7 內核版本:5.4+(需升級)

組件版本說明
操作系統內核5.4+RPM方式升級
docker26.1.4yum安裝
cri-docker0.3.16二進制安裝
kubeadm1.30.11yum安裝
kubealet1.30.11yum安裝
kubectl1.30.11yum安裝
kubectl1.30.11yum安裝
kubernetes1.30.11kubeadm部署
flannel1.6.2CNI插件
kubernetes-dashboad7.6.5helm安裝
metric-server0.7.2

網絡規劃

  • 虛擬機NAT地址
    子網IP子網掩碼網關
    192.168.85.0255.255.255.0192.168.85.1
  • K8S集群網絡
    Pod子網Service子網
    10.240.0.0/1610.140.0.0/16
  • K8S集群節點
    節點名稱節點IP
    master101192.168.85.101
    node102192.168.85.102
    node103192.168.85.103

創建虛擬機

使用VMWare先創建一個虛擬機,虛擬機的網絡配置使用網橋,需要提前配置好網絡配置,如:網段、掩碼、網關。這部分教程比較多,可自行搜索。唯一需要注意的一點就是NAT網絡的設置,需要注意子網、掩碼、網關的地址,在后續的操作系統中用于配置節點的網絡。
在這里插入圖片描述

系統配置

配置網絡

操作系統安裝好之后,第一步就是先配置好網絡,網絡連通之后才能繼續后續的步驟。在這個集群里,我們通常會把IP設置為靜態IP方便管理。

[root@master101 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO="static" # 必須為static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33 # 網卡名稱
UUID=07ba6f88-2fce-4fd9-9b95-4da163097f7a
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.85.101 # 靜態IP 需要在虛擬機的NET地址網段內
GATEWAY=192.168.85.1 # 網關 需要與虛擬機的NET地址的網關一致
NETMASK=255.255.255.0 # 掩碼 需要與虛擬機的NET地址的掩碼一致
IPV6_PRIVACY=no #
DNS1=8.8.8.8 # DNS可以有多個,也可以使用其他穩定的DNS
PREFIX=24

重新啟動下網絡,并檢查下IP是否是與配置文件一致

[root@master101 ~]# systemctl restart network
[root@master101 ~]# ifconfig

關閉防火墻

[root@master101 ~]# systemctl disable firewalld
[root@master101 ~]# systemctl stop firewalld
[root@master101 ~]# systemctl status firewalld
[root@master101 ~]# systemctl restart network

同步時鐘

[root@master101 ~]# timedatectl set-timezone 'Asia/Shanghai'
[root@master101 ~]# ntpdate ntp1.aliyun.com
[root@master101 ~]# date
[root@master101 ~]# cat >> /etc/crontab << EOF
* * * * root /usr/sbin/ntpdate ntp1.aliyun.com && /sbin/hwclock -w
EOF

升級內核

Kubernetes 1.30 默認要求容器運行時(containerd/CRI-O)啟用 ?cgroups v2,而完整支持該功能需要 Linux 5.4+ 內核。目前使用的docker,沒有修改使用到cgroupV2。

  1. 查看系統的內核版本
    [root@master101 ~]# uname -r
    3.10.0-693.el7.x86_64
    
  2. 使用yum升級內核
    [root@master101 ~]# cat <<EOF > /etc/yum.repos.d/elrepo.repo
    [elrepo]
    name=elrepo
    baseurl=https://mirrors.aliyun.com/elrepo/archive/kernel/el7/x86_64
    gpgcheck=0
    enabled=1
    EOF
    [root@master101 ~]# yum clean all && yum makecache
    [root@master101 ~]# yum list --showduplicate kernel*
    已加載插件:fastestmirror, langpacks
    Loading mirror speeds from cached hostfile
    已安裝的軟件包
    kernel.x86_64                              3.10.0-693.el7                   @anaconda
    kernel-devel.x86_64                        3.10.0-693.el7                   @anaconda
    kernel-headers.x86_64                      3.10.0-693.el7                   @anaconda
    kernel-tools.x86_64                        3.10.0-693.el7                   @anaconda
    kernel-tools-libs.x86_64                   3.10.0-693.el7                   @anaconda
    
    沒有找到預期的內核版本,所以換種另外的方式,使用RPM來安裝。
  3. RPM升級內核
    下載內核包
    [root@master101 ~]# mkdir kernel-rpm
    [root@master101 ~]# cd kernel-rpm
    [root@master101 kernel-rpm]# wget http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-devel-5.4.226-1.el7.elrepo.x86_64.rpm
    [root@master101 kernel-rpm]# wget http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-headers-5.4.226-1.el7.elrepo.x86_64.rpm
    [root@master101 kernel-rpm]# wget http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-5.4.226-1.el7.elrepo.x86_64.rpm
    
    安裝
    [root@master101 kernel-rpm]#  rpm -ivh kernel-lt-5.4.226-1.el7.elrepo.x86_64.rpm
    [root@master101 kernel-rpm]# rpm -ivh kernel-lt-devel-5.4.226-1.el7.elrepo.x86_64.rpm
    
    查看內核啟動版本
    [root@master101 kernel-rpm]# rpm -qa | grep kernel
    kernel-tools-libs-3.10.0-693.el7.x86_64
    kernel-headers-3.10.0-693.el7.x86_64
    kernel-lt-5.4.226-1.el7.elrepo.x86_64
    abrt-addon-kerneloops-2.1.11-48.el7.centos.x86_64
    kernel-lt-devel-5.4.226-1.el7.elrepo.x86_64
    kernel-3.10.0-693.el7.x86_64
    kernel-devel-3.10.0-693.el7.x86_64
    kernel-tools-3.10.0-693.el7.x86_64
    
    設置內核啟動順序,默認啟動高版本的內核
    [root@master101 ~]# cat /etc/grub2.cfg | grep menuentry|awk -F "\'" '$1=="menuentry " {print i++ " : " $2}'
    [root@master101 ~]# grub2-set-default 0
    [root@master101 ~]# reboot
    [root@master101 ~]# uname -r
    5.4.226-1.el7.elrepo.x86_64
    
    CentOS7.9升級3.10內核至5.4

配置內核參數

禁止使用swap分區

[root@master101 ~]# sed -i 's/enforcing/disabled/' /etc/selinux/config
[root@master101 ~]# setenforce 0
[root@master101 ~]# swapoff -a

將橋接的lPv4流量傳遞到iptables的鏈

[root@master101 ~]# cat > /etc/sysctl.d/k8s.conf << EOF
vm.swappiness=0
net.ipv4.ip_forward = 1
net.ipv4.tcp_tw_recycle = 0
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
[root@master101 ~]# sysctl -p /etc/sysctl.d/k8s.conf
vm.swappiness = 0
net.ipv4.ip_forward = 1
net.ipv4.tcp_tw_recycle = 0
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
[root@master101 ~]# sysctl --system 

配置ipvs功能

[root@master101 ~]# yum install ipset ipvsadm -y
[root@master101 ~]# cat >> /etc/sysconfig/modules/ipvs.modules << EOF
> #!/bin/bash
> modprobe -- ip_vs
> modprobe -- ip_vs_rr
> modprobe -- ip_vs_wrr
> modprobe -- ip_vs_sh
> modprobe -- nf_conntrack
> EOF
[root@master101 ~]# chmod +x /etc/sysconfig/modules/ipvs.modules
[root@master101 ~]# /bin/bash /etc/sysconfig/modules/ipvs.modules
[root@master101 ~]# lsmod | grep -e ip_vs -e nf_conntrack_ipv4
ip_vs_sh               12688  0 
ip_vs_wrr              12697  0 
ip_vs_rr               12600  0 
ip_vs                 145458  6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
nf_conntrack_ipv4      15053  2 
nf_defrag_ipv4         12729  1 nf_conntrack_ipv4
nf_conntrack          139264  6 ip_vs,nf_nat,nf_nat_ipv4,xt_conntrack,nf_nat_masquerade_ipv4,nf_conntrack_ipv4
libcrc32c              12644  4 xfs,ip_vs,nf_nat,nf_conntrack

安裝Docker以及cri-dockerd

安裝Docker

[root@master101 ~]# yum remove docker*
[root@master101 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
[root@master101 ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@master101 ~]# yum install -y docker-ce
[root@master101 ~]# docker -v
Docker version 26.1.4, build 5650f9b

配置國內的鏡像源,一般可以去阿里云注冊一個賬戶,免費使用它的鏡像加速。當然也可以使用其他常用的加速地址。不過更推薦阿里云的,因為比較穩定。

[root@localhost ~]# cat >> /etc/docker/daemon.json << EOF
{"registry-mirrors": ["https://29wbjzyc.mirror.aliyuncs.com","https://registry.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn"],"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF[root@master101 ~]# systemctl daemon-reload
[root@master101 ~]# systemctl restart docker

先拉取下后續安裝K8S所需的鏡像,順便驗證下docker是否正常。

[root@master101 ~]# docker images
REPOSITORY                                                                                  TAG               IMAGE ID       CREATED         SIZE
ghcr.io/flannel-io/flannel-cni-plugin                                                       v1.6.2-flannel1   55ce2385d9d8   6 weeks ago     10.7MB
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/kubernetesui/dashboard-api               1.8.1             9446b3f1c3ba   6 months ago    46.9MB
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/kong                                     3.8.0             8ed1b48bc959   6 months ago    375MB
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/kubernetesui/dashboard-web               1.4.0             65bdf9576e48   9 months ago    181MB
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/kubernetesui/dashboard-auth              1.1.3             19b0f210f0dc   11 months ago   40.1MB
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/kubernetesui/dashboard-metrics-scraper   1.1.1             e3e259695944   12 months ago   35.3MB

安裝cri-dockerd

[root@master101 ~]# mkdir k8s && cd k8s
[root@master101 k8s]# wget -c https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.16/cri-dockerd-0.3.16.amd64.tgz 
[root@master101 k8s]# ls
cri-dockerd-0.3.16.amd64.tgz
[root@master101 k8s]# tar xvf cri-dockerd-0.3.16.amd64.tgz
cri-dockerd/
cri-dockerd/cri-dockerd
[root@master101 k8s]# ls
cri-dockerd  cri-dockerd-0.3.16.amd64.tgz
[root@master101 k8s]# cp cri-dockerd/cri-dockerd /usr/bin/
[root@master101 k8s]# cri-dockerd --version
cri-dockerd 0.3.16 (7119864)

配置 cri-docker 服務


# 配置 cri-docker 服務
[root@master101 k8s]#  cat > /usr/lib/systemd/system/cri-docker.service <<EOF 
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target
Requires=cri-docker.socket[Service]
Type=notify
ExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process[Install]
WantedBy=multi-user.target
EOF# 配置 cri-docker socket
[root@master101 k8s]# cat > /usr/lib/systemd/system/cri-docker.socket <<EOF 
[Unit]
Description=CRI Docker Socket for the API
PartOf=cri-docker.service[Socket]
ListenStream=%t/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker[Install]
WantedBy=sockets.target

重新啟動并且設置開機自啟動

[root@master101 k8s]# systemctl daemon-reload
[root@master101 k8s]# systemctl enable cri-docker --now

安裝 kubeadm、kubelet、kubectl

通過阿里云的鏡像站來完成加速下載 kubeadm、kubelet、kubectl。需要注意的是由于 Kubernetes 官方變更了倉庫的存儲路徑以及使用方式,如果需要使用 1.28 及以上版本,需要使用新版配置方法進行配置。詳情參見阿里云開發者社區-鏡像站-kubernetes。

[root@master101 ~]# cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm/repodata/repomd.xml.key
EOF[root@master101 ~]# yum --disablerepo="*" --enablerepo="kubernetes" list available
[root@master101 ~]# yum -y install kubeadm kubelet kubectl# 如果無法啟動則需要排查下,可能因為開啟了swap
[root@master101 ~]# systemctl status kubelet
[root@master101 ~]# systemctl start kubelet
[root@master101 ~]# systemctl enable kubelet

注意:如果kubelet啟動失敗,大概率是系統開啟了swap分區,這時候是需要關閉的。

[root@master101 ~]# swapon --show
NAME      TYPE      SIZE USED PRIO
/dev/dm-1 partition   2G 524K   -2
[root@master101 ~]# cat /etc/fstab | grep swap
/dev/mapper/centos-swap swap                    swap    defaults        0 0
[root@master101 ~]# vim /etc/fstab 
[root@master101 ~]# cat /etc/fstab | grep swap
#/dev/mapper/centos-swap swap                    swap    defaults        0 0
[root@master101 ~]# swapoff -a

克隆機器

目前為止,我們在master101上配置了k8s集群部署所需的關鍵配置,也完成了docker和k8s容器運行時的安裝,拉取了后續集群部署所需的鏡像。 拉取鏡像其實可以放到后續的步驟去完成,只是我比較懶,我更希望通過克隆虛擬機的方式將所有資源都拷貝到集群的各個節點上。這樣可以避免多次下載。后面直接將master101當成模板機克隆出兩臺機器node102以及node103,當然熟悉的朋友也可以自行再次新建虛擬機完成。這里的克隆我就不再演示了,比較簡單,沒什么門檻,只是克隆的時候需要注意是完整克隆。

網絡配置

由于兩臺虛擬機都是通過master101克隆出來的,所以克隆出來的node102,、node103與master101的IP地址還有主機名都是一樣的,因此我們需要修改IP地址和主機名。先單獨開啟node102,或者將master101和node103的網絡斷開,這樣node102就可以正常使用網絡通信了。

需要注意UUID是否與master101一致,如果一致則需要重新修改,UUID在我們的網絡集群中必須保證唯一性。設置完IP之后,我們再修改下主機名方便我們更好的區分。

[root@master101 ~]# cat  /etc/sysconfig/network-scripts/ifcfg-ens33 | grep -E 'IPADDR|UUID'
UUID=1ebe2b03-dd7d-4df7-87e9-1dbc00c33252
IPADDR=192.168.85.101
[root@master101 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@master101 ~]# cat  /etc/sysconfig/network-scripts/ifcfg-ens33 | grep -E 'IPADDR|UUID'
UUID=1ebe2b03-dd7d-4df7-87e9-1dbc00c33252
IPADDR=192.168.85.102
[root@master101 ~]# hostnamectl set-hostname node102
[root@master101 ~]# systemctl restart network

如果我們使用shell遠程連接的可能需要重新使用node102的IP完成登錄。按照此步驟我們開啟node103并完成相關的配置。

[root@master101 ~]# cat  /etc/sysconfig/network-scripts/ifcfg-ens33 | grep -E 'IPADDR|UUID'
UUID=1ebe2b03-dd7d-4df7-87e9-1dbc00c33259
IPADDR=192.168.85.101
[root@master101 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@master101 ~]# cat  /etc/sysconfig/network-scripts/ifcfg-ens33 | grep -E 'IPADDR|UUID'
UUID=1ebe2b03-dd7d-4df7-87e9-1dbc00c33259
IPADDR=192.168.85.103
[root@master101 ~]# hostnamectl set-hostname node103
[root@master101 ~]# systemctl restart network

在三臺主機上都添加下集群節點的主機名信息,注意是三個節點都執行

[root@master101 ~]# cat >> /etc/hosts <<EOF
> 192.168.85.101 master101 master101
> 192.168.85.102 node102 node102
> 192.168.85.103 node103 node103
> EOF

免密登錄

所有主機均修改ssh配置運行公鑰驗證免密登錄,先打開公鑰驗證開關,注意三個主機都需要執行。

[root@master101 ~]# cat /etc/ssh/sshd_config | grep -e AuthorizedKeysFile -e PubkeyAuthentication 
#PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys
[root@master101 ~]# vim /etc/ssh/sshd_config
[root@master101 ~]# cat /etc/ssh/sshd_config | grep -e AuthorizedKeysFile -e PubkeyAuthentication 
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys

生成以RSA算法生成的秘鑰對,執行命令時不輸入任何信息直接回車,保持默認就行。三個節點均需要執行。

[root@master101 ~]# ssh-keygen -t rsa
[root@master101 .ssh]# pwd
/root/.ssh
[root@master101 .ssh]# ls
id_rsa  id_rsa.pub

在master101上將每個節點的公鑰復制

[root@master101 .ssh]# cat id_rsa.pub >> authorized_keys
[root@master101 .ssh]# ssh master101			# 自己遠程自己,測試下
[root@master101 ~]# ssh root@node102 cat ~/.ssh/id_rsa.pub>> authorized_keys
[root@master101 ~]# ssh root@node103 cat ~/.ssh/id_rsa.pub>> authorized_keys
[root@master101 ~]# scp authorized_keys root@node102:/root/.ssh/
[root@master101 ~]# scp authorized_keys root@node103:/root/.ssh/
[root@master101 ~]# scp known_hosts root@node102:/root/.ssh/
[root@master101 ~]# scp known_hosts root@node103:/root/.ssh/

Part1結束語

截止到目前為止,我們已經完成了k8s集群部署的所有準備工作,接下來就是使用kubeadm來完成集群的部署。具體步驟在Part2:基于國內源完成Kubernetes集群部署。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/72436.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/72436.shtml
英文地址,請注明出處:http://en.pswp.cn/web/72436.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

中考英語之10難點單詞

A abandon ~動詞&#xff0c;意為 “拋棄&#xff1b;放棄”。 ~例如 He abandoned his old bike by the roadside.&#xff08;他把他的舊自行車扔在路邊。&#xff09; absolute ~形容詞&#xff0c;“絕對的&#xff1b;完全的”。 ~例如 We have absolute trust in him…

【GPT入門】第24課 langfuse介紹

【GPT入門】第24課 langfuse介紹 1. langfuse概念與作用2. 代碼3. 頁面效果4. 設計模式1. 裝飾器模式2. 上下文管理模式1. langfuse概念與作用 Langfuse是一款專為大規模語言模型(LLM)應用開發設計的開源平臺。其作用主要包括以下幾個方面: 提升開發效率:通過消除LLM應用構…

在 React 中使用 Web Components 的實踐操作

前言 在現代前端開發中&#xff0c;React 和 Web Components 都是廣泛使用且備受歡迎的技術。React 是一個用于構建用戶界面的 JavaScript 庫&#xff0c;提供了組件化的開發方式和高效的狀態管理&#xff0c;而 Web Components 是一套原生的瀏覽器技術標準&#xff0c;允許開…

C++單例模式精解

單例模式&#xff08;重點*&#xff09; 單例模式是23種常用設計模式中最簡單的設計模式之一&#xff0c;它提供了一種創建對象的方式&#xff0c;確保只有單個對象被創建。這個設計模式主要目的是想在整個系統中只能出現類的一個實例&#xff0c;即一個類只有一個對象。 將單…

【微服務】java中http調用組件深入實戰詳解

目錄 一、前言 二、http調用概述 2.1 什么是http調用 2.1.1 http調用步驟 2.2 HTTP調用特點 2.3 HTTP調用應用場景 三、微服務場景下http調用概述 3.1 微服務開發中http調用場景 3.2 微服務組件中http的應用 四、常用的http調用組件 4.1 java中常用的http組件介紹 4…

Implementing SAP BPC Embedded - 2nd Edition

Implementing SAP BPC Embedded - 2nd Edition

stm32第四天控制蜂鳴器

一&#xff1a; 1.蜂鳴器的種類 蜂鳴器是一種常用的電子發聲元器件&#xff0c;采用直流電壓供電。廣泛應用于計算機&#xff0c;打ED機&#xff0c;報警器&#xff0c;電子玩具&#xff0c;汽車電子設備燈等產品中常見的蜂鳴器可分為有源蜂鳴器和無源蜂鳴器。 2.蜂鳴器的控制…

Swift 中 associatedtype 的用法詳解

目錄 前言 1.什么是associatedtype 2.associatedtype 的作用 1.讓協議支持泛型 2.讓協議支持不同的數據類型 3.結合 where 關鍵字限制類型 4.什么時候使用 associatedtype 5.總結 前言 在 Swift 語言中&#xff0c;泛型&#xff08;Generics&#xff09;是一個非常強大…

每日Attention學習26——Dynamic Weighted Feature Fusion

模塊出處 [ACM MM 23] [link] [code] Efficient Parallel Multi-Scale Detail and Semantic Encoding Network for Lightweight Semantic Segmentation 模塊名稱 Dynamic Weighted Feature Fusion (DWFF) 模塊作用 雙級特征融合 模塊結構 模塊思想 我們提出了 DWFF 策略&am…

OpenCV實現圖像特征提取與匹配

?一、特征檢測與描述子提取? ?選擇特征檢測器? 常用算法包括&#xff1a; ?ORB?&#xff1a;一種高效的替代SIFT和SURF的算法&#xff0c;主要用于移動機器人和增強現實等領域。適合實時應用&#xff0c;結合FAST關鍵點與BRIEF描述子?。?SIFT&#xff08;尺度不變特征變…

向量檢索在AI中的應用與技術解析

關鍵要點 向量檢索在AI中用于信息檢索、推薦系統和圖像搜索&#xff0c;研究表明其通過高維空間中的向量表示數據來提升搜索相關性。它依賴于嵌入技術&#xff08;如Word2Vec、BERT&#xff09;和近鄰算法&#xff08;如kNN、ANN&#xff09;&#xff0c;證據傾向于其在處理大…

事務與異步方法(@Async)協同工作

目錄 1. 問題場景與風險 &#xff08;1&#xff09;典型場景 &#xff08;2&#xff09;風險分析 2. 解決方案&#xff1a;事務提交后觸發異步操作 &#xff08;1&#xff09;代碼示例 &#xff08;2&#xff09;關鍵注解 3. 原理解析 &#xff08;1&#xff09;事務同…

關于進程的實驗(子進程和父進程相關的)

文章目錄 1.第一個問題2.第二個問題3.第三個問題 1.第一個問題 編寫一段程序&#xff0c;利用系統調用fork( )創建兩個進程。當此程序運行時&#xff0c;在系統中有一個父進程和兩個子進程活動。讓每一個進程在屏幕上顯示一個字符&#xff1a;父進程顯示字符“a”;子進程分別顯…

MyBatis 如何創建 SqlSession 對象的?

MyBatis 創建 SqlSession 對象的過程主要由 SqlSessionFactory 接口及其實現類來完成。以下是詳細步驟&#xff1a; 1. SqlSessionFactory 接口: SqlSessionFactory 是 MyBatis 的核心接口之一&#xff0c;它負責創建 SqlSession 對象。 你可以將 SqlSessionFactory 視為 Sql…

深度優先搜索(DFS)剪枝技術詳解與C++實現

深度優先搜索&#xff08;DFS&#xff09;剪枝技術通過提前終止無效路徑的搜索&#xff0c;大幅提升算法效率。以下是五種核心剪枝技術的詳細解析及C代碼示例&#xff1a; 目錄 一、可行性剪枝 C實現示例 二、搜索順序剪枝 偽代碼邏輯 三、最優性剪枝 C實現示例 四、排除…

【雙指針】移動零

題目描述&#xff1a; 算法分析&#xff1a; 觀察輸入輸出&#xff1a; 輸出中一共分為兩個區域&#xff0c;0區和非零區。 但是在處理未完成之前&#xff0c;必然存在著一個零和非零數共存的區域&#xff0c;所以在處理的過程當中一共有三個區域&#xff0c;0區&#xff0c;…

學習15天:pytest

1、.pytest強大的插件 pytest-html(生成html格式的自動化測試報告) pytest-xdist測試用例分布式執行。多CPU分發。 pytest-ordering 用于改變測試用例的執行順序 pytest-rerunfailures用例失敗后重跑 allure-pytest 用于生成美觀的測試報告。 2、規則&#xff1a; 模塊…

股票交易所官方api接口有哪些?獲取和使用需要滿足什么條件

炒股自動化&#xff1a;申請官方API接口&#xff0c;散戶也可以 python炒股自動化&#xff08;0&#xff09;&#xff0c;申請券商API接口 python炒股自動化&#xff08;1&#xff09;&#xff0c;量化交易接口區別 Python炒股自動化&#xff08;2&#xff09;&#xff1a;獲取…

2.7 滑動窗口專題:串聯所有單詞的子串

LeetCode 30. 串聯所有單詞的子串算法對比分析 1. 題目鏈接 LeetCode 30. 串聯所有單詞的子串 2. 題目描述 給定一個字符串 s 和一個字符串數組 words&#xff0c;words 中所有單詞長度相同。要求找到 s 中所有起始索引&#xff0c;使得從該位置開始的連續子串包含 words 中所…

【區塊鏈】區塊鏈密碼學基礎

&#x1f308;個人主頁: 鑫寶Code &#x1f525;熱門專欄: 閑話雜談&#xff5c; 炫酷HTML | JavaScript基礎 ?&#x1f4ab;個人格言: "如無必要&#xff0c;勿增實體" 文章目錄 區塊鏈密碼學基礎引言一、哈希函數1.1 基本概念1.2 數學表達 二、非對稱加密2.1…