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:系统应用的命名空间

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

相关推荐
wclass-zhengge13 分钟前
K8S篇(基本介绍)
云原生·容器·kubernetes
颜淡慕潇19 分钟前
【K8S问题系列 |1 】Kubernetes 中 NodePort 类型的 Service 无法访问【已解决】
后端·云原生·容器·kubernetes·问题解决
川石课堂软件测试2 小时前
性能测试|docker容器下搭建JMeter+Grafana+Influxdb监控可视化平台
运维·javascript·深度学习·jmeter·docker·容器·grafana
昌sit!8 小时前
K8S node节点没有相应的pod镜像运行故障处理办法
云原生·容器·kubernetes
A ?Charis11 小时前
Gitlab-runner running on Kubernetes - hostAliases
容器·kubernetes·gitlab
wclass-zhengge11 小时前
Docker篇(Docker Compose)
运维·docker·容器
茶馆大橘12 小时前
微服务系列五:避免雪崩问题的限流、隔离、熔断措施
java·jmeter·spring cloud·微服务·云原生·架构·sentinel
北漂IT民工_程序员_ZG12 小时前
k8s集群安装(minikube)
云原生·容器·kubernetes
coding侠客12 小时前
揭秘!微服务架构下,Apollo 配置中心凭啥扮演关键角色?
微服务·云原生·架构
梦魇梦狸º15 小时前
腾讯轻量云服务器docker拉取不到镜像的问题:拉取超时
docker·容器·github