当前位置: 首页 > news >正文

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.lryc.cn/news/593925.html

相关文章:

  • 基于bert-lstm对微博评论的情感分析系统设计与实现
  • JVM-Java
  • Web服务压力测试工具hey学习一:使用方法
  • Django ORM系统
  • PyQt5—QColorDialog 学习笔记
  • 7-20 关于mysql
  • 【企业架构】TOGAF概念之一
  • 基于SHAP的特征重要性排序与分布式影响力可视化分析
  • Shell脚本-cut工具
  • 零基础学习性能测试第一章-理解程序运行原理,需要什么资源
  • 第十四届全国大学生数学竞赛初赛试题(非数学专业类)
  • CSS 单位完全指南:掌握 em、rem、vh、vw 等响应式布局核心单位
  • gradle微服务依赖模版
  • PHPStorm携手ThinkPHP8:开启高效开发之旅
  • 用 Jetpack Compose 写 Android 的 “Hello World”
  • RCE随笔(1)
  • RK3588 安卓adb操作
  • C++ - 仿 RabbitMQ 实现消息队列--服务端核心模块实现(一)
  • RK3588 编译 Android 13 镜像方法
  • 状态管理与团队协作 - SRE 的核心关切
  • c#:TCP服务端管理类
  • 第一章: 初识 Redis:背后的特性和典型应用场景
  • c#:管理TCP服务端发送数据为非16进制
  • 网络原理——IP
  • CentOS 服务器docker pull 拉取失败
  • Docker 在 Ubuntu 系统中的详细操作指南
  • 【Docker-Day 7】揭秘 Dockerfile 启动指令:CMD、ENTRYPOINT、ENV、ARG 与 EXPOSE 详解
  • Docker实战:使用Docker部署envlinks极简个人导航页
  • 企业级安全威胁检测与响应(EDR/XDR)架构设计
  • 如何解决pip安装报错error subprocess-exited-with-error问题