一、Kubernetes简介

网友投稿 974 2022-10-12

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

一、Kubernetes简介

1、docker与kubernetes的关系

1.1docker介绍

docker是容器的一种,对于容器来说,它事实上也是虚拟化的一种,被称之为操作系统级的虚拟化。容器运行的时侯,所有的容器全部共同使用操作系统的内核,而对于每一个容器来说,只有必要的应用和二进制文件。容器为任务而生,每一个容器通常,只会运行一个任务,在主机操作系统上体现为一个进程。各容器之间通过namespace和cgroup来进行隔离与资源的限制。

但是,容器也会有自身缺陷:1、基于命令行一次只能启动一个容器,容器和容器之间没有办法建立更好的关联关系。2、当容器数量足够多的时候,管理员不能有效的记录每一个容器的配置,导致容器运行混乱。3、容器没有办法做到负载均衡,自我修复,弹性伸缩等

docker的解决方案 通过docker-compose去做容器的单机编排 通过docker-swarm去做容器的集群编排 但这两种方式都没有kubernetes的生态强大,并且能做到的功能弱于kubernetes。接下来去介绍一下基于google开源的kubernetes

1.2kubernetes介绍

kubernetes,是一个全新的基于容器技术的分布式架构领先方案,是谷歌严格保密十几年的秘密武器----Borg系统的一个开源版本,于2014年9月发布第一个版本,2015年7月发布第一个正式版本。

kubernetes的本质是一组服务器集群,它可以在集群的每个节点上运行特定的程序,来对节点中的容器进行管理。目的是实现资源管理的自动化,主要提供了如下的主要功能:

自我修复:一旦某一个容器崩溃,能够在1秒中左右迅速启动新的容器

弹性伸缩:可以根据需要,自动对集群中正在运行的容器数量进行调整

服务发现:服务可以通过自动发现的形式找到它所依赖的服务

负载均衡:如果一个服务起动了多个容器,能够自动实现请求的负载均衡

版本回退:如果发现新发布的程序版本有问题,可以立即回退到原来的版本

存储编排:可以根据容器自身的需求自动创建存储卷

1.3 kubernetes组件

一个kubernetes集群主要是由控制节点(master)、**工作节点(node)**构成,每个节点上都会安装不同的组件。

master:集群的控制平面,负责集群的决策 ( 管理节点)

ApiServer : 资源操作的唯一入口,接收用户输入的命令,提供认证、授权、API注册和发现等机制

Scheduler : 负责集群资源调度,按照预定的调度策略将Pod调度到相应的node节点上

ControllerManager : 负责维护集群的状态,比如程序部署安排、故障检测、自动扩展、滚动更新等

Etcd:负责存储集群中各种资源对象的信息

node:集群的数据平面,负责为容器提供运行环境 ( 工作节点 )

Kubelet : 负责维护容器的生命周期,即通过控制docker,来创建、更新、销毁容器

KubeProxy : 负责提供集群内部的服务发现和负载均衡

Docker : 负责节点上容器的各种操作

1.4交互流程

以创建一个POD(kubernetes的最小资源单位,暂且理解为一个容器或一组容器)为例

1、用户申请创建一个POD

2、该请求会被APIServer所接受,ApiServer收到用户请求后,首先会对用户做身份认证以及权限验证;

3、APIServer通过认证之后会将该任务的描述信息写入etcd数据库当中

4、Scheduler监听ApiServer,和ApiServer保持心跳联系;

5、Scheduler定时询问ApiServer是否有创建POD的请求,ApiServer查询数据库,拿到请求之后,交由Scheduler,Scheduler向ApiServer获取当前所有Kubelet状态,选择一个合适的后端(Kubelet),交给ApiServer;

6、ApiServer存放在etcd数据库当中

7、Kublet监听ApiServer,和ApiServer保持心跳联系;

8、Kubelet询问ApiServer是否有创建POD的请求,ApiServer查询数据库,拿到任务之后,交由Kubelet,Kubelet创建POD完成后,告知ApiServer;9、ApiServer存放在etcd数据库当中

10、controller-managert监听ApiServer,和ApiServer保持心跳联系;11、controller-manager向apiserver发起请求,询问是否有任务;

12、apiserver会将POD的任务信息以及描述信息发送给controller-manager;

13、controller-manager对比任务是否有异常,如果没有,则确定任务完成;

14、如果有,则将未完成的任务返回给kube-apiserver

1.5kubernetes关键概念

1、Pod

kubernetes的最小控制单元,容器都是运行在pod中的,一个pod中可以有1个或者多个容器

自主式Pod 通过手动创建Pod,该方式创建出来,不具备k8s的编排特性,当中运行的只是一个或一组容器

控制器管理的Pod 通过控制器去创建Pod,该方式创建出来,具备k8s的编排特性,具有生命周期,可以做到负载均衡,弹性伸缩,滚动更新等。

2、控制器controller

ReplicationController 用于数据副本维持在期望值,当前已被弃用,由ReplicaSet替代

ReplicaSet 保证副本数量一直维持在期望值,并支持pod数量扩缩容,镜像版本升级

Depliyment 通过ReplicaSet控制Pod,并支持滚动升级、回退版本。只能管理无状态应用

StatefulSet 管理有状态应用

HPA(HorizontalPod Autoscaler)可以根据集群负载自动水平调整Pod的数量,实现削峰填谷

DaemonSet 在集群中的指定Node上运行且仅运行一个副本,一般用于守护进程类的任务

Job 它创建出来的pod只要完成任务就立即退出,不需要重启或重建,用于执行一次性任务

Cronjob 它创建的Pod负责周期性任务控制,不需要持续后台运行

3、Service

在kubernetes中,pod是应用程序的载体,我们可以通过pod的ip来访问应用程序,但是pod的ip地址不是固定的,这也就意味着不方便直接采用pod的ip对服务进行访问。为了解决这个问题,kubernetes提供了Service资源,Service会对提供同一个服务的多个pod进行聚合,并且提供一个统一的入口地址。通过访问Service的入口地址就能访问到后面的pod服务。

4、网络

Pod网络通过插件提供CNI (1、flannel提供网络配置 2、calico提供网络配置和网络策略 3、canel通过flannel提供网络配置,calico提供网络策略 4、等等)

集群网络(Service网络)

节点网络

上一篇:Go Library - pq:Go实现的用于database/sql 的Postgres驱动
下一篇:如何通过Kubernetes安装Kubernetes以及物理服务器
相关文章

 发表评论

暂时没有评论,来抢沙发吧~