?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 組件包括以下幾個核心組件:
- API Server:作為集群的統一入口,提供 API 用于與集群交互,包括創建、刪除和管理資源等操作。所有的 Kubernetes API 請求都通過 API Server 進行處理。其他組件不會相互通信,包括Node的組件都只和APL Server通信。
- Controller Manager:負責管理和運行集群中的控制器。控制器用于監控集群的狀態,并根據預期狀態與實際狀態的差異進行調整。例如,Replication Controller 負責確保 Pod 的副本數符合預期,Namespace Controller 負責管理命名空間等。
- Scheduler:負責根據預定的策略將 Pod 分配到集群中的節點上。Scheduler 考慮諸如節點資源、Pod 的需求和親和性/反親和性規則等因素來進行調度決策,以實現負載均衡和高可用性。
- 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 上運行著以下幾個核心組件:
- Kubelet:是 Kubernetes Agent,負責與 Master 節點通信并管理 Node 上的容器操作。它監控和報告 Node 上的容器狀態,執行容器的創建、啟動、停止等操作。
- Container Runtime:是負責運行容器的軟件,如 Docker、containerd 等。它負責根據容器鏡像創建和管理容器實例,并提供容器的隔離和資源管理。
- 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 具有以下特點:
- 調度單元:Pod 是 Kubernetes 中最小的調度單元,調度器將一個 Pod 分配給一個可用的節點來運行。
- 共享網絡和存儲:Pod 中的容器共享同一個網絡命名空間和存儲卷。它們可以通過 localhost 直接通信,并共享數據。
- 生命周期:Pod 具有自己的生命周期,可以創建、啟動、停止和刪除。當 Pod 被刪除時,它內部的所有容器也會被終止。
Pod 有以下幾種常見的使用方式:
- 單容器 Pod:一個 Pod 中只包含一個容器,用于運行一個獨立的應用程序服務。
- 多容器 Pod:一個 Pod 中包含多個緊密相關的容器,可以協同工作。例如,一個應用程序容器和一個輔助容器(如 Sidecar 容器)共同組成一個 Pod。
- 無狀態 Pod:Pod 中的容器不需要保持任何狀態,所有數據都來自外部存儲(如數據庫)或者共享數據卷。
- 有狀態 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
使用Multipass和k3s搭建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
使用剛剛的TOKEN
和MASTER_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