K8S核心知识点
K8S核心概念
Pod
K8S最小调度单元,包含一个或多个容器,共享网络和存储。Pod设计为临时性,通常由控制器管理生命周期。
Deployment
声明式管理Pod副本集的控制器,支持滚动更新、回滚和扩缩容。通过定义replicas
确保应用高可用。
Service
为一组Pod提供稳定访问入口,通过标签选择器关联Pod。支持ClusterIP、NodePort、LoadBalancer等类型。
Namespace
逻辑隔离集群资源,适用于多租户环境。系统默认创建kube-system
、default
等命名空间。
核心架构组件
Master节点
- API Server:集群操作入口,RESTful接口交互
- Scheduler:根据资源需求将Pod调度到Node
- Controller Manager:运行副本控制、节点监控等核心控制器
- etcd:分布式键值存储,保存集群状态
Node节点
K8S的架构图
- kubelet:与API Server通信,管理容器生命周期
- kube-proxy:维护网络规则,实现Service负载均衡
- 容器运行时:如Docker、containerd,负责运行容器
网络模型
CNI插件
实现Pod跨节点通信,常见方案包括Calico、Flannel、Cilium。需满足以下要求:
- 所有Pod可不经NAT直接通信
- 节点与Pod可不经NAT直接通信
- Pod看到的自身IP与其他Pod看到的IP一致
Ingress
管理外部访问的API对象,通过规则定义HTTP/HTTPS路由。通常配合Ingress Controller(如Nginx)使用。
存储管理
Volume
提供Pod级持久化存储,支持emptyDir、hostPath、NFS等类型。生命周期与Pod绑定。
PV/PVC
- PersistentVolume (PV):集群存储资源,由管理员配置
- PersistentVolumeClaim (PVC):用户存储请求,动态绑定PV
StorageClass
定义动态供给存储的模板,支持按需创建PV(如AWS EBS、GCE PD)。
运维关键点
资源配额
通过ResourceQuota
限制Namespace级别的CPU、内存等资源使用量,避免资源抢占。
HPA
Horizontal Pod Autoscaler基于CPU/内存或自定义指标自动扩缩容,示例配置:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:name: php-apache
spec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: php-apacheminReplicas: 1maxReplicas: 10metrics:- type: Resourceresource:name: cputarget:type: UtilizationaverageUtilization: 50
RBAC
基于角色的访问控制,通过Role
和RoleBinding
定义细粒度权限。示例:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:namespace: defaultname: pod-reader
rules:
- apiGroups: [""]resources: ["pods"]verbs: ["get", "watch", "list"]
调试命令
基础诊断
kubectl get pods -n <namespace> # 查看Pod状态
kubectl describe pod <pod-name> # 获取详细事件
kubectl logs <pod-name> -c <container> # 查看容器日志
网络测试
kubectl exec -it <pod-name> -- curl <service-name> # 测试Service连通性
kubectl run busybox --image=busybox --rm -it --restart=Never -- ping <ip> # 临时诊断容器
资源监控
kubectl top nodes # 查看节点资源使用
kubectl top pods # 查看Pod资源消耗