什么是Kubernetes

Kubernetes入门

简介

管理和运行这些容器,管理容器化的应用程序和服务

Pod是最小的kubernetes的最小调度单元 包括 主服务容器和 sidecar (日志收集、服务监控)

Kubernetes(简称K8s)是一个开源的容器编排平台,最初由Google开发,现已成为云原生计算基金会(CNCF)的毕业项目。它用于自动化部署、扩展和管理容器化应用程序。Kubernetes的设计目标是提供一个高度可扩展、自动化、自我修复的系统,以简化容器化应用的管理。

核心概念

  1. Pod

    • Kubernetes中的最小部署单元,一个Pod可以包含一个或多个容器。
    • 容器共享网络和存储资源。

    Pod是Kubernetes中的基本构建块和最小的部署单元。每个Pod可以包含一个或多个容器,这些容器共享相同的网络和存储资源。Pod的设计理念是为了支持紧密耦合的容器组,使得它们能够协同工作,共享资源。

    Pod的组成

    1. 容器
      • 每个Pod可以包含一个或多个容器。
      • 容器是独立运行的应用进程,共享Pod的网络和存储资源。
    2. 共享网络
      • 每个Pod拥有一个唯一的IP地址。
      • 容器之间可以通过localhost进行通信,共享相同的端口空间。
    3. 共享存储
      • Pod可以定义共享的存储卷(Volumes),供所有容器使用。
      • 支持多种存储类型,如本地存储、NFS、云存储等。

    Pod的生命周期

    Pod在Kubernetes中经历以下几个主要状态:

    1. Pending
      • Pod已经被创建,但尚未安排到节点上运行。
    2. Running
      • Pod已经被调度到一个节点上,并且至少有一个容器正在运行。
      • 如果所有容器都失败,Pod将进入下一个状态。
    3. Succeeded
      • Pod中的所有容器都成功完成执行。
    4. Failed
      • Pod中的容器失败,并且没有重启策略可以应用。
    5. Unknown
      • Kubernetes无法获取到Pod的状态,可能由于与节点的连接丢失。

    网络和存储共享机制

    1. 网络共享
      • 每个Pod分配一个唯一的IP地址,容器之间共享这个IP地址。
      • 容器可以通过localhost进行通信,共享相同的端口空间。
    2. 存储共享
      • Pod可以定义共享的存储卷,所有容器可以访问相同的存储路径。
      • 支持多种存储类型,如emptyDirPersistentVolumeConfigMapSecret等。

    资源管理

    Kubernetes允许为Pod设置资源限制和请求,以确保应用的稳定性和性能。

    1. 资源请求(Requests)
      • 为Pod分配的最小资源保证。
      • 例如,设置CPU和内存的最低要求。
    2. 资源限制(Limits)
      • 设置Pod可以使用的最大资源。
      • 防止Pod占用过多资源,影响其他Pod的运行。
  2. Service

    • 为Pod提供稳定的网络访问入口。
    • 使用标签选择器(Label Selector)选择一组Pod,并为它们提供一个虚拟IP地址和DNS名称。
  3. ReplicaSet

    • 确保在任意时刻都有指定数量的Pod副本在运行。
    • 如果某个Pod失败,ReplicaSet会自动启动一个新的Pod。

    ReplicaSet 是 Kubernetes 中用于确保指定数量 Pod 副本持续运行的关键组件。它的核心功能是通过自动创建和终止 Pod,来维持预设的副本数量,从而保证应用的高可用性和稳定性。

    核心功能

    1. 副本数量控制
      • ReplicaSet 确保在任何时候都有指定数量的 Pod 副本在运行。例如,如果设置副本数为 3,ReplicaSet 会持续监控集群,保证至少有 3 个 Pod 在运行。
    2. 自动恢复
      • 如果某个 Pod 因为节点故障、容器崩溃等原因停止运行,ReplicaSet 会自动检测到这一情况,并启动一个新的 Pod 来填补空缺。
    3. 滚动更新
      • ReplicaSet 支持滚动更新(Rolling Update),允许逐步替换旧的 Pod,以更新应用程序的版本或配置。这样可以避免服务中断,确保应用的可用性。
    4. 标签选择器
      • ReplicaSet 通过标签选择器(Label Selector)来选择和管理特定的 Pod。这意味着它可以根据预设的标签,自动将符合条件的 Pod 纳入管理范围。

    工作原理

    ReplicaSet 的工作原理可以分为以下几个步骤:

    1. 定义副本数
      • 在 ReplicaSet 的配置文件中,指定需要维持的 Pod 副本数量。
    2. 监控 Pod 状态
      • ReplicaSet 持续监控集群中所有 Pod 的状态,包括它们是否在运行、是否健康等。
    3. 检测变化
      • 当检测到 Pod 的数量少于预设的副本数时,ReplicaSet 会启动新的 Pod,直到达到目标数量。
    4. 自动恢复
      • 如果某个 Pod 停止运行,ReplicaSet 会立即启动一个新的 Pod,确保副本数量保持不变。
    5. 滚动更新
      • 当需要更新 Pod 的配置或镜像时,ReplicaSet 可以逐步替换旧的 Pod,启动新的 Pod,从而实现平滑的更新过程。
  4. Deployment

    • 用于管理Pod的滚动更新和回滚。
    • 提供声明式的更新,确保应用的版本升级平滑进行。
  5. Namespace

    • 用于将集群资源划分为多个虚拟集群,便于资源隔离和管理。
    • 例如,可以创建开发、测试和生产环境的Namespace。
  6. ConfigMap

    • 用于存储配置信息,避免将敏感信息或配置硬编码到容器镜像中。
    • 配置信息可以在运行时注入到Pod中。

    在 Kubernetes 中,ConfigMap 是一种用于存储应用程序配置信息的资源,它允许我们将配置信息从容器镜像中解耦出来,从而提高应用的灵活性和安全性。ConfigMap 可以存储键值对形式的数据,并且支持通过多种方式将这些数据注入到 Pod 中,包括环境变量、文件和命令行参数等。

    核心概念

    1. 配置解耦
      • ConfigMap 的主要目的是避免将配置信息硬编码到容器镜像中。通过分离配置和代码,我们可以更轻松地管理和更新配置,而无需重新构建镜像。
    2. 动态更新
      • ConfigMap 支持动态更新,即在应用运行时更新配置信息。Kubernetes 会自动将新的配置信息注入到 Pod 中,从而实现无中断的配置更新。
    3. 多种注入方式
      • ConfigMap 提供了多种将配置信息注入到 Pod 中的方式,包括环境变量、文件和命令行参数。这使得我们可以根据应用程序的需求,选择最适合的注入方式。
    4. 版本控制
      • ConfigMap 支持版本控制,允许我们回滚到之前的配置版本。这在需要修复配置错误或恢复到已知稳定状态时非常有用。
  7. Secret

    • 用于存储敏感信息,如密码、令牌等。
    • 与ConfigMap类似,但存储内容是加密的。
  8. Volume

    • 提供Pod的持久化存储,支持多种存储类型,如NFS、云存储等。
    • 使得容器在重启后仍能访问相同的存储数据。
  9. Horizontal Pod Autoscaler (HPA)

    • 根据CPU使用率或其他自定义指标自动调整Pod的数量。
    • 确保应用在高负载时能够自动扩展,低负载时能够缩减。

    Horizontal Pod Autoscaler (HPA) 是 Kubernetes 中一个强大的自动扩展工具,用于根据应用的负载情况自动调整Pod的数量。HPA 的核心目标是确保应用在高负载时能够自动扩展,以满足需求,而在低负载时自动缩减,以节省资源。通过HPA,开发者可以实现应用的弹性扩展,提高系统的可用性和效率。

    核心概念

    1. 自动扩展
      • HPA 通过监控Pod的资源使用情况(如CPU使用率)或其他自定义指标,自动调整Pod的数量,以适应负载的变化。
    2. 资源监控
      • HPA 需要实时监控Pod的资源使用情况,通常通过Kubernetes的Metrics Server或其他第三方监控工具实现。
    3. 扩展规则
      • HPA 根据预设的扩展规则(如CPU使用率的阈值)来决定是否需要增加或减少Pod的数量。
    4. 与ReplicaSet和Deployment的协同
      • HPA 通常与ReplicaSet或Deployment协同工作,通过调整ReplicaSet的副本数量来实现Pod的扩展或缩减。

    工作原理

    HPA 的工作原理可以分为以下几个步骤:

    1. 监控资源使用情况
      • HPA 持续监控目标Pod的资源使用情况,通常包括CPU使用率、内存使用率等。
    2. 评估负载情况
      • 根据监控数据,HPA 评估当前的负载情况,并与预设的扩展规则进行比较。
    3. 调整Pod数量
      • 如果当前负载超过了预设的阈值,HPA 会增加Pod的数量;反之,如果负载低于阈值,HPA 会减少Pod的数量。
    4. 与ReplicaSet或Deployment协同
      • HPA 通过调整ReplicaSet的副本数量,实现Pod的扩展或缩减。如果使用Deployment,HPA 会自动管理Deployment的副本数量。
  10. DaemonSet

    • 确保每个节点运行一个特定的Pod。
    • 常用于运行节点级别的守护进程,如日志收集、监控等。
  11. Job

    • 用于运行一次性任务,任务完成后Pod会被终止。
    • 支持并行任务的执行。
  12. CronJob

    • 用于定期运行任务,类似于Linux的cron作业。
    • 可以设置时间表来执行周期性的任务。

实例

假设我们想部署一个简单的Web应用,可以使用Kubernetes的Deployment、Service和ConfigMap来实现。

  1. Deployment

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: web-deployment
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: web
      template:
        metadata:
          labels:
            app: web
        spec:
          containers:
          - name: web
            image: mywebapp:latest
            ports:
            - containerPort: 80
            env:
              - name: CONFIG_PATH
                value: /etc/config
    

    这个Deployment会创建3个Pod,每个Pod运行一个Web应用容器,并从ConfigMap中读取配置。

  2. Service

    apiVersion: v1
    kind: Service
    metadata:
      name: web-service
    spec:
      selector:
        app: web
      ports:
      - protocol: TCP
        port: 80
        targetPort: 80
      type: LoadBalancer
    

    这个Service会为Web应用提供一个外部访问的入口,并将流量分发到后端的Pod。

  3. ConfigMap

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: web-config
    data:
      app.properties: |
        database.url=jdbc:mysql://db.example.com:3306/mydb
        database.username=user
        database.password=secret
    

    这个ConfigMap存储了Web应用的数据库配置信息,并被Deployment引用。

通过以上配置,Kubernetes会自动创建和管理Web应用的Pod、服务和配置,确保应用的高可用性和可扩展性。

总结

Kubernetes提供了丰富的功能和灵活的配置选项,能够满足各种复杂的应用场景。通过理解核心概念和实际操作,开发者可以高效地管理和扩展容器化应用。


以下是 Kubernetes 官方客户端 kubectl 的常用命令整理,涵盖基础操作、资源管理、调试监控等核心场景,引用自多个技术博客和官方文档:


kubectl 命令

一、基础操作

  1. 查看集群信息

    kubectl cluster-info  # 显示集群组件状态 [1]()
    kubectl get nodes -o wide  # 查看节点列表及详细信息 [3]()
    
  2. 资源对象管理

    kubectl get pods # 查看所有 Pod [7](https://blog.csdn.net/qq_34631220/article/details/121514222) kubectl describe pod 
    
  3. 配置文件操作

    kubectl apply -f deployment.yaml   # 应用配置文件 [5]()
    kubectl diff -f service.yaml   # 对比配置文件与集群状态差异 [1]()
    

二、资源管理

  1. 部署与服务

    kubectl run nginx --image=nginx # 快速创建单实例 Pod [3](https://blog.csdn.net/stone_tomcate/article/details/104332622) kubectl expose deployment nginx --type=NodePort # 将 Deployment 暴露为 Service [7](https://blog.csdn.net/qq_34631220/article/details/121514222) kubectl scale deployment nginx --replicas=3 
    
  2. 滚动更新与回滚

    kubectl rollout status deployment/nginx  # 查看更新状态 [4]()
    kubectl rollout undo deployment/nginx  # 回滚到上一个版本 [8]()
    
  3. 标签与注解

     kubectl label pod nginx app=web # 添加标签 [4](https://blog.csdn.net/wuhuayangs/article/details/125841826) kubectl annotate pod nginx description="frontend service"
    

三、调试与监控

  1. 日志与执行命令

    kubectl logs <pod-name>  # 查看 Pod 日志 [1]()
    kubectl exec -it <pod-name> -- /bin/sh  # 进入容器交互式终端 [7]()
    
  2. 资源监控

    kubectl top pod  # 查看 Pod 的 CPU/内存使用情况 [1]()
    kubectl get hpa  # 查看水平自动扩缩容策略 [1]()
    
  3. 端口转发与文件传输

    kubectl port-forward pod/nginx 8080:80 # 本地端口映射 [1](https://blog.csdn.net/a1010256340/article/details/141265735) kubectl cp ./local-file pod/nginx:/remote/path
    

四、集群管理

  1. 节点操作

    kubectl cordon <node-name>  # 标记节点不可调度 [1]()
    kubectl drain <node-name>  # 安全驱逐节点上的 Pod [1]()
    
  2. 证书与污点

    kubectl taint nodes key=value:NoSchedule # 添加污点 [8](https://blog.csdn.net/anqixiang/article/details/114150945) kubectl certificate approve # 批准证书签名请求 [2](https://blog.csdn.net/weixin_45561510/article/details/112470723)
    

五、高级功能

  1. 自动补全与插件

    source <(kubectl completion bash)  # 配置命令自动补全 [6]()
    kubectl plugin list  # 查看插件列表 [1]()
    
  2. 版本与帮助

    kubectl version # 查看客户端/服务端版本 [6](https://developer.aliyun.com/article/1525933) kubectl explain pods.spec
    

以上命令覆盖了 Kubernetes 日常运维的核心场景,更多细节可参考原文链接。如需完整命令列表或特定场景操作,建议结合官方文档 15 进一步学习。

posted @ 2025-07-10 09:54  crockery  阅读(10)  评论(0)    收藏  举报