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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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 流程****注意事项**使用方法交换注意事项线程安全方法交换的影…