网站首页 > 技术教程 正文
想学K8s,必须得先学会 Docker 吗?这是很多网友在开始琢磨着想要学 K8s 的时候都会冒出来的想法。那么今天我们就跟大家说说这个话题,要回答这个问题,我们需要先搞清楚 Docker 和 K8s 他们的角色是什么,相互之间是什么关系。
一、K8s 和 Docker 的关系
Docker 和 K8s 这两个经常一起出现,两者的Logo 看着也有一定联系一个是背上驮着集装箱的鲸鱼一个是船的舵轮。
不过两者不能放在一个维度上讨论,Docker 是当前流行的 Linux 容器解决方案,利用 Namespaces 、Cgroups 以及联合文件系统UnionFS 实现了同一主机上容器进程间的相互隔离。
- NameSpaces:隔离进程,让进程只能访问到本命名空间里的挂载目录、PID、NetWork 等资源。
- Cgroups:限制进程能使用的计算机系统各项资源的上限,包括 CPU、内存、磁盘、网络带宽等等。
- 联合文件系统UnionFS:保存一个操作系统的所有文件和目录,在它基础之上添加应用运行依赖的文件。创建容器进程的时候给进程指定Mount Namespace 把镜像文件挂载到容器里,用 chroot 把进程的 Root目录切换到挂载的目录里,从而让容器进程各自拥有独立的操作系统目录。
而 K8s 是拥有容器编排能力的集群管理解决方案,可以按照应用的定义调度各个运行着应用组件 Docker 容器,但是 Docker 并不是 K8s 对容器的唯一选择,K8s 的 容器运行时支持对接多种容器 ,比如CoreOS公司的Rkt容器(之前称为Rocket,现更名为Rkt),Apache 开源的 Mesos 容器等。只要容器实现了 K8s 容器运行时的接口约定,都能让 K8s 进行调度。
Docker 公司也推出过自己的容器集群管理方案 Docker Swarm ,跟 K8s 算是竞品,但是在生产上几乎没人使用。
Docker Swarm 没有流行起来的深层次的原因就不深究了,从一些IT媒体的报道看,可能的原因是
- 跟 Docker 深度绑定,人天生对集权主义非常反感。
- Docker 公司在大规模集群管理上的经验不足,不像谷歌那样能高屋建瓴地给出好的解决方法。
二、容器用 Docker,需要学到什么程度
看完 K8s 和 Docker 的关系后,我们已经有答案了,想学 K8s 不一定非得会 Docker。但是毕竟 Docker 还是目前最流行的 Linux 容器方案,绝大部分情况下我们还是会选择使用 Docker,那么我们 Docker 掌握到什么程度更易于我们学习 K8s 呢?
这个主要看我们想学会 K8s 干什么,即使运行在 K8s 之上的容器选择 Docker,如果我们是搭建一些基建类的软件,比如 MySQL、Redis之类的,因为这些组织已经提供了软件容器的镜像,我的使用体验是,完全用不到那些 Docker 的各种命令。
比如要在 K8s 集群上运行一个 MySQL 应用,写好应用的清单文件(就是各种配置和期望的状态),然后直接运行
kubectl apply -f mysql.yaml 就好,K8s 的容器运行时会根据清单文件里的镜像名,帮我们调 Docker 的接口去下载镜像、运行容器。
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: mysql:5.7
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: superpass
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
- name: mysql-config
mountPath: /etc/mysql/conf.d/my.cnf
subPath: my.cnf
上面配置文件,有删减。完整可运行的案例,请参考:
利用Kubernetes搭建便携式开发环境之MySQL和Redis
不过,我们使用 K8s 除了搭建这种基础软件外,学 K8s 更多是让自己开发的服务能运行在 K8s 集群上,依托 K8s 集群管理、调度的能力让服务变得更具鲁棒性、更portable。
这个时候 Docker 方面的技能就需要掌握基本的 Dockerfile 编写、打包上传镜像的命令。这部分的几个简单的知识,感觉花个两小时就能掌握,这里推荐一下我以前的文章:
Go 应用怎么打包成 Docker 镜像
Java 应用怎么打包成 Docker 镜像
学会这几个简单的 Docker 知识就能支撑我们开始 K8s 的学习和练习啦,其他 Docker 相关的知识完全可以在做 K8s 练习时遇到问题、解决问题的过程中再学。
三、总结
这篇文章把 Docker 和 K8s 的关系给大家做了一个解答,希望还在迟疑自己现有的知识储备能不能直接学 K8s 的,赶紧行动起来,K8s 是典型的入门有点难,后面越用越香。
>>>>参考链接
- 利用Kubernetes搭建便携式开发环境之MySQL和Redis
- https://mp.weixin.qq.com/s/pkpPc2Fho_rQ-IRBm78NFA
- Go 应用怎么打包成 Docker 镜像
- https://mp.weixin.qq.com/s/hoJgL-sP2OtMEFAhYNCItA
- Java 应用怎么打包成 Docker 镜像
- https://mp.weixin.qq.com/s/azwnR-GKQgxvT5aDbZqPsw
作者丨KevinYan
来源丨公众号:网管叨bi叨(ID:kevin_tech)
dbaplus社群欢迎广大技术人员投稿,投稿邮箱:editor@dbaplus.cn
关于我们
dbaplus社群是围绕Database、BigData、AIOps的企业级专业社群。资深大咖、技术干货,每天精品原创文章推送,每周线上技术分享,每月线下技术沙龙,每季度Gdevops&DAMS行业大会。
关注公众号【dbaplus社群】,获取更多原创技术文章和精选工具下载
猜你喜欢
- 2025-05-28 k8s实战
- 2025-05-28 k8s中部署基于nfs的StorageClass
- 2025-05-28 Kubernetes详解——NFS对PVC和PV使用实战
- 2025-05-28 Kubernetes日志采集ELK|部署ElasticSearch存储
- 2025-05-28 Milvus部署指南:从单机到分布式,手把手教你玩转向量数据库
- 2025-05-28 kubernetes环境手动部署 Prometheus 监控系统安装文档
- 2025-05-28 k8s集群资源监控
- 2025-05-28 一文了解k8s核心高频常用的内置对象
- 2025-05-28 动手动脑学Kubernetes系列之StatefulSet
- 2025-05-28 「云原生」k8s中volumeMounts.subPath的巧妙用法
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)