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

容器学习day05_k8s(二)

今天学习kubernets管理平台。

一、集群管理

1.1集群管理命令

        Kubernetes 集群的管理主要通过 kubectl 命令行工具完成。以下是一些常用命令:

命令说明
kubectl get nodes查看集群节点状态
kubectl cluster-info查看集群基本信息
kubectl describe node <node-name>查看节点详细信息
kubectl get componentstatuses查看控制平面组件状态(已弃用,建议使用 kubectl get --all-namespaces 查询核心组件)
kubectl taint node <node> key=value:NoSchedule为节点设置污点,控制 Pod 调度
kubectl cordon <node>标记节点为不可调度
kubectl uncordon <node>恢复节点调度能力
kubectl drain <node>安全驱逐节点上的所有 Pod(用于维护)

1.2 管理主机授权

        主节点(Control Plane)是集群的大脑,包含 API Server、etcd、Scheduler、Controller Manager 等组件。对其授权管理至关重要。

核心机制:RBAC(基于角色的访问控制)

Kubernetes 使用 RBAC 实现权限控制,主要涉及以下资源对象:

  • Role / ClusterRole:定义权限规则(如:读取 Pods、创建 Deployments)
  • RoleBinding / ClusterRoleBinding:将角色绑定到用户或组

示例:用 YAML 配置定义了 Kubernetes 中的 RBAC(基于角色的访问控制)规则,用于在 default 命名空间中为用户 alice 创建一个只读权限的角色。让我为你详细解释

# 第一部分:定义 Role(角色) 
#创建一个命名空间内的只读角色
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:namespace: default  # 角色作用的命名空间name: pod-reader    # 角色名称
rules:
- apiGroups: [""]     # API 组,空字符串表示核心 API 组resources: ["pods"] # 该角色可访问的资源类型(这里是 pods)verbs: ["get", "list", "watch"]  # 允许的操作(都是只读操作)第二部分:定义 RoleBinding(角色绑定)
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: read-pods    # 绑定名称namespace: default # 绑定作用的命名空间
subjects:
- kind: User        # 被绑定的主体类型(这里是用户)name: alice       # 用户名apiGroup: ""      # 用户所在的 API 组
roleRef:kind: Role        # 引用的角色类型name: pod-reader  # 引用的角色名称(与上面定义的 Role 对应)apiGroup: ""      # 角色所在的 API 组
  • Role 是命名空间级别的资源,仅在指定的命名空间内有效
  • rules 定义了该角色拥有的权限:
    • get:获取单个 Pod 的详细信息
    • list:列出命名空间中的所有 Pod
    • watch:实时监控 Pod 的变化
  • RoleBinding 用于将前面定义的 Role 绑定到特定用户
  • subjects 指定了被授予权限的对象(这里是用户 alice
  • roleRef 指定了要绑定的角色(这里是前面定义的 pod-reader

整体效果

        应用这个配置后,用户 alice 将在 default 命名空间中获得对 Pod 的只读权限,即可以查看 Pod 信息,但不能创建、修改或删除 Pod。这是 Kubernetes 中实现权限控制的标准方式,遵循最小权限原则。

🛡️ 安全建议:

  • 不要轻易授予 cluster-admin 权限。
  • 使用 ServiceAccount 代替用户账户进行应用授权。
  • 定期审计权限配置。

1.3资源对象的概述

1.3.1 什么是资源对象

        在 Kubernetes 中,资源对象(Resource Object) 是集群状态的抽象表示,用于描述你希望系统运行的状态(声明式配置)。

常见资源对象包括:

类型说明
Pod最小部署单元,运行一个或多个容器
Deployment管理 Pod 的副本与更新(推荐用于无状态应用)
Service为 Pod 提供稳定的网络访问入口
ConfigMap存储非敏感配置数据
Secret存储敏感信息(如密码、密钥)
Namespace资源逻辑隔离
StatefulSet用于有状态应用(如数据库)
DaemonSet确保每个节点运行一个 Pod(如日志采集)
Job / CronJob执行一次性或定时任务

 特点:声明式 API,你只需描述“想要什么”,Kubernetes 控制器会自动维持该状态。

1.3.2 如何创建对象资源

有两种主要方式:

  1. 命令式命令(Imperative Commands)

    kubectl run nginx --image=nginx:latest --port=80

     缺点:不易版本控制、难以复用,不推荐用于生产。

  2. 声明式配置(Declarative Configuration)——推荐方式

    使用 YAML 文件定义资源,通过 kubectl apply -f xxx.yaml 创建。

    kubectl apply -f deployment.yaml

     优点:可版本控制、可复用、可审计、适合 CI/CD。

二、pod详解

2.1 pod概述

2.1.1 什么是pod

        Pod 是 Kubernetes 中最小的调度和管理单元。它封装了一个或多个紧密关联的容器,共享以下资源:

  • 网络命名空间(共享 IP 和端口)
  • 存储卷(Volume)
  • IPC 和 UTS 命名空间

举例:一个 Pod 中可以包含一个主应用容器和一个日志收集 sidecar 容器。

2.1.2为什么需要 Pod?
  • 容器本身不具备“协作”能力,Pod 提供了一种逻辑上的“主机”概念。
  • 允许多个容器协同工作(如:主应用 + sidecar)。
  • 实现更灵活的部署模型(如:initContainer 初始化容器)。

Pod 的 5 种核心 Phase(阶段)

Phase说明
PendingPod 创建过程中,但是它尚未被调度成功。
RunningPod 已调度到节点,且至少有一个容器正在运行
Succeeded所有容器都已成功执行完毕并退出(如 Job 完成)
Failed至少有一个容器以失败状态退出(非 0 状态码)
Unknown无法获取 Pod 状态(通常因节点失联)
2.1.3pod的创建过程

当执行 kubectl apply -f pod.yaml 后,Kubernetes 内部发生了什么?

  1. API Server 接收请求,验证并持久化到 etcd。
  2. Scheduler 监听到未调度的 Pod,选择合适的节点(基于资源、亲和性等)。
  3. kubelet(运行在目标节点上)收到 Pod 创建指令。
  4. 容器运行时(如 containerd)拉取镜像并启动容器。
  5. 健康检查(liveness/readiness probe)开始运行。
  6. Pod 状态变为 Running

🔍 可通过 kubectl describe pod <name> 查看事件日志,排查创建失败原因。

2.2 pod管理命令

命令说明
kubectl get pods列出 Pod
kubectl get pods -o wide显示 Pod 所在节点
kubectl describe pod <name>查看 Pod 详细信息(事件、容器状态等)
kubectl logs <pod-name>查看容器日志
kubectl logs <pod-name> -c <container>查看多容器 Pod 中指定容器日志
kubectl exec -it <pod-name> -- sh进入容器交互式终端
kubectl delete pod <name>删除 Pod(Deployment 会自动重建)
kubectl cp 源文件  目标文件  [pod名:绝对路径]删除 Pod(Deployment 会自动重建)

 注意:直接删除 Pod 通常不会影响 Deployment 管理的应用,因为控制器会自动重建。

三、资源监控指标

3.1资源指标概述

Kubernetes 支持对集群资源使用情况进行监控,主要包括:

  • CPU 使用率
  • 内存使用量
  • 网络 I/O
  • 存储使用

这些指标用于:

  • 故障排查
  • 自动扩缩容(HPA)
  • 成本优化

3.2 Meterics组件安装

Metrics Server 是 Kubernetes 的核心监控组件,负责聚合各节点的资源指标。

安装步骤(以主流方式为例):

wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml# 编辑 components.yaml,添加 --kubelet-insecure-tls
containers:
- name: metrics-serverimage: registry.k8s.io/metrics-server/metrics-server:v0.6.4args:- --kubelet-insecure-tlskubectl apply -f components.yaml

验证安装:

kubectl top nodes
kubectl top pods

如果能正常显示 CPU 和内存使用,则安装成功。

3.3监控资源指标

常用命令:

命令说明
kubectl top node查看节点资源使用
kubectl top pod查看 Pod 资源使用
kubectl top pod --containers查看 Pod 内各容器资源使用

📊 进阶:生产环境建议使用 Prometheus + Grafana 实现更全面的监控告警。

四、资源清单文件

4.1 什么是资源清单文件

        资源清单文件(Manifest File) 是一个 YAML 或 JSON 格式的文件,用于声明 Kubernetes 资源对象的期望状态。

它包含以下关键字段:

apiVersion: apps/v1        # API 版本
kind: Deployment           # 指定资源类型为 Deployment,用于管理 Pod 的副本集和滚动更新
metadata:name: nginx-deployment   # 名称  定义 Deployment 的名称为 nginx-deploymentlabels:app: nginx
#副本与 Pod 模板
spec:replicas: 3              # replicas: 3:指定运行 3 个相同的 Pod 副本以实现高可用selector:matchLabels:     app: nginxtemplate:    # template:定义 Pod 的配置模板,包括容器镜像、端口等metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.21   使用 Nginx 1.21 版本的官方镜像ports:- containerPort: 80  暴露容器内的 80 端口,用于 HTTP 流量

        metadata.labels 和 spec.selector.matchLabels:通过标签 app: nginx 关联 Pod 模板与选择器,确保 Deployment 管理正确的 Pod
核心功能‌
该配置会创建 3 个 Nginx Pod,并通过 Service 或 Ingress 对外提供服务
支持滚动更新和回滚,修改镜像版本后会自动替换旧 Pod

4.3 为什么使用资源清单文件

优势说明
可版本控制使用 Git 管理配置变更历史
可复用同一份文件可用于开发、测试、生产环境
 可审计谁在什么时候修改了什么?一目了然
 支持 CI/CD与 Jenkins、ArgoCD 等工具集成
减少人为错误避免手动命令出错

对比:命令式操作无法追溯、难以协作。

4.4 资源清单文件可以做什么

  • 定义应用部署(Deployment)
  • 暴露服务(Service)
  • 挂载配置(ConfigMap)
  • 存储密钥(Secret)
  • 设置资源限制(requests/limits)
  • 配置健康检查(liveness/readiness probe)
  • 实现自动扩缩容(HPA)
  • 管理有状态应用(StatefulSet)
  • 执行定时任务(CronJob)

实践建议:将不同资源分类存放,如 deployments/, services/, configs/

4.5 清单文件创建pod

这是 Kubernetes 最基础也是最重要的操作之一。下面我们通过一个完整示例来演示如何用 YAML 文件创建 Pod。

示例:创建一个 Nginx Pod

文件名:pod-nginx.yaml

apiVersion: v1  # 定义Kubernetes API版本(v1是核心API版本)
kind: Pod    # 资源类型:Pod是Kubernetes中最小的部署单元
metadata:     # 元数据部分name: nginx-pod   # Pod名称(需唯一) labels:         # 标签用于分类和选择器匹配app: nginx       # 标识应用类型environment: demo     # 标记环境类型 
spec:                       # 规格定义containers:               # 容器列表- name: nginx-container      # 容器名称image: nginx:1.21            # 使用Nginx官方1.21版本镜像ports:                         # 端口配置 - containerPort: 80            # 容器内部监听80端口 name: http                    # 端口命名(可选)resources:                           # 资源请求/限制(单位:Mi=MiB,m=毫核)requests:                   # 最低资源保障(调度依据)memory: "64Mi"           # 最低64Mi内存         cpu: "250m"    # 最低0.25个CPU核心   cpu: "250m"limits:                      # 资源使用上限memory: "128Mi"           # limits:         memory: "128Mi" cpu: "500m"                # 最多128Mi内存     cpu: "500m"      # 最多0.5个CPU核心readinessProbe:             # 就绪探针(检查容器是否准备好接收流量)httpGet:                    # HTTP探测方式path: /                   # 检查根路径  port: 80                     # 使用http端口initialDelaySeconds: 5        # 启动后5秒开始探测periodSeconds: 10             # 每10秒探测一次livenessProbe:                 # 存活探针(检查容器是否健康运行)httpGet:path: /port: 80initialDelaySeconds: 15    # 启动后15秒开始探测periodSeconds: 20           # 每20秒探测一次restartPolicy: Always        # 重启策略:Always表示容器退出时总是重启

创建 Pod

kubectl apply -f pod-nginx.yaml

验证

kubectl get pods
kubectl describe pod nginx-pod
kubectl logs nginx-pod
进阶技巧
  1. 使用 ConfigMap 注入配置

    env:
    - name: ENV_NAMEvalueFrom:configMapKeyRef:name: app-configkey: environment
  2. 挂载存储卷

    volumes:
    - name: html-volumeemptyDir: {}
    containers:volumeMounts:- name: html-volumemountPath: /usr/share/nginx/html
  3. 多容器 Pod(Sidecar 模式)

    在同一 Pod 中运行 Nginx 和一个日志同步容器,共享存储卷。

提示:虽然可以直接创建 Pod,但生产环境强烈建议使用 Deployment 管理 Pod,以实现滚动更新、自动恢复等功能。


总结

模块核心要点
集群管理kubectl 命令、RBAC 授权、节点维护
Pod最小单元、共享网络/存储、生命周期管理
监控Metrics Server、kubectl top、HPA 基础
清单文件声明式配置、YAML 结构、GitOps 基础

文章转载自:

http://tzZ1zyNR.djxnn.cn
http://lpOjLJlT.djxnn.cn
http://XVIHkmMj.djxnn.cn
http://eEHHfJ7k.djxnn.cn
http://DOCEBvE9.djxnn.cn
http://j3kEMmBO.djxnn.cn
http://ZIY9pN2s.djxnn.cn
http://91YIhE7b.djxnn.cn
http://FBNtvF8V.djxnn.cn
http://zzeOyaKU.djxnn.cn
http://PYvXG8S3.djxnn.cn
http://8mnDFnap.djxnn.cn
http://BpxiXb70.djxnn.cn
http://dt34vwTm.djxnn.cn
http://OgnUG4qg.djxnn.cn
http://iSUkN3zP.djxnn.cn
http://Ajgw09Ki.djxnn.cn
http://uIoHIAiV.djxnn.cn
http://VcesIkfi.djxnn.cn
http://1SgxGT49.djxnn.cn
http://wWmyTlJK.djxnn.cn
http://acDB3wxC.djxnn.cn
http://h3EQNJNQ.djxnn.cn
http://dOBiMMuA.djxnn.cn
http://iFyjnbnQ.djxnn.cn
http://9XeQB9qV.djxnn.cn
http://qmcOu6pB.djxnn.cn
http://1SzgrYhi.djxnn.cn
http://b709UeOC.djxnn.cn
http://o6vkjzOS.djxnn.cn
http://www.dtcms.com/a/368275.html

相关文章:

  • ES04-批量写入
  • 大数据毕业设计推荐:基于Spark的零售时尚精品店销售数据分析系统【Hadoop+python+spark】
  • 企业数字安全双保险:终端安全与数据防泄漏如何构筑全方位防护体系
  • 信息系统安全保护措施文件方案
  • 【C++】 list 容器模拟实现解析
  • 鹿客发布旗舰新品AI智能锁V6 Max,打造AI家庭安全领域新标杆
  • 【GEOS-Chem 输入数据】使用 AWS CLI 访问 GEOS-Chem 数据
  • 23种设计模式——原型模式 (Prototype Pattern)详解
  • 《Cocos Creator的2D、3D渲染使用记录》
  • Conda 使用py环境隔离
  • 数据结构:栈和队列力扣算法题
  • 深度学习之第八课迁移学习(残差网络ResNet)
  • 数据一致性、AI样本可追溯性与数据治理
  • 基于MATLAB的CNN大气散射传播率计算与图像去雾实现
  • 【Redis】初识 Redis 与基础数据结构
  • 分布式常见面试题整理
  • “卧槽,系统又崩了!”——别慌,这也许是你看过最通俗易懂的分布式入门
  • 数字时代的 “安全刚需”:为什么销售管理企业都在做手机号码脱敏
  • 乐观并发: TCP 与编程实践
  • 两条平面直线之间通过三次多项式曲线进行过渡的方法介绍
  • if __name__=‘__main__‘的用处
  • MySQL知识回顾总结----数据类型
  • WeaveFox AI智能开发平台介绍
  • Oracle:select top 5
  • sub3G、sub6G和LB、MB、HB、MHB、LMHB、UHB之间的区别和联系
  • Tenda AC20路由器缓冲区溢出漏洞分析
  • 52核心52线程,Intel下一代CPU憋了个大的
  • 50kNm风能传动轴扭转疲劳检测试验台指标
  • 蓓韵安禧DHA温和配方:安全营养的智慧守护
  • Kafka面试精讲 Day 8:日志清理与数据保留策略