云原生容器技术入门:Docker、K8s技术的基本原理和用途

🐇明明跟你说过:个人主页

🏅个人专栏:《未来已来:云原生之旅》🏅

🔖行路有良友,便是天堂🔖

目录

一、容器技术概述

1、什么是容器技术

2、容器技术的历史与发展

3、容器技术与虚拟机的比较

4、容器技术在云原生中的作用

二、Docker基础

1、Docker简介

2、Docker架构

3、Docker与工作原理

三、Kubernetes(k8s)基础

1、Kubernetes简介

2、Kubernetes核心概念


一、容器技术概述

1、什么是容器技术

容器是一种轻量级的虚拟化技术,它打包了应用程序及其所有的依赖(库、配置文件等),确保应用程序可以在任何环境中一致地运行。容器本身是一个隔离的、独立的单元,里面包含了运行应用程序所需的一切。

想象一下你要带一份便当去办公室吃午餐。你需要确保便当里的食物不会在运输过程中洒出来,也不会因为环境的变化(比如办公室的冰箱或微波炉)而影响食物的味道和质量。为了做到这一点,你把食物放在一个便当盒里。

  • 应用程序:食物
  • 容器:便当盒
  • 环境:办公室、家里、朋友的家等

不管你在什么地方,只要有便当盒,你的食物都可以安全无损地食用。同样,容器技术就像这个便当盒,不管你把应用程序放在哪里(开发者的电脑、测试服务器、生产环境的云端),它都能正常运行。

2、容器技术的历史与发展

容器技术的历史与发展可以追溯到几十年前,经历了多个阶段的演变,最终发展成为我们今天广泛使用的现代容器技术。

1. 早期的隔离技术
Chroot (1979)

  • 介绍:Chroot 是 Unix 操作系统中的一个系统调用,最早在 1979 年的第七版 Unix 中引入。
  • 功能:它通过改变进程的根目录来提供文件系统级别的隔离,但不提供进程和网络等其他方面的隔离。


2. 进程隔离技术
FreeBSD Jail (2000)

  • 介绍:FreeBSD Jail 是 FreeBSD 操作系统中的一个功能,最早在 2000 年推出。
  • 功能:提供了文件系统、网络、用户和进程的隔离。Jail 可以看作是 chroot 的增强版本,支持更多的隔离特性。

Solaris Zones (2004)

  • 介绍:Solaris Zones 是 Solaris 操作系统中的一个功能,于 2004 年推出。
  • 功能:提供了完整的操作系统级别的隔离,可以在一个物理主机上运行多个隔离的 Solaris 实例。


3. Linux 容器技术的崛起
LXC (Linux Containers) (2008)

  • 介绍:LXC 是 Linux 上的容器技术,于 2008 年发布。
  • 功能:结合了 Linux 内核中的多个隔离功能(如 namespaces 和 cgroups),实现进程和资源的隔离。


4. Docker 的诞生与流行
Docker (2013)

  • 介绍:Docker 于 2013 年发布,由 Solomon Hykes 创立。
  • 功能:Docker 提供了一套完整的容器化解决方案,包括容器构建、分发和运行的工具。Docker 通过简单易用的接口和强大的社区支持,使容器技术迅速普及。
  • 影响:Docker 的出现将容器技术从操作系统层面带到了应用层面,简化了应用程序的部署、迁移和扩展。


5. 容器编排与管理
Kubernetes (2014)

  • 介绍:Kubernetes 是 Google 开源的容器编排平台,于 2014 年发布。
  • 功能:提供自动化的容器部署、扩展和管理功能,解决了大规模容器管理的复杂性问题。
  • 影响:Kubernetes 成为容器编排的事实标准,推动了容器技术在企业中的广泛应用。

3、容器技术与虚拟机的比较

1. 架构与实现方式

  • 虚拟机(VM)
    •  架构:每个虚拟机都包含一个完整的操作系统实例、虚拟化的硬件(如 CPU、内存、网络设备等)以及应用程序。
    •  虚拟化层:虚拟机依赖于 Hypervisor(如 VMware ESXi、Microsoft Hyper-V、KVM),Hypervisor 是一个虚拟化层,位于物理硬件和虚拟机之间,管理和分配硬件资源。
    •  操作系统:每个虚拟机运行自己的操作系统(称为 Guest OS),与主机操作系统(Host OS)完全独立。
  • 容器
    •  架构:容器共享主机操作系统的内核,但在用户空间中运行隔离的进程。每个容器包含应用程序及其依赖项,但没有完整的操作系统。
    •  虚拟化层:容器依赖于操作系统级虚拟化技术,如 Linux 的 cgroups 和 namespaces,实现资源和进程的隔离。
    •  操作系统:所有容器共享主机操作系统的内核,没有自己的独立操作系统实例。


2. 启动时间与资源利用率

  • 启动时间
    •  虚拟机:由于需要启动完整的操作系统实例,虚拟机的启动时间通常较长(几分钟到几十秒)。
    •  容器:容器只需启动应用进程,启动时间非常快(通常在几秒钟内,甚至是亚秒级)。
  • 资源利用率
    •  虚拟机:由于每个虚拟机需要独立的操作系统实例和虚拟化开销,资源利用率相对较低。
    •  容器:容器共享操作系统内核,减少了冗余和开销,资源利用率更高。


3. 性能

  • 虚拟机:虚拟化层的开销(尤其是 I/O 操作)会影响性能,虽然现代 Hypervisor 已经大大优化了性能,但仍存在一定的性能损耗。
  • 容器:由于容器直接运行在主机操作系统上,没有 Hypervisor 的开销,性能接近于直接在物理机上运行的应用程序。


4. 隔离与安全

  • 隔离
    •  虚拟机:提供强隔离,每个虚拟机运行在自己的操作系统中,隔离程度高。虚拟机之间的安全隔离是通过 Hypervisor 实现的。
    •  容器:通过操作系统内核实现进程和资源的隔离,虽然隔离性较强,但理论上不如虚拟机。现代容器技术(如 Docker)也提供了额外的安全机制(如 seccomp、AppArmor、SELinux)来增强隔离性。
  • 安全
    •  虚拟机:由于强隔离,安全性较高,每个虚拟机的漏洞不会直接影响其他虚拟机或主机操作系统。
    •  容器:由于共享内核,内核级漏洞可能影响所有容器和主机操作系统,需要额外的安全措施来保护容器环境。


5. 可移植性与灵活性

  •  虚拟机:虚拟机镜像较大,迁移和部署较为复杂。虚拟机可以在支持相同虚拟化技术的不同物理服务器之间迁移。
  • 容器:容器镜像小且轻量级,易于迁移和部署。容器化应用可以在任何支持容器运行时(如 Docker、containerd、CRI-O)的环境中运行,实现高度的可移植性。 

4、容器技术在云原生中的作用

1. 快速部署和扩展

  • 快速启动:容器化应用的启动时间非常短,通常在秒级甚至亚秒级。这使得应用的部署和扩展变得更加迅速。
  • 弹性伸缩:通过容器编排工具(如 Kubernetes),可以实现应用的自动扩展和缩减,快速响应负载变化。


2. 一致的运行环境

  • 环境一致性:容器镜像包含了应用及其运行所需的所有依赖项,从开发、测试到生产环境,始终保持一致。这解决了“在我电脑上能运行”的问题,减少了环境差异导致的错误。


3. DevOps 和 CI/CD

  • 持续集成/持续交付(CI/CD):容器技术与CI/CD工具链(如 Jenkins、GitLab CI/CD)集成,实现了代码的自动化构建、测试和部署,加速了软件的交付周期。
  • DevOps 实践:容器技术推动了开发和运维的融合,通过基础设施即代码(IaC)和自动化运维工具,实现了高效的持续交付和持续部署。

二、Docker基础

1、Docker简介

Docker 是一个用于开发、部署和运行应用程序的工具。它允许开发者将应用程序及其所有依赖项打包到一个可移植的容器中,并且该容器可以在任何支持 Docker 的环境中运行。Docker 提供了一种轻量级的虚拟化技术,不同于传统的虚拟机,容器共享主机的操作系统内核,但保持独立的运行环境。

Docker 的主要组成部分

  • Docker 引擎(Docker Engine):这是 Docker 的核心组件,它包括:
    •  Docker 守护进程(Docker Daemon):负责管理容器的生命周期,包括创建、运行和停止容器。
    •  Docker 客户端(Docker Client):用户与 Docker 交互的命令行工具,通过命令行向 Docker 守护进程发送请求。
    •  REST API:用于程序化地与 Docker 守护进程通信。
  • Docker 镜像(Docker Image):Docker 镜像是一个包含应用程序及其所有依赖项的只读模板。镜像可以用来创建 Docker 容器。镜像通常是从 Dockerfile 构建的,Dockerfile 是一个包含构建镜像步骤的脚本。
  • Docker 容器(Docker Container):容器是镜像的运行实例,包含了应用程序及其所有依赖项,并在一个隔离的环境中运行。容器是轻量级的,启动速度快,可以在几秒钟内启动和停止。
  • Docker 仓库(Docker Registry):Docker 镜像的存储库,Docker Hub 是最常用的公共仓库,用户可以从中下载和上传镜像。也可以使用私有的 Docker 仓库来存储镜像。

2、Docker架构

Docker 架构

  1. Docker 客户端 (Docker Client)
  2. Docker 守护进程 (Docker Daemon)
  3. Docker 镜像 (Docker Images)
  4. Docker 容器 (Docker Containers)
  5. Docker 仓库 (Docker Registry)
  6. Docker Compose

1. Docker 客户端 (Docker Client)
Docker 客户端是用户与 Docker 进行交互的主要工具。它接收用户的命令,并通过 REST API 将命令发送给 Docker 守护进程。常用的 Docker 客户端命令包括 docker build、docker pull、docker run 等。

2. Docker 守护进程 (Docker Daemon)
Docker 守护进程在后台运行,负责处理 Docker 客户端的请求,管理 Docker 容器、镜像和网络。Docker 守护进程监听 Docker 客户端通过 REST API 发送的请求,并执行相应的操作。

3. Docker 镜像 (Docker Images)
Docker 镜像是一个包含应用程序及其依赖项的只读模板,用于创建 Docker 容器。镜像可以从 Docker Hub 下载,也可以通过编写 Dockerfile 来构建。Dockerfile 定义了如何构建一个镜像的步骤。

4. Docker 容器 (Docker Containers)
Docker 容器是镜像的一个运行实例,包含了应用程序及其所有依赖项,并在一个隔离的环境中运行。容器是轻量级的,启动速度快,可以在几秒钟内启动和停止。每个容器都有自己独立的文件系统、网络和进程空间。

5. Docker 仓库 (Docker Registry)
Docker 仓库用于存储和分发 Docker 镜像。Docker Hub 是最常用的公共仓库,用户可以从中下载和上传镜像。也可以使用私有的 Docker 仓库来存储镜像。

6. Docker Compose
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。用户可以通过编写一个 docker-compose.yml 文件来定义应用程序的服务、网络和卷,然后使用 docker-compose up 命令来启动应用程序的所有服务。

3、Docker与工作原理

Docker 使用操作系统级别的虚拟化,通过 Linux 内核的 cgroups 和 namespaces 提供进程隔离和资源管理。

  1. Namespaces:Docker 使用 Linux namespaces 来提供隔离环境。每个容器运行在自己的命名空间中,包括进程ID (PID)、网络 (Network)、挂载 (Mount)、主机名 (Hostname)、用户 (User) 和进程 (Process) 等。这样可以确保容器内部的进程不会与其他容器或主机系统的进程相互干扰。
  2. Cgroups (Control Groups):Docker 使用 cgroups 来限制和隔离容器使用的资源(如 CPU、内存、磁盘 I/O 和网络带宽)。cgroups 确保每个容器在资源使用上不会影响到其他容器或主机系统。
  3. Union File System (UnionFS):Docker 镜像是由一系列的只读层组成的,UnionFS 将这些层联合在一起形成一个单一的文件系统。容器启动时,Docker 会为容器创建一个可写层,这个层位于所有只读层之上,使得容器可以对文件系统进行修改,而不会影响到镜像的只读层。

   

三、Kubernetes(k8s)基础

1、Kubernetes简介


Kubernetes 是一个开源的平台,用来管理和编排容器化的应用程序。它可以自动化应用程序的部署、扩展和管理。简单来说,Kubernetes 帮助你把应用程序的运行从单个服务器扩展到多个服务器,同时保证高可用性和可伸缩性。

想象一下,你有一个网站,它运行在一个服务器上。这个服务器有时会崩溃,或者你的网站突然变得很受欢迎,服务器处理不过来。为了确保网站一直能运行,而且可以应对更多的访问量,你决定多准备几台服务器,这样即使一台服务器出问题了,其他的服务器也能接着运行网站。这时候你需要一个智能管家,帮你管理这些服务器,让网站始终高效、可靠地运行。这个智能管家就是 Kubernetes。

2、Kubernetes核心概念

1. 集群(Cluster)

  • 集群是 Kubernetes 管理的基础单元,包含多个节点(Node)。集群内的所有节点共同工作来运行和管理应用程序。


2. 节点(Node)

  • 节点是集群中的一台物理机器或虚拟机,每个节点运行容器。节点由主节点(Master Node)管理,包含 Kubelet 代理,负责与主节点通信和运行 Pod。
  • 工作节点(Worker Node)运行实际的应用容器。
  • 主节点(Master Node)负责集群的管理和调度,包括 API Server、Controller Manager、Scheduler 和 etcd 数据库。


3. Pod

  • Pod是 Kubernetes 中最小的部署单元,一个 Pod 可以包含一个或多个容器,这些容器共享网络、存储和命名空间。
  • 多容器 Pod通常用于需要紧密耦合的应用场景,比如主从结构、日志收集器等。


4. 控制器(Controller)

  • 控制器负责管理集群的状态,确保集群的实际状态与期望状态一致。常见的控制器有:
  • Deployment:管理无状态应用的部署和升级。
  • StatefulSet:管理有状态应用的部署和升级,确保每个 Pod 都有唯一的身份。
  • DaemonSet:在每个节点上运行一个 Pod,常用于日志收集和监控。
  • Job和CronJob:分别用于一次性任务和定时任务。


5. 服务(Service)

  • 服务为一组 Pod 提供稳定的网络端点,通过标签选择器(Label Selector)来定义服务的范围。服务负责负载均衡,并提供 DNS 名称解析,使得 Pod 可以通过服务名进行访问。
  • ClusterIP:默认类型,提供集群内部访问。
  • NodePort:通过节点 IP 和端口号提供外部访问。
  • LoadBalancer:在云环境中使用云提供商的负载均衡器。


6. 配置和存储(ConfigMap 和 Secret)

  • ConfigMap用于存储非机密的配置信息,以键值对形式存储,可以在 Pod 中挂载为环境变量或配置文件。
  • Secret用于存储机密信息,比如密码、OAuth 令牌,可以在 Pod 中挂载为环境变量或配置文件。


7. 持久存储(PersistentVolume 和 PersistentVolumeClaim)

  • PersistentVolume(PV)是集群中的存储资源,独立于 Pod 的生命周期。
  • PersistentVolumeClaim(PVC)是 Pod 对存储资源的请求,PVC 会绑定到 PV 上,Pod 使用 PVC 来挂载存储卷。


8. 命名空间(Namespace)

  • 命名空间用于将集群内的资源进行逻辑分组和隔离,不同命名空间内的资源可以重名,适用于多租户环境或项目隔离。


9. Ingress

  • Ingress是管理外部访问到集群内服务的规则,通过 HTTP/HTTPS 提供路由功能。Ingress 可以配置负载均衡、SSL 终止、基于主机名和路径的路由等功能。

   

  💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于云原生的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!! 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

华为HDC开发者大会鸿蒙进展超预期

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 在数字化浪潮的推动下,华为鸿蒙系统(HarmonyOS)以其革命性的创新,引领着全球科技的新趋势。2024…

FEP热缩透明管 耐油耐高温绝缘硅胶软管

FEP透明管:特氟龙管,F46管,耐腐蚀管。 主要用途: 1、液晶制造装置; 2、通体单端发光单芯光纤用管; 3、热交换器,蒸气配管; 4、高纯度试剂输送管; 5、各种腐蚀性介质&…

[保姆级教程]uniapp小程序获取右上角胶囊位置信息

文章目录 导文使用uni.getMenuButtonBoundingClientRect();方法实现完整案例 隐藏默认导航栏&#xff1a;全局隐藏当前页面隐藏 导文 uniapp小程序获取右上角胶囊位置信息 使用uni.getMenuButtonBoundingClientRect();方法实现 <script>const menuButtonInfo uni.getMe…

【C++高阶】掌握AVL树:构建与维护平衡二叉搜索树的艺术

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;STL-> map与set &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀AVL树 &#x1f4d2;1. AVL树…

统信UOS桌面操作系统漏洞修复流程

原文链接&#xff1a;统信UOS桌面操作系统漏洞修复流程 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于统信UOS桌面操作系统漏洞修复的文章。维护操作系统的安全性非常重要&#xff0c;定期修复漏洞可以防止潜在的安全威胁。本文将详细介绍如何在统信UOS桌面操作…

VMware Workstation克隆虚拟机详细步骤

克隆虚拟机 首先我们先创建一台虚拟机&#xff0c;将该虚拟机关闭后&#xff0c;然后右键该虚拟机按照图下所示点击 克隆 下一页 下一页 这里按照需求选择克隆类型&#xff0c;我选择创建完整克隆。点击下一步 设置好虚拟机名称和位置&#xff0c;点击完成 稍微等待一会 点击 …

SQL注入-sqlmap使用

sqlmap简介 一款自动化的SQL注入工具&#xff0c;其主要功能是扫描&#xff0c;发现并利用给定的URL的SQL注入漏洞&#xff0c;目前支持的数据库是MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB Sqlma…

ansible 任务块以及循环

任务块 可以通过block关键字&#xff0c;将多个任务组合到一起可以将整个block任务组&#xff0c;一起控制是否要执行 # 如果webservers组中的主机系统发行版是Rocky&#xff0c;则安装并启动nginx [rootpubserver ansible]# vim block1.yml --- - name: block tasks hosts…

全面讲解数字化采购:整体技术架构与最佳实践

在全球化和数字化浪潮的推动下&#xff0c;企业的采购流程正经历深刻变革。数字化采购通过引入先进的信息技术&#xff0c;优化供应链管理&#xff0c;提高采购效率&#xff0c;降低成本。本文将详细介绍数字化采购的整体技术架构&#xff0c;并分享最佳实践经验&#xff0c;帮…

摄影约拍管理系统

摘 要 摄影约拍管理系统是一种基于SSM框架的系统&#xff0c;旨在为摄影师和用户提供便捷的约拍服务。本文通过对系统的设计与实现&#xff0c;解决了传统约拍方式中存在的信息不对称、预约流程繁琐等问题。本文介绍了系统的研究背景与意义&#xff0c;分析了国内外发展现状&a…

联盟学习:技术原理、特点及适用场景

一、引言 随着大数据和人工智能技术的快速发展&#xff0c;数据成为了推动科技进步的重要资源。然而&#xff0c;在实际应用中&#xff0c;数据往往呈现出碎片化、分散化的特点&#xff0c;如何有效地利用这些数据成为了业界关注的焦点。联盟学习&#xff08;Federated Learni…

【算法面试】二分查找:如何在有序数组中高效搜索目标值

目录 题目描述 示例 1: 示例 2: 问题分析 解决方法 方法 1&#xff1a;标准二分查找 方法 2&#xff1a;递归二分查找 方法 3&#xff1a;非递归简化版本 方法 4&#xff1a;带调试信息的版本 详细步骤 总结 博主v&#xff1a;XiaoMing_Java 二分查找是一种常见的算…

C语言常用标准头文件

头文件的基础概念 在C的系列语言程序中&#xff0c;头文件&#xff08;通常扩展名为.h&#xff09;被大量使用&#xff0c;它通常包含函数、变量、结构体等的声明和定义&#xff0c;以及一些宏定义和类型定义。头文件的主要作用是为了方便管理和重用代码&#xff0c;它可以被多…

【电源专题】案例:电量计遇到JEITA充电芯片,在高温下无法报百怎么办?

在使用电量计芯片时,我们期望的是在产品工作温度下、在产品最低和正常充电电流下都要能报百。 所谓报百,就是电量计RSOC(电量百分比)能到达100%。这看起来简单,如果是常规的操作的话,那么电压达到充电截止要求、电流达到充电截止要求、容量累积变化满足要求,RSOC=100%肯…

[分布式网络通讯框架]----ZooKeeper下载以及Linux环境下安装与单机模式部署(附带每一步截图)

首先进入apache官网 点击中间的see all Projects->Project List菜单项进入页面 找到zookeeper&#xff0c;进入 在Zookeeper主页的顶部点击菜单Project->Releases&#xff0c;进入Zookeeper发布版本信息页面&#xff0c;如下图&#xff1a; 找到需要下载的版本 …

外部网络如何访问内网?

在现代信息化时代&#xff0c;随着企业规模的扩大和业务范围的扩展&#xff0c;越来越多的企业需要实现外部网络访问内网的需求。外部网络访问内网指的是在外部网络环境下&#xff0c;通过互联网等公共网络途径&#xff0c;实现对企业内部网络的访问和操作。这种需求的出现&…

iptables动作总结

ACCEPT动作 将数据包放行&#xff0c;进行完此处理动作后&#xff0c;将不再比对当前链的其它规则&#xff0c;直接跳往下一个规则链。 范例如下&#xff1a; #新增自定义链TEST_ACCEPTiptables -t filter -N TEST_ACCEPT#新增自定义链TEST_ACCEPT2iptables -t filter -N TES…

仿迪恩城市门户分类信息网discuz模板

Discuz x3.3模板 仿迪恩城市门户分类信息网 (GBK) Discuz模板 仿迪恩城市门户分类信息网(GBK)

Spring 内部类获取不到@Value配置值问题排查(附Spring代理方式)

目录 一、实例问题 1、现象 2、原因 3、解决 二、Spring的代理模式 1、静态代理&#xff08;Static Proxy&#xff09; 1&#xff09;原理 2&#xff09;优缺点 3&#xff09;代码实现 2、JDK动态代理&#xff08;JDK Dynamic Proxy&#xff09; 1&#xff09;原理 …