首页 > 其他分享 >kubernetes(k8s)基础学习-kubernetes是什么?有什么用?

kubernetes(k8s)基础学习-kubernetes是什么?有什么用?

时间:2023-02-09 21:36:40浏览次数:61  
标签:容器 kubernetes 部署 什么 可以 Docker k8s 虚拟机

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

一、认识 Docker

Docker 是什么

先来看看 Docker 的图标:

image-20230209171607579

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

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

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

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

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

image-20230209174343762

​ 图: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 可以对多个服务进行负载。

程序部署方式的演化

image-20230209202750815

(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 令牌。

  • 跨多个主机编排容器

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

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

四、参考

标签:容器,kubernetes,部署,什么,可以,Docker,k8s,虚拟机
From: https://www.cnblogs.com/jiujuan/p/17107088.html

相关文章

  • 为什么在容器中 1 号进程挂不上 arthas?
    作者:卜比本文是《容器中的Java》系列文章之4/n,欢迎关注后续连载......
  • 『 再看.NET7』看看required属性有什么不同
    还是先看看C#中属性的这定义,在初始化和访问上有哪些方式,就能看出required属性有什么不一样的地方了。属性,是封装字段的,通过get和set访问器可以很好地验证数据的有效......
  • 传奇开服架设要具备什么条件
    传奇开服架设要具备什么条件新手如果想开服的话因具备哪些条件?我来为您解答1.传奇SF开服的话你要清楚具体的有哪些步骤需要的哪些东西自己一定要先了解清楚!因为这行的话P......
  • 『 再看.NET7』看看required属性有什么不同
    还是先看看C#中属性的这定义,在初始化和访问上有哪些方式,就能看出required属性有什么不一样的地方了。属性,是封装字段的,通过get和set访问器可以很好地验证数据的有......
  • 『 再看.NET7』看看required属性有什么不同
    还是先看看C#中属性的这定义,在初始化和访问上有哪些方式,就能看出required属性有什么不一样的地方了。属性,是封装字段的,通过get和set访问器可以很好地验证数据的有......
  • 为什么有些人读书读得风生水起,你却颠沛流离
    说到读书这个话题,我不知道大家是否明白,你会发现,有些人好像天生就很会读书一样。那一刻,我深深的怀疑,我明明也很努力地在读书,可为什么,我输了?直到今天,我终于在哲学的层面解释了......
  • 为什么接口会有default修饰的默认方法?
    因为接口是个双刃剑,好处是面向抽象而不是面向具体编程,缺陷是,当需要修改接口的时候,需要修改全部实现该接口的类,目前的java8之前的集合框架没有foreach方法,通常能想到的解......
  • kubernetes探针
    LivenessProbe:周期性检测,检测未通过时,kubelet会根据restartPolicy的定义来决定是否会重启该容器;未定义时,kubelet认为容器未终止,即为健康;ReadnessProbe:周期性检测,检测未通......
  • 外网电脑远程内网电脑用什么软件,没有外网可以远程控制吗
    远程控制电脑,正常来说都是要通网的。电脑连入互联网,才可以进行远程控制。一台没有任何网络连接的电脑,没法进行远程连接和控制。但是有一种情况比较特殊,就是企业内网环境。有......
  • EasyCVR集成宇视SDK关闭“按需直播”,一直未拉流是什么原因?
    EasyCVR平台不仅能提供丰富的视频能力,还可提供云、边、端分布式海量视频资源的统一管理与运维,从而实现数据采集、处理、汇聚、分析、存储、管理等全环节的视频能力。借助智......