kubernetes(k8s)大白基础学习-kubernetes是什么?

一、认识 Docker

Docker 是什么

先来看看 Docker 的图标:

一条鲸鱼背上驮着四方形块的物品,就像一条海运船上装满集装箱,集装箱里装载了各种各样的物品,集装箱不会管装的物品是什么。

Docker 就像这艘海运船,它要把各种应用程序和软件一起打包,然后装进 Docker 里,Docker 可以对它们进行管理。

你可以把 Docker 作为一个软件部署的单元,里面可以包含代码和各种软件依赖项。

比如,编写了一个 PHP 项目,用到的软件有 MySQL、Nginx,那么你可以把 PHP + MySQL + Nginx 一起打包,装进

Docker 里。这就是一个 PHP 项目的部署单元。可以通过 Docker,把这个部署单元部署到任意服务器或云上。

​ 图:Docker 把 PHP、Nginx 和 MySQL 打包

Docker 是什么?

Docker 是一个开源项目,也是一个容器,它可以将程序及相关软件打包在一起,形成一个程序部署单元,我们就可以快速将程序部署单元部署到服务器或云上。

build everythin,run anywhere。Build,Ship,Run。

说明:

有很多容器工具,Docker 只是其中之一,比如 Podman,Container 等。

Docker 的优点

与传统部署有什么区别?

传统部署:应用程序安装,依赖软件包安装,修改配置文件等多个步骤才能部署一个程序项目。依赖软件的安装过程可能会出很多问题。

Docker 部署:就像集装箱把所有物品装进箱子里一样。Docker 把程序和依赖软件环境打包成镜像,形成标准化部署单元,标准化交付物。部署时只需要下载这个 Docker 镜像。大大简化了交付、部署模式。

Docker 优势:

1、交付物标准化 :像集装箱一样,Docker 可以把软件打包成镜像形成标准化部署单元。

2、一次构建,多次交付 :像集装箱一样,“一次装箱,多次运输”。Docker 镜像是“一次构建,多次交付”。当涉及到不同操作系统、部署多个副本、程序迁移时等,Docker 的作用就更明显,一次创建和配置之后,可以在任意服务器上运行。

3、可移植(任意服务器上运行):Docker 打包的镜像,可以在任意服务器或云上运行。

4、隔离应用程序:像集装箱一样,可以把不同物品分箱行隔离。Docker 也可以隔离不同的应用程序,而且它比虚拟机开销更小。Docker 可以把服务器隔离成很多“虚拟机”,每个“虚拟机”都是独立运行世界互不干扰。

5、简化配置:Docker 将代码和运行环境打包成镜像,那么同一个 Docker 配置可以在不同环境中使用。与上面 3 对应。

6、快速部署:与上面的 2 对应。

7、环境统一:开发、测试、生产环境可以做到统一,减少环境不一致带来的各种问题。

Docker 的缺点

使用 Docker 还需要考虑的缺点:

  • 虚拟机隔离性更好

因为 Docker 是基于操作系统内核实现的,它是建立在操作系统内核之上。如果操作系统受到影响,那么运行在上面的容器也会出现问题。

基于 hypervisor 的虚拟机技术,他的系统硬件资源是完全虚拟化的,当一台虚拟机出现系统级别问题,不会影响到同一宿主上的其它虚拟机。

  • 性能

不管是容器还是虚拟机都是在操作系统之上在进行了一次封装和隔离,在解耦方面做了很大贡献,比如应用和应用、应用和环境解耦方面。毕竟是进行了一次封装,在网络连接转发以及数据交互方面肯定会有一定的损耗。

  • 存储

存储方案是用的 Volume 接口形成数据映射和转移,这也会造成更多交互发生。

不过随着硬件技术和网络技术的发展,容器技术的缺点会变得不是那么明显。

二、kubernetes 是什么

概述

试想一下,如果我们要部署多个 Docker 镜像到多台服务器上,一般的想法,登录到多台服务器拉取镜像部署,或者用一些脚本语言来部署。这样的做法有什么不好地方没?回想一下,登录每台服务器或编写脚本,很麻烦。那还有其它方法解决这个问题吗?Docker 公司早就想出来了另外解决方案 docker swarm,用来编排多个 docker。

可是 google 携 kubernetes 随之而来,docker swarm 慢慢在与它的竞争中败下阵。kubernetes 逐渐成为容器编排领域的主流。

kubernetes 是什么?

Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,促进声明式配置和自动化。

可移植、可扩展都是针对容器,只不过 k8s 为了 更高掌控力又包裹了一层叫 Pod。工作负载是指 k8s 里的容器可以组成服务,k8s 可以对多个服务进行负载。

程序部署方式的演化

(From:https://kubernetes.io/zh-cn/docs/concepts/overview/#going-back-in-time 官方文档)

  • 传统部署时代

    应用程序都是部署在物理机上。这样部署的问题是,无法限制在物理机上运行的应用程序资源使用,导致资源分配不均。

  • 虚拟化部署时代

    因此,引入虚拟化技术。虚拟化技术允许你在单个物理机的 CPU 上运行多台虚拟机。虚拟化能使应用程序在不同虚拟机彼此隔离。

  • 容器化部署时代

    容器也是类似虚拟机,只不过容器之间可以共享操作系统。从上图可以看出来。而且容器比虚拟机更轻量级。并且容器也能对应用程序进行隔离,与虚拟机类似,每个容器都有自己的文件系统、CPU、内存、进程空间等。

更多内容请看官方文档:https://kubernetes.io/zh-cn/docs/concepts/overview/#going-back-in-time

三、kubernetes 能做什么?有什么功能

k8s 能做什么,其实就是它提供了什么功能。

kubernetes 主要提供的功能类似于 Linux 里的一些功能、分布式系统和自动部署的功能,它把 3 者的一些功能综合在一起。

  • Linux 的什么功能:存储,网络,限制 CPU 等功能进一步封装使用

  • 分布式系统的什么功能:负载均衡,副本(集),主从复制,服务发现,配置管理等

  • 运维管理:回滚,自动部署,自动计算需要的 Pod,自动管理容器,自动扩容等,运维自动化的进一步实践

以下是官方文档书写的功能:

  • 服务发现和负载均衡

    kubernetes 可以使用 DNS 名称或自己的 IP 地址来暴露容器。如果进入容器流量大,kubernetes可以用负载均衡分配网络流量

  • 存储编排

    kubernetes允许你挂载自己选择的存储系统。

  • 自动部署和回滚

    可以受用 kubernetes 描述已部署容器的所需状态,它可以将实际状态更改为期望状态。控制和自动化应用的部署和更新。

  • 自动完成装箱计算

    你为 kubernetes 提供了许多节点组成的集群,在这个集群中运行容器化的任务。你可以告诉 kubernetes 每个容器需要多少 CPU 和内存。 Kubernetes 可以将这些容器按实际情况调度到你的节点上,以最佳方式利用你的资源。

  • 自我修复

    kubernetes 将会启动失败的容器、替换容器、杀死不响应用户定义的运行状况的容器。

  • 密匙和配置管理

    kubernetes 允许你存储和管理敏感信息。比如密码、OAuth 令牌。

  • 跨多个主机编排容器

  • 动态扩展容器化应用及其资源

    比如说 pod,pod 是无状态运行,如果 pod 宕机了,马上会有其它的 pod 来接替它的工作,用户完全无感知。用户访问量暴增,可以自动增加新的 pod 应对访问量增加的需求。访问量下降,k8s 也会自动缩减 pod 数量。做到弹性缩容扩容。

kubernetes 还提供了很多扩展能力,例如CRD,供用户编写自己的扩展应用。

更多内容:https://kubernetes.io/zh-cn/docs/concepts/overview/#why-you-need-kubernetes-and-what-can-it-do

四、kubernetes 不是什么

Kubernetes 不是传统的什么都做的 PaaS(平台即服务)系统。虽然 kubernetes 提供了 PaaS 产品共有的一些功能,例如部署、扩展、负载均衡,允许用户集成监控、报警方案等等。但 kubernetes 不是单体式系统似的提供这些功能,kubernetes 只是提供了扩展功能的能力,可以让用户来开发扩展需要的功能,而那些默认解决方案是可选、可插拔、可替换的。

Kubernetes 架构为开发人员构建需要的功能提供了基础能力 - 很多扩展能力。

  • kubernetes 不部署源码,也不构建你的应用程序。但是你可以根据 k8s 提供的基础能力来构建这些软件,比如 CICD 的软件

  • 不提供应用程序级别的服务作为内置服务,例如消息中间件、数据库、缓存、存储等等应用程序软件,但是这些应用软件可以在 kubernetes 上运行

  • 不是日志记录、监控或报警的解决方案。它集成了一些功能,并提供收集和导出指标的机制

  • 不提供也不采用任何全面的机器配置、机器维护和管理等功能

上面说了很多 kubernetes 本身不内置的功能,但是它是一个开放的开发平台,提供了很多扩展能力, 这些扩展能力可供开发人员来开发自己需要的功能或应用。

五、什么时候用 kubernetes

当你的应用程序,业务访问量不大,活跃用户比较少时候,比如说每天只有几万人访问,这时候使用 Docker 就可以,软件少,架构简单,管理方便。

当你的业务扩大,访问量上来了,比如说每天有 10 W人访问量,这时候的架构服务器分离就可以,也用不上 kubernetes。

kubernetes 软件是一个复杂系统,架构、维护都需要人力,业务量少投入性价比太低。

架构如何演进,可以看我前面的文章:

微服务架构学习与思考(12):从单体架构到微服务架构的演进历程:

https://www.cnblogs.com/jiujuan/p/17066590.html

如果你的业务还在扩大,需要几十台甚至上百台服务器,用来扩展你的应用程序架构,这时就可以考虑用 kubernetes 。

这时候的投入性价比就会高。

六、参考

kubernetes(k8s)大白学习01-kubernetes是什么?有什么用?的更多相关文章

  1. kubernetes学习01—kubernetes介绍

    本文收录在容器技术学习系列文章总目录 一.简介 1.Kubernetes代码托管在GitHub上:https://github.com/kubernetes/kubernetes/. 2.Kubern ...

  2. DOCKER 学习笔记9 Kubernetes (K8s) 生产级容器编排 上

    前言 在上一节的学习中.我们已经可以通过最基本的 Docker Swarm 创建集群,然后在集群里面加入我们需要运行的任务 以及任务的数量 这样我们就创建了一个服务. 当然,这样的方式在我们本地虚拟机 ...

  3. 如何掌握 Kubernetes ?系统学习 k8s 的大纲一份

    深度剖析 Kubernetes 深度剖析 k8s 如何学习 Kubernetes ?如何入门 Kubernetes? 为了帮帮初学者,2018 年 InfoQ 旗下(就是你知道的那个 InfoQ 哇) ...

  4. 5.基于二进制部署kubernetes(k8s)集群

    1 kubernetes组件 1.1 Kubernetes 集群图 官网集群架构图 1.2 组件及功能 1.2.1 控制组件(Control Plane Components) 控制组件对集群做出全局 ...

  5. 深入剖析Kubernetes k8s

    深入剖析Kubernetes k8s 毫无疑问,Kubernetes 已经成为容器领域当之无愧的事实标准.除了 Google.Microsoft 等技术巨擘们在容器领域里多年的博弈外,国内的 BAT. ...

  6. 02 | 健康之路 kubernetes(k8s) 实践之路 : 生产可用环境及验证

    上一篇< 01 | 健康之路 kubernetes(k8s) 实践之路 : 开篇及概况 >我们介绍了我们的大体情况,也算迈出了第一步.今天我们主要介绍下我们生产可用的集群架设方案.涉及了整 ...

  7. Kubernetes(k8s)集群安装

    一:简介 二:基础环境安装 1.系统环境 os Role ip Memory Centos 7 master01 192.168.25.30 4G Centos 7 node01 192.168.25 ...

  8. kubernetes(k8s)集群安装calico

    添加hosts解析 cat /etc/hosts 10.39.7.51 k8s-master-51 10.39.7.57 k8s-master-57 10.39.7.52 k8s-master-52 ...

  9. Mac016--安装kubernetes(k8s)

    一.安装kubernetes(k8s) 参考: http://batizhao.github.io/2018/01/18/Running-Kubernetes-Locally-via-Minikube ...

  10. ubuntu16.04 docker kubernetes(k8s) istio 安装

    版本: docker: 19.03.5 kubernetes: 1.17.0 istio: 1.4.3 步骤一:给ubuntu换源 https://www.cnblogs.com/lfri/p/106 ...

随机推荐

  1. [转帖]Shell脚本数组(实现冒泡排序,直接选择排序,反转排序)

    目录 数组 数组定义方法 数组包括的数据类型 获取数组长度 读取某下标赋值 数组遍历 数组切片 数组替换 删除数组 追加数组中的元素 从函数返回数组 加法传参运算 乘法传参运算 数组排序算法 冒泡排序 ...

  2. [转帖]DBWR与LGWR的写入机制

    https://www.jianshu.com/p/6c87cb6cd320 读与写是每个数据库提供的最基本的功能.当数据库中出现第一个进程时,总免不了要将数据从磁盘上加载到内存中,一次数据库的物理I ...

  3. [转帖]疑问:进程在竞争CPU时并没有真正运行,为什么还会导致系统的负载升高?

    疑问:进程在竞争CPU时并没有真正运行,为什么还会导致系统的负载升高? 因为存在CPU上下文切换. linux系统说明 Linux是一个多任务操作系统,它支持远大于CPU数量的任务同时运行.当然,这些 ...

  4. [转帖]jvm学习三-MAT内存分析工具的使用

    目录 1 模拟内存溢出程序 1.1 jvm配置 1.2 测试代码 2 MAT工具进行内存分析 2.1 大纲介绍 2.2 Histogram视图介绍 2.3 Leak Suspects视图介绍 2.4 ...

  5. [转帖]一起来体验96核心、192线程CPU——第四代AMD EPYC处理器独家测试

    http://k.sina.com.cn/article_1882475282_70344b12027010s1x.html 与第三代EPYC 7003系列处理器相比,新一代EPYC 9004系列处理 ...

  6. [转帖]深度解读:传奇的Alpha处理器

    https://jishuin.proginn.com/p/763bfbd2cf85 来源:科技新报(台) 长期关心处理器技术发展者,这20年来,很难不每隔一段时间就会偶尔听到「这技术受Alpha影响 ...

  7. 2024了,我不想再用AOP收集业务操作日志了 | 京东云技术团队

    0.背景 在近期的项目中,系统涉及到针对系统的业务操作日志统计功能,由于本系统位于业务链路的中心环节,负责接收上游系统的数据,并将基于用户操作产生的数据传递至下游系统,鉴于业务链路的复杂性和操作场景的 ...

  8. 学习下Redis内存模型

    作者:京东零售 吴佳 前言 redis,对于一个java开发工程师来讲,其实算不得什么复杂新奇的技术,但可能也很少人去深入了解学习它的底层的一些东西.下面将通过对内存统计.内存划分.存储细节.对象类型 ...

  9. Java中的基本数据类型和包装类型的这些知识,你都知道吗?

    Java中的基本数据类型和包装类型 Java 中的基本数据按类型可以分为四大类:布尔型.整数型.浮点型.字符型: 这四大类包含 8 种基本数据类型. 布尔型:boolean 整数型:byte.shor ...

  10. 声明式API和命令式API的区别

    声明式API 声明式和命令式的对比 Kubernetes 声明式 API 的工作原理 参考 声明式API 声明式和命令式的对比 命令式 命令式有时也称为指令式,命令式的场景下,计算机只会机械的完成指定 ...