AWS Kubernetes 工作坊:Kubernetes 核心概念详解
前言
在 AWS Kubernetes 工作坊中,我们已经成功搭建了一个 Kubernetes 集群。现在,让我们深入了解 Kubernetes 的核心概念,这些知识将帮助你更好地管理和运维 Kubernetes 环境。
Kubernetes 命令行工具 kubectl
kubectl
(发音为"cube control")是与 Kubernetes API Server 交互的主要命令行工具。API Server 运行在集群的主节点上,是整个 Kubernetes 系统的"大脑"。
Kubernetes 平台通过一系列抽象概念来描述集群的期望状态,包括运行的应用程序、工作负载、容器镜像、网络资源等。这些抽象概念都映射到 Kubernetes API 对象上。
基础操作
查看集群节点
要查看集群中的所有节点,可以运行:
kubectl get nodes
输出示例:
NAME STATUS ROLES AGE VERSION
ip-192-168-160-85.us-west-2.compute.internal Ready <none> 10m v1.10.3
创建第一个 Pod
Pod 是 Kubernetes 中最小的可部署单元。让我们创建一个运行 Nginx 的 Pod:
kubectl run nginx --image=nginx
查看部署状态:
kubectl get deployments
查看运行中的 Pod:
kubectl get pods
查看 Pod 详情
获取特定 Pod 的详细信息:
kubectl describe pod <pod-name>
这个命令会显示 Pod 的完整状态,包括:
- 运行在哪个节点上
- 使用的容器镜像
- 资源分配情况
- 事件日志
深入理解 Pod
Pod 基础概念
Pod 是 Kubernetes 中最小的可部署单元,它是一个或多个容器的逻辑集合。Pod 中的容器共享:
- 网络命名空间(可以通过 localhost 互相访问)
- 存储卷
- IPC 命名空间
通过 YAML 创建 Pod
更推荐的方式是使用 YAML 文件定义 Pod:
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
name: nginx-pod
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
创建 Pod:
kubectl apply -f pod.yaml
访问 Pod 中的服务
可以使用端口转发来访问 Pod 中的服务:
kubectl port-forward <pod-name> 8080:80
然后在浏览器中访问 http://localhost:8080
即可看到 Nginx 的欢迎页面。
资源管理与 QoS
资源请求与限制
Kubernetes 允许为容器设置 CPU 和内存的请求(request)和限制(limit):
- 请求:容器运行所需的最小资源量
- 限制:容器能使用的最大资源量
示例配置:
resources:
limits:
memory: "200Mi"
cpu: 2
requests:
memory: "100Mi"
cpu: 1
QoS 等级
Kubernetes 根据资源设置分配三种 QoS 等级:
-
Guaranteed(最高优先级):
- 所有容器都设置了内存和 CPU 限制
- 请求值等于限制值(或未设置请求值)
-
Burstable(中等优先级):
- 至少一个容器设置了内存或 CPU 请求
- 不满足 Guaranteed 条件
-
BestEffort(最低优先级):
- 容器没有设置任何资源请求或限制
资源不足时的行为
-
当节点内存不足时:
- BestEffort Pod 最先被终止
- 然后是 Burstable Pod
- Guaranteed Pod 最后被终止
-
当容器超过内存限制时:
- 容器会被终止(OOMKilled)
- 如果 Pod 支持重启,kubelet 会重启它
实践建议
- 生产环境:为关键服务设置 Guaranteed QoS
- 开发环境:可以使用 Burstable 或 BestEffort
- 资源设置:
- 通过监控确定合理的请求值
- 限制值应略高于预期峰值
- 调试技巧:
- 使用
kubectl logs
查看容器日志 - 使用
kubectl exec
进入容器调试 - 使用
kubectl describe
查看详细状态
- 使用
清理资源
完成实验后,记得删除创建的资源:
kubectl delete deployment/nginx
kubectl delete pod <pod-name>
总结
通过本教程,我们学习了 Kubernetes 的核心概念和基本操作,包括:
- 使用 kubectl 管理集群
- Pod 的创建和管理
- 资源请求和限制的设置
- QoS 等级及其影响
这些基础知识是使用 Kubernetes 的基石,掌握它们将帮助你更好地部署和管理容器化应用。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考