Kubernetes

1、概念

希腊语,舵手、飞行员的意思

k8s可以理解成负责自动化运维管理多个容器化的应用集群。容器编排框架的工具,是谷歌基于go语言开发的

2、作用

用于自动部署、扩展、管理容器化部署的应用程序,是(半)开源的

k8s的底层是基于go语言

3、k8s的使用场景

docker部署了一个nginx,一旦访问量增大,nginx有可能占满了系统资源,cpu告警、内存告警

运维人员入场,要么对服务器扩容,要么就重亲部署服务,对cpu和内存做限制,防止再一次占满整个服务器

使用自动化运维管理:k8s

复制代码
1、多节点部署,不再是单机部署

2、自动完成更新和部署

3、解决了跨节点容器之间的通信问题

4、k8s有自我修复的机制,使得整个容器集群可以在用户的期望状态下运行

4、k8s的特点

4.1自我修复

节点故障时会自动把该节点上的容器重新部署到其他节点;容器启动失败时,会自动重新启动容器,3次失败后,就认为该服务不可用;在容器启动时,也会有检测机制(探针),检测容器启动是否正常

确保集群内部的服务能够正常工作

4.2弹性伸缩

在一个容器占用机器的资源比较高时,k8s会自动的增加pod的数量,在资源占用下降的时候,会自动释放pod的数量。以最小的成本运行服务

4.3自动发布(滚动发布模式,默认模式)和回滚

k8s在更新的时候不是一次性更新所有,而是更新一部分,然后再更新剩余的部分,如果有问题可以随时回滚

4.4服务发现和负载均衡

多个容器有一个统一的访问入口,内部地址和统一的对外地址,自动负载均衡所有关联的容器,无需考虑容器的ip地址

4.5存储编排

支持外挂存储,内部挂载,内部存储卷;外部挂载,可以是本地存储,也可以是公有云。NFS、ceph都可以支持

4.6集中化配置和密钥管理

k8s所有的配置可以加密的形式保存在集群信息中,提高集群的安全

4.7任务的批量处理

5、架构

主从架构,master-slave模式,所有的操作、管理、运维都是在主节点完成

从节点:node节点、工作节点,负载工作的节点

6、主节点组件

6.1kube-apiserver

是整个集群的大脑,每个组件之间的资源请求和调用操作都是通过apiserver完成的,通过api接口发送到各个组件

api接口和端口之间的区别:

复制代码
api接口:内部的组件和组件之间通信的接口,内部调用方法(代码)的接口。程序和程序之间的通信

端口:应用和应用之间,客户端和服务端之间的通信

所有的资源对象的增删改查和监听都是由apiserver来完成的,处理完之后交给etcd进行存储

6.2etcd

k8s内部的存储服务,分布式的键值存储系统,存储了k8s进群的配置和用户配置以及集群内部服务的信息。只有apiserver可以和etcd通信,读写权限,其他组件要想往etcd存储信息或者读取信息必须通过apiserver

etcd分布式必须是奇数

6.3kube-controller-manager运行管理控制器

k8s集群当中处理常规任务的后台的线程,是k8s集群当中所有资源对象自动化控制的中心

在k8s集群当中,一个资源对应一个控制器,controller-manager就是来管理这些控制器的

6.3.1控制器类型
6.3.1.1node controller节点控制器

节点出现故障时,发现和响应

6.3.1.2replication controller副本控制器

创建资源对象时,可以选择创建的个数(pod数),保证资源对象声明的副本数和创建的数量保持一致

6.3.1.3endpoint controller端点控制器

service对应的pod,service来匹配对应的pod,监听pod的变化,端点就是暴露出来用于对外访问的

6.3.1.4resourcequota controller资源配额控制器

确保创建的资源对象不会超过设定的系统资源量

6.3.1.5namespace controller命名空间控制器

项目上进行区分,每个命名空间都是独立的,来管理命名空间的生命周期

6.4kubu-scheduler

根据调度算法为pod选择一个合适的node节点

node节点的资源越富裕,负载越小,部署pod的排名就越高

7、node节点组件

7.1kubelet

主节点在node节点的监视器,与master节点通信。定时向apiserver报告服务在node节点上的运行情况

接受来自master的调整措施

kubelet负责节点上pod的生命周期

master的指令传给kubelet,kubelet完成之后传给apiserver,apiserver把node节点的更新信息保存到etcd

7.2kube-proxy

在每个node节点上实现pod的网络代理,是service的具体载体

负责网络规划和四层负载均衡工作

iptables和ipvs实现服务的映射访问

apiserver通过监控kube-proxy来完成对pod的更新和端点的维护。把变化的结果保存在etcd

内部服务的负载均衡是四层代理(ip+端口),实现内部pod的负载均衡

k8s的每个节点上都有kube-proxy

内部的ip地址:flannel、calico两个插件提供内部pod的ip地址

7.3docker

整个集群的最底层

分布式

8、k8s的核心概念

8.1pod

是k8s的最小单位,一个pod就是一个正在运行的进程

pod的里面包含着容器,可以是一个容器也可以是多个容器

部署在同一pod当中的容器共享网络、存储和计算资源

不同的pod之间只能通过集群分配的ip地址通信

8.2label

标签,是k8s的特色管理方式,对资源对象进行分类

通过标签把pod------service------资源对象------控制器,进行关联

8.3service

在集群当中,每个pod都会设定一个ip地址,可能会因为pod的消失导致ip地址也随之消失,service就是来解决这个问题的核心概念

service不是一个服务,是网关

8.4ingress

service用于集群内部访问

ingress是整个k8s集群的接入层,整个集群的外部通信

service是四层负载均衡,只能是ip+端口

ingress是七层转发

8.5namespace

资源隔离的方式,是逻辑上的隔离,项目越来越多,集群越来越大,通过命名空间把资源分配到各个命名空间,每个命名空间之间资源不共享,使用的是分配的资源

命名空间在集群当中是唯一的,名字不能重复

default:默认命名空间,不做特殊声明,所有的资源都在默认空间

kube-system:系统应用的命名空间

查询特定的资源一定要加上命名空间

相关推荐
Serverless社区4 小时前
AgentRun 实战:快速构建 AI 舆情实时分析专家
阿里云·云原生·serverless·函数计算
slient_love4 小时前
docker和docker compose部署安装
docker·容器
钱彬 (Qian Bin)5 小时前
项目实践14—全球证件智能识别系统(切换回SQLite数据库并基于Docker实现离线部署和日常管理)
运维·docker·容器·fastapi·证件识别
sld1685 小时前
打破云服务“绑定”局限,打造高适配性、强管控力的混合云架构新范式
微服务·云原生·架构
VermiliEiz5 小时前
二进制文件部署k8s方式(4)
云原生·容器·kubernetes
openFuyao6 小时前
参与openFuyao嘉年华,体验开源开发流程,领视频年卡会员
人工智能·云原生·开源·开源软件·多样化算力
牛奔6 小时前
docker compose up 命令,默认配置文件自动查找规则
java·spring cloud·docker·容器·eureka
BigBigHang6 小时前
【docker】离线设备安装镜像
运维·docker·容器
学好statistics和DS6 小时前
Docker文件与本地文件,系统
运维·docker·容器
liuc03176 小时前
docker下安装SearXNG
运维·docker·容器