Kubernetes高級調度01

目錄

第一章:初始化容器(InitContainer)—— 應用啟動前的 “準備軍”

1.1 InitContainer 的基本概念與核心特性

1.2 InitContainer 與普通容器的關鍵區別

1.3 InitContainer 的實戰場景與示例解析

1.3.1 示例 1:延遲啟動 —— 控制應用啟動時機

1.3.2 示例 2:權限操作 —— 修改內核參數

1.3.3 示例 3:依賴管理 —— 等待關聯服務就緒

1.4 InitContainer 的設計優勢與生產實踐建議

第二章:Pause 容器 ——Pod 網絡的 “基石”

2.1 Pause 容器的核心作用

2.2 Pause 容器的實現原理與優勢

2.3 實戰驗證:如何觀察 Pod 中的 Pause 容器

第三章:臨時容器(Ephemeral Containers)—— 在線調試的 “急救包”

3.1 臨時容器的設計初衷與核心特性

3.2 臨時容器與普通容器的差異

3.3 實戰案例:使用臨時容器調試 Tomcat 應用

3.4 臨時容器的適用場景與局限性

第四章:自動擴縮容(HPA)—— 應對流量波動的 “智能調節器”

4.1 HPA 的基本概念與工作原理

4.2 HPA 的核心工作流程

4.3 實戰案例:基于 CPU 利用率的 Nginx 自動擴縮容

4.4 HPA 的應用場景與資源優化價值

總結:Kubernetes 高級調度特性的協同價值


第一章:初始化容器(InitContainer)—— 應用啟動前的 “準備軍”

在應用部署過程中,我們常面臨這樣的場景:應用啟動前需要等待數據庫就緒、修改系統配置或下載配置文件,但這些操作若嵌入業務鏡像,會導致鏡像體積膨脹、權限失控等問題。Kubernetes 的 InitContainer 正是為解決這類問題而生。

1.1 InitContainer 的基本概念與核心特性

InitContainer 是一種特殊容器,在 Pod 內應用容器啟動前運行,主要用于執行初始化任務。它可以包含業務鏡像中不存在的工具(如curlsysctl),完成一次性操作后退出,為應用容器的啟動掃清障礙。

其核心特性包括:

  • 順序執行:多個 InitContainer 按定義順序依次運行,前一個完成后才啟動下一個;
  • 必達性:若 InitContainer 失敗,Kubernetes 會重啟 Pod(除非restartPolicy設為Never);
  • 生命周期獨立:與應用容器共享存儲和網絡命名空間,但擁有獨立的鏡像和啟動邏輯;
  • 權限靈活性:可以 root 身份運行,執行高權限操作(如修改內核參數),且操作完成后即退出,不影響業務容器安全性。

1.2 InitContainer 與普通容器的關鍵區別

雖然 InitContainer 與普通容器在配置格式上相似,但在設計目標和功能上存在本質差異:

特性InitContainer普通容器
啟動時機應用容器啟動前所有 InitContainer 完成后啟動
運行目標完成初始化任務后退出持續運行業務邏輯
重啟策略失敗后重啟(受restartPolicy影響)restartPolicy和健康檢查決定
支持的字段lifecycle、健康檢查等字段支持lifecycle、健康檢查等
資源處理資源請求會影響調度,但執行時優先占用資源按配置的資源限制運行

例如,InitContainer 不支持livenessProbe(存活探針),因為它必須在 Pod 就緒前完成任務;而普通容器依賴健康檢查確保業務持續可用。

1.3 InitContainer 的實戰場景與示例解析

1.3.1 示例 1:延遲啟動 —— 控制應用啟動時機

在分布式系統中,部分應用需要等待依賴服務初始化完成后再啟動(如前端服務等待后端 API 就緒)。此時可通過 InitContainer 的sleep命令實現延遲。

YAML 配置(init01.yaml)

yaml

apiVersion: v1
kind: Pod
metadata:name: initc01labels:run: initc01
spec:terminationGracePeriodSeconds: 0containers:- name: n1image: nginx:1.7.9imagePullPolicy: IfNotPresentinitContainers:- name: initc01image: nginx:1.7.9command: ["sh", "-c", "sleep 15"]  # 延遲15秒dnsPolicy: ClusterFirstrestartPolicy: Never

執行與驗證

  1. 創建 Pod:kubectl create -f init01.yaml
  2. 觀察狀態:連續執行kubectl get pod,前 15 秒 Pod 狀態為Init:0/1(初始化中),15 秒后變為Running

原理:InitContainer 執行sleep 15后退出,Kubernetes 才啟動應用容器(Nginx),確保應用在延遲后啟動。

1.3.2 示例 2:權限操作 —— 修改內核參數

容器默認運行在非特權模式,無法修改內核參數(如vm.swappiness)。但 InitContainer 可通過securityContext獲取特權,完成系統級配置。

YAML 配置(init02.yaml)

yaml

apiVersion: v1
kind: Pod
metadata:name: initc02labels:run: initc02
spec:containers:- name: n1image: nginx:1.7.9initContainers:- name: initc02image: alpinecommand: ["sh", "-c", "/sbin/sysctl -w vm.swappiness=0"]  # 禁用swapsecurityContext:privileged: true  # 開啟特權模式restartPolicy: Never

執行與驗證

  1. 應用配置:kubectl apply -f init02.yaml
  2. 查看節點內核參數:登錄 Pod 所在節點(如k8s-node01),執行cat /proc/sys/vm/swappiness,結果為0,證明修改生效。

注意privileged: true會賦予容器主機級權限,生產環境需謹慎使用,僅在必要時為 InitContainer 配置。

1.3.3 示例 3:依賴管理 —— 等待關聯服務就緒

后端應用常依賴數據庫、緩存等服務,需確保依賴服務可用后再啟動。可通過 InitContainer 的nslookup檢測服務 DNS 是否就緒。

步驟 1:創建依賴服務檢測的應用 Pod(myapp.yaml)

yaml

apiVersion: v1
kind: Pod
metadata:name: nginx
spec:containers:- name: nginximage: nginx:1.7.9ports:- containerPort: 86initContainers:- name: init-redisimage: busybox:1.28command: ['sh', '-c', 'until nslookup redis-service; do echo waiting for redis; sleep 2; done;']- name: init-mysqlimage: busybox:1.28command: ['sh', '-c', 'until nslookup mysql-server; do echo waiting for mysql; sleep 2; done;']

步驟 2:創建 Redis 服務

yaml

# redis-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: redis
spec:replicas: 1selector:matchLabels:app: redistemplate:metadata:labels:app: redisspec:containers:- name: redisimage: redis:5.0
---
apiVersion: v1
kind: Service
metadata:name: redis-service
spec:ports:- port: 6379targetPort: 6379selector:app: redistype: NodePort

步驟 3:創建 MySQL 服務

yaml

# mysql-deployment.yaml(精簡版)
apiVersion: apps/v1
kind: Deployment
metadata:name: mysql
spec:replicas: 1selector:matchLabels:app: mysqltemplate:metadata:labels:app: mysqlspec:containers:- name: mysqlimage: mysql:8.0env:- name: MYSQL_ROOT_PASSWORDvalue: 'moonfdd'
---
apiVersion: v1
kind: Service
metadata:name: mysql-service
spec:ports:- port: 3306targetPort: 3306selector:app: mysqltype: NodePort

執行與驗證

  1. 創建應用 Pod:kubectl create -f myapp.yaml,此時 Pod 狀態為Init:0/2(等待兩個 InitContainer 完成)。
  2. 依次創建 Redis 和 MySQL 服務:kubectl create -f redis-deployment.yamlkubectl create -f mysql-deployment.yaml
  3. 觀察應用 Pod 狀態:當兩個服務的 DNS 可解析后,InitContainer 退出,應用 Pod 狀態變為Running

原理until nslookup命令循環檢測服務 DNS,直到成功解析(服務就緒)才退出,確保應用容器啟動時依賴已可用。

1.4 InitContainer 的設計優勢與生產實踐建議

InitContainer 的核心價值在于 “分離關注點”:將初始化邏輯與業務邏輯解耦,帶來三大優勢:

  • 安全性:避免在業務鏡像中安裝curlsysctl等高危工具,降低攻擊面;
  • 輕量化:業務鏡像僅包含核心功能,減少體積和構建時間;
  • 靈活性:通過獨立鏡像管理初始化邏輯,無需修改業務代碼即可調整啟動流程。

生產實踐建議

  • 限制 InitContainer 的資源占用:設置resources.limits避免資源耗盡;
  • 避免長時間運行:初始化任務應在分鐘級內完成,防止 Pod 啟動超時;
  • 日志記錄:在 InitContainer 中輸出關鍵操作日志(如echo "修改swappiness完成"),便于問題排查;
  • 權限最小化:僅在必要時使用privileged: true,完成后立即釋放權限。

第二章:Pause 容器 ——Pod 網絡的 “基石”

在 Kubernetes 中,每個 Pod 都包含一個特殊的 “Pause 容器”,它并非用于暫停運行,而是作為 Pod 網絡命名空間的 “基石”。理解 Pause 容器是掌握 Kubernetes 網絡模型的關鍵。

2.1 Pause 容器的核心作用

Pause 容器是 Pod 中第一個啟動的容器,其核心功能是為 Pod 內所有容器提供共享的網絡命名空間,具體作用包括:

  • 網絡命名空間共享:Pod 內所有容器(包括 InitContainer、應用容器)共享 Pause 容器的 IP 地址和端口空間,可通過localhost直接通信;
  • 網絡接口管理:Pause 容器負責初始化 Pod 的網絡接口(如虛擬網卡),使 Pod 能訪問外部網絡;
  • 生命周期錨點:即使 Pod 內所有應用容器停止,Pause 容器仍保持運行,確保 Pod 的網絡配置不丟失,直到 Pod 被徹底刪除;
  • 穩定性保障:Pause 容器僅運行/pause命令(一個無限循環),無業務邏輯,幾乎不會崩潰,為 Pod 網絡提供穩定支撐。

2.2 Pause 容器的實現原理與優勢

Kubernetes 通過 “基礎設施容器(Infra Container)” 實現 Pod 網絡共享,而 Pause 容器正是 Infra 容器的具體實現。其工作原理如下:

  1. 當創建 Pod 時,Kubernetes 首先啟動 Pause 容器,初始化網絡命名空間;
  2. 后續所有容器通過 “Join Namespace” 機制加入 Pause 容器的網絡命名空間;
  3. 所有容器共享同一套網絡配置(IP、路由、防火墻規則等)。

優勢

  • 簡化網絡配置:無需為每個容器單獨配置網絡,降低管理復雜度;
  • 一致性保障:Pod 內容器網絡視圖完全一致,避免通信混亂;
  • 輕量高效:Pause 鏡像體積僅約 700KB,幾乎不占用資源。

2.3 實戰驗證:如何觀察 Pod 中的 Pause 容器

通過以下步驟可驗證 Pause 容器的存在及其作用:

  1. 查看 Pod 所在節點

    bash

    kubectl get pod nginx -o wide
    # 輸出示例:
    # NAME    READY   STATUS    IP           NODE        AGE
    # nginx   1/1     Running   10.244.85.286 k8s-node01  23m
    
  2. 登錄節點查看容器

    bash

    # 在節點k8s-node01上執行
    docker ps | grep nginx
    
  3. 輸出解析

    plaintext

    # 應用容器(Nginx)
    8feed68c83d1 ... "nginx -g 'daemon off;'" ... k8s_nginx_nginx_default_...
    # Pause容器
    9ee9ad88890b ... "/pause" ... k8s_POD_nginx_default_...
    
    ?

    可見,Pod 中存在兩個容器:應用容器(Nginx)和 Pause 容器(名稱以k8s_POD開頭)。

  4. 驗證網絡共享
    在應用容器中執行ip addr,其 IP 與 Pause 容器的 IP 完全一致,證明網絡命名空間共享。

第三章:臨時容器(Ephemeral Containers)—— 在線調試的 “急救包”

在生產環境中,為減少攻擊面,業務鏡像通常不包含curlnetstat等調試工具,導致容器故障時難以排查。Kubernetes 1.16 + 引入的 “臨時容器” 解決了這一痛點。

3.1 臨時容器的設計初衷與核心特性

臨時容器是一種臨時添加到 Pod 中的容器,專為在線調試設計,其核心特性包括:

  • 臨時性:手動添加到運行中的 Pod,Pod 重啟后自動消失,不影響 Pod 的原始定義;
  • 調試導向:可使用包含完整工具集的鏡像(如busyboxdebian),快速獲取psnetstat等工具;
  • 無狀態影響:不包含portslivenessProbe等字段,其狀態不影響 Pod 的就緒性;
  • 創建方式特殊:通過kubectl debug命令創建,而非直接修改pod.spec,無法通過kubectl edit添加。

3.2 臨時容器與普通容器的差異

特性臨時容器普通容器
生命周期臨時存在,Pod 重啟后消失隨 Pod 定義長期存在
配置字段ports、健康檢查、資源限制等字段支持完整字段
創建方式kubectl debug命令定義在pod.spec.containers
作用在線調試運行業務邏輯
重啟策略從不重啟restartPolicy配置

3.3 實戰案例:使用臨時容器調試 Tomcat 應用

假設我們部署了一個 Tomcat 應用,但容器內無ps命令,無法查看進程狀態,此時可通過臨時容器調試。

步驟 1:創建 Tomcat Pod

yaml

# pod-tomcat.yaml
apiVersion: v1
kind: Pod
metadata:name: tomcat-test
spec:containers:- name: tomcat-javaimage: kubeguide/tomcat-app:v1ports:- containerPort: 8080

執行:kubectl apply -f pod-tomcat.yaml

步驟 2:添加臨時容器
使用kubectl debug命令添加一個包含ps工具的busybox容器:

bash

kubectl debug -it tomcat-test --image=busybox:1.28 --target=tomcat-java

  • -it:開啟交互模式;
  • --target=tomcat-java:指定臨時容器加入目標容器的進程命名空間,可查看其進程。

步驟 3:調試操作
在臨時容器的交互終端中執行:

bash

ps -ef | grep tomcat  # 查看Tomcat進程
netstat -tlnp         # 查看端口占用(需busybox支持)

輸出示例:

plaintext

1 root ... org.apache.catalina.startup.Bootstrap start  # Tomcat主進程
41 root ... grep tomcat

步驟 4:驗證臨時容器狀態

bash

kubectl describe pod tomcat-test

在輸出的 “Ephemeral Containers” 部分可看到添加的臨時容器信息,包括鏡像、啟動時間等。

3.4 臨時容器的適用場景與局限性

適用場景

  • 無工具鏡像調試:當業務鏡像基于distroless(無 shell)構建時,臨時容器是唯一調試途徑;
  • 緊急故障排查:無需重啟 Pod 即可添加調試工具,避免影響服務;
  • 進程級診斷:通過--target參數進入目標容器的進程空間,查看線程、文件句柄等細節。

局限性

  • 權限限制:若 Pod 啟用了PodSecurityPolicySeccomp,可能限制臨時容器的權限;
  • 集群版本要求:需 Kubernetes 1.16+,且 API 服務器啟用EphemeralContainers特性;
  • 狀態不持久:Pod 重啟后臨時容器消失,需重新添加。

第四章:自動擴縮容(HPA)—— 應對流量波動的 “智能調節器”

在流量波動頻繁的業務場景中,手動調整 Pod 副本數既低效又容易出錯。Kubernetes 的 HPA(Horizontal Pod Autoscaler)可根據指標自動擴縮容,平衡服務質量與資源成本。

4.1 HPA 的基本概念與工作原理

HPA 通過監控 Pod 的 CPU、內存使用率或自定義指標(如請求數、隊列長度),自動調整副本數,其核心特性包括:

  • 水平擴縮容:僅調整 Pod 副本數,不改變單個 Pod 的資源配置(與垂直擴縮容 VPA 區分);
  • 指標驅動:基于 Metrics Server 采集的實時指標決策;
  • 邊界控制:可設置最小(minReplicas)和最大(maxReplicas)副本數,避免資源浪費或過載;
  • 適用對象:支持 Deployment、ReplicaSet、StatefulSet 等,不支持 DaemonSet(每個節點僅一個 Pod)。

工作原理

  1. Metrics Server 定期采集 Pod 的指標數據(如 CPU 使用率);
  2. HPA 控制器對比當前指標與目標值(如 CPU 使用率 80%);
  3. 若當前指標高于目標值,增加副本數;反之則減少(在minReplicasmaxReplicas之間);
  4. 調整頻率默認每 15 秒一次,可通過--horizontal-pod-autoscaler-sync-period修改。

4.2 HPA 的核心工作流程

HPA 的完整工作流程可分為四步:

  1. 配置 HPA:通過kubectl autoscale命令或 YAML 文件定義擴縮容規則,例如:

    bash

    kubectl autoscale deployment nginx-server --cpu-percent=10 --min=1 --max=10
    
    ?

    表示當平均 CPU 使用率超過 10% 時擴容,副本數在 1-10 之間調整。

  2. 指標采集:Metrics Server 從 Kubelet 獲取 Pod 的 CPU、內存使用數據,并通過 API 提供給 HPA 控制器。

  3. 伸縮決策:HPA 控制器計算當前指標平均值,與目標值對比:

    • 若當前 CPU 使用率 = 50%,目標值 = 10%,則需要擴容(50% / 10% = 5 倍,副本數乘以 5);
    • 若當前 CPU 使用率 = 5%,則縮容(5% / 10% = 0.5 倍,副本數乘以 0.5)。
      (注:實際計算會包含平滑因子,避免頻繁波動)
  4. 執行擴縮容:HPA 控制器更新 Deployment 的replicas字段,Kubernetes 根據新值創建或刪除 Pod。

4.3 實戰案例:基于 CPU 利用率的 Nginx 自動擴縮容

步驟 1:部署帶資源請求的 Nginx Deployment
HPA 依賴 Pod 的resources.requests作為指標計算基準,需提前配置:

yaml

# nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-server
spec:replicas: 2selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.7.9ports:- containerPort: 80resources:requests:cpu: 10m  # 基準CPU請求(1/100核心)

執行:kubectl create -f nginx-deployment.yaml

步驟 2:創建 Service 暴露服務

bash

kubectl expose deployment nginx-server --port=80

步驟 3:創建 HPA

bash

kubectl autoscale deployment nginx-server --cpu-percent=10 --min=1 --max=10

參數說明:

  • --cpu-percent=10:目標 CPU 使用率為 10%(基于requests.cpu);
  • --min=1:最小副本數 1;
  • --max=10:最大副本數 10。

步驟 4:觀察初始狀態

bash

kubectl get hpa
# 輸出示例(未加負載時):
# NAME           REFERENCE                 TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
# nginx-server   Deployment/nginx-server   0%/10%    1         10        2          3m

步驟 5:模擬流量壓力
在新終端執行無限循環請求,增加 CPU 負載:

bash

while true; do wget -q -O- http://<nginx-service-ip> > /dev/null; done

<nginx-service-ip>可通過kubectl get svc nginx-server獲取)

步驟 6:觀察擴容過程
1 分鐘后再次查看 HPA:

bash

kubectl get hpa
# 輸出示例(負載升高后):
# NAME           REFERENCE                 TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
# nginx-server   Deployment/nginx-server   55%/10%   1         10        10         5m

此時副本數已擴容至 10(達到maxReplicas)。

步驟 7:停止壓力測試并觀察縮容
Ctrl+C終止循環請求,1-2 分鐘后查看:

bash

kubectl get hpa
# 輸出示例(負載降低后):
# NAME           REFERENCE                 TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
# nginx-server   Deployment/nginx-server   0%/10%    1         10        1          10m

副本數縮容至 1(達到minReplicas)。

4.4 HPA 的應用場景與資源優化價值

典型應用場景

  • 電商促銷:應對秒殺、大促期間的流量峰值;
  • API 服務:根據請求 QPS 自動調整副本數;
  • 批處理任務:根據隊列長度擴容計算節點。

資源優化價值

  • 降本增效:流量低谷時減少副本數,避免資源閑置;
  • 高可用保障:流量高峰時自動擴容,防止服務過載;
  • 運維減負:無需人工干預,24 小時響應流量變化。

進階配置建議

  • 結合自定義指標:使用 Prometheus Adapter 擴展 HPA,支持基于requests_per_second等業務指標擴縮容;
  • 調整擴縮容策略:通過behavior字段配置擴容 / 縮容速度(如scaleUp.stabilizationWindowSeconds避免頻繁擴容);
  • 監控 HPA 狀態:通過 Grafana 等工具監控 HPA 決策過程,優化目標指標閾值。

總結:Kubernetes 高級調度特性的協同價值

Kubernetes 的高級調度特性并非孤立存在,而是相互協同構建穩定、高效的應用運行環境:

  • InitContainer確保應用啟動前的依賴就緒、配置正確,是 “前置保障”;
  • Pause 容器為 Pod 網絡提供底層支撐,是 “通信基石”;
  • Ephemeral Containers解決在線調試難題,是 “故障診斷工具”;
  • HPA動態調整資源分配,是 “彈性伸縮引擎”。

這些特性共同實現了 “啟動可靠、運行穩定、調試便捷、資源可控” 的云原生應用目標。在實際生產中,需根據業務場景靈活組合使用 —— 例如,為依賴數據庫的微服務配置 InitContainer 等待初始化,通過 HPA 應對流量波動,同時用臨時容器快速排查偶發故障。

隨著 Kubernetes 的持續發展,高級調度特性將更加智能(如結合 AI 預測流量)、更加安全(如細粒度權限控制)。掌握這些特性,是構建下一代云原生應用的必備技能。

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

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

相關文章

LSV負載均衡

什么是訪問壓力&#xff1f;--負載 兩個客戶同時訪問一個服務器&#xff0c;會導致服務器崩潰調度---Cluster集群&#xff08;為了解決一個特定問題&#xff0c;多臺服務器組合使用形成的一個系統&#xff09;LSV 1、集群Cluster LB&#xff1a;負載均衡&#xff0c;有多個主機…

復習筆記 38

緒論 其實沒有一種安穩快樂&#xff0c;永遠也不差 專題 2 知識點 繼續學數學強化吧&#xff1f;可以。還有概率論要學。還有高數后半部分的數一專項要學。還有政治要學。要學的內容確實還是挺多的啊。加油。下載了一個閱讀的軟件&#xff0c;可以做一做真題的閱讀理解。政治英…

GaussDB like 的用法

1 like 作用在 where 子句中使用 like 運算符來搜索列中的指定模式。 有兩個通配符與 like 運算符一起使用&#xff1a;&#xff05; - 百分號表示零個&#xff0c;一個或多個字符 _ - 下劃線表示單個字符注&#xff1a;也同時支持正則表達式。2 like 語法select column1, colu…

單例模式:確保全局唯一實例

單例模式確保一個類只有一個實例&#xff0c;并提供全局訪問點。適用于需要全局唯一對象的場景&#xff08;如配置管理器、數據庫連接池&#xff09;。代碼示例&#xff1a;import java.util.stream.IntStream;public class ConfigManager {public static void main(String[] a…

深入理解 QSettings:Qt 中的應用程序配置管理

在開發 Qt 應用程序時&#xff0c;管理應用程序的配置信息是一個常見的需求。無論是保存用戶的偏好設置、窗口大小&#xff0c;還是應用程序的運行時配置&#xff0c;都需要一種高效且靈活的方式來存儲和檢索這些信息。Qt 提供了一個強大的工具——QSettings&#xff0c;它能夠…

基于SpringBoot+Vue的體育館預約管理系統(支付寶沙盒支付、騰訊地圖API、協同過濾算法、可視化配置、可視化預約)

“ &#x1f388;系統亮點&#xff1a;支付寶沙盒支付、騰訊地圖API、協同過濾算法、可視化配置、可視化預約”01系統開發工具與環境搭建—前后端分離架構 項目架構&#xff1a;B/S架構 運行環境&#xff1a;win10/win11、jdk17前端&#xff1a; 技術&#xff1a;框架Vue.js&am…

<script>標簽對HTML文件解析過程的影響以及async和defer屬性的應用

在前端開發中&#xff0c;<script> 標簽的 async 和 defer 屬性會顯著影響 JavaScript 腳本的加載和執行時機。下面結合示例代碼&#xff0c;詳細解析它們之間的區別&#xff1a; 1. 默認情況&#xff08;無 async/defer&#xff09; <script src"script.js"…

Vue.js:從 Web 到桌面的跨端實踐與技術選型指南

一、Vue.js 的核心能力邊界 作為漸進式 JavaScript 框架,Vue.js 的核心價值在于構建現代 Web 用戶界面: ? 前端核心場景:單頁應用(SPA)、動態交互界面、可復用組件開發 ? 架構限制:無法直接改造 B/S(瀏覽器/服務器)為 C/S(客戶端/服務器)架構 關鍵差異:B/S 依賴瀏…

SSRF11 各種限制繞過之DNS rebinding 繞過內網 ip 限制

ssrf漏洞在廠商的處理下可能進行一些特殊處理導致我們無法直接利用漏洞 有以下四種&#xff1a; 1.ip地址限制繞過 2.域名限制繞過 3.30x跳轉繞過域名限制 4.DNS rebinding繞過內網ip限制 本章我們講DNS rebinding 繞過內網 ip 限制 DNS rebinding 繞過內網 ip 限制 假…

FreeRTOS之鏈表操作相關接口

FreeRTOS之鏈表操作相關接口1 FreeRTOS源碼下載地址2 任務控制塊TCB2.1 任務控制塊TCB2.1.1 任務控制塊的關鍵成員2.1.2 TCB 的核心作用2.2 ListItem_t2.3 List_t3 函數接口3.1 vListInitialise3.2 vListInitialiseItem1 FreeRTOS源碼下載地址 https://www.freertos.org/ 2 …

項目一第一天

目錄 總結MySQL&#xff1a; 最終還是得按照SQL的語法來實施。 1、MySQL的數據類型&#xff1a;指業務數據按照什么格式存儲在數據庫中的。 任何數據類型最常見的三種&#xff1a;字符串、整型和小數型。 如&#xff1a;寶貝計劃這種存在視頻的項目&#xff0c;你們的視頻是存放…

STM32第二十天 ESP8266-01S和電腦實現串口通信(3)

1&#xff1a;透傳透傳&#xff08;又稱透明傳輸&#xff09;是一種通信模式&#xff0c;其核心特點是&#xff1a;通信設備對傳輸的數據不做任何解析或處理&#xff0c;僅作為“管道”原封不動地轉發數據&#xff0c;仿佛數據“透明”地穿過設備。透傳的本質關鍵特征說明無協議…

微服務引擎 MSE 及云原生 API 網關 2025 年 3 月產品動態

點擊此處&#xff0c;了解微服務引擎 MSE 產品詳情。

在 Docker 上安裝和配置 Kafka、選擇用于部署 Kafka 的操作系統

消息代理是一種軟件&#xff0c;充當在不同應用程序之間發送消息的中介。它的功能類似于服務器&#xff0c;從一個應用程序&#xff08;稱為生產者&#xff09;接收消息&#xff0c;并將其路由到一個或多個其他應用程序&#xff08;稱為消費者&#xff09;。消息代理的主要目的…

2D下的幾何變換(C#實現,持續更新)

&#xff08;1&#xff09;已知2D下&#xff0c;新坐標系的原點、X軸方向向量、Y軸方向向量在原始坐標系下的表示&#xff0c;求原始坐標系中直線&#xff0c;在新坐標系下的直線方程&#xff1b;&#xff08;2&#xff09;求直線與2D包圍盒的交點&#xff0c;可能有0、1或2個交…

Pandas-特征工程詳解

Pandas-特征工程詳解一、特征工程的核心目標二、數據類型與基礎轉換1. 數值型特征&#xff1a;類型優化與異常處理2. 分類型特征&#xff1a;編碼與規范化&#xff08;1&#xff09;標簽編碼&#xff08;Label Encoding&#xff09;&#xff08;2&#xff09;獨熱編碼&#xff…

pip install torch各種版本的命令及地址

一、遇到的問題&#xff1a;cuda和torch編譯時的版本不一致 在安裝mmcv時遇到error MMCV_WITH_OPS1 python setup.py develo RuntimeError: The detected CUDA version (11.3) mismatches the version that was used to compile PyTorch (10.2). Please make sure to use th…

【spring boot】三種日志系統對比:ELK、Loki+Grafana、Docker API

文章目錄**方案 1&#xff1a;使用 ELK&#xff08;Elasticsearch Logstash Kibana&#xff09;****適用場景****搭建步驟****1. 修改 Spring Boot 日志輸出****2. 創建 Docker Compose 文件****3. 配置 Logstash****4. 啟動服務****方案 2&#xff1a;使用 Loki Grafana***…

Cesium加載3DTiles模型并且重新設置3DTiles模型的高度

代碼&#xff1a; 使用的時候&#xff0c;直接調用 load3DTiles() 方法既可。 // 加載3Dtiles const load3DTiles async () > {let tiles_url "/3DTiles2/Production_1.json";let tileset await Cesium.Cesium3DTileset.fromUrl(tiles_url, {enableCollision: …

Matlab批量轉換1km降水數據為tiff格式

1km降水數據處理- 制作數據裁剪掩膜 0 引言1 示例程序2 結語0 引言 本篇介紹用Matlab工具將中國1km分辨率逐月降水量數據集(1901-2024)批量轉為tiff格式的過程。下面為具體內容: 1 示例程序 下載得到的nc數據(如pre_2001.nc)包含4個字段,其中降水數據的第1個維度為1-12,…