// 安全研究 · 2024-12-27

云技术基础知识(三):Docker与K8s

🍬 写在前面

👨‍🎓 博主介绍:大家好,我是 vortex5 ,很高兴认识大家 ➤ 主页传送门

✨主攻领域:【网络安全】【渗透领域】【SRC挖掘】【靶场复现】 📝欢迎大家关注我的 vx 公.众.号:飓风瞭望 🎉如果本文对您有所帮助,请点赞➕评论➕收藏 一键三连😋 🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步 🙏作者水平有限,欢迎各位大佬指点,相互学习进步呀~

在这里插入图片描述 容器技术近年来在云计算和软件开发领域掀起了革命性变革,而 Docker 和 Kubernetes(简称 K8s)作为其中的两大核心技术,已经成为推动现代应用开发与部署的重要工具。Docker 以其轻量级虚拟化和快速部署能力,大大简化了开发与运维流程;而 Kubernetes 则以强大的容器编排能力,为大规模分布式系统的管理提供了可靠的解决方案。本文将详细介绍 Docker 和 Kubernetes 的基本概念、核心功能以及它们在实际应用中的优势与差异,帮助读者深入理解这两个热门容器技术在现代软件开发中的重要角色。


Docker

Docker是一个开源的容器化平台,它的主要目标是让开发人员能够更加便捷地创建、部署和运行应用程序。Docker利用容器技术,将应用程序及其所有依赖项(库、配置文件、环境变量等)打包到一个容器中,从而实现应用程序在任何环境中一致地运行,解决了“在我的机器上能运行”和“在生产环境中能运行”之间的差异问题。

以下是Docker的核心概念和特性:

  1. 镜像(Image): 镜像是Docker的构建基石,它是一个只读的模板,包含了应用程序和其所需的依赖项。用户可以使用Dockerfile来定义镜像的内容和构建步骤。镜像可以用于创建容器。
  2. 容器(Container): 容器是镜像的一个实例,它是一个运行中的进程,包含了一个应用程序及其依赖项。容器是轻量级的、独立的执行单元,可以在任何支持Docker的环境中运行。
  3. Dockerfile: Dockerfile是一个文本文件,用于定义镜像的内容和构建步骤。Dockerfile中包含了基础镜像、安装软件包、设置环境变量、拷贝文件等指令。
  4. Docker Hub: Docker Hub是Docker官方提供的公共镜像仓库,用户可以在其中找到各种已经构建好的镜像,并且可以共享自己构建的镜像。
  5. Docker Compose: Docker Compose是用于定义和管理多个容器的工具,它使用YAML文件描述应用程序的服务、网络和存储等,方便一键启动和停止应用程序的所有服务。
  6. Docker Swarm: Docker Swarm是Docker官方提供的容器编排工具,用于在多台主机上部署和管理容器集群,实现应用程序的高可用和扩展。
  7. Docker Registry: Docker Registry是用于存储和管理Docker镜像的私有仓库。用户可以搭建自己的Docker Registry,以存储私有镜像和保护知识产权。

Docker的优势在于简化了应用程序的构建、部署和管理过程。它使得开发人员可以在本地构建和测试容器化应用程序,然后将其轻松地部署到云端或其他环境中。同时,Docker的生态系统非常丰富,有大量的第三方工具和服务,帮助用户更好地使用和管理容器化应用程序。由于Docker的普及和广泛应用,它已成为现代云原生应用开发和部署的核心技术之一。


Kubernetes(K8s)

Kubernetes(简称 K8s)是一款开源的容器编排平台,旨在自动化容器化应用程序的部署、扩展和管理。最初由 Google 开发,Kubernetes 于 2014 年被捐赠给云原生计算基金会(CNCF)。它能够在多种云服务平台或本地数据中心运行,为容器化应用的管理提供了一整套功能齐全的工具和机制。

Kubernetes 在现代云计算中已成为管理容器化应用程序的事实标准,它通过简化复杂的操作流程,显著提高了效率和灵活性。

核心功能

  1. 容器编排
    Kubernetes 可简化容器化应用的定义与部署,通过自动化创建、启动、停止、重启容器,确保容器始终处于期望的状态。

  2. 自动化扩展
    根据应用负载的变化,Kubernetes 能够动态调整容器实例的数量,实现水平扩展以应对不同的工作负载需求。

  3. 自我修复
    Kubernetes 具备容器健康状态监控能力,能自动重启或替换故障容器,确保应用程序的高可用性。

  4. 服务发现与负载均衡
    Kubernetes 提供内置的服务发现和负载均衡功能,通过服务名称即可实现通信,无需关心容器具体所在节点。

  5. 配置和存储管理
    支持将配置文件或数据卷挂载到容器中,确保应用程序配置和数据的灵活管理与持久化存储。

  6. 滚动更新
    允许逐步更新容器版本,在不中断服务的情况下实现无缝升级。

  7. 多租户支持
    Kubernetes 提供多租户模型,支持不同团队或用户在同一集群上运行隔离的应用程序。

  8. 安全与身份验证
    内置访问控制、身份验证与授权机制,保护集群及应用程序免受未经授权的访问。

Kubernetes 的定位

需要明确的是,Kubernetes 本质上是一个容器编排平台,而不是云服务本身。它属于基础设施即服务(IaaS)之上的一层工具,用于管理和优化容器化应用在各种环境中的运行。尽管 Kubernetes 通常被部署在云计算平台上(如 AWS、Azure、Google Cloud 等),但它同样适用于本地数据中心,帮助用户实现统一的容器管理。

通过 Kubernetes,用户可以无缝地管理跨平台的容器化应用程序,极大地简化了云端或本地部署流程,同时提升了可扩展性与维护效率。


Kubernetes 架构

Kubernetes 通过其模块化和分布式架构,为管理容器化应用程序提供了高度灵活性和可靠性。以下是对其架构核心组件的详细解析:

1. 集群组成

Master 节点

Master 节点是 Kubernetes 的控制中心,负责整个集群的管理和协调。它运行以下关键组件:

  • kube-apiserver(API 服务器):
    提供 REST API 接口,是集群内外通信的核心。所有操作(如创建、更新、删除资源对象)都通过该接口完成。API 服务器还负责身份验证、授权和数据验证。

  • kube-controller-manager(控制器管理器):
    集成多个控制器模块以确保集群状态符合预期,包括:

    • 节点控制器(Node Controller):监控节点状态并响应故障。
    • 副本控制器(Replication Controller):维护 Pod 的副本数。
    • 服务账户和令牌控制器:管理命名空间的默认账户和访问令牌。
    • 其他控制器,如资源配额控制器和服务控制器。
  • kube-scheduler(调度器):
    根据资源需求和策略(如节点负载均衡、亲和性)将 Pod 分配到最适合的节点。

  • etcd(配置存储中心):
    分布式键值存储系统,用于存储 Kubernetes 的所有配置和状态数据。etcd 是整个集群的源数据中心,提供高可用性和一致性。

Worker Node 节点

Worker 节点是集群运行工作负载的地方,包含以下核心组件:

  • kubelet:
    负责与 Master 通信,接收指令并管理 Pod 和容器。它通过 API Server 同步任务并报告节点状态。

  • kube-proxy:
    提供集群网络代理和负载均衡功能,确保 Pod 之间以及 Pod 与外部的通信。

  • 容器运行时:
    支持运行容器的底层引擎,例如 Docker 或 Containerd,负责容器的生命周期管理。


2. 核心架构组件解析

Pod:

Pod 是 Kubernetes 的基本部署单元,表示一组共享资源(如存储、网络)的容器。它支持多容器协作,通常用于部署单一应用或一组紧密协作的服务。

Service:

Service 是一组 Pod 的稳定访问入口。通过虚拟 IP 和 DNS 服务发现机制,Service 实现了以下功能:

  • 提供稳定的网络访问,即使后端 Pod 动态变化。
  • 支持负载均衡,将流量均匀分发到后端 Pod。

Ingress:

Ingress 是暴露集群内服务给外部的网络入口。通过定义规则,Ingress 控制器可以处理 HTTP 和 HTTPS 请求并将其路由到集群内部的服务。

ConfigMap 和 Secret:

  • ConfigMap: 用于存储非机密配置数据,以解耦应用程序和配置文件。
  • Secret: 专用于存储敏感数据,如密码和密钥,采用加密传输和存储。

Volume:

Volume 是 Kubernetes 提供的持久化存储机制,允许 Pod 在生命周期中保持数据一致性。支持本地存储和云存储后端,如 NFS、AWS EBS 等。

Namespace:

用于逻辑分隔集群资源,支持多租户模式,便于团队隔离和资源管理。


3. 网络与通信

Kubernetes 的网络架构需要满足以下要求:

  • 所有 Pod 必须能够直接通信,无需 NAT。
  • 所有节点都可以与 Pod 通信,无需 NAT。
  • IP 地址必须唯一,Pod 之间的通信使用内部 IP。

网络插件:

网络插件负责为 Pod 提供网络隔离和连接功能。常见插件包括 Flannel、Calico 和 WeaveNet。

  • Flannel: 实现简单的覆盖网络。
  • Calico: 提供网络策略和安全性控制。

4. 高可用与容错

Kubernetes 的设计使其能够在节点或组件故障时自动恢复,包括:

  • Pod 自愈: 通过 Liveness Probe 和 Readiness Probe 检查容器状态,并在失败时重启或重新调度。
  • 节点故障恢复: 当 Worker Node 宕机时,Master 会将其工作负载重新分配到其他节点。

Docker和Kubernetes(K8s)区别

Docker和Kubernetes(简称为K8s)是两个不同的技术,但它们在容器化应用程序的开发和部署方面有一定的关联。下面是Docker和Kubernetes的主要区别:

  1. 功能和目的:
    • Docker: Docker是一个容器化平台,用于创建、构建、部署和运行容器。它主要关注单个容器的管理,可以轻松地将应用程序和其依赖项打包成一个独立的容器,使应用程序在不同环境中运行一致性。
    • Kubernetes: Kubernetes是一个容器编排平台,用于自动化管理容器化应用程序的部署、扩展和运维。它主要关注多个容器的编排和管理,可以管理多个容器实例,确保应用程序的高可用性和水平扩展。
  2. 作用范围:
    • Docker: Docker主要用于构建和运行单个容器,提供了Docker CLI和Docker Engine来管理容器。
    • Kubernetes: Kubernetes主要用于管理多个容器,将它们组织成一个完整的应用程序,提供了大规模容器编排、自动扩展、自我修复等功能。
  3. 功能重点:
    • Docker: Docker的主要功能重点在于镜像构建、容器创建和管理,以及本地开发和测试容器化应用程序。
    • Kubernetes: Kubernetes的主要功能重点在于容器编排、服务发现、自动扩展、负载均衡、滚动更新等,以及大规模应用程序管理。
  4. 部署和管理:
    • Docker: 使用Docker可以在任何支持Docker的环境中部署和管理容器化应用程序,包括本地机器、云服务提供商等。
    • Kubernetes: Kubernetes需要部署在集群中,可以运行在本地机器、私有云或公有云上。它需要一些额外的设置和配置来运行。
  5. 适用场景:
    • Docker: Docker适用于单个应用程序的容器化和开发环境的搭建。
    • Kubernetes: Kubernetes适用于大规模应用程序的容器编排和管理,特别是需要高可用性、弹性扩展和自动化运维的场景。

尽管Docker和Kubernetes是不同的技术,但它们通常一起使用,Docker用于构建和打包容器镜像,而Kubernetes用于在集群中管理和编排这些容器镜像。因此,它们通常被视为容器生态系统中的两个重要组成部分。

原文 https://blog.csdn.net/2301_79518550/article/details/144655623