k8s是什么

生么是k8s:

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

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

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

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

1.15 1.18 1.20 1.28 现在普遍用的是1.20

k8s是Google的borg系统作原型,后期经由go语言编写的开源软件。

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

  1. 传统的部署方式:一般意义上的二进制部署,安装-运行-运行维护,需要专业的人员,如果出现故障还需要人工重新拉起来,而且如果业务量增大,只能水平的拓展,再部署一个。
  2. 容器化,可以用dockerfile编写好自定义的容器,随时基于镜像都可以运行,数量少,还能管的过来,数量一旦太多管理起来太复杂。而且。Docker一般是单机运行,没有高可用。

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

  1. 解决了docker的单机部署和无法集群化的特点
  2. 解决了随着容器数量的增加,对应增加的管理成本。
  3. 容器的高可用,提供了一种容器的自愈机制。
  4. 解决了容器没有预设模版,以及无法快速,大规模部署,以及大规模的容器调度。
  5. ks8提供了集中化配置管理的中心。
  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 g fs

7,任务进行批次处理:

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

k8s的核心组件:

  1. kube-apiserver:k8s集群之中每个组件都是要靠密钥对来进行验证,组件之间的通信apiserver.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 controllers(服务账户和令牌控制) 为命名空间创建,默认账户和API访问令牌。Namespace,访问不同的命令空间。
  5. resourcequota controller(资源控制器):可以对命名空间的资源使用进行控制。 也可以对pod的资源进行控制。
  6. namespace controller(命名空间的控制器):管理命名空间的生命周期。
  7. Server controller(服务器节点控制):k8s集群和外部的主机之间的接口控制器。

3.kube-scheduler:资源调度组件,根据调度算法为新创建的pod选择一个合适的node节点。 可以理解为k8s的所有node节点的调度器,部署和调度node

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

预先策略:限制条件。

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

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

node组件:

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

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

接受来自master节点的调度命令。 如果发现自己的状态和master状态不一致,会调用docker的接口,同步数据。

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

2.kube-porxy:

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

Pod不是容器

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

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

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

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

k8s要创建pod时,kube-sheduler调度到节点上(node节点)。节点上的kubelet只是docker启动特点的溶气。

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

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

同一个pod内的每个容器就是一颗豌豆。

Pod是由一个或者多个容器组成,pod中的容器共享网络,存储和计算资源,可以部署在不同的docker主机上。

一个pod里面可以运行多个容器或者具有关联的多个容器组成一个pod

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

Replicaset:保证pod的副本数量,受控于deploment。

在k8s中,部署服务,实际上就是pod,deployment部署的服务就是pod,rereplicaset的就是来定义pod的容器数量。可以保证pod的不可重复性。在当前命名空间不能重复。不同命名空间名称可以重复。

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

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

Statefulset:有状态应用部署。

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

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

Service的作用:

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

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

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

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

Service的流量调度:userspace(用户空间,废弃)iptablees(即将废弃),IPVS(目前1.20都用IPVS)

Label:标签:

k8s的特色管理方式,分类管理资源对象。

Label标签可以用户自定义

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

Ingress:的作用:

k8s集群对外暴漏提供访问的接口。属于应用层,七层代理,转发的是http请求 http/https service是四层转发,转发的是流量。

Namespace:

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

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

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

工作过程

首先认证主节点

k8s管理员访问集群的第一步 auth(权限验证,有权限才能访问),API-server 提供集群的统一访问接口(调用集群内部的各个服务,收集集成信息保存到<etcd>所有集群信息)----->kube-contronller-manager(节点控制器)---> kube-schudel(调度器)主节点认证完成之后。

(kubelet)节点的监控器,管理node节点上的docker资源----> (kube-proxy)代理服务,负责代理pod节点的网络地址.

当客户端来访问节点: 客户端通过防护墙访问kube-proxy(kube-proxy对应pod的server)获取容器内部的资源

调度节点(kube-schudel)形成新的pod,会把pod指定安排到指定的容器上(创建pod的过程)

相关推荐
小匠石钧知2 天前
02_在多个RockyLinux10虚拟机上安装k8s集群
云原生·容器·kubernetes·k8s
ShirleyWang0128 天前
让headlamp控制台能访问
linux·服务器·python·k8s·k3s
spider_xcxc9 天前
K8s 部署学习笔记
docker·容器·kubernetes·云计算·k8s
ShirleyWang0129 天前
Day02 K3s NGF(Nginx Gateway Fabric)单 Worker 环境网关更新与故障处置 SOP
linux·服务器·python·k8s·k3s
ShirleyWang0129 天前
DAY01 K3s 私有化部署排障复盘与 SOP
linux·服务器·k8s·k3s·企业部署
XUHUOJUN12 天前
AKS 不是安装在 Windows Server 上,而是运行在 Windows Server 之上的 Azure 平台能力
windows·架构·k8s·azure local·azure stack
Geek-Chow12 天前
Connecting kubectl to a Private EKS Cluster Over an Internal Domain
kubernetes·k8s·aws
spider_xcxc14 天前
Docker Compose 容器通信详解:同一个 Compose 文件才能互通吗?
docker·容器·k8s·容器化·容器网络
欢醉19 天前
k8s调用服务异常cannot allocate memory
kubernetes·k8s
万里侯22 天前
GitOps 漂移检测:集群里改了配置,Git 还以为一切正常
微服务·容器·k8s