k8s基础概念

Kubernetes(简称k8s)是一个开源的容器编排平台,用于自动化容器化应用的部署、扩展、运维和管理。以下是k8s的核心知识点整理:

一、核心概念

  1. Pod

    • k8s的最小部署单元,包含一个或多个紧密关联的容器(共享网络、存储和生命周期)。
    • 每个Pod有唯一IP,容器间通过localhost通信,Pod重启后IP可能变化。
  2. Service

    • 定义Pod的访问方式,为动态变化的Pod提供固定访问点(IP:端口)。
    • 类型:ClusterIP(集群内部访问)、NodePort(节点端口暴露)、LoadBalancer(云厂商负载均衡)、ExternalName(映射外部域名)。
  3. Deployment

    • 声明式管理Pod和ReplicaSet,支持滚动更新、版本回滚、扩缩容。
    • 不直接创建Pod,而是通过管理ReplicaSet来间接管理Pod。
  4. ReplicaSet

    • 确保集群中始终运行指定数量的Pod副本,用于维持Pod可用性(Deployment会自动创建ReplicaSet)。
  5. StatefulSet

    • 用于部署有状态应用(如数据库),每个Pod有稳定的名称、网络标识和持久存储,支持有序部署/扩缩容、有序删除。
  6. DaemonSet

    • 确保所有(或指定)节点运行相同的Pod,常用于日志收集(如fluentd)、监控代理(如prometheus-node-exporter)。
  7. ConfigMap/Secret

    • ConfigMap:存储非敏感配置数据(如环境变量、配置文件),可被Pod挂载或注入环境变量。
    • Secret:存储敏感信息(如密码、证书),数据会base64编码(非加密,需配合RBAC或外部密钥管理增强安全)。
  8. Namespace

    • 用于隔离集群资源(如开发、测试、生产环境),不同Namespace的资源名称可重复,默认有defaultkube-system等。

二、核心组件(架构)

k8s集群由控制平面(Control Plane)节点(Node) 组成。

1. 控制平面组件(管理集群状态)

  • API Server:所有操作的统一入口(RESTful API),负责认证、授权、数据验证和集群状态存储。
  • etcd:分布式键值数据库,存储集群所有状态(唯一的存储组件)。
  • Scheduler:根据节点资源(CPU/内存)、亲和性规则等,将Pod调度到合适的节点。
  • Controller Manager:运行各种控制器进程(如Deployment控制器、Node控制器、Service控制器等),确保集群状态符合预期。
  • Cloud Controller Manager:对接云服务提供商(如AWS、GCP)的API,管理云资源(如负载均衡、存储)。

2. 节点组件(运行容器的工作节点)

  • kubelet:在每个节点上运行,确保容器按照Pod规范(yaml定义)运行,向API Server汇报节点和Pod状态。
  • kube-proxy:在每个节点上运行,维护节点网络规则(如Service的负载均衡、Pod间通信),支持iptables或IPVS模式。
  • 容器运行时:负责运行容器的软件,如containerd、CRI-O(需符合k8s的CRI规范)。

三、网络模型

k8s网络遵循三大原则:

  1. 每个Pod有唯一的IP地址;
  2. Pod之间可直接通信(无需NAT);
  3. Pod内容器共享网络命名空间(localhost通信)。
  • 网络插件:需通过CNI(容器网络接口)插件实现,常用插件:
    • Flannel:简单的Overlay网络,适合小规模集群;
    • Calico:基于BGP的三层网络,支持网络策略(NetworkPolicy);
    • Weave Net:自带DNS和网络策略,部署简单。

四、存储

  1. 临时存储

    • emptyDir:Pod生命周期内的临时目录,Pod删除后数据丢失(如容器间共享临时文件)。
  2. 持久存储

    • PersistentVolume(PV):集群级别的存储资源(由管理员创建),独立于Pod生命周期。
    • PersistentVolumeClaim(PVC):用户对存储的“请求”,绑定到符合条件的PV后即可被Pod使用。
    • StorageClass:动态创建PV的模板,无需管理员手动创建PV(如对接云存储自动生成)。

五、调度与亲和性

  • 调度策略:Scheduler根据节点标签、Pod资源请求(requests)、节点污点(Taint)和Pod容忍度(Toleration)等选择节点。
  • 亲和性/反亲和性
    • 节点亲和性(NodeAffinity):Pod倾向于调度到特定标签的节点(如“GPU=yes”);
    • Pod亲和性(PodAffinity):Pod倾向于与特定标签的Pod调度到同一节点/拓扑域(如服务A和服务B需近距离通信);
    • 反亲和性:避免Pod调度到特定节点或与特定Pod共处(如避免单节点故障导致服务不可用)。

六、自动伸缩

  1. Horizontal Pod Autoscaler(HPA)

    • 根据CPU使用率、内存使用率或自定义指标(如QPS)自动调整Pod副本数量(扩缩容)。
  2. Vertical Pod Autoscaler(VPA)

    • 自动调整Pod的资源请求(requests)和限制(limits),适用于资源需求变化大的应用(需重启Pod生效)。

七、常用操作(kubectl命令)

  • 查看资源:kubectl get pods/deployments/services/namespaces
  • 创建资源:kubectl create -f xxx.yamlkubectl apply -f xxx.yaml(推荐,支持更新)
  • 查看详情:kubectl describe pod <pod-name>
  • 查看日志:kubectl logs <pod-name>
  • 进入容器:kubectl exec -it <pod-name> -- /bin/bash
  • 扩缩容:kubectl scale deployment <deploy-name> --replicas=3

八、应用部署流程

  1. 编写Deployment yaml(定义Pod模板、副本数等);
  2. 通过kubectl apply -f deployment.yaml部署应用;
  3. 编写Service yaml(关联Deployment的标签),暴露应用访问入口;
  4. (可选)配置Ingress实现HTTP/HTTPS路由、域名绑定;
  5. (可选)配置HPA实现自动扩缩容。

以上是k8s的核心知识点,掌握这些可以应对大部分基础运维和部署场景。深入学习可进一步研究网络策略、RBAC权限控制、自定义资源(CRD)等高级特性。

posted @ 2025-08-25 15:03  程煕  阅读(37)  评论(0)    收藏  举报