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

news2024/11/19 11:37:14

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

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

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

目录

一、容器技术概述

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 终止、基于主机名和路径的路由等功能。

   

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

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

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

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

相关文章

统信UOS1070上配置文件管理器默认属性03

原文链接:统信UOS1070上配置文件管理器默认属性03 Hello,大家好啊!今天给大家带来一篇关于在统信UOS 1070上配置文件管理器默认属性的第三篇文章——配置工作区、侧边栏及高级设置。通过这些配置,您可以更好地组织和管理文件&…

基于matlab的高斯滤波与图像去噪

1 高斯滤波原理 1.1 原理 高斯滤波是一种线性平滑滤波技术,主要用于消除图像中的高斯噪声。它的工作原理可以理解为对整幅图像进行加权平均的过程,即每个像素点的值都由其本身和邻域内的其他像素值经过加权平均后得到。 高斯滤波实质上是一种信号的滤…

Apache Tomcat 10.1.25 新版本发布 java 应用服务器

Tomcat 是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好 Apache 服务器,可利用它响应对 H…

POLYGON Horror Carnival - Low Poly 3D Art by Synty

465 个独特的预设模型 一个正在运行的摩天轮和旋转木马 包括10个示例脚本,让嘉年华栩栩如生 ◼ 描述◼ 欢迎来到恐怖嘉年华。这个地方曾经有诱人的音乐,现在却有着令人不安的旋律,暗示着其中令人不安的惊喜。 这场险恶的盛会的真正核心在于演示场景。它使用3D低多边形资源构…

C语言常用标准头文件

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

图纸管理系统的选择:为企业带来的长远价值

图纸管理系统的选择:为企业带来的长远价值 在当今高度信息化和数字化的时代,图纸管理系统的选择对于企业的长远发展至关重要。一个好的图纸管理系统不仅能提升企业的运营效率,还能为企业在激烈的市场竞争中赢得先机。以下我们将详细探讨图纸…

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

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

RabbitMQ实践——使用WebFlux响应式方式实时返回队列中消息

大纲 Pom.xml监听队列实时返回消息测试完整代码工程代码 在之前的案例中,我们在管理后台收发消息都是通过短连接的形式。本文我们将探索对队列中消息的实时读取,并通过流式数据返回给客户端。 webflux是反应式Web框架,客户端可以通过一个长连…

外部网络如何访问内网?

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

骑马与砍杀战团mod制作-基础-军队笔记(一)

骑马与砍杀战团mod制作-基础-军队装备笔记(一) 资料来源 学习的资料来源: b站【三啸解说】手把手教你做【骑砍】MOD,基础篇,链接为: https://www.bilibili.com/video/BV19x411Q7No?p4&vd_sourcea507…

代码随想录——摆动序列(Leetcode376)

题目链接 贪心 class Solution {public int wiggleMaxLength(int[] nums) {if(nums.length < 1){return nums.length;}// 当前一对差值int cur 0;// 前一对差值int pre 0;// 峰值个数int res 1;for(int i 0; i < nums.length - 1; i){cur nums[i 1] - nums[i];i…

STM32单片机系统

1.STM32最小系统 微型计算机&#xff08;面&#xff09; 单片机最小系统是指能够将单片机芯片运行所必需的最少的硬件电路集成在一起的系统。 它是一种基本的单片机应用系统&#xff0c;通常由主芯片&#xff0c;时钟电路&#xff0c;复位电路&#xff0c;电源电路&#xff0c…

免费内网穿透工具 ,快解析内网穿透解决方案

在IPv4公网IP严重不足的环境下&#xff0c;内网穿透技术越来越多的被人们所使用&#xff0c;使用内网穿透技术的好处有很多。 1&#xff1a;无需公网ip 物以稀为贵&#xff0c;由于可用的公网IP地址越来越少&#xff0c;价格也是水涨船高&#xff0c;一个固定公网IP一年的成本…

大数据集群数据传输

简单的服务器间的通信示例 netcat&#xff0c;简写为 nc&#xff0c;是 unix 系统下一个强大的命令行网络通信工具&#xff0c;用于在两台主机之间建立 TCP 或者 UDP 连接&#xff0c;并提供丰富的命令进行数据通信。nc 在网络参考模型属于应用层。使用 nc 可以做很多事情&…

《Windows API每日一练》5.5 插入符号

当你向程序中输入文本时&#xff0c;通常会有下划线、竖线或方框指示你输入的下一个字符将出现在屏幕上的位置。你也许认为这是“光标”&#xff0c;但在编写Windows程序时&#xff0c;你必须避免这种习惯。在Windows中&#xff0c;它被称为“插入符号”&#xff08;caret&…

NUS、清华提出STAR:一句话生成高质量4D Avatar,代码已开源

©PaperWeekly 原创 作者 | Chai Zenghao 单位 | 新加坡国立大学博士生 研究方向 | 3D生成 背景 在计算机图形学和数字虚拟人领域&#xff0c;从简单的文本提示生成更真实、可交互的虚拟人物是是目前广受关注的研究课题。然而&#xff0c;先前的 3D Avatar 生成方法存在一…

陀螺仪LSM6DSV16X与AI集成(7)----FIFO数据读取与配置

陀螺仪LSM6DSV16X与AI集成.7--检测自由落体 概述视频教学样品申请源码下载主要内容生成STM32CUBEMX串口配置IIC配置CS和SA0设置串口重定向参考程序初始换管脚获取ID复位操作BDU设置设置量程设置FIFO水印设置速率使用流模式设置FIFO时间戳批处理速率使能时间戳FIFO状态寄存器演示…

【ajax核心05】宏任务与微任务

ES6之后引入Promise对象(用来管理异步任务)&#xff0c;让JS引擎也可以发起异步任务 一&#xff1a;异步任务分类 异步任务分为&#xff1a;宏任务与微任务 宏任务 由浏览器环境执行的异步代码 具体宏任务分类 微任务 由JS引擎执行的代码 创建Promise对象时&#xff0c;…

【鸿蒙】ERROR_GET_BUNDLE_INSTALLER_FAILED

错误信息 [ERROR_GET_BUNDLE_INSTALLER_FAILED] Troubleshooting guide $ hdc file send D:\Huawei\devEcoProjects\entry\build\default\outputs\default\entry-default-unsigned.hap /sdcard/e8a215ea7be1444197e6a58ebda7721f/entry-default-unsigned.hap Error while Depl…

Vue74-路由传参2

一、$route中的params参数 二、在配置路由的index.js文件中&#xff0c;声明传参 占位符用的什么名字&#xff0c;params里面的key就是什么。 三、<router-link>标签中传参 3-1、to字符串写法 3-2、to的对象写法 注意&#xff1a;若是用params携带参数&#xff0c;不…