EKS 存储第 3 部分测验
本测验用于检验你对 Amazon EKS 中存储监控、故障排查、成本优化和安全性的理解。
问题 1:存储监控指标
在 EKS 中监控存储性能的关键指标有哪些?
答案:EBS 指标:
- VolumeReadOps/VolumeWriteOps:IOPS 使用量
- VolumeReadBytes/VolumeWriteBytes:吞吐量
- VolumeTotalReadTime/VolumeTotalWriteTime:延迟
- VolumeQueueLength:待处理 I/O 请求数
- BurstBalance:突发积分余额
EFS 指标:
- DataReadIOBytes/DataWriteIOBytes:数据传输量
- MetadataIOBytes:元数据操作量
- ClientConnections:客户端连接数
- PercentIOLimit:I/O 限制利用率
Kubernetes 指标:
- kubelet_volume_stats_used_bytes:Volume 使用量
- kubelet_volume_stats_capacity_bytes:Volume 容量
- container_fs_usage_bytes:Container 文件系统使用量
问题 2:存储问题诊断
当 EKS 中的 Pod 处于“Pending”状态并且无法挂载 PVC 时,你应该检查什么?
答案:
检查 PVC 状态:
bashkubectl get pvc kubectl describe pvc <pvc-name>检查 Storage Class:
bashkubectl get storageclass kubectl describe storageclass <storage-class-name>检查 CSI Driver 状态:
bashkubectl get pods -n kube-system -l app=ebs-csi-controller kubectl logs -n kube-system -l app=ebs-csi-controller检查 Node 权限:
- 验证 EC2 instance profile 中所需的 IAM 权限
- 验证 EBS CSI driver service account 权限
Availability Zone 兼容性:
- 验证 Pod 和 EBS Volume 位于同一 AZ
资源限制:
- EBS Volume 限制(每个 instance 的最大 Volume 数)
- 验证 Volume 大小限制
问题 3:性能优化
如何为 EKS 中的数据库工作负载优化存储性能?
答案:
选择合适的 Volume 类型:
yamlapiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: fast-ssd provisioner: ebs.csi.aws.com parameters: type: io2 iops: "10000" encrypted: "true" volumeBindingMode: WaitForFirstConsumer使用 Multi-Attach Volume(适用于只读工作负载):
yamlparameters: type: io2 multiAttach: "true"利用 Instance Store:
yaml# Instance store for temporary data volumeMounts: - name: instance-store mountPath: /tmp volumes: - name: instance-store hostPath: path: /mnt/instance-store选择合适的 Filesystem:
- XFS:大文件和高并发
- ext4:通用用途
- 设置合适的 mount options
I/O Scheduler 优化:
bash# noop or deadline scheduler for SSD echo noop > /sys/block/nvme0n1/queue/scheduler
问题 4:成本优化策略
可以使用哪些策略来优化 EKS 存储成本?
答案:
选择合适的 Volume 类型:
- gp3:适用于大多数工作负载且具有成本效益
- 从 gp2 迁移到 gp3
- 仅在必要时使用预置 IOPS
优化 Volume 大小:
bash# Monitor usage kubectl top pods --containers df -h # Inside podLifecycle Management:
yaml# Snapshot automation apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: csi-aws-vsc driver: ebs.csi.aws.com deletionPolicy: Delete利用 EFS Storage Classes:
yaml# Infrequent Access storage class parameters: performanceMode: generalPurpose throughputMode: provisioned provisionedThroughputInMibps: "100"清理未使用的 Volume:
bash# Check unused PVs kubectl get pv | grep Available # Clean up old snapshots aws ec2 describe-snapshots --owner-ids self \ --query 'Snapshots[?StartTime<=`2023-01-01`]'
问题 5:安全最佳实践
如何增强 EKS 存储安全性?
答案:
启用加密:
yamlapiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: encrypted-gp3 provisioner: ebs.csi.aws.com parameters: type: gp3 encrypted: "true" kmsKeyId: "arn:aws:kms:region:account:key/key-id"最小化 IAM 权限:
json{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:CreateVolume", "ec2:AttachVolume", "ec2:DetachVolume", "ec2:DeleteVolume", "ec2:DescribeVolumes", "ec2:CreateSnapshot", "ec2:DeleteSnapshot", "ec2:DescribeSnapshots" ], "Resource": "*", "Condition": { "StringEquals": { "aws:RequestedRegion": "us-west-2" } } } ] }网络安全:
yaml# EFS mount target security group securityGroupSelector: matchLabels: Name: "efs-mount-target-sg"访问控制:
yaml# RBAC configuration apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: storage-admin rules: - apiGroups: [""] resources: ["persistentvolumes", "persistentvolumeclaims"] verbs: ["get", "list", "create", "delete"]审计日志记录:
yaml# Storage-related audit policy - level: Metadata resources: - group: "" resources: ["persistentvolumes", "persistentvolumeclaims"]
6. 在 Amazon EKS 中用于存储监控和管理的最有效工具组合是什么?
A. 仅使用 CloudWatch 和 AWS Console B. CloudWatch、Prometheus、Grafana 以及自动化管理工具 C. 手动检查和日志分析 D. 仅使用第三方监控工具
显示答案
答案:B. CloudWatch、Prometheus、Grafana 以及自动化管理工具
解析: 在 Amazon EKS 中,用于存储监控和管理的最有效工具组合是结合使用 CloudWatch、Prometheus、Grafana 以及自动化管理工具。这种集成方法既收集 AWS 原生指标,也收集详细的 Kubernetes 级别指标,对其进行可视化,并通过自动化管理提升运营效率。
集成监控和管理架构:
CloudWatch:
- 收集 AWS 基础设施级别指标
- EBS、EFS、FSx 存储性能指标
- 警报和事件管理
Prometheus:
- 收集详细的 Kubernetes 级别指标
- 收集自定义存储指标
- 长期数据保留和查询
Grafana:
- 集成仪表板和可视化
- 集成 CloudWatch 和 Prometheus 数据源
- 自定义告警和报告
自动化管理工具:
- 存储预置自动化
- 容量规划和扩缩容
- 问题检测和解决
分数计算:
- 5-6 个正确答案:优秀(EKS 存储专家级别)
- 3-4 个正确答案:良好(建议进一步学习)
- 1-2 个正确答案:一般(需要复习基础概念)
- 0 个正确答案:需要改进(需要重新学习全部内容)
实现示例:
CloudWatch Container Insights 设置:
yamlapiVersion: v1 kind: ConfigMap metadata: name: cwagent-config namespace: amazon-cloudwatch data: cwagentconfig.json: | { "logs": { "metrics_collected": { "kubernetes": { "cluster_name": "my-cluster", "metrics_collection_interval": 60 } }, "force_flush_interval": 5 }, "metrics": { "namespace": "EKS/Storage", "metrics_collected": { "statsd": { "service_address": ":8125" } } } }Prometheus 和 Storage Exporter 设置:
yamlapiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: storage-monitor namespace: monitoring spec: selector: matchLabels: app: storage-exporter endpoints: - port: metrics interval: 30s path: /metricsGrafana Dashboard 配置:
yamlapiVersion: v1 kind: ConfigMap metadata: name: storage-dashboard namespace: monitoring data: storage-dashboard.json: | { "title": "EKS Storage Dashboard", "panels": [ { "title": "EBS Volume IOPS", "datasource": "Prometheus", "targets": [ { "expr": "aws_ebs_volume_read_ops + aws_ebs_volume_write_ops", "legendFormat": "{{volume_id}}" } ] }, { "title": "EFS Throughput", "datasource": "CloudWatch", "targets": [ { "namespace": "AWS/EFS", "metricName": "TotalIOBytes", "dimensions": { "FileSystemId": "*" }, "statistic": "Sum" } ] } ] }自动化存储管理 CronJob:
yamlapiVersion: batch/v1 kind: CronJob metadata: name: storage-manager spec: schedule: "0 1 * * *" jobTemplate: spec: template: spec: containers: - name: storage-manager image: storage-tools:latest command: - /bin/bash - -c - | # Identify unused PVCs UNUSED_PVCS=$(kubectl get pvc -A -o json | jq -r '.items[] | select(.status.phase == "Bound") | select(.metadata.annotations.lastUsed < "'$(date -d "30 days ago" +%Y-%m-%d)'") | .metadata.name') # Create snapshots for PVC in $UNUSED_PVCS; do kubectl create snapshot ... done # Analyze volume usage and generate reports ... restartPolicy: OnFailure
关键监控指标:
EBS Volume 指标:
- VolumeReadOps/VolumeWriteOps
- VolumeReadBytes/VolumeWriteBytes
- VolumeQueueLength
- BurstBalance(gp2 Volume)
EFS 指标:
- TotalIOBytes
- DataReadIOBytes/DataWriteIOBytes
- MetadataIOBytes
- ClientConnections
- StorageBytes(Standard/IA)
FSx for Lustre 指标:
- DataReadBytes/DataWriteBytes
- DataReadOperations/DataWriteOperations
- FreeDataStorageCapacity
- LogicalDiskUsage
Kubernetes 存储指标:
- PVC 使用量和容量
- Volume 挂载状态
- Storage Class 使用情况
高级监控和管理功能:
预测分析:
- 容量预测和规划
- 性能趋势分析
- 成本预测
异常检测:
- 检测异常 I/O 模式
- 性能下降的早期预警
- 容量不足预测
自动化优化:
- 根据使用模式推荐 Volume 类型
- 自动扩容和缩容
- 成本优化建议
集成报告:
- 存储使用量和性能报告
- 成本分摊和分析
- 合规性和审计报告
实现最佳实践:
多层级监控:
- 基础设施级别(CloudWatch)
- Kubernetes 级别(Prometheus)
- 应用程序级别(自定义指标)
告警策略:
- 根据严重程度设置告警
- 告警分组和去重
- 定义升级路径
数据保留策略:
- 高分辨率数据:短期保留
- 聚合数据:长期保留
- 在成本和实用性之间取得平衡
逐步引入自动化:
- 首先实施监控和告警
- 添加报告和分析功能
- 逐步引入自动化管理
其他选项的问题:
- A. 仅使用 CloudWatch 和 AWS Console:提供 AWS 原生指标,但缺少详细的 Kubernetes 级别指标,并且自动化能力有限。
- C. 手动检查和日志分析:缺乏可扩展性,难以进行实时监控,并且无法主动检测问题。
- D. 仅使用第三方监控工具:与 AWS 原生指标的集成可能有限,并且可能产生额外成本。