Kubernetes-重要概述

Kubernetes是什么意思?K8S?

Kubernetes的名字来自希腊语,意思是“舵手” 或 “领航员”K8s是将8个字母“ubernete”替换为“8”的缩写。


使用Kubernetes能做什么?

可以在物理或虚拟机的Kubernetes集群上运行容器化应用,Kubernetes能提供一个以“容器为中心的基础架构”,满足在生产环境中运行应用的一些常见需求,如:

  • 多个进程(作为容器运行)协同工作。(Pod)

  • 存储系统挂载

  • Distributing secrets

  • 应用健康检测

  • 应用实例的复制

  • Pod自动伸缩/扩展

  • Naming and discovering

  • 负载均衡

  • 滚动更新

  • 资源监控

  • 日志访问

  • 调试应用程序

  • 提供认证和授权


为什么要使用容器?


    传统的应用部署方式是通过插件或脚本来安装应用。这样做的缺点是应用的运行、配置、管理、所有生存周期将与当前操作系统绑定,这样做并不利于应用的升级更新/回滚等操作,当然也可以通过创建虚机的方式来实现某些功能,但是虚拟机非常重,并不利于可移植性。

    新的方式是通过部署容器方式实现,每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。相对于虚拟机,容器能快速部署,由于容器与底层设施、机器文件系统解耦的,所以它能在不同云、不同版本操作系统间进行迁移。

    容器占用资源少、部署快,每个应用可以被打包成一个容器镜像,每个应用与容器间成一对一关系也使容器有更大优势,使用容器可以在build或release 的阶段,为应用创建容器镜像,因为每个应用不需要与其余的应用堆栈组合,也不依赖于生产环境基础结构,这使得从研发到测试、生产能提供一致环境。类似地,容器比虚机轻量、更“透明”,这更便于监控和管理。



容器优势总结:

  • 快速创建/部署应用:与VM虚拟机相比,容器镜像的创建更加容易。

  • 持续开发、集成和部署:提供可靠且频繁的容器镜像构建/部署,并使用快速和简单的回滚(由于镜像不可变性)。

  • 开发和运行相分离:在build或者release阶段创建容器镜像,使得应用和基础设施解耦。

  • 开发,测试和生产环境一致性:在本地或外网(生产环境)运行的一致性。

  • 云平台或其他操作系统:可以在 Ubuntu、RHEL、 CoreOS、on-prem、Google Container Engine或其它任何环境中运行。

  • Loosely coupled,分布式,弹性,微服务化:应用程序分为更小的、独立的部件,可以动态部署和管理

  • 资源隔离

  • 资源利用:更高效



1、Cluster--->集群
    cluster是计算、存储和网络的集合,kubernetes利用这些cluster的资源跑各种容器。

2、Master--->主
    master是cluster的核心,主要负责调度。master可以运行在物理机或者虚拟机上,为了实现HA也可以运行多台master。

3、Node--->节点
    node主要负责运行容器的应用,提供各种资源。node由master管理

4、Pod--->豌豆荚(23333~)
    pod是kubernetes最小工作单元。每个pod包含一个或多个容器。
    pod中的容器会作为一个整体被master调度到一个node上运行。
为什么要引入Pod?
    一般来说一个容器只跑一个应用,在一个容器上只跑一个应用是远远不够的,所以引入了pod。
    pod中可以包含多个容器,多个容器在一个namespace中,实现通信和资源的共享,这样就很方便了。
    在有些业务中,荣期间必须是紧密合作的,需要共享数据等,而pod可以解决。

5、Controller--->控制器
    controller是用来管理pod的,kubernetes提供了多种的controller,来管理不同的场景。
    deployment、replicaset、statefuleset、job等
(1)deployment 通过deployment部署应用,管理多个Pod副本。

(2)replicaset 实现pod多副本管理,deployment部署应用时会自动创建replicaset,可以理解为
deployment通过replicaset来管理pod副本。

(3)daemonset 用于一个node只运行一个pod场景,daemonset用来运行daemon

(4)statefuleset 是用来保证Pod在整个生命周期中名称不变,当pod因为故障时需要删除或者重启时,名称发生了变化,但是statefuleset会保证这个副本会按照之前固定的顺序启动,更新等。

(5)job 用来云行结束就删除应用,而其他controller中的Pod都是长期持久运行的。


6、Service--->服务
    通过deployment部署pod,每个Pod有自己的Ip,services提供自己的Ip和端口为Pod做负载均衡。
    运行pod通过controller,访问pod通过service

7、Namespace--->命名空间(学过面向对象编程语言会有印象)

    Namespace类似于Linux系统中用户的概念,通过将系统内部的对象分配到不同的Namespace中,形成逻辑上的分,便于不同的分组在共享集群资源的同时还能被分别管理。同一Namespace下的Kubenetes对象的Name必须唯一。

    Namespace可以将一个物理的cluster上,划分成多个虚拟的cluster,每个划分成的虚拟cluster就是一个命名空间。
    每个cluster之间完全隔离,也就是说namespace之间是隔离的。

kubectl get namespace  //查看namespace
    default:所有未指定Namespace的对象都会被分配在default命名空间。
    kube-system:所有由Kubernetes系统创建的资源都处于这个命名空间。
    kube-public:此命名空间下的资源可以被所有人访问(包括未认证用户)。

图片.png



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章