Docker与K8s关系介绍不会Docker也可以使用K8s


Posted in Servers onJune 25, 2022

K8s和Docker 的关系

Docker 和 K8s 这两个经常一起出现,两者的Logo 看着也有一定联系一个是背上驮着集装箱的鲸鱼一个是船的舵轮。

Docker与K8s关系介绍不会Docker也可以使用K8s

不过两者不能放在一个维度上讨论,Docker 是当前流行的 Linux 容器解决方案,利用 Namespaces 、Cgroups 以及联合文件系统UnionFS 实现了同一主机上容器进程间的相互隔离。

Docker与K8s关系介绍不会Docker也可以使用K8s

  • NameSpaces:隔离进程,让进程只能访问到本命名空间里的挂载目录、PID、NetWork 等资源
  • Cgroups: 限制进程能使用的计算机系统各项资源的上限,包括 CPU、内存、磁盘、网络带宽等等
  • 联合文件系统UnionFS : 保存一个操作系统的所有文件和目录,在它基础之上添加应用运行依赖的文件。创建容器进程的时候给进程指定Mount Namespace 把镜像文件挂载到容器里,用 chroot 把进程的 Root目录切换到挂载的目录里,从而让容器进程各自拥有独立的操作系统目录。

而 K8s 是拥有容器编排能力的集群管理解决方案,可以按照应用的定义调度各个运行着应用组件 Docker 容器,但是 Docker 并不是 K8s 对容器的唯一选择,K8s 的 容器运行时支持对接多种容器 ,比如CoreOS公司的Rkt容器(之前称为Rocket,现更名为Rkt),Apache 开源的 Mesos 容器等。只要容器实现了 K8s 容器运行时的接口约定,都能让 K8s 进行调度。

Docker与K8s关系介绍不会Docker也可以使用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

上面配置文件,有删减。

不过,我们使用 K8s 除了搭建这种基础软件外,学 K8s 更多是让自己开发的服务能依托 K8s 集群管理、调度的能力变的更具鲁棒性、更portable。这个时候 Docker 方面的技能掌握基本的 Dockerfile 编写、打包上传镜像的命令。

学会这几个简单的Docker知识就完全够用,能支撑我们开始 K8s 的学习和练习啦,其他 Docker 相关的知识完全可以在做 K8s 练习时遇到问题、解决问题的过程中再学。

总结

这篇文章把 Docker 和 K8s 的关系给大家做了一个解答,希望还在迟疑自己现有的知识储备能不能直接学 K8s 的,赶紧行动起来,K8s 是典型的入门有点难,后面越用越香。

更多关于Docker与K8s关系的资料请关注三水点靠木其它相关文章!


Tags in this post...

Servers 相关文章推荐
Apache Calcite 实现方言转换的代码
Apr 24 Servers
nginx结合openssl实现https的方法
Jul 25 Servers
Windows下用Nginx配置https服务器及反向代理的问题
Sep 25 Servers
Rhit高效可视化Nginx日志查看工具
Nov 01 Servers
nginx从安装到配置详细说明(安装,安全配置,防盗链,动静分离,配置 HTTPS,性能优化)
Feb 12 Servers
Nginx的基本概念和原理
Mar 21 Servers
docker-compose部署Yapi的方法
Apr 08 Servers
Linux中如何安装并部署Redis
Apr 18 Servers
Win Server2016远程桌面如何允许多用户同时登录
Jun 10 Servers
Nginx安装配置详解
Jun 25 Servers
Linux中sftp常用命令整理
Jun 28 Servers
kubernetes集群搭建Zabbix监控平台的详细过程
Jul 07 Servers
Windows Server 修改远程桌面端口的实现
Windows server 2012 NTP时间同步的实现
windows server 2016 域环境搭建的方法步骤(图文)
Windows server 2022创建创建林、域树、子域的步骤
Windows Server 2022 超融合部署(图文教程)
win server2012 r2服务器共享文件夹如何设置
服务器SVN搭建图文安装过程
Jun 21 #Servers
You might like
在MongoDB中模拟Auto Increment的php代码
2011/03/06 PHP
PHP之短标签开启设置
2013/06/17 PHP
php面向对象中static静态属性与方法的内存位置分析
2015/02/08 PHP
php基于自定义函数记录log日志方法
2017/07/21 PHP
6个DIV 135或246间隔一秒轮番显示效果
2010/07/24 Javascript
基于jquery的获取浏览器窗口大小的代码
2011/03/28 Javascript
JS 按钮点击触发(兼容IE、火狐)
2013/08/07 Javascript
手机平板等移动端适配跳转URL的js代码
2014/01/25 Javascript
JavaScript字符串常用的方法
2016/03/10 Javascript
JavaScript图像延迟加载库Echo.js
2016/04/05 Javascript
javascript弹出窗口中增加确定取消按钮
2016/06/24 Javascript
微信小程序 视图层(xx.xml)和逻辑层(xx.js)详细介绍
2016/10/13 Javascript
Angular.js ng-file-upload结合springMVC的使用教程
2017/07/10 Javascript
JavaScript实现写入文件到本地的方法【基于FileSaver.js插件】
2018/03/15 Javascript
vue-cli 3.0 版本与3.0以下版本在搭建项目时的区别详解
2018/12/11 Javascript
jQuery操作cookie的示例代码
2019/06/05 jQuery
vue项目中使用particles实现粒子背景效果及遇到的坑(按钮没有点击响应)
2020/02/11 Javascript
windows下create-react-app 升级至3.3.1版本踩坑记
2020/02/17 Javascript
[02:23]完美世界全国高校联赛街访DOTA2第一期
2019/11/28 DOTA
py中的目录与文件判别代码
2008/07/16 Python
python实现基于两张图片生成圆角图标效果的方法
2015/03/26 Python
Python使用三种方法实现PCA算法
2017/12/12 Python
python实现两张图片的像素融合
2019/02/23 Python
python数值基础知识浅析
2019/11/19 Python
PyTorch加载自己的数据集实例详解
2020/03/18 Python
从一次项目重构说起CSS3自定义变量在项目的使用方法
2021/03/01 HTML / CSS
SmartBuyGlasses台湾:名牌眼镜,名牌太阳眼镜及隐形眼镜
2017/01/04 全球购物
SQL Server 2000数据库的文件有哪些,分别进行描述。
2015/11/09 面试题
优秀社区干部事迹材料
2014/02/03 职场文书
产品质量承诺书范文
2014/03/27 职场文书
奔腾年代观后感
2015/06/09 职场文书
《观察物体》教学反思
2016/02/17 职场文书
Python中for后接else的语法使用
2021/05/18 Python
Python机器学习之PCA降维算法详解
2021/05/19 Python
React实现动效弹窗组件
2021/06/21 Javascript
Windows Server 2019 域控制器安装图文教程
2022/04/28 Servers