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