kubernetes(k8s)的理论基础

news/2024/7/4 7:44:16 标签: kubernetes, 容器, 云原生

kubernetes:8个字母,就是k8s

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

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

分布式和集群化的方式进行容器管理

k8s的版本是1.20

k8s是Google的borg系统作为原型,后期经由go语言编写的开源软件(Kubernetes)(GitHub - kubernetes/kubernetes: Production-Grade Container Scheduling and Management)

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

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

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

k8s的作用

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

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

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

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

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

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

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

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

k8s是基于开源的容器集群管理系统,在docker容器技术的基础上

容器化的集群提供了部署,运行,资源调度,服务发现,动态伸缩等一系列完整的功能

大规模容器管理:

1、对docker等容器技术从应用的包-----部署-----运行-----停止------销毁,全生命周期管理

2、集群方式运行,跨机器的容器管理

3、解决docker的跨机器运行的网络问题

4、k8s可以自动修复,使得整个容器集群可以在用户期待的状态下运行

k8s的特性

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

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

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

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

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

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

6、存储编排

1、可以自动化的把容器部署在节点上
2、也可以通过命令行或者yml文件(自定义pod)实现指定节点部署
3、也可以通过网络存储,NFS gfs

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

k8s的核心组件

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

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

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

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

APIserver相当于整个集群的大脑

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

1、node controller(节点控制器): 负责节点的发现以及节点故障时的发现和响应
2、replication controller(副本控制器): 控制关联pod的副本数,可以随时扩缩容
3、Endpoints controller(端点控制器),监听service和对应pod的副本变化,端点就是服务暴漏出的访问点,要访问这个服务,必须要知道他的Endpoints,就是内部每个服务的IP地址+端口
4、service account和roken controller(服务账户和令牌控制),为命名空间创建默认账户和API访问令牌
namespace,访问不同的命名空间
5、resourcequota controller(资源控制器): 可以对命名空间的资源使用进行控制,也可以对pod的资源进行控制
6、namespace controller(命名空间的控制器),管理命名空间的声明周期
7、service controller(服务节点控制器): k8s集群和外部的的主机之间的接口控制器

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

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

预先策略: 人工定制,指定的node节点上部署
优先策略: 限制条件,根据调度算法选择一个合适的node,node节点的资源情况,node的资源控制情况等等,选一个资源最富裕,负载最小的node的来部署

4、ETCD组件:k8s的存储服务,etc分布式兼职存储系统(key:value),k8s的关键配置和用户配置,先通过APIserver调用etcd当中存储信息,然后在实施(这个集群当中,能对etcd存储进行读写权限的,只有API-server)

这些组件都是在主节点上

node组件

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

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

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

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

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

2、kube-porxy

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

kube-proxy:本身不直接给pod提供网络代理

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中的容器共享网络,存储和计算资源,可以部署在docker主机上

一个pod里面可以运行多个容器,也可以是一个容器

在生产环境中,一般都是单个容器或者具有关联

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

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

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

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

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

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

statefulset:有状态应用部署

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

cronjod:一直在运行的周期性任务

service

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

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

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

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

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

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

NODE pod service namespace

label 标签可以用户自定义

label选择器 等于,不等于,使用定义的标签名

ingress:k8s集群对外暴漏提供的接口,属于应用层,七层代理,转发的是http请求,http/https

service是四层转发,转发的是流量

https:www.xiaobu.com:80 ----- ingress ------ service ------ pod ------ 容器

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

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

不同命名空间里面的资源名称可以重复的


http://www.niftyadmin.cn/n/5288202.html

相关文章

面试题之二HTTP和RPC的区别?

面试题之二 HTTP和RPC的区别? Ask范围:分布式和微服务 难度指数:4星 考察频率:70-80% 开发年限:3年左右 从三个方面来回答该问题: 一.功能特性 1)HTTP是属于应用层的协议:超文本传输协议…

使用FFmpeg进行录屏

不用下载那些录屏软件,安装了FFmpeg的话,直接实现 使用FFmpeg进行屏幕录制可以通过以下步骤实现: 安装FFmpeg:首先需要在您的系统上安装FFmpeg。可以通过包管理器(如apt、yum等)或从官方网站下载并编译安装…

云渲染UE4像素流送搭建(winows、ubuntu单实例与多实例像素流送)

windows/ubuntu20.4下UE4.27.2像素流送 像素流送技术可以将服务器端打包的虚幻引擎应用程序在客户端的浏览器上运行,用户可以通过浏览器操作虚幻引擎应用程序,客户端无需下载虚幻引擎,本文实现两台机器通过物理介质网线实现虚幻引擎应用程序…

与供应商合作:成功供应商管理的六种最佳实践

许多企业低估了他们对外部供应商的依赖程度,也小看了这些供应商关系所涉及的风险。本文将探索企业与外部供应商合作的六种最佳实践,利用它们创建有效的供应商管理流程,从而降低成本和风险,并提高盈利能力。 供应商管理为何重要&a…

Nextjs与tauri进行集成

nextjs在国外比较火的前端框架,结合tauri可以方便进行多端的布署。本文对创建基础的nestjs与tauri如何结合,进行了测试。本文作为记录笔记。(2023/12/26) 准备 本地已安装好rust, node,npm等。 1. Nextjs项目 常规安装nextjs npx create…

【数据库】对大数据量数据集,PostgreSQL分组统计数量,限定每组最多数量

一、背景介绍 在处理大数据量数据集时,我们经常需要进行分组统计。例如,我们需要统计每个城市的人口数量、每个年龄段的人数等。在 PostgreSQL 中,我们可以使用 row_number() 函数结合 over (partition by) 子句来实现这个功能。同时&#x…

JSON格式及Java中的应用

文章目录 第一节.JSON1.1 JSON是什么1.2 JSON的格式 第二节.Java中JSON的使用2.1 序列化:Java对象 -> Json格式2.2 反序列化:Json格式 -> Java对象 第一节.JSON 1.1 JSON是什么 JSON,全称是 JavaScript Object Notation,即…

JMeter逻辑控制器之IF控制器

Jmeter控制器之IF控制器 1.应用背景2.介绍3.使用4.添加控制器5.表达式说明6.函数助手调用7.举例 1.应用背景 存在一些使用场景,比如:一个测试场景中,包含多个请求,当上一个请求的结果不符合要求,就不需要执行下一个请求…