Kubernetes (K8S)知識詳解

?Kubernetes (K8S) 是什么?

Kubernetes 是 Google 在 2014 年開源的生產級別的容器編排技術(編排也可以簡單理解為調度、管理),用于容器化應用的自動化部署、擴展和管理。它的前身是 Google 內部的 Borg 項目,Borg 是 Google 內部的大規模集群管理系統,它在數千個不同的應用程序中運行數十萬個作業,跨越許多集群,每個集群擁有數萬臺計算機。

主要特性:

  • 高可用,不宕機,自動災難恢復
  • 灰度更新,不影響業務正常運轉
  • 一鍵回滾到歷史版本
  • 方便的伸縮擴展(應用伸縮,機器加減)、提供負載均衡
  • 有一個完善的生態

Kubernetes 的一些核心特性:

特性

特性說明

服務發現和負載均衡

Kubernetes 可以使用 DNS 名稱或自己的 IP 地址來暴露容器。 如果進入容器的流量很大, Kubernetes 可以負載均衡并分配網絡流量,從而使部署穩定。

存儲編排

Kubernetes 允許你自動掛載你選擇的存儲系統,例如本地存儲、公共云提供商等。

自動部署和回滾

你可以使用 Kubernetes 描述已部署容器的所需狀態, 它可以以受控的速率將實際狀態更改為期望狀態。 例如,你可以自動化 Kubernetes 來為你的部署創建新容器, 刪除現有容器并將它們的所有資源用于新容器。

自動完成裝箱計算

你為 Kubernetes 提供許多節點組成的集群,在這個集群上運行容器化的任務。 你告訴 Kubernetes 每個容器需要多少 CPU 和內存 (RAM)。 Kubernetes 可以將這些容器按實際情況調度到你的節點上,以最佳方式利用你的資源。

自我修復

Kubernetes 將重新啟動失敗的容器、替換容器、殺死不響應用戶定義的運行狀況檢查的容器, 并且在準備好服務之前不將其通告給客戶端。

密鑰與配置管理

Kubernetes 允許你存儲和管理敏感信息,例如密碼、OAuth 令牌和 SSH 密鑰。 你可以在不重建容器鏡像的情況下部署和更新密鑰和應用程序配置,也無需在堆棧配置中暴露密鑰。

批處理執行

除了服務外,Kubernetes 還可以管理你的批處理和 CI(持續集成)工作負載,如有需要,可以替換失敗的容器。

水平擴容縮容

使用簡單的命令、用戶界面或根據 CPU 使用率自動對你的應用進行擴縮。

IPv4/IPv6 雙棧

為 Pod(容器組)和 Service(服務)分配 IPv4 和 IPv6 地址。

為可擴展性設計

在不改變上游源代碼的情況下為你的 Kubernetes 集群添加功能。

Kubernetes 典型的分布式架構圖

Kubernetes 中 2 大類節點

Kubernetes 是分布式架構的王者,采用了 Master-Worker 的架構模式。Master 節點也即上圖中的 Control Plane Node,Worker 節點也即上圖中的 Worker Node。Master 和 Worker 節點詳細介紹如下:

Master 節點:Master 節點部署了 Kubernetes 控制面的核心組件。企業 Kubernetes 集群中,Master 節點會部署 kube-apiserver、kube-controller-manager、kube-scheduler 組件,其中 kube-controller-mananger、kube-scheduler 會通過本地回環接口同 kube-apiserver 通信。kube-controller-manager 和 kube-scheduler 之間沒有通信。這些核心的控制面組件用來完成 Kubernetes 資源的 CURD、并根據資源的定義執行相應的業務邏輯,例如:創建 Pod、將 Pod 調度到 Worker 節點等。Kubernetes 中的內置資源,通過 kube-apiserver 進行 CURD 操作,并將數據持久化到 Etcd 中。Etcd 采用集群化部署,在有些企業中,因為沒有專門提供 Etcd 集群的中臺,也會自己部署 Etcd 集群。每個控制面節點部署一個 Etcd,不同控制面節點的 Etcd 實例,組成一個 Etcd 集群。

Worker 節點:Worker 節點主要用來運行 Pod。Worker 節點部署了 Kuberentes 的 kubelet、kube-proxy 組件。kubelet 負責跟底層的容器運行時交互,用來管理容器的生命周期。kube-proxy,作為 Kubernetes 集群內的服務注冊中心,負責服務發現和負載均衡。Kubernetes 支持不同的容器運行時,例如:containerd、cri-o 等。當前用的最多的是 containerd。

Kubernetes相關概念介紹

Master

在 Kubernetes 中,Master 是控制平面的組件,負責管理和調度集群中的工作負載。Master 負責監控集群狀態、調度 Pod、管理資源分配、處理集群級別的操作等。

Kubernetes 的 Master 組件包括以下幾個核心組件:

  1. API Server:作為集群的統一入口,提供 API 用于與集群交互,包括創建、刪除和管理資源等操作。所有的 Kubernetes API 請求都通過 API Server 進行處理。其他組件不會相互通信,包括Node的組件都只和APL Server通信
  2. Controller Manager:負責管理和運行集群中的控制器。控制器用于監控集群的狀態,并根據預期狀態與實際狀態的差異進行調整。例如,Replication Controller 負責確保 Pod 的副本數符合預期,Namespace Controller 負責管理命名空間等。
  3. Scheduler:負責根據預定的策略將 Pod 分配到集群中的節點上。Scheduler 考慮諸如節點資源、Pod 的需求和親和性/反親和性規則等因素來進行調度決策,以實現負載均衡和高可用性。
  4. Etcd:作為集群的數據存儲,用于存儲集群的配置信息、狀態和元數據。etcd 是一個分布式、可靠且高度可用的鍵值存儲系統,用于保證集群的一致性和持久性。

Master 組件通常運行在一個獨立的節點上,該節點不會運行應用程序容器。它們共同協作,通過相互通信來管理和維護整個 Kubernetes 集群的狀態。

API Server:集群的“大腦”:

API Server 是 Kubernetes 的“大腦”,負責處理所有 API 請求。如果它出了問題,整個集群的操作都會受到影響。因此,監控 API Server 的健康狀況是重中之重。

  • 請求延遲:API 請求的響應時間,延遲過高會影響集群操作。
  • 請求速率:每秒處理的請求數,過高可能導致 API Server 過載。
  • 錯誤率:API 請求失敗的比例,高錯誤率可能意味著配置問題或資源不足。

etcd:集群的“數據庫”:

etcd 是 Kubernetes 的“數據庫”,存儲集群的所有狀態數據。如果 etcd 性能下降,整個集群的狀態管理都會受到影響。

  • 寫延遲:etcd 寫入操作的延遲,延遲過高會影響集群狀態更新。
  • 讀延遲:etcd 讀取操作的延遲,延遲過高會影響調度和資源管理。
  • 存儲大小:etcd 存儲的數據量,過大可能導致性能下降。
  • Leader 選舉:etcd 集群的 Leader 選舉次數,頻繁選舉可能意味著網絡問題。

Scheduler:Pod 的“調度員”:

Scheduler 負責將 Pod 調度到合適的節點上。如果調度器性能不佳,Pod 可能遲遲無法啟動。

  • 調度延遲:從 Pod 創建到調度完成的時間,延遲過高會影響應用啟動速度。
  • 調度失敗率:調度失敗的 Pod 比例,高失敗率可能意味著資源不足或配置問題。

Controller Manager:集群的“管家”:

Controller Manager 負責運行各種控制器,確保集群狀態符合預期。如果控制器出現問題,集群狀態可能會失控。

  • 控制器延遲:控制器處理事件的時間,延遲過高可能導致狀態不一致。
  • 控制器錯誤率:控制器處理失敗的比例,高錯誤率可能意味著配置問題或資源沖突。

Node

在 Kubernetes 中,Node(節點)是集群中運行容器化應用程序的工作節點。每個節點都是 Kubernetes 集群中的一臺物理或虛擬機器,它負責運行和托管容器化的工作負載。

Node 上運行著以下幾個核心組件:

  1. Kubelet:是 Kubernetes Agent,負責與 Master 節點通信并管理 Node 上的容器操作。它監控和報告 Node 上的容器狀態,執行容器的創建、啟動、停止等操作。
  2. Container Runtime:是負責運行容器的軟件,如 Docker、containerd 等。它負責根據容器鏡像創建和管理容器實例,并提供容器的隔離和資源管理。
  3. Kube-Proxy:負責網絡代理和負載均衡,處理集群內部和集群外部的網絡流量轉發。它維護了集群內部的網絡規則和服務發現,使得容器能夠相互通信和訪問集群內外的服務。

每個 Node 都有一個唯一的標識符,稱為 Node 名稱。Node 的名稱通常是根據主機的網絡標識或者主機名來確定的。

kubelet:節點的“守護者”

kubelet 負責管理節點上的 Pod 和容器。如果 kubelet 出現問題,節點上的應用可能會停擺。

  • Pod 啟動延遲:從 Pod 創建到容器啟動的時間,延遲過高會影響應用可用性。
  • 容器崩潰次數:容器崩潰的頻率,高崩潰率可能意味著應用或資源問題。

kube-proxy:網絡的“交通警察”

kube-proxy 負責 Service 的負載均衡和網絡代理。如果 kube-proxy 性能不佳,網絡請求可能會卡頓。

  • 網絡延遲:Service 請求的響應時間,延遲過高會影響用戶體驗。
  • 連接錯誤率:網絡連接失敗的比例,高錯誤率可能意味著網絡配置問題。

Pod

在 Kubernetes 中,Pod(容器組)是最小的可調度和可部署的單元。它是一個邏輯概念,用于包裝一個或多個相關的容器,并共享網絡和存儲資源。

Pod 中的容器緊密相關,并且它們一起協同工作來提供某種服務或應用程序。這些容器可以共享同一個網絡命名空間和存儲卷,它們可以通過 localhost 直接通信。

Pod 具有以下特點:

  1. 調度單元:Pod 是 Kubernetes 中最小的調度單元,調度器將一個 Pod 分配給一個可用的節點來運行。
  2. 共享網絡和存儲:Pod 中的容器共享同一個網絡命名空間和存儲卷。它們可以通過 localhost 直接通信,并共享數據。
  3. 生命周期:Pod 具有自己的生命周期,可以創建、啟動、停止和刪除。當 Pod 被刪除時,它內部的所有容器也會被終止。

Pod 有以下幾種常見的使用方式:

  1. 單容器 Pod:一個 Pod 中只包含一個容器,用于運行一個獨立的應用程序服務。
  2. 多容器 Pod:一個 Pod 中包含多個緊密相關的容器,可以協同工作。例如,一個應用程序容器和一個輔助容器(如 Sidecar 容器)共同組成一個 Pod。
  3. 無狀態 Pod:Pod 中的容器不需要保持任何狀態,所有數據都來自外部存儲(如數據庫)或者共享數據卷。
  4. 有狀態 Pod:Pod 中的容器需要保持一些狀態,例如使用本地存儲或者共享存儲卷存儲數據。

Namespace

在 Kubernetes 中,Namespace(命名空間)是一種將集群資源進行邏輯劃分的機制,它使得多個團隊或多個項目可以共享同一個集群,而不會互相干擾。Namespace 是對一組資源和對象的抽象集合,常用于多租戶環境中,它提供了一定級別的隔離和組織方式。

基本用途

  • 資源隔離:Namespace 提供了一種隔離機制,使得不同的項目、團隊或客戶可以在同一個集群中運行,而不會相互干擾。
  • 權限控制:可以通過角色訪問控制(Role-Based Access Control,RBAC)對不同 Namespace 中的資源進行細粒度的權限管理。
  • 資源配額:通過設置 Namespace 級別的資源配額(ResourceQuota),管理員可以限制每個 Namespace 可以消耗的資源數量,確保資源按需分配。

安裝 Kubernetes

使用minikube搭建kubernetes集群環境

什么是minikube?

Minikube 是 Kubernetes 官方提供的本地開發工具,用于在個人計算機(如筆記本電腦或開發機)上快速搭建一個單節點 Kubernetes 集群。它主要面向開發、測試和學習場景,讓用戶無需復雜的云環境或物理服務器即可體驗 Kubernetes 的核心功能。

安裝minikube

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

啟動minikube

# 啟動集群
minikube start
minikube start --image-mirror-country=cn
minikube start --force --driver=docker --container-runtime=docker --image-mirror-country=cnminikube start \--force \--driver=docker \--container-runtime=docker \--image-mirror-country=cn \--registry-mirror=https://docker.rainbond.cc \--registry-mirror=https://docker.1panel.live \--registry-mirror=https://docker.1ms.run \--registry-mirror=https://ccr.ccs.tencentyun.com# root用戶
minikube start --force
# 查看版本
minikube version
# 查看節點。kubectl 是一個用來跟 K8S 集群進行交互的命令行工具
kubectl get node
minikube kubectl get node
# 停止集群
minikube stop
# 清空集群
minikube delete --all
# 安裝集群可視化 Web UI 控制臺
minikube dashboard

kubectl 命令行工具

# 下載最新穩定版
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"# 安裝到系統路徑
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl# 驗證安裝
kubectl version --client

minikube安裝報錯解決

# 從阿里云拉取 kicbase 鏡像
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kicbase:v0.0.47
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/storage-provisioner# 查看是否拉取成功
docker images | grep kicbase# 將阿里云鏡像標記為 gcr.io 的原始名稱(Minikube 默認會查找這個名稱)
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kicbase:v0.0.47 gcr.io/k8s-minikube/kicbase:v0.0.47# 再次檢查鏡像
docker images | grep kicbaseminikube delete  # 清理之前的失敗實例
minikube start --force --driver=docker --container-runtime=docker --image-mirror-country=cnminikube start --force --driver=docker --container-runtime=docker --image-repository=registry.aliyuncs.com/google_containersminikube delete
rm -rf ~/.minikube
sudo rm -rf /var/lib/minikubeminikube start --force --driver=docker \--image-repository=registry.aliyuncs.com/google_containers \--kubernetes-version=v1.33.1 \--container-runtime=containerd \--container-runtime=docker

sudo usermod -aG docker $USER  # 將當前用戶加入 docker 組
newgrp docker                  # 刷新用戶組(或重新登錄)
docker ps  # 應該能正常執行,不再報權限錯誤

如果出現如下報錯:

[root@192 ~]# kubectl get pods -A
NAMESPACE     NAME                               READY   STATUS             RESTARTS         AGE
kube-system   coredns-674b8bbfcf-qkzpl           0/1     CrashLoopBackOff   57 (3m49s ago)   4h33m
kube-system   etcd-minikube                      1/1     Running            0                4h33m
kube-system   kube-apiserver-minikube            1/1     Running            0                4h33m
kube-system   kube-controller-manager-minikube   1/1     Running            1 (4h33m ago)    4h33m
kube-system   kube-proxy-2vp6h                   1/1     Running            0                4h33m
kube-system   kube-scheduler-minikube            1/1     Running            0                4h33m
kube-system   storage-provisioner                1/1     Running            0                4h33m
[root@192 ~]# kubectl logs -n kube-system coredns-674b8bbfcf-qkzpl --previous
maxprocs: Leaving GOMAXPROCS=8: CPU quota undefined
Listen: listen tcp :53: bind: permission denied

問題原因:

  • Minikube 的 coredns Pod 以非 root 用戶運行,但 53 端口是特權端口(<1024),普通用戶無法直接綁定。
  • 安全策略限制(如 SELinux、AppArmor 或 Seccomp 阻止了權限提升)。

解決辦法:

方法 1:修改 CoreDNS 配置,使用非特權端口

編輯 CoreDNS 的 ConfigMap,將端口從 53 改為 1053(或其他高位端口):

kubectl edit configmap -n kube-system coredns

修改 Corefile 的監聽端口:

data:Corefile: |.:1053 {  # 修改此處errorshealth {lameduck 5s}readykubernetes cluster.local in-addr.arpa ip6.arpa {pods insecurefallthrough in-addr.arpa ip6.arpattl 30}prometheus :9153forward . /etc/resolv.confcache 30loopreloadloadbalance}

保存后,CoreDNS 會自動重啟。

方法 2:允許 CoreDNS 以 root 身份運行

修改 CoreDNS 的 Deployment,添加 securityContext

kubectl edit deployment -n kube-system coredns

spec.template.spec 下添加以下內容(注意縮進對齊):

spec:template:spec:securityContext:  # 新增部分runAsUser: 0    # 以 root 用戶運行capabilities:add: ["NET_BIND_SERVICE"]  # 允許綁定特權端口(如 53)containers:- name: coredns# ...

檢查 Pod 是否重啟:

kubectl get pods -n kube-system -w

使用Multipassk3s搭建kubernetes集群環境

Multipass介紹

Multipass是一個輕量級的虛擬機管理工具,
可以用來在本地快速創建和管理虛擬機,
相比于VirtualBox或者VMware這樣的虛擬機管理工具,
Multipass更加輕量快速,而且它還提供了一些命令行工具來方便我們管理虛擬機。
官方網址: https://Multipass.run/

# 安裝 snapd(snap 工具)
sudo yum install epel-release -y  # 安裝 EPEL 倉庫
sudo yum install snapd -y        # 安裝 snapd
sudo systemctl enable --now snapd.socket  # 啟用 snapd 服務
snap --version
# macOS
brew install multipass# Windows
choco install multipass# Linux
sudo snap install multipass
# 查看幫助
multipass help
multipass help <command>
# 創建?個名字叫做k3s的虛擬機
multipass launch --name k3s
# 在虛擬機中執?命令
multipass exec k3s -- ls -l
# 進?虛擬機并執?shell
multipass shell k3s
# 查看虛擬機的信息
multipass info k3s
# 停?虛擬機
multipass stop k3s
# 啟動虛擬機
multipass start k3s
# 刪除虛擬機
multipass delete k3s
# 清理虛擬機
multipass purge
# 查看虛擬機列表
multipass list
# 創建一臺虛擬機
multipass launch --name k3s --cpus 2 --memory 4G --disk 10G

k3s介紹

k3s 是一個輕量級的Kubernetes發行版,它是 Rancher Labs 推出的一個開源項目,
旨在簡化Kubernetes的安裝和維護,同時它還是CNCF認證的Kubernetes發行版。

創建和配置master節點

首先我們需要使用multipass創建一個名字叫做k3s的虛擬機,

multipass launch --name k3s --cpus 2 --memory 8G --disk 10G

虛擬機創建完成之后,
可以配置SSH密鑰登錄,
不過這一步并不是必須的,
即使不配置也可以通過multipass exec或者multipass shell命令來進入虛擬機,
然后我們需要在master節點上安裝k3s

使用k3s搭建kubernetes集群非常簡單,
只需要執行一條命令就可以在當前節點上安裝k3s
打開剛剛創建的k3s虛擬機,
執行下面的命令就可以安裝一個k3s的master節點,


# 安裝k3s的master節點
curl -sfL https://get.k3s.io | sh -

國內用戶可以換成下面的命令,使用ranher的鏡像源來安裝:

curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -

安裝完成之后,可以通過kubectl命令來查看集群的狀態,

kubectl get nodes

創建和配置worker節點

接下來需要在這個master節點上獲取一個token,
用來作為創建worker節點時的一個認證憑證,
它保存在/var/lib/rancher/k3s/server/node-token這個文件里面,
我們可以使用sudo cat命令來查看一下這個文件中的內容,

sudo cat /var/lib/rancher/k3s/server/node-token

將TOKEN保存到一個環境變量中

TOKEN=$(multipass exec k3s sudo cat /var/lib/rancher/k3s/server/node-token)

保存master節點的IP地址

MASTER_IP=$(multipass info k3s | grep IPv4 | awk '{print $2}')

確認

echo $MASTER_IP

使用剛剛的TOKENMASTER_IP來創建兩個worker節點
并把它們加入到集群中

# 創建兩個worker節點的虛擬機
multipass launch --name worker1 --cpus 2 --memory 8G --disk 10G
multipass launch --name worker2 --cpus 2 --memory 8G --disk 10G# 在worker節點虛擬機上安裝k3sfor f in 1 2; domultipass exec worker$f -- bash -c "curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=\"https://$MASTER_IP:6443\" K3S_TOKEN=\"$TOKEN\" sh -"done


多節點的kubernetes集群的搭建完成

kubectl常用命令

# 查詢 當前默認命名空間(通常是 default)中的 Pod。
kubectl get pods
# 查詢 所有命名空間(包括 kube-system、default 等)中的 Pod
kubectl get pods -A
# 查看幫助
kubectl --help# 查看API版本
kubectl api-versions# 查看集群信息
kubectl cluster-info
# 創建并運行一個指定的鏡像
kubectl run NAME --image=image [params...]
# e.g. 創建并運行一個名字為nginx的Pod
kubectl run nginx --image=nginx# 根據YAML配置文件或者標準輸入創建資源
kubectl create RESOURCE
# e.g.
# 根據nginx.yaml配置文件創建資源
kubectl create -f nginx.yaml
# 根據URL創建資源
kubectl create -f https://k8s.io/examples/application/deployment.yaml
# 根據目錄下的所有配置文件創建資源
kubectl create -f ./dir# 通過文件名或標準輸入配置資源
kubectl apply -f (-k DIRECTORY | -f FILENAME | stdin)
# e.g.
# 根據nginx.yaml配置文件創建資源
kubectl apply -f nginx.yaml
# 查看集群中某一類型的資源
kubectl get RESOURCE
# 其中,RESOURCE可以是以下類型:
kubectl get pods / po         # 查看Pod
kubectl get svc               # 查看Service
kubectl get deploy            # 查看Deployment
kubectl get rs                # 查看ReplicaSet
kubectl get cm                # 查看ConfigMap
kubectl get secret            # 查看Secret
kubectl get ing               # 查看Ingress
kubectl get pv                # 查看PersistentVolume
kubectl get pvc               # 查看PersistentVolumeClaim
kubectl get ns                # 查看Namespace
kubectl get node              # 查看Node
kubectl get all               # 查看所有資源# 后面還可以加上 -o wide 參數來查看更多信息
kubectl get pods -o wide# 查看某一類型資源的詳細信息
kubectl describe RESOURCE NAME
# e.g. 查看名字為nginx的Pod的詳細信息
kubectl describe pod nginx# 更新某個資源的標簽
kubectl label RESOURCE NAME KEY_1=VALUE_1 ... KEY_N=VALUE_N
# e.g. 更新名字為nginx的Pod的標簽
kubectl label pod nginx app=nginx# 刪除某個資源
kubectl delete RESOURCE NAME
# e.g. 刪除名字為nginx的Pod
kubectl delete pod nginx# 刪除某個資源的所有實例
kubectl delete RESOURCE --all
# e.g. 刪除所有Pod
kubectl delete pod --all# 根據YAML配置文件刪除資源
kubectl delete -f FILENAME
# e.g. 根據nginx.yaml配置文件刪除資源
kubectl delete -f nginx.yaml# 設置某個資源的副本數
kubectl scale --replicas=COUNT RESOURCE NAME
# e.g. 設置名字為nginx的Deployment的副本數為3
kubectl scale --replicas=3 deployment/nginx# 根據配置文件或者標準輸入替換某個資源
kubectl replace -f FILENAME
# e.g. 根據nginx.yaml配置文件替換名字為nginx的Deployment
kubectl replace -f nginx.yaml# 進入某個Pod的容器中
kubectl exec [-it] POD [-c CONTAINER] -- COMMAND [args...]
# e.g. 進入名字為nginx的Pod的容器中,并執行/bin/bash命令
kubectl exec -it nginx -- /bin/bash# 查看某個Pod的日志
kubectl logs [-f] [-p] [-c CONTAINER] POD [-n NAMESPACE]
# e.g. 查看名字為nginx的Pod的日志
kubectl logs nginx# 將某個Pod的端口轉發到本地
kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N]
# e.g. 將名字為nginx的Pod的80端口轉發到本地的8080端口
kubectl port-forward nginx 8080:80# 連接到現有的某個Pod(將某個Pod的標準輸入輸出轉發到本地)
kubectl attach POD -c CONTAINER
# e.g. 將名字為nginx的Pod的標準輸入輸出轉發到本地
kubectl attach nginx# 運行某個Pod的命令
kubectl run NAME --image=image -- COMMAND [args...]
# e.g. 運行名字為nginx的Pod
kubectl run nginx --image=nginx -- /bin/bash

部署一個簡單的測試應用(如 Nginx)

# 快速創建一個 Deployment 資源,它會部署一個基于 Nginx 鏡像的 Pod
kubectl create deployment nginx --image=nginx
kubectl get pods  # 等待狀態變為 Running# 將 nginx Deployment 擴展到 3 個副本
kubectl scale deployment nginx --replicas=3# 進入容器
kubectl exec -it nginx-5869d7778c-7spgb -- /bin/bash# 創建新命名空間
kubectl create namespace my-new-namespace# 驗證命名空間
kubectl get namespaces# 切換當前上下文到新命名空間
kubectl get pods -n my-new-namespace# 通過 Deployment 部署
kubectl create deployment my-nginx --image=nginx -n my-new-namespace# 刪除 Deployment
kubectl delete deployment my-nginx -n my-new-namespace# 或刪除臨時 Pod
kubectl delete pod test-nginx -n my-new-namespace手動加載鏡像到Minikube
# 1. 在宿主機拉取鏡像(需能訪問外網)
docker pull nginx# 2. 導入到Minikube
minikube image load nginx# 3. 刪除舊Pod觸發重建
kubectl delete pod nginx-5869d7778c-c6945

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

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

相關文章

在github上傳python項目,然后在另外一臺電腦下載下來后如何保障成功運行

如何在 GitHub 上傳并在另一臺電腦成功運行 Python 項目? 一、上傳前&#xff08;本地準備&#xff09; 在你的項目文件夾中進行以下準備&#xff1a; 1. 確保結構清晰 my_project/ ├── main.py ├── utils.py ├── config.yaml ├── requirements.txt └── README…

詳解Mysql Order by排序底層原理

MySQL 的 ORDER BY 子句實現排序是一個涉及查詢優化、內存管理和磁盤 I/O 的復雜過程。其核心目標是高效地將結果集按照指定列和順序排列。一、確定排序模式 (Sort Mode)MySQL 根據查詢特性和系統變量決定采用哪種排序策略&#xff1a;1.1 Rowid 排序<sort_key, rowid> 模…

SpringBoot的介紹和項目搭建

SpringBoot是簡化Spring應用開發的一個框架&#xff0c;他是Spring技術棧的整合。優點&#xff1a;能夠快速創建獨立運行的Spring項目以及與主流框架集成使用嵌入式的Servlet容器&#xff0c;應用無需打成war包&#xff0c;內嵌tomcatStarters自動依賴和版本控制大量的自動裝配…

Selenium 攻略:從元素操作到 WebDriver 實戰

在自動化測試、網頁數據爬取、批量操作網頁等場景中&#xff0c;Selenium 無疑是最受歡迎的工具之一。作為一款強大的 Web 自動化工具&#xff0c;它能模擬人類操作瀏覽器的行為&#xff0c;實現點擊、輸入、跳轉等一系列動作。本文將從基礎到進階&#xff0c;全面解析 Seleniu…

【算法訓練營Day14】二叉樹part4

文章目錄找樹左下角的值路徑總和總結&#xff1a;遞歸函數的返回值路徑總和 II總結&#xff1a;二叉樹遞歸的思考從中序與后序遍歷序列構造二叉樹找樹左下角的值 題目鏈接&#xff1a;513. 找樹左下角的值 解題邏輯&#xff1a; 使用層序遍歷&#xff0c;將最后一層的第一個元…

工資系統如何計算工資

工資系統計算工資是一個集成數據收集、規則應用、自動核算和合規審核的自動化過程&#xff0c;以下是其核心原理和步驟&#xff0c;結合技術實現與法規要求進行說明&#xff1a;?? 一、工資系統的基本框架與數據準備系統初始化與規則配置企業信息設置&#xff1a;錄入公司名稱…

車載通信架構 --- DoIP協議通信

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 鈍感力的“鈍”,不是木訥、遲鈍,而是直面困境的韌勁和耐力,是面對外界噪音的通透淡然。 生活中有兩種人,一種人格外在意別人的眼光;另一種人無論…

基于Event Sourcing和CQRS的微服務架構設計與實戰

基于Event Sourcing和CQRS的微服務架構設計與實戰 業務場景描述 在電商系統中&#xff0c;訂單的高并發寫入與復雜的狀態流轉&#xff08;下單、支付、發貨、退貨等&#xff09;給傳統的CRUD模型帶來了挑戰&#xff1a; 數據一致性難保證&#xff1a;跨服務事務處理復雜&#x…

初級安全課第二次作業

&#xff08;一&#xff09;xss-labs 1~8關 1、前期準備 &#xff08;1&#xff09;打開小皮面板&#xff0c;并啟動Apache和MySQL&#xff08;2&#xff09;將 xss-labs放到 phpstudy_pro 的 WWW 目錄下&#xff08;3&#xff09;訪問連接&#xff1a;http://localhost/xss-la…

從零搭建智能搜索代理:LangGraph + 實時搜索 + PDF導出完整項目實戰

傳統的AI聊天系統往往局限于預訓練數據的知識范圍&#xff0c;無法獲取實時信息。本文將詳細闡述如何構建一個基于LangGraph的智能代理系統&#xff0c;該系統能夠智能判斷何時需要進行網絡搜索、有效維護對話上下文&#xff0c;并具備將對話內容導出為PDF文檔的功能。 本系統…

C語言分支和循環語句——猜數字游戲

分支語句的語法形式1. if(表達式)語句;2. if(表達式)語句1;else語句2;3. Switch(表達式){ case 1: break;case 2: break;case 3: break; default: break; }循環語句的語法形式1. while(表達式)語句 ;2. for&#xff08;表達…

Python設計模式深度解析:原型模式(Prototype Pattern)完全指南

Python設計模式深度解析&#xff1a;原型模式&#xff08;Prototype Pattern&#xff09;完全指南前言什么是原型模式&#xff1f;模式的核心組成實際案例&#xff1a;游泳比賽管理系統游泳者數據結構原型模式的實現深拷貝 vs 淺拷貝&#xff1a;核心概念解析淺拷貝&#xff08…

SAP-ABAP:SAP萬能長度計算:DYNAMIC_OUTPUT_LENGTH 深度解析

&#x1f4cf; SAP ABAP 萬能長度計算&#xff1a;DYNAMIC_OUTPUT_LENGTH 深度解析核心作用&#xff1a;智能計算數據對象在列表/ALV中的實際顯示寬度 | 關鍵優勢&#xff1a;多字節字符處理 | 格式感知 | 動態適配&#x1f50d; 一、核心功能與技術特性 &#x1f4ca; 數據類型…

20250720-2-Kubernetes 調度-資源限制對Pod調度的影響(1)_筆記

一、創建一個Pod的工作流程&#xfeff;1. k8s架構解析&#xfeff;組件交互模式: Kubernetes采用list-watch機制的控制器架構&#xff0c;實現組件間交互的解耦。各組件通過監控自己負責的資源&#xff0c;當資源發生變化時由kube-apiserver通知相關組件。類比說明: 類似小賣鋪…

mobaxteam x11傳輸界面避坑

mobaxteam x11傳輸界面避坑 文章目錄mobaxteam x11傳輸界面避坑1 windows系統必須下載xing2 配置1 windows系統必須下載xing 因為windows系統本身沒有x服務。 2 配置 如圖

flink sql如何對hive string類型的時間戳進行排序

在 Flink SQL 中對 Hive 表的 STRING 類型時間戳進行排序&#xff0c;需要先將字符串轉換為時間類型&#xff0c;再基于時間類型排序。以下是具體方法和示例&#xff1a; 一、核心解決方案 1. 字符串轉 TIMESTAMP 后排序 若 Hive 中的時間戳格式為 yyyy-MM-dd HH:mm:ss&#xf…

Linux:線程控制

線程概念線程&#xff08;Thread&#xff09;是進程&#xff08;Process&#xff09; 中的一個執行單元&#xff0c;是操作系統能夠進行運算調度的最小單位。線程也被稱為“輕量級進程”&#xff08;Lightweight Process, LWP&#xff09;。一個進程可以包含多個線程&#xff0…

React 學習(4)

核心API———createRoot、render方法1.createRoot 方法是創建react的根容器&#xff0c;就是react元素的插入位置&#xff0c;插入的dom會被轉化成react元素&#xff0c;根容器內的內容都會被react管理&#xff0c;原有dom都會被刪除。react17 根容器創建、渲染方式&#xff0…

ASP .NET Core 8集成Swagger全攻略

Swagger (現在稱為 OpenAPI) 是一個用于描述 RESTful API 的規范&#xff0c;ASP.NET Core 內置支持通過 Swashbuckle 庫生成 Swagger 文檔。以下是在 ASP.NET Core 8 中實現 Swagger 的完整步驟。1、添加Swagger NuGet 包dotnet add package Swashbuckle.AspNetCore2、添加Swa…

【iOS】源碼閱讀(六)——方法交換

文章目錄方法交換什么是Method-Swizzling方法交換核心API**1. 獲取方法對象****2. 添加/替換方法實現****3. 交換方法實現****4. 獲取方法信息****5. 修改方法實現****使用示例&#xff1a;完整的 Method-Swizzling 流程****注意事項**使用方法交換注意事項線程安全方法交換的影…