Kubernetes、Docker 和 Docker Registry 关系是是什么?

news2024/12/25 19:41:17

Kubernetes(常简称为 k8s)、Docker 和 Docker Registry 是现代云原生应用中三个关键的组件,它们各自承担不同的职责,但在容器化部署和管理过程中紧密协作。以下是它们之间关系的详细解释:


一、核心概念简介

1. Docker

  • 定义:Docker 是一个开源的容器化平台,允许开发者打包应用及其依赖项到一个轻量级、可移植的容器中。
  • 主要组件
    • Docker Engine:运行和管理容器的核心引擎。
    • Docker CLI:命令行工具,用于与 Docker Engine 交互。
    • Docker Compose:用于定义和管理多容器 Docker 应用的工具。

2. Docker Registry

  • 定义:Docker Registry 是一个存储和分发 Docker 镜像的服务。最常用的公共 Registry 是 Docker Hub,此外也可以搭建私有的 Docker Registry。
  • 功能
    • 存储镜像:保存不同版本的 Docker 镜像。
    • 分发镜像:允许用户从 Registry 拉取(下载)镜像或推送(上传)镜像。
  • 常用类型
    • 公有 Registry:如 Docker Hub、Google Container Registry(GCR)、Amazon Elastic Container Registry(ECR)等。
    • 私有 Registry:组织内部搭建的 Docker Registry,用于存储私有镜像,通常部署在内部网络中以确保安全性。

3. Kubernetes(k8s)

  • 定义:Kubernetes 是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用。
  • 核心组件
    • 控制平面(Control Plane):负责整个集群的管理和决策,包括 API Server、Scheduler、Controller Manager 等。
    • 节点(Nodes):实际运行容器化应用的工作负载单元,包括 Master NodeWorker Node

4. Node

  • 定义:在 Kubernetes 中,Node 是集群中的一台物理或虚拟机,负责运行容器化的应用。每个 Node 都包含运行这些容器所需的服务和组件。
  • 类型
    • Master Node(控制节点):负责管理和协调集群。运行控制平面组件,如 API Server、Scheduler、Controller Manager 等。
    • Worker Node(工作节点):实际运行应用容器的节点。每个 Worker Node 都运行一些关键组件,如 Kubelet、Kube-proxy 以及容器运行时(如 Docker)。

二、Kubernetes、Docker、Registry 与 Node 的关系

1. 容器化应用的开发与构建

  • 开发者使用 Docker
    • 开发者首先使用 Docker 创建应用的 Dockerfile,定义应用的运行环境、依赖和启动命令。
    • 通过 Docker CLI 构建 Docker 镜像:
      docker build -t your-image-name:tag .
      
    • 构建完成后,将镜像推送到 Docker Registry:
      docker push your-registry/your-image-name:tag
      

2. Kubernetes 部署与管理

  • 定义 Kubernetes 配置文件
    • 在 Kubernetes 中,开发者创建如 Pod、Deployment、Service 等配置文件,指定使用的 Docker 镜像。
    • 例如,一个简单的 Deployment 配置:
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: my-app
      spec:
        replicas: 3
        selector:
          matchLabels:
            app: my-app
        template:
          metadata:
            labels:
              app: my-app
          spec:
            containers:
            - name: my-app-container
              image: your-registry/your-image-name:tag
              ports:
              - containerPort: 80
      
  • 应用配置
    kubectl apply -f your-deployment.yaml
    
  • Kubernetes 调度 Pod
    • Scheduler 根据资源需求、亲和性等策略将 Pod 调度到合适的 Worker Node 上。
    • Kubelet 运行在每个 Worker Node 上,负责与 Docker Engine(或其他容器运行时)通信,拉取镜像并启动容器。

3. Node 在 Kubernetes 中的角色

  • Worker Node 组件

    • Kubelet:每个 Worker Node 上的主要代理,确保 Pod 规范中的容器按预期运行。
    • Kube-proxy:负责节点上的网络代理和负载均衡。
    • 容器运行时(例如 Docker):实际运行和管理容器。
  • Workflow

    1. 拉取镜像
      • Kubelet 指示 Docker 从 Docker Registry 拉取所需的镜像。
      • 例如,Docker Engine 在 Worker Node 上执行:
        docker pull your-registry/your-image-name:tag
        
    2. 启动容器
      • Docker 启动容器,并根据 Kubernetes 的配置管理容器的生命周期。
    3. 资源管理和监控
      • Kubelet 监控容器的运行状态,报告给控制平面,确保 Pod 的稳定运行。
    4. 网络和服务发现
      • Kube-proxy 处理节点上的网络流量,确保服务请求能够正确路由到相应的容器。

4. Docker Registry 和 Node 的交互

  • 镜像存储与分发

    • Docker Registry 作为镜像的存储中心,Worker Node 通过 Docker Engine 从 Registry 拉取所需的镜像。
    • 私有 Registry 提供更高的安全性和控制,适用于内部应用和敏感数据。
  • 认证与权限管理

    • 如果使用私有 Registry,Worker Node 需要相应的凭证来拉取镜像。这通常通过在 Kubernetes 中配置 ImagePull Secrets 实现。
      kubectl create secret docker-registry my-registry-secret \
        --docker-server=your-registry \
        --docker-username=your-username \
        --docker-password=your-password \
        --docker-email=your-email
      
    • 在 Pod 配置中引用 Secret:
      spec:
        containers:
        - name: my-app-container
          image: your-registry/your-image-name:tag
        imagePullSecrets:
        - name: my-registry-secret
      

三、具体关系示意

+--------------------+          Push             +---------------------+
| Dockerfile (Code)  | ------------------------> |   Docker Engine     |
+--------------------+                          +---------------------+
                                                       |
                                                       | Builds
                                                       v
                                        +-------------------------------+
                                        |         Docker Registry       |
                                        | (e.g., Docker Hub, Private Reg)|
                                        +-------------------------------+
                                                       |
                                                       | Kubernetes pulls
                                                       v
                          +----------------------------------------------+
                          |                  Kubernetes                  |
                          |   (Control Plane and Worker Nodes)           |
                          +----------------------------------------------+
                                       |                          |
                                       |                          |
    +----------------------------------+                          +----------------------------------+
    |                                                                                             |
    v                                                                                             v
+---------------------+                   Uses Docker Engine                    +---------------------+
|  Worker Node 1      | <------------------------------------------------------ | Widget-Server Pod   |
| - Kubelet           |                                                        | - Runs containers   |
| - Kube-proxy        |                                                        | - Managed by K8s    |
| - Docker Engine     |                                                        +---------------------+
+---------------------+

四、关键互动流程

1. 构建与推送镜像

  1. 编写 Dockerfile:定义应用的构建步骤和运行环境。
  2. 构建镜像
    docker build -t your-registry/your-image-name:tag .
    
  3. 推送镜像到 Registry
    docker push your-registry/your-image-name:tag
    

2. 在 Kubernetes 中部署应用

  1. 定义 Kubernetes 配置文件(如 Deployment、Service 等),指定使用的 Docker 镜像。
  2. 应用配置
    kubectl apply -f your-deployment.yaml
    
  3. Kubernetes 调度 Pod
    • Scheduler 将 Pod 分配到合适的 Worker Node。
    • Kubelet 在 Worker Node 上拉取镜像并启动容器。
  4. 运行与管理
    • Kubernetes 监控容器的运行状态,进行必要的重启、扩展或滚动更新。

3. 镜像更新与滚动更新

  1. 更新应用代码,修改 Dockerfile。
  2. 重新构建并推送新的镜像
    docker build -t your-registry/your-image-name:new-tag .
    docker push your-registry/your-image-name:new-tag
    
  3. 更新 Kubernetes 配置,指向新的镜像标签:
    image: your-registry/your-image-name:new-tag
    
  4. 应用更新
    kubectl apply -f your-deployment.yaml
    
  5. Kubernetes 执行滚动更新,逐步替换旧版本的容器为新版本,确保服务的持续可用性。

五、Node 的详细角色与关系

1. Master Node(控制节点)

  • 功能

    • API Server:Kubernetes 的前端,所有 REST 操作都通过它进行。
    • Scheduler:负责将 Pod 调度到合适的 Worker Node。
    • Controller Manager:管理控制器,确保集群的期望状态与实际状态一致。
    • etcd:分布式键值存储,保存集群的所有数据。
  • 与 Docker 和 Registry 的关系

    • Master Node 本身不直接运行应用容器,但负责调度 Pod 到 Worker Node,间接影响 Docker Engine 的操作。
    • 通过控制平面组件,Master Node 确保 Worker Node 能够从 Docker Registry 拉取正确的镜像并运行容器。

2. Worker Node(工作节点)

  • 功能

    • 运行 Pod:实际承载和运行容器化的应用。
    • Kubelet:与 Master Node 通信,接收任务并管理容器生命周期。
    • Kube-proxy:处理网络代理和负载均衡,确保服务的网络访问。
    • 容器运行时(如 Docker):负责实际拉取镜像、创建和管理容器。
  • 与 Docker 和 Registry 的关系

    • Docker Engine:在 Worker Node 上运行,负责从 Docker Registry 拉取镜像并启动容器。
    • 镜像拉取
      • Kubelet 向 Docker Engine 发送拉取镜像的请求,Docker Engine 从指定的 Registry 下载镜像。
      • 如果是私有 Registry,需要相应的认证凭证(如 ImagePull Secrets)。
  • 安全与隔离

    • Worker Node 使用网络策略和安全组来隔离和保护运行中的容器。
    • 通过 Kubernetes 的角色和权限管理,确保只有授权的 Pod 能够访问特定的资源。

3. 容器与 Node 的交互

  • 资源管理

    • Kubernetes 根据 Pod 的资源需求(如 CPU、内存)将其调度到具备足够资源的 Worker Node。
    • Docker Engine 在 Node 上分配资源,确保容器按需运行。
  • 扩展与自愈

    • Kubernetes 可以根据需求自动扩展 Pod 数量,将其分配到不同的 Worker Node。
    • 当容器或 Node 出现故障时,Kubernetes 会重新调度 Pod 到健康的 Node 上。

六、实战示例

假设您有一个私有 Docker Registry,IP 为 192.168.0.180:5000,并且 Kubernetes 集群由一个 Master Node 和多个 Worker Node 组成。

1. 构建并推送镜像到私有 Registry

# 在开发机上
docker build -t 192.168.0.180:5000/my-app:v1.0 .
docker push 192.168.0.180:5000/my-app:v1.0

2. 配置 Kubernetes 使用私有 Registry

kubectl create secret docker-registry my-registry-secret \
  --docker-server=192.168.0.180:5000 \
  --docker-username=my-username \
  --docker-password=my-password \
  --docker-email=my-email@example.com

3. 部署应用到 Kubernetes 集群

Deployment 配置文件(deployment.yaml)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app-container
        image: 192.168.0.180:5000/my-app:v1.0
        ports:
        - containerPort: 80
      imagePullSecrets:
      - name: my-registry-secret

应用配置

kubectl apply -f deployment.yaml

4. Kubernetes 调度与运行

  • 调度 Pod:Scheduler 将 my-app-deployment 的 Pod 分配到 Worker Node 上。
  • 拉取镜像:Worker Node 上的 Docker Engine 从 192.168.0.180:5000 拉取 my-app:v1.0 镜像。
  • 启动容器:Docker Engine 启动容器,Kubelet 监控容器状态。

七、总结

  • Docker 是容器化应用的基础设施,负责构建和运行容器。
  • Docker Registry 作为镜像存储和分发中心,连接开发过程与运行环境,支持镜像的共享和版本管理。
  • Kubernetes 提供了强大的容器编排功能,通过调度和管理容器化应用,实现自动化部署、扩展和自愈。
  • Node 是 Kubernetes 集群中的工作负载执行单元,运行实际的容器化应用。每个 Worker Node 上运行 Docker Engine(或其他容器运行时),负责从 Registry 拉取镜像并启动容器。

理解 Kubernetes 中 Node 的角色及其与 Docker 和 Registry 的互动,是有效管理和优化容器化应用的关键。通过协调使用这三者,您可以构建高效、可扩展和可靠的现代应用架构。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2265438.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenFeign快速入门 示例:黑马商城

使用起因 之前我们利用了Nacos实现了服务的治理,利用RestTemplate实现了服务的远程调用。这样一来购物车虽然通过远程调用实现了调用商品服务的方法,但是远程调用的代码太复杂了: 解决方法 并且这种调用方式比较复杂&#xff0c;一会儿远程调用&#xff0c;一会儿本地调用。 因…

YOLOv11模型改进-模块-引入多尺度大核注意力Multi-scale Large Kernel Attention

MLKA 的提出源于图像超分辨率任务的挑战性&#xff0c;该任务需重建低质量图像缺失的高频信息&#xff0c;但因 LR 与 HR 图像对应关系复杂&#xff0c;寻找像素相关性困难。此前模型扩展容量的方法增加了训练负担和数据收集成本&#xff0c;而采用的注意力机制无法同时获取局部…

学习思考:一日三问(学习篇)之匹配VLAN

学习思考&#xff1a;一日三问&#xff08;学习篇&#xff09;之匹配VLAN 一、学了什么&#xff08;是什么&#xff09;1.1 理解LAN与"V"的LAN1.2 理解"V"的LAN怎么还原成LAN1.3 理解二层交换机眼中的"V"的LAN 二、为何会产生需求&#xff08;为…

国际网络专线怎么申请开通?

随着国内企业在国际市场中的活跃度逐年提升&#xff0c;国际网络专线逐渐成为保障企业高效运营的重要基础设施。稳定且高效的网络不仅能够提升工作效率&#xff0c;还能为海外业务的顺利开展提供可靠保障。那么&#xff0c;国际网络专线如何开通&#xff1f;其申请流程是怎样的…

Ubuntu20.04安装openMVS<成功>.colmap<成功>和openMVG<失败(已成功)>

一、安装openMVS 参考官方文档 sudo apt-get -y install git mercurial cmake libpng-dev libjpeg-dev libtiff-dev libglu1-mesa-dev eigen git clone https://gitlab.com/libeigen/eigen --branch 3.4 mkdir eigen_build cd eigen_build &&\cmake . ../eigen -…

【magic-dash】01:magic-dash创建单页面应用及二次开发

文章目录 一、magic-dash是什么1.1 安装1.2 使用1.2.1 查看内置项目模板1.2.2 生成指定项目模板1.2.3 查看当前magic-dash版本1.2.4 查看命令说明1.2.5 内置模板列表二、创建虚拟环境并安装magic-dash三、magic-dash单页工具应用开发3.1 创建单页面项目3.1.1 使用命令行创建单页…

重温设计模式--原型模式

文章目录 原型模式定义原型模式UML图优点缺点使用场景C 代码示例深拷贝、浅拷贝 原型模式定义 用原型实例指定创建对象的种类&#xff0c;并且通过拷贝这些原型创建新的对象&#xff1b; 核心中的核心就是 克隆clone ,后面讲 原型模式是一种创建型设计模式&#xff0c;它的主要…

Kibana8.17.0在mac上的安装

1、Kibana是什么 Kibana是与elasticsearch配套使用的数据分析与可视化工具&#xff0c;通过Kibana可以轻松与es中存储的数据进行高效的交互&#xff0c;包括数据写入、检索、删除等操作&#xff0c;并可以通过编写部分代码将数据做成各种报表&#xff0c;从而进行非常直观的统…

61.基于SpringBoot + Vue实现的前后端分离-在线动漫信息平台(项目+论文)

项目介绍 随着社会互联网技术的快速发展&#xff0c;每个行业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于在线动漫信息平台当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了在线动漫信息平台&#xff0c;它彻底…

【python】银行客户流失预测预处理部分,独热编码·标签编码·数据离散化处理·数据筛选·数据分割

数据预处理 通过网盘分享的文件&#xff1a;银行流失预测数据和代码 链接: https://pan.baidu.com/s/1loiB8rMvZArfjJccu4KW6w?pwdpfcs 提取码: pfcs 非数值特征处理 目的&#xff1a;将非数值特征转换为数值型&#xff0c;以便模型能够处理。方法&#xff1a; 地理位置&am…

从零开始使用MaxKB打造本地大语言模型智能问答系统与远程交互

文章目录 前言1. 下载运行Ollama2. 安装大语言模型3. 安装Cpolar工具4. 配置公网地址5. 固定公网地址6. MaxKB 添加Olama7.创建问答应用 前言 目前大语言模型&#xff08;LLM&#xff09;已经成为了人工智能领域的一颗璀璨明星&#xff0c;从自然语言处理到智能问答系统&#…

neo4j无法导入csv文件

文章目录 问题解决方案1. 检查Neo4j的neo4j.conf配置文件2. 确保文件路径正确3. 将CSV文件放置到import目录4. 重启Neo4j服务器 问题 neo4j browser中导入csv文件报错无法导入 具体&#xff1a;输入下列语句LOAD CSV WITH HEADERS FROM “file:///D:/KG/relation.csv” AS lin…

WebLogic T3反序列化漏洞(CVE-2018-2628)--vulhub

WebLogic T3反序列化漏洞(CVE-2018-2628) WebLogic在通信过程中使用T3协议传输数据&#xff0c;涉及到了序列化和反序列化操作。 T3协议概述 T3协议是Oracle的私有协议&#xff0c;所以公开的相关资料比较少&#xff0c;这里结合其他师傅的博客简单对T3协议进行一个简要分析…

在瑞芯微RK3588平台上使用RKNN部署YOLOv8Pose模型的C++实战指南

在人工智能和计算机视觉领域,人体姿态估计是一项极具挑战性的任务,它对于理解人类行为、增强人机交互等方面具有重要意义。YOLOv8Pose作为YOLO系列中的新成员,以其高效和准确性在人体姿态估计任务中脱颖而出。本文将详细介绍如何在瑞芯微RK3588平台上,使用RKNN(Rockchip N…

scala借阅图书保存记录(三)

BookDAO package org.app package daoimport models.BookModelimport scala.collection.mutable.ListBuffer//图书&#xff0c;数据操作 class BookDAO {//加载图书&#xff0c;从文件中读入def loadBooks(): ListBuffer[BookModel] {val books new ListBuffer[BookModel]()…

无标记动作捕捉系统如何赋能体育运动分析,推动体育科学发展?

随着技术的不断发展与社会的需要&#xff0c;健康、科学运动成为了大众关注的一个热词。在韩国首尔的中央大学&#xff0c;其生物运动临床康复实验室和运动训练中心就致力于通过生物力学分析来研究与运动相关的伤害&#xff0c;并通过定制科学的训练计划来帮助运动员改进他们的…

Unittest02|TestSuite、TestRunner、HTMLTestRunner、处理excel表数据、邮件接收测试结果

目录 八、测试套件TestSuite和测试运行器TestRunner 1、基本概念 2、创建和使用测试套件 3、 自动发现测试用例、创建测试套件、运行测试 4、生成html的测试报告&#xff1a;HTMLTestRunner 1️⃣导入HTMLTestRunner模块 2️⃣运行测试用例并生成html文件 九、unittest…

[搜广推]王树森推荐系统笔记——曝光过滤 Bloom Filter

曝光过滤 & Bloom Filter 曝光过滤主要在召回阶段做&#xff0c;主要方法是Bloom Filter 曝光过滤问题 -如果用户看过某个物品&#xff0c;则不再把该物品曝光给该用户。 - 原因是重复曝光同一个物品会损害用户体验 - 但长视频通常没有曝光过滤&#xff08;youtube&…

JS CSS HTML 的代码如何快速封装

我们为什么要封装代码&#xff0c;是因为封装后的代码&#xff0c;会显得非常美观&#xff0c;减少代码的复用&#xff0c;方便我们更好的去维护代码&#xff0c;不用一个一个页面的去找去改&#xff0c;直接封装好的代码里面去改就可以了 目录 1.html代码封装 2.CSS代码封装 …

acme ssl证书自动续签 nginx

参考 github 官方操作 &#xff0c;acme操作说明 说下我的操作 安装 acme.sh curl https://get.acme.sh | sh source ~/.bashrc 2.注册 acme.sh --register-account -m 123qq.com 如果你在配置 acme.sh 时选择了其他 CA&#xff08;如 Let’s Encrypt&#xff09;&#xff…