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=cn

minikube 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 kicbase

minikube delete  # 清理之前的失败实例
minikube start --force --driver=docker --container-runtime=docker --image-mirror-country=cn

minikube start --force --driver=docker --container-runtime=docker --image-repository=registry.aliyuncs.com/google_containers

minikube delete
rm -rf ~/.minikube
sudo rm -rf /var/lib/minikube

minikube 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 {  # 修改此处
        errors
        health {
           lameduck 5s
        }
        ready
        kubernetes cluster.local in-addr.arpa ip6.arpa {
           pods insecure
           fallthrough in-addr.arpa ip6.arpa
           ttl 30
        }
        prometheus :9153
        forward . /etc/resolv.conf
        cache 30
        loop
        reload
        loadbalance
    }

保存后,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节点虚拟机上安装k3s
 for f in 1 2; do
     multipass 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
相关推荐
云游2 小时前
k8s:利用kubectl部署postgis:17-3.5
linux·容器·kubernetes
汪碧康2 小时前
【k8s集群管理平台】k8s运维管理的新玩法,让运维电脑随时不离身的现状成为过去
容器·kubernetes·k8s·rancher
老马啸西风6 小时前
windows wsl2-05-docker 安装笔记
运维·windows·笔记·docker·容器·k8s
老马啸西风6 小时前
windows docker-02-docker 最常用的命令汇总
linux·运维·ubuntu·docker·容器·eureka·maven
(:满天星:)7 小时前
JobSet:Kubernetes 分布式任务编排的统一解决方案
分布式·容器·kubernetes
cherishSpring8 小时前
Eureka服务端启动
云原生·eureka
慢慢慢时光9 小时前
本地k8s集群的搭建
云原生·容器·kubernetes
风清再凯11 小时前
prometheus 黑盒监控和docker检测
docker·容器·prometheus
观无12 小时前
基于Eureka和restTemple的负载均衡
云原生·eureka·负载均衡