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. [转帖]oracle rac后台进程和LMS说明

    本文摘抄录oracle官方文档,oracle rac使用的后台进程,用以备忘,记录之. About Oracle RAC Background Processes The GCS and GES pr ...

  2. [转帖]TiDB 整体架构

    https://docs.pingcap.com/zh/tidb/stable/tidb-architecture 与传统的单机数据库相比,TiDB 具有以下优势: 纯分布式架构,拥有良好的扩展性,支 ...

  3. [转帖]Percolator - 分布式事务的理解与分析

    https://zhuanlan.zhihu.com/p/261115166 Percolator - 分布式事务的理解与分析 概述 一个web页面能不能被Google搜索到,取决于它是否被Googl ...

  4. [转帖]浅谈redis采用不同内存分配器tcmalloc和jemalloc

    http://www.kaotop.com/it/173669.html 我们知道Redis并没有自己实现内存池,没有在标准的系统内存分配器上再加上自己的东西.所以系统内存分配器的性能及碎片率会对Re ...

  5. [转帖]Windows系统内置测试工具(winsat)

    WinSAT 是 Windows 系统评估工具(Windows System Assessment Tool)的缩写,是从 Windows Vista 开始便内置于系统之中的命令行工具,可对 Wind ...

  6. 《SAIS Supervising and Augmenting Intermediate Steps for Document-Level Relation Extraction》论文阅读笔记

    代码   原文地址   预备知识: 1.什么是标记索引(token indices)? 标记索引是一种用于表示文本中的单词或符号的数字编码.它们可以帮助计算机理解和处理自然语言.例如,假如有一个字典{ ...

  7. 【计算几何,数学】7.14 T3 @ xdfz

    Problem Link 给定 \(n\) 个球和一个点 \(P\),求点 \(P\) 到这些球的交内一点的距离的最小值.保证有解.\(n\le 10^6\). 和最小圆覆盖一个套路.考虑维护一个当前 ...

  8. 修改U盘图标

    效果如下 方法如下 首先,您需要准备一张您想要设置的图标,它应该是一个512 x 512像素大小的PNG格式图片,其他的也无所谓建议512x512 将U盘插入电脑.确保它已被正确识别并显示在文件资源管 ...

  9. vim 从嫌弃到依赖(9)——命令模式进阶

    上一篇文章更新还是在51前,最近发生了很多事情了,全国各地的疫情又有蔓延的趋势,北京朝阳区都已经开始实施居家办公.各位小伙伴请注意安全,安全平安的度过这个疫情. 废话不多说了,接着上次的内容往下写. ...

  10. 语言模型的预训练[6]:思维链(Chain-of-thought,CoT)定义原理详解、Zero-shot CoT、Few-shot CoT 以及在LLM上应用

    大语言模型的预训练[6]:思维链(Chain-of-thought,CoT)定义原理详解.Zero-shot CoT.Few-shot CoT 以及在LLM上应用 1.思维链定义 背景 在 2017- ...