想学K8s,必须得先学会 Docker 吗?这是很多网友在开始琢磨着想要学 K8s 的时候都会冒出来的想法。那么今天我们就跟大家说说这个话题,要回答这个问题,我们需要先搞清楚 Docker 和 K8s 他们的角色是什么,相互之间是什么关系。
K8s 和 Docker 的关系
Docker 和 K8s 这两个经常一起出现,两者的Logo 看着也有一定联系一个是背上驮着集装箱的鲸鱼一个是船的舵轮。
kubernetes and docker
不过两者不能放在一个维度上讨论,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,需要学到什么程度
看完 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
- 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 集群上,依托 K8s 集群管理、调度的能力让服务变得更具鲁棒性、更portable。
这个时候 Docker 方面的技能就需要掌握基本的 Dockerfile 编写、打包上传镜像的命令。这部分的几个简单的知识,感觉花个两小时就能掌握,这里推荐一下我以前的文章
学会这几个简单的 Docker 知识就能支撑我们开始 K8s 的学习和练习啦,其他 Docker 相关的知识完全可以在做 K8s 练习时遇到问题、解决问题的过程中再学。
这篇文章把 Docker 和 K8s 的关系给大家做了一个解答,希望还在迟疑自己现有的知识储备能不能直接学 K8s 的,赶紧行动起来,K8s 是典型的入门有点难,后面越用越香。
- END -
扫码关注公众号「网管叨bi叨」
给网管个星标,第一时间吸我的知识 👆
网管为大家整理了一本超实用的《Go 开发参考书》收集了70多条开发实践。去公众号回复【gocookbook】即刻领取!
觉得有用就点个在看 👇👇👇
想学K8s,必须得先学会 Docker 吗?这是很多网友在开始琢磨着想要学 K8s 的时候都会冒出来的想法。那么今天我们就跟大家说说这个话题,要回答这个问题,我们需要先搞清楚 Docker 和 K8s 他们的角色是什么,相互之间是什么关系。K8s 和 Docker 的关系Docker 和 K8s 这两个经常一起出现,两者的Logo 看着也有一定联系一个是背上驮着集装箱的鲸...
1.
Docker
能干什么?
首先,
Docker
是容器技术的一种实现。
简化配置:源代码、运行环境、配置都能够打包到一个容器里,这个容器可以运行在不同的环境里,这样开发、测试、生产环境会保持高度一致。
代码流水化管理
整合服务器
提升开发效率
2.Kubernetes(
k8s
)是什么?
k8s
是一个容器编排的工具,即对容器的创建、管理、运维等等操作的工具。
一般在生产环境中会有非常多个容器去创建和维护,这就需要一个容器编排工具去帮助我们做这些事情。
二、容器技术
1.应用部署的发展
最开始物理机直接部署的局限性:
部署非常慢、成本非常高、资
一、
docker
简介
镜像(Image):就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
容器(Container):镜像(Image)和容器(Container)的
关系
,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
Docker
是一个开源的应
Kubernetes(简称
k8s
)是一个用于管理云平台中多个容器化应用的开源系统。
Docker
是容器化应用的一种常用实现方式。在
k8s
中,可以使用
Docker
容器来运行应用。因此,
k8s
和
Docker
的
关系
可以概括为:
k8s
是一个用于管理容器化应用的系统,
Docker
是一种实现容器化应用的方式。
k8s
-master 192.168.0.201 master
k8s
-node1 192.168.0.202 minion
k8s
-node2 192.168.0.203 minion
准备工作系统
安装Ubuntu 14.04 LTS 64bit server版本系统,配置好hostname和ip。
在更新国内的软件源的时候,由于GFW的原因,经常会出现md5校验错误,建议使用阿里云的源。
Docker
在minion节点上安装
Docker
,版本需
这里写目录标题1,关于容器技术与虚拟机:2,关于
docker
docker
技术的三大核心概念:镜像,容器,仓库3,关于
k8s
:
k8s
的架构4,关于openstack5,总结:
1,关于容器技术与虚拟机:
虚拟机:在容器技术之前,业界的网红是虚拟机,虚拟机技术的代表,是vmware 和openstack
所谓虚拟机就是在你的操作系统里面。装一个软件,然后通过这个软件,再模拟一台甚至多台字电脑出来。字电脑里面可以和正常电脑一样运行程序。并且子电脑与子电脑之间是相互隔离的,互不影响。
容器技术:而容器技术恰好没有这
openshift是基于容器计数搭建的一个云平台。这里的容器技术即包括
Docker
和Kunbernetes。如下图所示,OPenshift底层以
Docker
作为容器引擎驱动,以Kubernetes作为容器编排引擎组件。OpenShift提供了开发语言、中间件、自动化流程工具及界面等元素,提供了一套完整的基于容器的应用云平台。
在这里插入代码片VMware、Pivotal与Google Cloud合作推出的PKS,这个Cloud Foundry Container Runtime的全新商业支持版本致力于让虚拟化管理员轻松运行和运维Kubernetes,从而支持开发团队在vSphere或Google Cloud Platform上运行Kubernetes。这其中提到一个重要的名词——kubernetes(
K8S
)。
VM...