Docker不香吗?为什么还要用K8s

本文介绍了Docker和k8s在容器化时代的角色,Docker作为一个容器化平台,而k8s作为容器编排系统,解决了大规模容器的管理和调度问题。随着业务规模的扩大,Docker Swarm无法满足复杂需求,k8s因其强大的编排能力成为市场领导者。Docker与k8s相辅相成,共同推动了容器技术的发展。

随着k8s 作为容器编排解决方案变得越来越流行,有些人开始拿 Docker 和 k8s进行对比,不禁问道:Docker 不香吗?

k8s 是kubernets的缩写,’8‘代表中间的八个字符。

其实 Docker 和 k8s 并非直接的竞争对手,它俩相互依存。Docker 是一个容器化平台,而 k8s 是 Docker 等容器平台的协调器。

容器化时代来了

虚拟化技术已经走过了三个时代,没有容器化技术的演进就不会有 Docker 技术的诞生。

虚拟化技术演进

(1)物理机时代:多个应用程序可能会跑在一台机器上。

物理机时代

(2)虚拟机时代:一台物理机器安装多个虚拟机(VM),一个虚拟机跑多个程序。

虚拟机时代

(3)容器化时代:一台物理机安装多个容器实例(container),一个容器跑多个程序。

容器化时代

容器化解决了软件开发过程中一个令人非常头疼的问题,用一段对话描述:

测试人员:你这个功能有问题。

开发人员:我本地是好的啊。

开发人员编写代码,在自己本地环境测试完成后,将代码部署到测试或生产环境中,经常会遇到各种各样的问题。明明本地完美运行的代码为什么部署后出现很多 bug,原因有很多:不同的操作系统、不同的依赖库等,总结一句话就是因为本地环境和远程环境不一致。

容器化技术正好解决了这一关键问题,它将软件程序和运行的基础环境分开。开发人员编码完成后将程序打包到一个容器镜像中,镜像中详细列出了所依赖的环境,在不同的容器中运行标准化的镜像,从根本上解决了环境不一致的问题。

容器化技术的尖刀武器

容器化技术的特点
  • 可移植性:不依赖具体的操作系统或云平台,比如在阿里云或腾讯云直接随意迁移。

  • 占地小:容器只需要其应用程序以及它需要运行的所有容器和库的依赖清单,不需要将所有的依赖库都打包在一起。

  • 共享 bin 和 lib:不同的容器可以共享 bin 和 lib,进一步节省了空间。

Docker 横空出世

2010年一位年轻小伙子在美国旧金山成立了一家名叫【dotCloud】的公司, 开发了 Docker的核心技术,从此开启了容器技术的时代。

Docker原公司名

后面 dotCloud 公司将自己的容器技术进行了简化和标准化,取名为 Docker,就是大家熟悉的鲸鱼 logo。

Docker新logo

2013年dotCloud 公司宣布将 Docker 开源,随着越来越多的工程师发现了它的优点, Docker 的人气迅速攀升,成为当时最火爆的开源技术之一。

当前有30%以上的企业在其AWS环境中使用Docker,并且这个数字还在继续增长。

Docker使用率越来越高

Docker怎么用?

其实大多数人谈论 Docker 时说的是 Docker Engine,这只是一个构建和运行的容器。

在运行容器前需要编写Docker File,通过 dockerFile 生成镜像,然后才能运行 Docker 容器。

Docker File 定义了运行镜像(image)所需的所有内容,包括操作系统和软件安装位置。一般情况下都不需要从头开始编写 Docker File,在 Docker Hub 中有来自世界各地的工程师编写好的镜像,你可以基于此修改。

编排系统的需求催生 k8s

尽管Docker为容器化的应用程序提供了开放标准,但随着容器越来越多出现了一系列新问题:

  • 如何协调和调度这些容器?

  • 如何在升级应用程序时不会中断服务?

  • 如何监视应用程序的运行状况?

  • 如何批量重新启动容器里的程序?

解决这些问题需要容器编排技术,可以将众多机器抽象,对外呈现出一台超大机器。现在业界比较流行的有:k8s、Mesos、Docker Swarm。

在业务发展初期只有几个微服务,这时用 Docker 就足够了,但随着业务规模逐渐扩大,容器越来越多,运维人员的工作越来越复杂,这个时候就需要编排系统解救opers。

应用程序的声明周期

一个成熟的容器编排系统需要具备以下能力:

  • 处理大量的容器和用户

  • 负载均衡

  • 鉴权和安全性

  • 管理服务通信

  • 多平台部署

k8s与Docker Swarm江湖恩怨

k8s VS Docker Swarm

如果你非要拿 Docker 和 k8s 进行比较,其实你更应该拿 Docker Swarm 和 k8s 比较。

Docker Swarm 是 Docker 自家针对集群化部署管理的解决方案,优点很明显,可以更紧密集成到 Docker 生态系统中。

虽说 Swarm 是 Docker 亲儿子,但依旧没有 k8s 流行,不流行很大程度是因为商业、生态的原因,不多解释。

k8s是做什么用的?

K8s是Google研发的容器协调器,已捐赠给CNCF,现已开源。

Google 利用在容器管理多年的经验和专业知识推出了 k8s,主要用于自动化部署应用程序容器,可以支持众多容器化工具包括现在非常流行的Docker。

目前k8s 是容器编排市场的领导者,开源并公布了一系列标准化方法,主流的公有云平台都宣布支持。

一流的厂商都在抢占标准的制高点,一堆小厂商跟着一起玩,这就叫生态了。国内的大厂商都在干嘛呢?抢社区团购市场,玩资本游戏,哎?!

K8s 架构和组件

k8s 由众多组件组成,组件间通过 API 互相通信,归纳起来主要分为三个部分:

  • controller manager

  • nodes

  • pods

k8s集群架构图
  • Controller Manager,即控制平面,用于调度程序以及节点状态检测。

  • Nodes,构成了Kubernetes集群的集体计算能力,实际部署容器运行的地方。

  • Pods,Kubernetes集群中资源的最小单位。

Docker与k8s 难舍难分

Docker 和 k8s 在业界非常流行,都已经是事实上的标准。

Docker 是用于构建、分发、运行容器的平台和工具。

而 k8s 实际上是一个使用 Docker 容器进行编排的系统,主要围绕 pods 进行工作。Pods 是 k8s 生态中最小的调度单位,可以包含一个或多个容器。

Docker 和 k8s 是根本上不同的技术,两者可以很好的协同工作。

开发实践,灵魂追问

(1)没有 k8s 可以使用 docker 吗?

可以。实际上一些小型公司,在业务不太复杂的情况下都是直接使用 Docker。尽管 k8s 有很多好处,但是众所周知它非常复杂,业务比较简单可以放弃使用 k8s。

(2)没有 Docker 可以使用 k8s 吗?

k8s 只是一个容器编排器,没有容器拿什么编排?!

k8s 经常与 Docker 进行搭配使用,但是也可以使用其他容器,如RunC、Containerted 等。

(3)Docker Swarm 和 k8s 怎么选?

选 k8s。2019年底Docker Enterprise已经出售给Mirantis,Mirantis声明要逐步淘汰Docker Swarm,后续会将 k8s 作为默认编排工具。

最后一个问题

Docker 不香吗?为什么还要用 k8s

Docker很香,但 k8s 在业务达到一定规模后也得启用。学会了吗?

—————END—————

推荐阅读:

最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。
明天见(。・ω・。)ノ♡
<think>嗯,用户想了解Kubernetesk8s)的功能、它与Docker的关系,以及在Windows上的部署方法。首先,我需要先回忆一下k8s的核心功能,比如集群管理、自动扩缩容、服务发现这些。然后,要明确k8sDocker的关系,Docker作为容器运行时,k8s用来管理容器化的应用,两者是互补的。 接下来,关于Windows部署,用户提到的是在Windows上部署k8s,可能需要考虑Docker Desktop的集成,或者使用Minikube、kubeadm等工具。记得之前有引用提到在Docker中部署k8s的步骤,比如下载特定版本的k8s-for-docker-desktop,配置控制台访问令牌等。需要检查这些步骤是否适用于Windows环境,尤其是PowerShell的操作。 用户可能对具体的部署步骤有疑问,比如需要哪些前提条件,是否需要额外的配置。同时,要确保引用的资料正确,比如引用[1]和[2]中的内容是否适用于Windows部署,是否有版本兼容性问题。此外,用户可能还想知道部署后的基本验证方法,比如如何检查节点状态和pod运行情况。 另外,要区分k8s同部署方式,比如本地开发环境使用Docker Desktop,生产环境可能需要更复杂的集群搭建。还要注意Windows和Linux容器之间的差异,确保用户了解在Windows上运行k8s的限制和注意事项。 最后,生成相关问题时,要覆盖用户可能进一步关心的方面,比如k8s的网络策略、存储管理、监控工具,以及与其他容器技术的比较,比如containerd。确保问题具有引导性,帮助用户深入理解k8s的各个方面。</think>### Kubernetes (k8s) 功能介绍 Kubernetes 是一个开源的容器编排平台,核心功能包括: 1. **自动化容器调度**:根据资源需求和约束自动分配容器到集群节点[^3]。 2. **服务发现与负载均衡**:通过内置 DNS 和负载均衡器分配流量,例如 $Service$ 对象实现流量分发。 3. **自愈能力**:自动重启故障容器、替换可用节点[^3]。 4. **滚动更新与回滚**:支持灰度发布和版本回退,如通过 $Deployment$ 对象管理应用版本。 5. **存储编排**:动态挂载存储卷(如 $PersistentVolume$ 和 $PersistentVolumeClaim$)。 6. **横向扩展**:基于 CPU/内存使用率自动扩缩容,例如通过 $HorizontalPodAutoscaler$ 实现。 $$ y = \frac{\text{当前副本数}}{\text{目标资源利用率}} \times \text{当前资源使用率} $$ --- ### KubernetesDocker 的关系 1. **互补角色**: - Docker 提供容器化技术(镜像构建、容器运行时) - Kubernetes 管理跨节点的容器化应用(调度、网络、存储)[^3] 2. **架构层级**: - Docker 属于容器运行时层(可通过 $containerd$ 或 $CRI-O$ 集成到 k8s) - Kubernetes 属于容器编排层,支持多种容器运行时 3. **演进趋势**: 自 Kubernetes 1.24 起默认使用 $containerd$ 替代 Docker Engine,但 Docker 镜像仍兼容[^3]。 --- ### Kubernetes 在 Windows 上的部署方法 #### 前提条件 - Windows 10/11 专业版或企业版(需开启 Hyper-V) - Docker Desktop 4.15+(集成 Kubernetes 选项) #### 部署步骤 1. **安装 Docker Desktop** 下载地址见引用[^1],安装时勾选 Kubernetes 组件: ```powershell # 验证安装 docker version kubectl version --client ``` 2. **启用 Kubernetes 集群** Docker Desktop 设置界面勾选 "Enable Kubernetes",等待集群初始化完成[^1]。 3. **配置访问权限** 按引用[^2]操作,在 PowerShell 中配置服务账号: ```powershell cd F:\k8s-for-docker-desktop-1.27.2 kubectl apply -f kube-system-default.yaml ``` 4. **验证部署** ```powershell kubectl get nodes # 应显示 "docker-desktop" 节点 kubectl get pods -A # 查看系统 Pod 状态 ``` --- ### 相关技术对比表 | 特性 | Docker Swarm | Kubernetes | |---------------------|--------------------|--------------------| | 学习曲线 | 简单 | 复杂 | | 集群规模 | 适合中小规模 | 支持超大规模 | | Windows 支持 | 原生支持 | 需特定配置 | | 自动修复 | 基础功能 | 完善的多维度自愈 | ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值