k8s初学

1.k8s是什么?

kubernetes:8个字母省略,就是k8s

自动部署,自动扩展和管理容器化部署的应用程序的一个开源系统。

k8s是负责自动化运维管理多个容器化程序的集群,是一个功能强大的容器编排工具。

2.docker微服务,可以满足微服务使用,那么为什么还要使用k8s呢?

1.传统的部署方式:一般意义上的二进制部署,安装--运行--运行维护,需要专业的人员,如果出了故障还需要人工重新部署,而且如果业务量增大,只能水平的拓展,再部署一个。

2.容器化,我可以用dockerfile编写好自定义的容器,随时基于镜像都可以运行。数量少,还能管的过来,数量一旦太多,管理起来太复杂,而且docker一般是单机运行,没有高可用。

k8s的作用:简单,高效的部署容器化的应用

1.解决了docker的单机部署和无法集群化的特点

2.解决了随着容器数量的增加,对应增加的管理成本

3.解决容器的高可用,提供了一种容器的自愈机制

4.解决容器没有预设模版,以及无法快速,大规模部署,以及大规模的容器调度

5.k8s提供了集中化配置管理的中心

6.解决了容器的生命周期的管理工具

7.提供了图形化工具,可以用图形化工具对容器进行管理

3.k8s的特性

1.弹性伸缩,基于命令,或者图形化界面基于cpu的使用情况,自动的对部署的程序进行扩容和缩容。以最小的成本运行服务。

2.自我修复:节点故障时,重新启动失败的容器,替换和重新部署

3.服务发现和负载均衡:k8s为多个容器提供一个的统一的访问入口(内部地址和内部的DNS名称)自动负载均衡关联的所有容器

4.自动发布和回滚:k8s采用滚动的策略更新应用,如果更新过程中出现,可以根据回滚点来进行回滚

5.集中化的配置管理和密钥管理

k8s集群内的各个组件都是要进行密钥对验证的。但是k8s的安全性不够,核心的组件不建议部署,可以部署一些自定义应用

6.存储编排

        1.可以自动化把容器部署在节点上

        2.也可以通过命令行或者yml文件(自定义pod)实现指定节点部署

        3.也可以通过网络存储,NFS GFS

7.任务进行批次处理,提供一次性的任务,也可以定时任务,满足需要批量处理和分析的场景

4.k8s的核心组件

1.kube-apiserver:k8s集群之中每个组件都是要靠密钥对来进行验证,组件之间的通信apiserver

API是应用接口服务,k8s的所有资源请求和调用操作都是kube-apiserver来完成的

所有对象资源的增删改查和监听的操作都是kube-apiserver处理完之后交个etcd来进行的

apiserver是k8s所有请求的入口服务,apiserver接收k8s的所有请求(命令行和图形化界面)然后根据用户的具体请求通知对应的组件展示或者运行命令

APIserver相当于整个集群的大脑

2.kube-controller-manager:运行管理控制器,是k8s集群中处理常规任务的后台线程,是集群中所有资源对象的自动化控制中心。一个资源对应一个控制器,kube-controller-manager 负责管理这些控制器

        1.node controller(节点控制器):负责节点的发现以及节点故障的发现和响应

        2.replication controller(副本控制器):控制关联pod的副本数,可以随时扩缩容

        3.Endpoints controller(端点控制器):监听service和对应pod的副本变化,端点就是服务暴露出的访问点。要访问这个服务,必须要指定他的Endpoint,就是内部每个服务的ip+端口

        4.service account和roken controller(服务账户和令牌控制)

        为命名空间创建默认账户和API访问令牌

        namepace,访问不同的命名空间

        5.resourcequota controller(资源控制器):可以对命名空间的资源使用进行控制,也可以对pod的资源进行控制

        6.namespace controller(命名空间的控制器)管理命名空间的生命周期

        7.server controller(服务节点控制器)k8s集群和外部的主机之间的控制器

3.kube-scheduler:资源调度组件,根据调度算法为新创建的pod选择一个合适的node节点

可以理解为k8s的所有node节点的调度器,部署和调度node

预先策略:人工ID地址,指定的node节点上部署

优先策略:限制条件

根据调度算法选择一个合适的node,node的节点的资源情况,node的资源控制的情况等等,选一个资源最富裕,负载最小的node来部署。

4.ETCD:k8s的存储服务,etcd分布式键值存储系统(key:value),k8s的关键配置和用户配置,先通过APIserver调用etcd当中的存车信息,然后再实施。(这个集群当中,能对ectd存储进行读写权限的,只用APIserver)

5.node组件

1.kubelet:node节点的监视器,以及MASTER节点的通讯器,也可以理解为master 在node节点上的眼线

kubelet会定时向API-server汇报自己的node的运行服务的状态,API-server把节点状态保存ETCD存储当中

作用:

        1.接受来自master节点的调度命令

        2.如果发现自己的状态和master节点的状态不一致,调用docker的接口,同步数据。

        3.对节点容器的生命周期进行管理,保证节点上的镜像不会占满磁盘空间,退出的容器的资源,进行回收

2.kube-proxy:

实现每个node节点上的pod网络代理。负责节点上的网络规划和四层负载均衡工作,负责写入 iptables(快淘汰了) ipvs实现服务映射

        kube-proxy:本身不直接给pod提供网络代理,proxy是service资源的载体

        kube-proxy:实际上代理的是pod的集群网络(虚拟网络)

        k8s的每个node节点上都有一个kube-proxy组件

3.docker:容器引擎,运行容器,负责本机的容器创建和管理

k8s创建pod时,kube-scheduler调度到节点上(node节点),节点上的kubelet指示docker启动特定的容器。

kubelet把容器的信息收集,发送给主节点。只需要在主节点发布指令,节点上的kubelet就会指示docker拉取镜像,启动或者停止容器。

4.pod运行在节点上的,是k8s当中创建部署的最小/最简单的基本单位,一个pod代表集群上正在运行的一个进程。

pod是一个容器或多个容器组成,pod中的容器共享网络,存储和计算资源,可以部署在不同的主机上,一个pod里面可以运行多个容器,也可以是一个容器。在生产环境中,一般都是单个容器或者具有关联关系的多个容器组成一个pod

5.deployment:无状态应用部署,作用就是管理和控制pod,以及replicaset(运行几个容器)管控他的运行状态。

6.replicaset:保证pod的副本数量,受控于deployment

在k8s中,部署服务,实际上就是pod,deployment部署的服务就是pod,replicaset的就是来定义pod的容器数量

可以保证pod的不可重复性。在当前命名空间不能重复。不同命名空间名称可以重复

官方推荐使用deployment进行服务部署。

7.daemonset:确保所有节点运行同一类的pod

8.statefulset:有状态应用部署

9.job:可以pod中设置一次性任务,运行完即退出。

10.cronjob:一直在运行的周期性任务。

11.service:在k8s集群当中,每创建一个pod之后,都会其中运行的容器分配一个集群内的ip地址,由于业务的变更,容器可能会发生变化,ip地址也会发生变化,service的作用就是提供整个pod对外统一的ip地址

service就是一个网关(路由器)通过访问service就可以访问pod内部的容器集群

service能实现负载均衡和代理------kube-proxy------来实现负载均衡

service是k8s微服务的核心,屏蔽了服务的细节,统一的对外暴露的端口,真正实现了“微服务”

service的流量调度:以前用userspace(用户空间,废弃) iptables(即将废弃)ipvs(目前1.20都用ipvs)

12.label:标签,k8s的特色管理方式,分类管理资源对象

NODE pod service namespace

label标签可以用户自定义

lable选择器:等于 不等于 使用定义的标签名

namespace:在k8s上可以通过namespace来实现资源隔离,项目隔离

通过namespace可以把集群划分为多个资源不可共享的虚拟集群组

不同的命名空间里面的资源名称可以重复的k8s初学_第1张图片

你可能感兴趣的:(kubernetes,容器,云原生)