云原生容器技术入门: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 终止、基于主机名和路径的路由等功能。

   

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

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

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

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

相关文章

五十八周:文献阅读

目录 摘要 Abstract 文献阅读:使用 Transformer 进行长期预测-PatchTST 一、现有问题 二、提出方法 三、相关知识 1、Patch 2、Vanilla Transformer 四、提出的方法 1、模型结构 2、表征学习 3、模型优点 五、研究实验 1、数据集 2、评估指标 3、基…

Spring+SpringMVC介绍+bean实例化+依赖注入实战

Spring介绍 Spring是一个轻量级的Java 开发框架,核心是IOC(控制反转)和AOP(面向切面编程) Spring解决了业务层(Service包)与其他各层(表现层,包括Model,Vie…

车辆数据的提取、定位和融合(其二.一 共十二篇)

第一篇: System Introduction 第二篇:State of the Art 第三篇:localization 第四篇:Submapping and temporal weighting 第五篇:Mapping of Point-shaped landmark data 第六篇:Clustering of landma…

【Spring】Spring Boot 快速入门

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更…

计算机网络期末

1、IP 地址为:192.168.0.254,它的子网掩码应该为( ) A.255.255.255.0 B.255.255.254.0 C.255.255.252.0 D.255.255.0.0 2、最容易产生网络可靠性瓶颈问题的拓扑构型是( )。 A 总线型 B 星型 C 环型 D 网状型 3、HTTP 就是电子邮件阅读协议&#xff0…

UE5 中的碰撞问题

文章目录 一、初始准备二、重叠和碰撞三、自定义碰撞 一、初始准备 首先我们创建一个 BP_ThirdPerson 项目,然后在项目中创建两个 Actor 的蓝图 Blueprint 首先是一个移动的 BP_Push,这里使用 time line 循环旋转 cube 的相对位置 得到效果如下 然后是…

计算机网络 —— 应用层(FTP)

计算机网络 —— 应用层(FTP) FTP核心特性:运作流程: FTP工作原理主动模式被动模式 我门今天来看应用层的FTP(文件传输协议) FTP FTP(File Transfer Protocol,文件传输协议&#x…

qt基本窗口类(QWidget,QDialog,QMainWindow)

1.三个基本窗口类 1.1QWidget 所有窗口的基类 可以内嵌到其他窗口的内部,无边框 也可以作为独立窗口显示,有边框 1.2QDialog 继承于QWidget 对话框窗口类 不可以内嵌到其他窗口 有模态和非模态两种显示方式 1.3QMainWind 继承于QWidget 主窗口类 不可以…

【服务器07】之【GitHub项目管理】及【Unity异步加载场景】

登录GitHub官网 GitHub: Let’s build from here GitHub 注册账号 登录账号 输入一个自定义名字,点击创建存储库就可以了 现在我们下载Fork Fork - a fast and friendly git client for Mac and Windows (git-fork.com) 免费的 下载完成之后点击File下的Clone …

TLS握手中的RTT

文章目录 TLS 1.2 握手过程中的 RTT 次数TLS 1.3 1-RTT 初次TLS1.3 0-RTT 握手过程总结 TLS 1.2 握手过程中的 RTT 次数 TLS 1.2 握手通常需要2 RTT 才能完成。具体步骤如下: 第一次 RTT: 客户端发送 ClientHello:客户端生成一个随机数&…

Pytest和Unitest框架对比

在学到自动化的时候,很多同学都遇到了Pytest和Unitest框架,有的人是两个都学,但是学的不精只是知道分别怎么用.不了解两个区别是什么.有的是犹豫到底要学习那个框架.其实要做好自动化测试,是有必要了解不同框架之间的差异化的. Pytest 特点: Pytest采用了更简洁、更灵活的语法…

Linux - 探秘 Linux 的 /proc/sys/vm 常见核心配置

文章目录 PreLinux 的 /proc/sys/vm 简述什么是 /proc/sys/vm?主要的配置文件及其用途参数调整对系统的影响dirty_background_ratio 和 dirty_ratioswappinessovercommit_memory 和 overcommit_ratiomin_free_kbytes 实例与使用建议调整 swappiness设置 min_free_kb…

移动展厅:便捷高效的展示新模式—轻空间

在现代社会,移动展厅作为一种创新的展示模式,逐渐成为各行业的重要工具。凭借其便捷高效的特点,移动展厅为企业和组织提供了全新的展示解决方案。 快速部署与灵活性 移动展厅采用气膜结构,能够在短时间内快速部署。这种高效的搭建…

【非常实验】如何在移动设备上运行 Docker?

本章就从在 DevOps 中最基本但也是最强大的工具 Docker 开始。最近,我在尝试更多Termux的可能性,于是就想着试试Docker适不适合arm架构。 我用的是天玑9000芯片,而不是高通,所以显示不出来 Qualcomm。所以我决定从在手机上运行 docker 开始,但这可能吗?让我们一起来看看吧…

什么是超级智能?

“超级智能”可以理解为将多个人的智能、机器智能以及环境智能融合在一起。这个定义强调了跨越不同领域和系统的综合与协同,以实现更强大和高效的智能能力。 多个人的智能融合指的是将多个个体的知识、经验和创造力结合起来。通过协作和信息共享,能够集思…

论文阅读--Cross-view Transformers for real-time Map-view Semantic Segmentation

一种新的2D维度的bev特征提取方案,其通过引入相机先验信息(相机内参和外参)构建了一个多视图交叉注意力机制,能够将多视图特征映射为BEV特征。 cross view attention:BEV位置编码由根据相机标定结果(内参和…

ChatGPT原理和训练【 ChatGPT是由OpenAI开发】

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…

oracle 外连接(+)和left join用法

案例1: select count(1) FROM TFUNDINFO A, TFUNDTYPE B WHERE A.VC_FUNDCODEB.VC_FUNDCODE() select count(1) FROM TFUNDINFO A, TFUNDTYPE B WHERE A.VC_FUNDCODEB.VC_FUNDCODE SELECT count(1): 这表示查询将返回一个计数,count(1)是一种常见的计数…

ANR灵魂拷问:四大组件中的onCreate-onReceive方法中Thread-sleep(),会产生几个ANR-

findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() { Override public void onClick(View v) { sleepTest(); } }); sleepTest方法详情 public void sleepTest(){ new Handler().postDelayed(new Runnable() { Override public void run() { Button but…

Android MVP模式 入门

View:对应于布局文件 Model:业务逻辑和实体模型 Controllor:对应于Activity 看起来的确像那么回事,但是细细的想想这个View对应于布局文件,其实能做的事情特别少,实际上关于该布局文件中的数据绑定的操…