K8s 1.32.6版本部署文檔

主機配置

作用IP地址操作系統配置關鍵組件
k8s-master172.16.1.30Rocky Linux release 94C/4G/50GBkube-apiserver, etcd,docker
k8s-node1172.16.1.31Rocky Linux release94C/4G/50GBkubelet, kube-proxy,docker
k8s-node2172.16.1.32Rocky Linux release 94C/4G/50GBkubelet, kube-proxy,docker
k8s-node3172.16.1.33Rocky Linux release 94C/4G/50GBkubelet, kube-proxy,docker

設置IP

方式一:
nmcli connection modify ens160 ipv4.addresses 172.16.1.30/24 ipv4.gateway 172.16.1.1 ipv4.method manual
nmcli connection modify ens160 ipv4.addresses 172.16.1.31/24 ipv4.gateway 172.16.1.1 ipv4.method manual
nmcli connection modify ens160 ipv4.addresses 172.16.1.32/24 ipv4.gateway 172.16.1.1 ipv4.method manual
nmcli connection modify ens160 ipv4.addresses 172.16.1.33/24 ipv4.gateway 172.16.1.1 ipv4.method manualnmcli connection up ens160方式二:
vi /etc/NetworkManager/system-connections/ens160.nmconnection
method=manual## 在IPV4下面修改如下內容
address1=192.168.0.5/24,192.168.0.1## 修改IP,子網掩碼(24是子網掩碼的24位,對應255.255.255.0), 網關
dns=119.29.29.29;114.114.114.114## 設置DNS服務
may-fail=false
重新加載配置文件
nmcli connection reload ens160.nmconnection
激活配置文件
nmcli connection up ens160

配置YUM源

  1. 配置yum源
(1)確認文件是否存在且可讀
sudo cat /etc/yum.repos.d/rocky.repo
如果文件不存在或內容為空,重新創建它。(2)重新下載正確的阿里云源文件
sudo rm -f /etc/yum.repos.d/rocky.repo  # 刪除舊文件(如果有)
sudo curl -o /etc/yum.repos.d/rocky.repo https://mirrors.aliyun.com/rockylinux/rocky.repo?repo=rocky-9
(3)手動編輯文件(如果下載失敗)
sudo vi /etc/yum.repos.d/rocky.repo
粘貼以下內容(阿里云 Rocky Linux 9 鏡像源):
[baseos]
name=Rocky Linux $releasever - BaseOS - Aliyun
baseurl=https://mirrors.aliyun.com/rockylinux/$releasever/BaseOS/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial[appstream]
name=Rocky Linux $releasever - AppStream - Aliyun
baseurl=https://mirrors.aliyun.com/rockylinux/$releasever/AppStream/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial[extras]
name=Rocky Linux $releasever - Extras - Aliyun
baseurl=https://mirrors.aliyun.com/rockylinux/$releasever/extras/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial(4)也可以直接替換yum源里的地址
sed -e 's|^mirrorlist=|#mirrorlist=|g' \-e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' \-i.bak \/etc/yum.repos.d/rocky*.repo
  1. 強制替換變量為 Rocky Linux 9
    確保 $releasever 和 $basearch 被正確解析:
sudo sed -i 's/$releasever/9/g' /etc/yum.repos.d/rocky.repo
sudo sed -i 's/$basearch/x86_64/g' /etc/yum.repos.d/rocky.repo  # 如果是 x86_64 架構
  1. 導入 GPG 密鑰
sudo rpm --import https://mirrors.aliyun.com/rockylinux/RPM-GPG-KEY-rockyofficial
  1. 檢查文件權限和格式
    (1)確保文件權限正確

    sudo chmod 644 /etc/yum.repos.d/rocky.repo
    

(2)檢查文件格式(避免 UTF-8 BOM 或 Windows 換行符)

```bash
sudo dos2unix /etc/yum.repos.d/rocky.repo  # 如果是從 Windows 復制的文件
```清除緩存并重新加載
sudo dnf clean all
sudo dnf makecache
  1. 驗證倉庫是否啟用
sudo dnf repolist
正常輸出應類似:
text
repo id                          repo name
baseos                           Rocky Linux 9 - BaseOS - Aliyun
appstream                        Rocky Linux 9 - AppStream - Aliyun
extras                           Rocky Linux 9 - Extras - Aliyun

在 Rocky Linux 9 中啟用并安裝 EPEL Repo。

dnf install epel-release

備份(如有配置其他epel源)并替換為國內鏡像
注意最后這個庫,阿里云沒有對應的鏡像,不要修改它,如果誤改恢復原版源即可

cp /etc/yum.repos.d/epel.repo  /etc/yum.repos.d/epel.repo.backup 
cp /etc/yum.repos.d/epel-testing.repo  /etc/yum.repos.d/epel-testing.repo.backup
cp /etc/yum.repos.d/epel-cisco-openh264.repo  /etc/yum.repos.d/epel-cisco-openh264.repo.backup

將 repo 配置中的地址替換為阿里云鏡像站地址

執行下面語句,它會替換epel.repo、eple-testing.repo中的網址,不會修改epel-cisco-openh264.repo,可以正常使用。

sed -e 's!^metalink=!#metalink=!g' \-e 's!^#baseurl=!baseurl=!g' \-e 's!https\?://download\.fedoraproject\.org/pub/epel!https://mirrors.aliyun.com/epel!g' \-e 's!https\?://download\.example/pub/epel!https://mirrors.aliyun.com/epel!g' \-i /etc/yum.repos.d/epel{,-testing}.repo

更新倉庫緩存

dnf clean all 
dnf makecache   ---生成緩存,安裝軟件更快

每臺機器單獨做

hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node1
hostnamectl set-hostname k8s-node2
hostnamectl set-hostname k8s-node3

設置hosts

cat >> /etc/hosts << EOF
172.16.1.30 k8s-master
172.16.1.31 k8s-node1
172.16.1.32 k8s-node2
172.16.1.33 k8s-node3
EOF

配置免密登錄,只在k8s-master上操作

[root@k8s-master ~]# ssh-keygen -f ~/.ssh/id_rsa -N '' -q

拷貝密鑰到其他3 臺節點

[root@k8s-master ~]# ssh-copy-id k8s-node1
[root@k8s-master ~]# ssh-copy-id k8s-node2
[root@k8s-master ~]# ssh-copy-id k8s-node3

防火墻和SELinux

# 關閉防火墻
systemctl disable --now firewalld
# 禁用SELinux
sed -i '/^SELINUX=/ c SELINUX=disabled' /etc/selinux/config
# 重啟生效所以臨時設置為寬容模式
setenforce 0

時間同步配置

# 安裝時間服務器軟件包
dnf install -y chrony
# 修改同步服務器
sed -i '/^pool/ c pool ntp1.aliyun.com  iburst' /etc/chrony.conf
systemctl restart chronyd
systemctl enable chronyd
chronyc sources

配置內核轉發及網橋過濾

# 添加網橋過濾及內核轉發配置文件
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness = 0
EOF# 加載br_netfilter模塊
modprobe br_netfilter

使用新添加配置文件生效

sysctl -p /etc/sysctl.d/k8s.conf

關閉swap

查看交換分區情況

# 臨時關閉
swapoff -a
# 永遠關閉swap分區
sed -i 's/.*swap.*/#&/' /etc/fstab

啟用ipvs

cat >> /etc/modules-load.d/ipvs.conf << EOF
br_netfilter
ip_conntrack
ip_vs
ip_vs_lc
ip_vs_wlc
ip_vs_rr
ip_vs_wrr
ip_vs_lblc
ip_vs_lblcr
ip_vs_dh
ip_vs_sh
ip_vs_fo
ip_vs_nq
ip_vs_sed
ip_vs_ftp
ip_vs_sh
nf_conntrack
ip_tables
ip_set
xt_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip
EOF# 安裝依賴
dnf install ipvsadm ipset sysstat conntrack libseccomp -y

重啟服務

systemctl restart systemd-modules-load.service

查看模塊內容

lsmod | grep -e ip_vs -e nf_conntrack

句柄數最大

# 設置為最大
ulimit -SHn 65535cat >> /etc/security/limits.conf <<EOF
* soft nofile 655360
* hard nofile 131072
* soft nproc 655350
* hard nproc 655350
* seft memlock unlimited
* hard memlock unlimitedd
EOF# 查看修改結果
ulimit -a

系統優化

cat > /etc/sysctl.d/k8s_better.conf << EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
vm.swappiness=0
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
EOFmodprobe br_netfilter
lsmod |grep conntrack
modprobe ip_conntrack
sysctl -p /etc/sysctl.d/k8s_better.conf

安裝docker

# Step 1: 安裝依賴
yum install -y yum-utils device-mapper-persistent-data lvm2# Step 2: 添加軟件源信息
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/rhel/docker-ce.repo# Step 3: 安裝Docker-CE
yum -y install docker-ce# docker -v
Docker version 27.5.1, build 9f9e405# 設置國內鏡像加速
mkdir -p /etc/docker/ 
cat  >> /etc/docker/daemon.json << EOF
{"registry-mirrors":["https://p3kgr6db.mirror.aliyuncs.com","https://docker.m.daocloud.io","https://your_id.mirror.aliyuncs.com","https://docker.nju.edu.cn/","https://docker.anyhub.us.kg","https://dockerhub.jobcher.com","https://dockerhub.icu","https://docker.ckyl.me","https://cr.console.aliyun.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF# 設置docker開機啟動并啟動
systemctl enable --now docker# 查看docker版本
docker version

安裝cri-dockerd

下載地址:Releases · Mirantis/cri-dockerd (github.com)。

https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.16/cri-dockerd-0.3.16-3.fc35.x86_64.rpm

安裝cri-docker
# 下載rpm包
wget -c https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.16/cri-dockerd-0.3.16-3.fc35.x86_64.rpm
wget -c https://rpmfind.net/linux/almalinux/8.10/BaseOS/x86_64/os/Packages/libcgroup-0.41-19.el8.x86_64.rpm# 安裝rpm包
yum install libcgroup-0.41-19.el8.x86_64.rpm
yum install cri-dockerd-0.3.16-3.fc35.x86_64.rpm
設置cri-docker服務開機自啟
systemctl enable cri-docker
cri-docke設置國內鏡像加速

# 編輯service文件
vim /usr/lib/systemd/system/cri-docker.service文件
修改第10行內容
------------------
ExecStart=/usr/bin/cri-dockerd  --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9  --container-runtime-endpoint  fd://
-----------------------------------# 重啟Docker組件
systemctl daemon-reload && systemctl restart docker cri-docker.socket cri-docker # 檢查Docker組件狀態
systemctl status docker cir-docker.socket cri-docker

K8S軟件安裝

# 1、配置kubernetes源
cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.32/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.32/rpm/repodata/repomd.xml.key
EOF# 2、查看所有可用的版本
yum list kubelet --showduplicates | sort -r |grep 1.32# 3、安裝kubelet、kubeadm、kubectl、kubernetes-cni
yum install -y kubelet kubeadm kubectl kubernetes-cni# 4、配置cgroup
為了實現docker使用的cgroupdriver與kubelet使用的cgroup的一致性,建議修改如下文件內容。
vim /etc/sysconfig/kubelet  [3臺全部設置下]
---------------------
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
---------------------# 5、設置kubelet為開機自啟動即可,由于沒有生成配置文件,集群初始化后自動啟動
systemctl enable kubelet

K8S集群初始化

# 只在k8s-master節點上操作
[root@localhost ~]#  kubeadm config print init-defaults > kubeadm-init.yaml# 編輯kubeadm-init.yaml修改如下配置:
- advertiseAddress:為控制平面地址,(Master主機IP)advertiseAddress: 1.2.3.4
修改為 advertiseAddress: 172.16.1.30- criSocket:為 containerd 的socket 文件地址criSocket: unix:///var/run/containerd/containerd.sock
修改為 criSocket: unix:///var/run/cri-dockerd.sock- name: node 修改node為k8s-mastername: node
修改為 name: k8s-master- imageRepository:阿里云鏡像代理地址,否則拉取鏡像會失敗imageRepository: registry.k8s.io
修改為:imageRepository: registry.aliyuncs.com/google_containers- kubernetesVersion:為k8s版本kubernetesVersion: 1.32.0
修改為:kubernetesVersion: 1.32.6# 文件末尾增加啟用ipvs功能
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs# 根據配置文件啟動kubeadm初始化k8s
$ kubeadm init --config=kubeadm-init.yaml --upload-certs --v=6
輸出結果:
Your Kubernetes control-plane has initialized successfully!To start using your cluster, you need to run the following as a regular user:mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configAlternatively, if you are the root user, you can run:export KUBECONFIG=/etc/kubernetes/admin.confYou should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:https://kubernetes.io/docs/concepts/cluster-administration/addons/Then you can join any number of worker nodes by running the following on each as root:kubeadm join 172.16.1.30:6443 --token abcdef.0123456789abcdef \--discovery-token-ca-cert-hash sha256:9d25c16abfec6ff6832ed2260c6c998d3fa6fedef61529d88520d3038bdbdde5

K8S集群工作節點加入

# 注意:加入集群時需要添加 --cri-socket unix:///var/run/cri-dockerd.sock
kubeadm join 172.16.1.30:6443 --token abcdef.0123456789abcdef \--discovery-token-ca-cert-hash sha256:9d25c16abfec6ff6832ed2260c6c998d3fa6fedef61529d88520d3038bdbdde5 \--cri-socket unix:///var/run/cri-dockerd.sock

K8S集群網絡插件使用

# 下載calico資源清單
wget  --no-check-certificate   https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/calico.yaml# 修改calico文件
vim calico.yaml
- name: CALICO_IPV4POOL_CIDRvalue: "10.244.0.0/16"# 可以將鏡像提前拉取下來,如果官網倉庫不可達,可以嘗試手動從quay.io下載鏡像,quay.io是一個公共鏡像倉庫。
docker pull calico/cni:v3.28.0
docker pull calico/node:v3.28.0
docker pull calico/kube-controllers:v3.28.0# 應用calico資源清單
kubectl apply -f calico.yaml

Kubectl命令自動補全

yum -y install bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc

安裝helm v3.16.3

wget https://get.helm.sh/helm-v3.16.3-linux-amd64.tar.gz
tar xf helm-v3.16.3-linux-amd64.tar.gz
cd linux-amd64/
mv helm /usr/local/bin
helm version

部署動態sc存儲

# k8s-master節點上執行
yum -y install nfs-utils
echo "/nfs/data/ *(insecure,rw,sync,no_root_squash)" > /etc/exports
mkdir -p /nfs/data/
chmod 777 -R /nfs/data/
systemctl enable rpcbind
systemctl enable nfs-server
systemctl start rpcbind
systemctl start nfs-server
exportfs  -v

創建nfs-provisioner

apiVersion: v1
kind: ServiceAccount
metadata:name: nfs-client-provisioner  # sa名字,nfs-provisioner-deploy里的要對應namespace: kube-system  # 命名空間
---
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: ServiceAccount   # 類型為saname: nfs-client-provisioner   # sa的名字一致namespace: kube-system  # 和nfs provisioner安裝的namespace一致
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-provisionernamespace: kube-system # 和nfs provisioner安裝的namespace一致
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-provisionernamespace: kube-system  # 和nfs provisioner安裝的namespace一致
subjects:- kind: ServiceAccount  # 類型為saname: nfs-client-provisioner  # sa的名字一致namespace: kube-system # 和nfs provisioner安裝的namespace一致
roleRef:kind: Rolename: leader-locking-nfs-client-provisionerapiGroup: rbac.authorization.k8s.io
---
apiVersion: apps/v1
kind: Deployment
metadata:name: nfs-client-provisionerlabels:app: nfs-client-provisionernamespace: kube-system  # 部署在指定ns下
spec:replicas: 1   # 副本數,建議為奇數[1,3,5,7,9]strategy:type: Recreate   # 使用重建的升級策略selector:matchLabels:app: nfs-client-provisionertemplate:metadata:labels:app: nfs-client-provisionerspec:serviceAccountName: nfs-client-provisioner  # sa名字,這個是在nfs-rbac.yaml里定義containers:- name: nfs-client-provisioner  # 容器名字image: k8s.m.daocloud.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2  # 鏡像地址,這里采用私有倉庫。volumeMounts:- name: nfs-client-rootmountPath: /persistentvolumes  # 指定容器內掛載的目錄env:- name: PROVISIONER_NAME  # 容器內的變量用于指定提供存儲的名稱value: nfsnas     # nfs-provisioner的名稱,以后設置的storage class要和這個保持一致- name: NFS_SERVER      # 容器內的變量指定nfs服務器對應的目錄value: 172.16.1.254  # NFS服務器的地址- name: NFS_PATH           # 容器內的變量指定nfs服務器對應的目錄value: /volume1/服務/K8s-NFS   # NFS服務的掛載目錄,如果采用這個nfs動態申請PV,所創建的文件在這個目錄里,一定要給權限,直接777。volumes:- name: nfs-client-root  # 賦值卷名字nfs:server: 172.16.1.254  # NFS服務器的地址path: /volume1/服務/K8s-NFS   # NFS服務的掛載目錄,一定要給權限,直接777,不服就是干
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: nfsnasannotations:storageclass.kubernetes.io/is-default-class: "true"  # 設為默認存儲類
provisioner: nfsnas  # 必須與 Deployment 中 PROVISIONER_NAME 一致
parameters:archiveOnDelete: "false"   # "true" 表示刪除 PVC 時歸檔數據(重命名目錄)

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

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

相關文章

第十六屆藍橋杯大賽青少組 C++ 省賽真題解析(2025年8月10日)

第一題 題目:運行以下程序,輸出的結果是()。 #include<bits/stdc++.h> using namespace std; int func(int y) { y -= 5; cout << "x"; return 0; } int main() { int x = 10, y = 5; if (x > y || func(y)) cout &…

PID 控制算法 | stm32 直流電機控制

注&#xff1a;本文為 “PID 算法 | stm32 直流電機控制” 相關合輯。 圖片清晰度受引文原圖所限。 略作重排&#xff0c;未全校去重。 如有內容異常&#xff0c;請看原文。 STM32—PID 控制在直流電機中的應用 Aspirant-GQ 于 2020-04-28 23:23:39 發布 一、PID 控制算法 1…

高效的Python課表生成器

在日常的學校管理中,排課表是一項繁瑣而又必須完成的工作。特別是對于那些沒有自動化排課系統的學校來說,手動安排學生的課程不僅耗時,而且容易出錯。最近,我接到了一項任務,需要為學校的學生安排非選修課的課程表。以下是我使用Python編寫的解決方案,并結合了一些實際的…

深度學習-卷積神經網絡-NIN

網絡結構是卷積神經網絡&#xff08;CNN&#xff09;發展的關鍵。其中&#xff0c;網絡結構的改進至關重要。本文將介紹一種具有創新意義的卷積神經網絡——NIN&#xff08;Network in Network&#xff09;。LeNet、AlexNet和VGG都有一個共同的設計模式&#xff1a;通過一系列的…

Java-96 深入淺出 MySQL 索引與排序機制詳解與優化實踐 Filesort

點一下關注吧&#xff01;&#xff01;&#xff01;非常感謝&#xff01;&#xff01;持續更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持續更新中&#xff01;&#xff08;長期更新&#xff09; AI煉丹日志-31- 千呼萬喚始出來 GPT-5 發布&#xff01;“快的…

MLAG雙活網絡妙招:BGP + 靜態VRRP實現智能負載均衡

引言 在現代數據中心和企業網絡架構中&#xff0c;高可用性和負載均衡是核心需求。MLAG&#xff08;Multi-Chassis Link Aggregation&#xff09;技術結合BGP和靜態VRRP的解決方案&#xff0c;為網絡工程師提供了一種高效實現雙活網絡負載均衡的妙招。本文將深入探討這一技術組…

如何構建PHP表單頁面及驗證相關原理(PHP基礎)

文章目錄PHP表單 - 必需字段PHP - 必需字段PHP - 顯示錯誤信息總結PHP表單 - 驗證郵件和URLPHP - 驗證名稱PHP - 驗證郵件驗證URLPHP 完整表單實例 PHP表單 - 必需字段 該章內容將介紹如何設置表單必需字段及錯誤信息 PHP - 必需字段 我們首先給出一個表的驗證規則&#xff0c;…

API如何集成Web搜索功能:原理、實踐與最佳選型

API如何集成Web搜索功能&#xff1a;原理、實踐與最佳選型 在現代智能應用開發中&#xff0c;模型生成結果往往需要融合最新的互聯網信息。通過集成Web搜索工具&#xff0c;模型可以在生成響應前主動檢索網絡&#xff0c;獲取實時數據。這一能力極大提升了智能系統的準確性和時…

Spring Boot項目中調用第三方接口

目錄 步驟1: 添加依賴 步驟2: 配置HTTP客戶端 配置RestTemplate 配置WebClient 步驟3: 在Service層調用接口 使用RestTemplate示例 使用WebClient示例 步驟4: 在Controller層調用Service 注意事項 總結 Spring Boot項目中調用第三方接口 在Spring Boot項目中調用第三…

關系型數據庫:原理、演進與生態全景——從理論基石到云原生的深度巡禮

目錄 一、引言&#xff1a;當“表”成為世界的通用語言 二、理論基石&#xff1a;關系模型與 ACID 三、引擎架構&#xff1a;一條 SQL 的奇幻漂流 四、存儲機制&#xff1a;頁、緩沖池與 WAL 五、并發控制&#xff1a;鎖、MVCC 與隔離級別 六、SQL&#xff1a;聲明式語言…

【軟考架構】計算機網絡中的IP地址表示和子網劃分

在計算機網絡中&#xff0c;IP地址用于唯一標識網絡中的設備。IP地址的表示方式有兩種&#xff1a;IPv4和IPv6。IPv4是當前使用最廣泛的地址格式&#xff0c;而IPv6是為了解決IPv4地址耗盡問題而設計的。 1. IPv4地址 IPv4地址是一個32位的數字&#xff0c;通常用四個十進制數表…

【后端】Spring @Resource和@Autowired的用法和區別

以下是關于 Resource 和 Autowired 兩個依賴注入注解的詳細對比說明&#xff0c;重點關注它們的區別和使用場景&#xff1a;&#x1f4cc; 核心區別總結特性Autowired (Spring)Resource (JSR-250 標準)來源Spring 框架原生注解Java 標準 (javax.annotation)默認注入方式按類型 …

php+apache+nginx 更換域名

phpapachenginx 更換域名? 第 1 步&#xff1a;確認到底是誰在監聽 80/443? 第 2 步&#xff1a;按監聽者修改配置&#x1f539; 場景 A&#xff1a;Apache 直接監聽 80/443&#x1f539; 場景 B&#xff1a;Nginx 監聽 80/443&#xff0c;反向代理到 Apache? 第 3 步&#…

AI 視頻衛士:AI 無人機巡檢,適配多元河道場景的治理利器

河道治理&#xff0c;場景各異&#xff0c;難題不同。城市內河的生活垃圾、景區河道的景觀破壞、工業園區河道的工業廢料&#xff0c;每一種場景都對巡檢工作有著獨特的要求。AI 視頻衛士&#xff0c;憑借強大的 AI 技術&#xff0c;針對不同河道應用場景&#xff0c;打造專屬巡…

累加和校驗原理與FPGA實現

累加和校驗原理與FPGA實現寫在前面一、基礎原理二、舉個例子2.1 進位累加2.2 回卷累加三、FPGA實現3.1 發送端&#xff08;產生校驗和&#xff09;3.2 接收端&#xff08;累加和校驗&#xff09;3.3 仿真結果寫在后面寫在前面 在上文《奇偶校驗原理與FPGA實現》中&#xff0c;講…

深入解析Go設計模式:命令模式實戰

什么是命令模式? 命令模式(Command Pattern)是一種行為型設計模式,它將請求封裝為獨立對象,從而允許客戶端通過不同的請求對象進行參數化配置。該模式支持請求的排隊執行、操作記錄以及撤銷等功能。 命令模式UML類圖如下所示: 命令模式包含五個核心角色,具體說明如下: …

Pytest項目_day11(fixture、conftest)

Fixture fixture是一種類似于setup、teardown&#xff0c;用于測試前后進行預備、清理工作的代碼處理機制 相比于setup、teardown來說&#xff0c;fixture命名更靈活&#xff0c;局限性更少使用conftest.py配置里面可以實現數據共享&#xff0c;不需要import就能自動找到一些配…

DAY 43 復習日

作業&#xff1a; kaggle找到一個圖像數據集&#xff0c;用cnn網絡進行訓練并且用grad-cam做可視化 劃分數據集 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader impo…

Flink運行時的實現細節

一、Flink集群中各角色運行架構先說Flink集群中的角色吧&#xff0c;有三個分別是客戶端(Client)、JobManager、TaskManager。客戶端負責接收作業任務并進行解析&#xff0c;將解析后的二進制數據發送給JobManager&#xff1b;JobManager是作業調度中心&#xff0c;負責對所有作…

思科、華為、華三如何切換三層端口?

三層交換機融合了二層交換技術與三層轉發技術&#xff0c;具備強大的網絡功能。主流廠商&#xff08;思科、H3C、華為&#xff09;的三層交換機均支持二層端口與三層端口的相互切換&#xff0c;但具體命令存在差異。本文將詳細介紹三大廠商設備的端口切換方法及相關知識。一、各…