從 “容器保姆” 到 “云原生王者”:K8s 全方位指南

目錄

開頭專業總結

一、先搞懂:K8s 到底是什么?能解決什么痛點?

1. K8s 的本質

2. 核心用處(解決的痛點)

二、K8s 核心知識點:組件與概念(標重點!)

(一)集群核心組件(K8s 的 “器官”)

(二)核心概念(K8s 的 “詞匯表”)

三、實際應用場景:K8s 到底用在哪?

四、簡單示例:用 K8s 部署一個 Nginx

1. 編寫 Deployment YAML(定義 Nginx 應用)

2. 編寫 Service YAML(給 Nginx 分配固定地址)

3. 執行命令部署并驗證

五、K8s 常用使用方法(從安裝到運維)

1. 集群安裝(以 kubeadm 為例,最常用的方式)

2. 日常運維常用命令

六、常見問題及解決方法(排障必備)

1. 問題:Pod 一直處于 Pending 狀態

2. 問題:Service 訪問不到 Pod

3. 問題:節點處于 NotReady 狀態

七、難點段子解讀:讓硬核概念變通俗

1. 難點:etcd 的 “一致性” 是什么意思?

2. 難點:Deployment 和 StatefulSet 的區別?

3. 難點:kube-proxy 的 “Service 轉發” 怎么實現?

結尾專業總結


開頭專業總結

Kubernetes(簡稱 K8s)是云原生時代的 “容器編排事實標準”,核心價值是解決大規模容器的部署、調度、運維自動化問題—— 它能讓零散的容器像 “軍隊” 一樣有序運行,避免人工管理的混亂與失誤。無論是微服務架構落地、跨環境應用一致性保障,還是高可用集群搭建,K8s 都是底層核心支撐,目前已成為企業級云原生部署的 “標配工具”。

一、先搞懂:K8s 到底是什么?能解決什么痛點?

1. K8s 的本質

K8s 是 Google 基于 Borg(內部容器編排系統)開源的容器編排平臺,簡單說就是 “容器的管家”:你把容器交給它,它負責 “安排住宿(調度到節點)、看病(健康檢查)、換班(滾動更新)、擴招(擴容)”,全程不用你手動干預。

2. 核心用處(解決的痛點)

  • 痛點 1:容器太多管不過來
    單機跑 10 個容器還行,跑 1000 個時,手動啟停、監控、故障恢復會累死 ——K8s 能自動化管理所有容器,故障時自動重啟,不用人盯。
  • 痛點 2:應用要高可用,不能單節點掛了就跪
    K8s 能把容器分散到多個節點(服務器),一個節點掛了,其他節點自動接管,應用不中斷。
  • 痛點 3:微服務部署復雜,服務間通信亂
    K8s 的 Service、Ingress 等組件能統一管理服務訪問,不管容器怎么動,外部訪問地址不變,解決 “服務漂移” 問題。
  • 痛點 4:環境不一致,開發測好生產崩
    K8s 用 YAML 定義應用配置,一次編寫可在開發、測試、生產環境復用,避免 “我這好的,到你那就崩了”。

二、K8s 核心知識點:組件與概念(標重點!)

(一)集群核心組件(K8s 的 “器官”)

1. 控制平面組件(Master 節點,集群 “大腦”)

  • APIServer:★★★★★ 唯一入口!所有操作(如部署應用、查 Pod 狀態)都通過它,像 “前臺接待”,接收請求后交給其他組件處理。
  • etcd:★★★★★ 集群 “數據庫”!存儲所有集群配置和狀態(如 Pod 在哪、Service 地址),是 K8s 的 “記憶中樞”,必須高可用(多節點備份)。
  • Scheduler:★★★★ 容器 “調度員”!根據節點資源(CPU、內存)、親和性規則等,給新創建的 Pod 分配 “住宿節點”(比如 “內存剩得多的節點優先”)。
  • Controller Manager:★★★★ 狀態 “監控官”!負責維護集群狀態,比如 Deployment 控制器確保 Pod 數量符合預期(少了就新建,多了就刪除)、Node 控制器監控節點健康。

2. 節點組件(Worker 節點,集群 “手腳”)

  • kubelet:★★★★★ 節點 “管家”!在每個 Worker 節點運行,確保容器按 Pod 定義的規則啟動并正常運行,還會向 APIServer 匯報節點狀態(比如 “我這 CPU 用了 80%”)。
  • kube-proxy:★★★★ 網絡 “路由器”!在每個節點運行,負責 Service 的網絡轉發(比如把外部請求轉發到對應的 Pod),實現 “服務 IP 不變,Pod 可漂移”。
  • 容器運行時(CRI):★★★★ 容器 “發動機”!比如 Docker、containerd,負責實際創建和運行容器(K8s 本身不跑容器,靠它干活)。

(二)核心概念(K8s 的 “詞匯表”)

  • Pod:★★★★★ 最小部署單元!K8s 不直接管理容器,而是把 1 個或多個 “緊密關聯” 的容器打包成 Pod(比如 “前端容器 + 日志收集容器”),Pod 里的容器共享網絡和存儲,像 “夫妻合租一間房,資源共用”。
  • Deployment:★★★★★ 無狀態應用 “部署模板”!最常用的控制器,負責創建 Pod、滾動更新(比如從 Nginx 1.20 更到 1.24,不中斷服務)、回滾(更新崩了就切回舊版本)。適合無狀態應用(如 Web 服務,不用保存數據)。
  • StatefulSet:★★★★ 有狀態應用 “專屬控制器”!適合需要固定身份、存儲的應用(如 MySQL、Redis 集群)—— 它給每個 Pod 分配固定名稱和存儲,即使 Pod 重建,身份和數據也不變(像 “學區房,房號固定,家具(數據)不丟”)。
  • Service:★★★★ 服務 “固定地址”!Pod 會漂移(比如重建后 IP 變了),Service 給一組 Pod 分配一個固定虛擬 IP(ClusterIP),外部訪問 Service 即可,不用管 Pod IP 怎么變。
  • ConfigMap/Secret:★★★★ 配置管理工具!
    • ConfigMap:存明文配置(如 Nginx 的 conf 文件、應用的環境變量),修改時不用改應用代碼,直接更 ConfigMap。
    • Secret:存敏感信息(如數據庫密碼、API 密鑰),會把明文加密存儲,比直接寫在 YAML 里安全。
  • Namespace:★★★ 資源 “隔離墻”!把集群分成多個 “虛擬空間”(如 dev、test、prod),避免不同環境的資源沖突(比如 dev 的 Nginx 和 prod 的 Nginx 不會重名)。
  • Ingress:★★★★ 外部訪問 “總入口”!Service 只能用 ClusterIP(集群內訪問)或 NodePort(節點端口,端口范圍有限),Ingress 可通過域名(如www.xxx.com)和路徑(如 /nginx)轉發請求到不同 Service,像 “小區大門保安,按訪客目的地分配樓棟”。

三、實際應用場景:K8s 到底用在哪?

  1. 微服務架構落地
    微服務拆分后有幾十上百個服務(如用戶服務、訂單服務、支付服務),K8s 用 Deployment 部署每個服務,Service 實現服務間通信,Ingress 管理外部訪問,輕松應對微服務的動態擴縮容。
    ? 例:電商平臺,大促時訂單服務壓力大,K8s 自動把訂單服務的 Pod 從 5 個擴到 20 個,大促后縮回 5 個,節省資源。

  2. 跨環境應用一致性
    開發、測試、生產環境用相同的 K8s YAML 配置,避免 “開發測好,生產崩了”—— 比如開發寫好 Nginx 的 Deployment YAML,測試環境用它部署,生產環境只改 ConfigMap 里的數據庫地址,保證應用行為一致。

  3. 高可用集群搭建
    K8s 控制平面多節點部署(比如 3 個 Master 節點),etcd 多節點備份,Worker 節點跨機房分布,即使某個機房斷電,其他節點能繼續運行,應用零中斷。

  4. CI/CD 流水線集成
    結合 Jenkins、GitLab CI 等工具,實現 “代碼提交→自動構建鏡像→K8s 自動部署” 的全流程自動化(比如程序員提交代碼后,不用手動傳鏡像到生產,K8s 自動拉取新鏡像更新應用)。

四、簡單示例:用 K8s 部署一個 Nginx

1. 編寫 Deployment YAML(定義 Nginx 應用)

創建nginx-deploy.yaml文件,內容如下(關鍵配置已注釋):

yaml

apiVersion: apps/v1  # API版本
kind: Deployment     # 資源類型(Deployment)
metadata:name: nginx-deploy # Deployment名稱
spec:replicas: 2        # 要創建的Pod數量(2個,高可用)selector:          # 匹配Pod的標簽(找到要管理的Pod)matchLabels:app: nginxtemplate:          # Pod模板(定義Pod里的容器)metadata:labels:app: nginx   # Pod的標簽(和上面selector對應)spec:containers:- name: nginx  # 容器名稱image: nginx:1.24 # 容器鏡像(用Nginx 1.24版本)ports:- containerPort: 80 # 容器暴露的端口(Nginx默認80)resources:    # 資源限制(避免容器占滿節點資源)limits:cpu: "0.5" # 最大CPU(0.5核)memory: "512Mi" # 最大內存(512MB)requests:cpu: "0.2" # 最小CPU(0.2核)memory: "256Mi" # 最小內存(256MB)

2. 編寫 Service YAML(給 Nginx 分配固定地址)

創建nginx-svc.yaml文件,內容如下:

yaml

apiVersion: v1
kind: Service
metadata:name: nginx-svc
spec:type: NodePort  # 類型(NodePort:集群外可通過節點IP+端口訪問)selector:app: nginx    # 匹配標簽為app:nginx的Podports:- port: 80      # Service的端口(集群內訪問用)targetPort: 80 # 轉發到Pod的端口(和容器暴露的端口一致)nodePort: 30080 # 節點暴露的端口(集群外訪問用,范圍30000-32767)

3. 執行命令部署并驗證

# 1. 創建Deployment(啟動2個Nginx Pod)
kubectl apply -f nginx-deploy.yaml# 2. 創建Service(分配訪問地址)
kubectl apply -f nginx-svc.yaml# 3. 查看Pod狀態(確保STATUS是Running)
kubectl get pods
# 輸出類似:
# NAME                            READY   STATUS    RESTARTS   AGE
# nginx-deploy-7f98d7c6b4-2xqzk   1/1     Running   0          2m
# nginx-deploy-7f98d7c6b4-5k87x   1/1     Running   0          2m# 4. 查看Service狀態(獲取NodePort)
kubectl get svc nginx-svc
# 輸出類似:
# NAME         TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
# nginx-svc    NodePort   10.96.123.45   <none>        80:30080/TCP   1m# 5. 集群外訪問(用節點IP+30080端口)
curl http://節點IP:30080
# 輸出Nginx默認頁面,說明部署成功!

五、K8s 常用使用方法(從安裝到運維)

1. 集群安裝(以 kubeadm 為例,最常用的方式)

# 1. 準備3臺服務器(1臺Master,2臺Worker,系統CentOS 7/8或Ubuntu 20.04+)
# 2. 每臺服務器初始化(關閉防火墻、禁用Swap、配置主機名等)
systemctl stop firewalld && systemctl disable firewalld
swapoff -a && sed -i '/swap/s/^/#/' /etc/fstab# 3. 安裝Docker/containerd(容器運行時)
yum install -y docker && systemctl start docker && systemctl enable docker# 4. 安裝kubeadm、kubelet、kubectl(K8s工具集)
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF
yum install -y kubelet-1.26.0 kubeadm-1.26.0 kubectl-1.26.0
systemctl start kubelet && systemctl enable kubelet# 5. 初始化Master節點(--pod-network-cidr是網絡插件的網段,用calico就填192.168.0.0/16)
kubeadm init --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=192.168.0.0/16# 6. 配置kubectl(Master節點執行,讓當前用戶能操作集群)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config# 7. 安裝網絡插件(calico,必須裝,否則Pod間不能通信)
kubectl apply -f https://docs.projectcalico.org/v3.25/manifests/calico.yaml# 8. Worker節點加入集群(Master初始化成功后會輸出join命令,類似下面)
kubeadm join 192.168.1.100:6443 --token abcdef.0123456789abcdef \--discovery-token-ca-cert-hash sha256:1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef

2. 日常運維常用命令

命令作用
kubectl get pods [-n 命名空間]查看 Pod 狀態(加 - n 指定命名空間,如 - n dev)
kubectl get deployments查看 Deployment 狀態
kubectl get svc查看 Service 狀態
kubectl describe pod <Pod名稱>查看 Pod 詳情(排障用,比如 Pod 啟動失敗原因)
kubectl logs <Pod名稱> [-c <容器名>]查看 Pod 日志(容器名可選,多容器時需要指定)
kubectl scale deployment <Deployment名> --replicas=5擴容 Pod 到 5 個
kubectl set image deployment <Deployment名> <容器名>=<新鏡像>更新容器鏡像(滾動更新)
kubectl delete pod <Pod名稱>刪除 Pod(Deployment 會自動重建,用于測試自愈)

六、常見問題及解決方法(排障必備)

1. 問題:Pod 一直處于 Pending 狀態

  • 原因 1:節點資源不足(CPU / 內存不夠)
    解決:用kubectl describe pod <Pod名>看 Events,若顯示 “Insufficient cpu” 或 “Insufficient memory”,則擴容節點資源,或減少 Pod 的資源請求(修改 YAML 里的 resources.requests)。
  • 原因 2:節點有污點(Taint),Pod 沒有容忍(Toleration)
    解決:查看節點污點kubectl describe node <節點名> | grep Taint,若有污點(如 node-role.kubernetes.io/master,Master 節點默認不讓跑 Pod),則給 Pod 加容忍(在 YAML 的 spec 下加 tolerations 字段)。

2. 問題:Service 訪問不到 Pod

  • 原因 1:Service 的 selector 和 Pod 的 label 不匹配(“找錯人了”)
    解決:檢查 Service 的 selector(kubectl get svc <Svc名> -o yaml)和 Pod 的 label(kubectl get pods <Pod名> -o yaml | grep labels),確保一致。
  • 原因 2:Pod 沒就緒(READY 狀態是 0/1)
    解決:用kubectl logs <Pod名>看容器日志,排查容器啟動失敗原因(比如配置錯誤、端口被占)。

3. 問題:節點處于 NotReady 狀態

  • 原因:網絡插件沒裝或沒啟動(最常見)
    解決:查看網絡插件 Pod 狀態kubectl get pods -n kube-system | grep calico(若用 calico),若沒運行則重新安裝網絡插件;或檢查節點網絡是否通(Master 和 Worker 之間能 ping 通 6443 端口)。

七、難點段子解讀:讓硬核概念變通俗

1. 難點:etcd 的 “一致性” 是什么意思?

  • 段子:小區選業委會,規定 “必須超過一半業主到場投票,且同意票超過一半才算通過”——etcd 就像小區投票系統,集群里的 etcd 節點(業主)要對 “Pod 狀態更新”“Service 創建” 等操作投票,只有超過一半節點同意,操作才會生效,確保所有節點存儲的數據一致(不會出現 “這個節點說 Pod 在 A 節點,那個節點說在 B 節點”)。

2. 難點:Deployment 和 StatefulSet 的區別?

  • 段子:Deployment 管理的 Pod 是 “出租屋租客”—— 你租的房子沒固定編號,今天住 301,明天房東讓你搬 302,你無所謂(反正東西少,搬起來方便);
    StatefulSet 管理的 Pod 是 “學區房業主”—— 房子編號固定(比如 1 號樓 101),房產證(存儲)和編號綁定,就算房子塌了重建,還是 1 號樓 101,你的家具(數據)還在(適合 MySQL 這種 “認地址” 的應用,換了地址數據庫就連不上了)。

3. 難點:kube-proxy 的 “Service 轉發” 怎么實現?

  • 段子:小區里有個 “快遞代收點”(Service),代收點的電話是固定的(ClusterIP),不管快遞員(外部請求)找誰,只要報 “代收點電話”,代收點就會根據 “收件人名單”(selector 匹配 Pod)把快遞送到對應的住戶(Pod)手里 —— 哪怕住戶換了房間(Pod IP 變了),只要收件人名單沒改,代收點照樣能送對。

結尾專業總結

K8s 的核心優勢在于自動化、可擴展、高可用,它不僅是容器編排工具,更是云原生應用的 “操作系統”。對于初學者,建議先從 “核心概念(Pod、Deployment、Service)” 和 “簡單部署示例” 入手,再逐步深入集群運維和高級特性(如 StatefulSet、Ingress、監控告警)。需注意:K8s 不是 “銀彈”,小規模應用(如單機跑 1 個容器)用它反而增加復雜度,需根據業務規模決定是否引入。隨著云原生技術的發展,K8s 會持續和 AI 運維、Serverless 等結合,成為更易用、更智能的底層平臺。

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

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

相關文章

03.《交換的底層邏輯:從基礎到應用》

交換基礎 文章目錄交換基礎MAC 地址&#xff1a;設備的 “全球唯一身份證”MAC 地址的基本屬性MAC 地址的三類類型&#xff08;按通信范圍劃分&#xff09;以太幀以太幀的兩個標準格式1. Ethernet_II 格式&#xff08;常用&#xff09;2. IEEE 802.3 格式&#xff08;少用&…

火語言 RPA 界面應用生成:輕量化開發核心優勢

火語言 RPA 界面應用生成功能&#xff0c;主打 “低門檻、快落地”&#xff0c;無需復雜開發環境與專業技術&#xff0c;就能快速實現需求驗證與工具搭建&#xff0c;尤其適配中小團隊與個人&#xff0c;核心優勢如下&#xff1a;?一、1 小時搞定需求驗證&#xff1a;3 步落地…

第三方軟件測試機構【多語言開發(PHP/Java/Python)WEB 應用的安全專業測試流程】

PHP應用測試安全 文件包含漏洞&#xff1a;檢測include/require函數參數未過濾場景&#xff08;如?page../../../etc/passwd&#xff09; 命令注入&#xff1a;檢查system()/exec()函數輸入驗證&#xff08;如| cat /etc/passwd&#xff09; 會話安全&#xff1a;驗證session …

C++條件變量學習

1、概述你知道條件變量"虛假喚醒"問題么&#xff0c;下面代碼有問題么void CFileTaskThread::Run() {while (!m_bStop){CFileItemRequest* pFileItem;{std::unique_lock<std::mutex> guard(m_mtItems);if (m_Filelist.empty()){if (m_bStop)return;// 等待條件…

React Native系統組件(一)

1&#xff0c;View&#xff0c;UI的構建基石 四個方向&#xff0c;水平&#xff0c;水平倒序&#xff0c;垂直&#xff0c;垂直倒序 flexGrow與flex的區別&#xff0c;flexgrow是分父布局剩余的空間&#xff0c;flex是分父布局全部的空間上面的是flexgrow 123 下面的是flex 123…

Git 代碼提交管理指南

目錄 1. 初始設置&#xff08;首次使用 Git 時&#xff09; 2. 日常提交工作流程 場景一&#xff1a;已有本地項目&#xff0c;首次連接到遠程倉庫 場景二&#xff1a;已有遠程倉庫&#xff0c;克隆到本地 3. 更精細的文件管理 4. 提交信息規范 5. 分支管理策略 6. 高級…

go-mapus最簡單的離線瓦片地圖協作

基于leaflet.jsleaflet-geoman.jsgolangbeegogormsqlitewebsocket等實現一個最簡單的地圖協作。繪制圖元&#xff0c;其他用戶瀏覽器上實施顯示繪制和修改結果&#xff0c;大家可同步進行繪制和修改。設置線型和顏色&#xff0c;粗細和透明度。保存到sqlite數據庫。動畫演示地圖…

調式記錄之八位機軟件串口

現在在上班&#xff0c;做的項目幾乎都是關于八位機的&#xff0c;八位機有個挺CD的點硬件資源少&#xff0c;打印之類的需要軟件串口&#xff0c;有時候調的剛到很玄學&#xff0c;也有可能是我知識沒有學得恨透。首先我得需要發送這句話并在代碼里面設置我的延時時間&#xf…

嵌入式學習day40-硬件(1)

嵌入式&#xff1a;以應用為中心&#xff1a;消費電子(手機、藍牙耳機、智能音響&#xff09;、醫療電子(心率脈搏、呼吸機&#xff09;、無人機&#xff08;大疆DJ&#xff09;、機器人&#xff08;人形四足機器人)計算機技術&#xff1a;計算機五大組成&#xff1a;運算器(數…

管理中心理學問:面試中教你識別他人需求動機

“我工作是為了錢&#xff0c;為了吃,住&#xff0c;和用錢買東西。”“我工作是為了地位和認可。”“我工作是為了有所歸屬&#xff0c;為了成為一個團體的成員。”“我工作是想高升。”“我工作是因為人應該工作&#xff0c;這是唯一的權利。”“我工作為了獲取知識和認識世界…

【JavaScript】讀取商品頁面中的結構化數據(JSON-LD),在不改動服務端情況下,實現一對一跳轉

前端實踐&#xff1a;從商品頁面讀取 mpn 并實現一對一跳轉 在實際開發中&#xff0c;我們經常會遇到這樣一種需求&#xff1a; 用戶瀏覽 A 網站的商品頁面后&#xff0c;點擊按鈕能夠直接跳轉到 B 網站的對應商品。 表面看似只是一個按鈕跳轉&#xff0c;但如果不同商品需要精…

HTML5實現好看的邀請函網頁源碼

HTML5實現好看的邀請函網頁源碼 前言一、設計來源1.1 邀請函主頁1.2 邀請函活動信息1.3 邀請函內容1.4 邀請函活動地址1.5 邀請函活動流程1.6 邀請函活動獎勵1.7 邀請函聯系我們 二、效果和源碼2.1 動態效果2.2 源代碼 結束語 HTML5實現好看的邀請函網頁源碼&#xff0c;酷炫的…

傳輸層TCP 與 安全層SSL/TLS

本章節主要探討三個問題&#xff1a;1. SSL/TSL 的區別和聯系是什么&#xff1f;2. 我們常說的 “三次握手” 發生在哪個階段&#xff0c;SSL/TSL層有參與嗎?3. HTTPS混合加密發生在哪個層?一、SSL 和 TLS 聯系繼承關系&#xff1a;TLS 直接基于 SSL 3.0 設計&#xff0c;可以…

【數學建模學習筆記】時間序列分析:ARIMA

零基礎看懂 ARIMA 模型&#xff1a;從原理到實戰如果你完全沒接觸過 “時間序列預測”&#xff0c;也不懂復雜公式&#xff0c;這篇會用 “說人話” 的方式幫你搞懂 ARIMA 模型&#xff0c;以及文中代碼到底在做什么。一、先搞懂&#xff1a;ARIMA 是用來干嘛的&#xff1f;簡單…

【macOS】垃圾箱中文件無法清理的“含特殊字符文件名”的方法

【macOS】垃圾箱中文件無法清理的“含特殊字符文件名”的方法文件名包含特殊字符&#xff08;如空格、中文符號等&#xff09;導致終端無法正確識別文件路徑。 可以嘗試以下解決方法&#xff1a;使用文件路徑自動補全輸入 rm &#xff08;注意 rm 后有空格&#xff09;&#xf…

???????Blender 重拓撲修改器實戰指南:從基礎操作到細節優化?

在 Blender 建模中&#xff0c;重拓撲是解決 “高模難編輯、低模細節差” 的關鍵。傳統手動重拓撲效率低&#xff0c;重拓撲修改器能自動生成規整拓撲&#xff0c;保留模型外形&#xff0c;適合游戲資產、動畫角色等場景。 一、核心作用與適用場景? 重拓撲修改器并非 “一鍵完…

C/C++哆啦A夢

寫在前面 用代碼繪制童年記憶中的那個藍胖子——哆啦A夢&#xff0c;是我對經典角色的一次深情致敬。這段程序不僅是一幅靜態圖像的生成&#xff0c;更是一次對童年幻想世界的數字重建。通過精確的幾何控制與色彩搭配&#xff0c;我將那個圓潤可愛、溫暖可靠的機器人重新帶回眼…

CSS入門指南:30字掌握核心技巧

1. CSS初體驗 1.1. CSS定義 層疊樣式表 (Cascading Style Sheets&#xff0c;縮寫為 CSS&#xff09; 用來描述 HTML 文檔的呈現&#xff08;美化內容&#xff09; 1.2. CSS引入方式 內部樣式表&#xff1a;學習使用 CSS 代碼寫在head里面的 style標簽 里面 外部樣式表&…

從實操到原理:一文搞懂 Docker、Tomcat 與 k8s 的關系(附踩坑指南 + 段子解疑)

目錄 一、先分清&#xff1a;Docker、Tomcat、k8s 到底是 “干啥的”&#xff1f; 二、它們的 “合作關系”&#xff1a;從 Java 項目到集群部署的全流程 三、實際應用場景&#xff1a;什么時候該用誰&#xff1f; 1. 單獨使用場景 2. 組合使用場景&#xff08;最常見&…

測試覆蓋率不夠高?這些技巧讓你的FastAPI測試無懈可擊!

url: /posts/0577d0e24f48b3153b510e74d3d1a822/ title: 測試覆蓋率不夠高?這些技巧讓你的FastAPI測試無懈可擊! date: 2025-09-02T01:49:10+08:00 lastmod: 2025-09-02T01:49:10+08:00 author: cmdragon summary: FastAPI通過TestClient工具支持單元測試,模擬HTTP請求直接…