k8s入门教程详解(一),请把这些学完再去面试
api server:所有服务访问统一入口CrontrollerManager:维持副本期望数Scheduler:负责介绍任务,选择合适的节点进行分配任务。etcd:键值对数据库,存储K8S集群所有重要信息(持久化)kubelet:直接跟容器引擎交互实现容器 的 生命周期管理kube-proxy:负责写入规则至iptables(firewall)、ipvs(负载均衡) 实现服务映射访问的其它组件介
kubectl 和web UI接入我们master节点后,scheduler调度器将任务交给api server, 通过api server 把任务写入 etcd 存储服务器,然后交给node节点执行
控制器,它们就是维护我们的副本的数目的或者叫做我们的期望值的,一旦它的副本数不满足我们的期望值,replication controller就会将它改写成 我们的期望值(创建或删除Pod数)
以安装nginx服务说明K8S组件调用关系:
首先要明确,一旦kubernetes环境启动之后,master和node都会将自身的信息存储到etcd数据库中
-
一个nginx服务的安装请求会首先被发送到master节点的apiServer组件
-
apiServer组件会调用scheduler组件来决定到底应该把这个服务安装到哪个node节点上
在此时,Scheduler调度器会从etcd中读取各个node节点的信息,然后按照一定的算法进行选择,并将结果告知apiServer,分发给那个node
-
apiServer调用controller-manager(控制器)去调度Node节点安装nginx服务
-
kubelet接收到指令后,会通知docker,然后由docker来启动一个nginx的pod
pod是kubernetes的最小操作单元,容器必须跑在pod中,此时nginx服务就已经跑起来了。
- 一个nginx服务就运行了,如果需要访问nginx,就需要通过kube-proxy来对pod产生访问的代理
4.2 K8s 核心组件详细说明
- 核心组件说明
#控制器,它们就是维护我们的副本的数目的或者叫做我们的期望值的,一旦它的副本数不满足我们的期望值,replication controller就会将它改写成 我们的期望值
api 一切服务的访问入口,压力很大,为了减轻压力,每个请求下面就可以生成缓存
etcd 是 paxos 键值对采用go 语言编写的键值对 数据库。
etcd 的官方 将它 定位成一个 可信赖的分布式键值存储服务器,它能够为整个分布式集群存储一些关键数据,协助分布式集群的正常运转。
可信赖:本身可以完成集群化
分布式:扩容缩非常方便
正常运转:保存我们的整个分布式集群的需要持久化的配置文件、配置信息,一旦我们的集群死亡后,我们可以借助到etcd 里面的一些信息,进行数据恢复
ectd 里面有2个版本,一个是 v2版,一个是v3版。v2版会将数据全部写入 内存中,v3 版本会引入本地卷的持久化操作(关机以后并不会造成数据损坏)
推荐使用kubernetes 集群中etcd v3,
V1.11包含之前自带的的etcd是不支持V3的。
ETCD 键值数据库 是基于HTTP,进行的C/S开发的,
他有 这些组件
Raft:存储我们的读写信息的(所有的信息都存在这里)
WAL:预写日志:为了防止Raft里面的信息出现损坏,还有WAL预写日志
(如果想对里面的数据进行更改,需要先生成一个日志,WAL先存一下,并且会定时的对这些日志进行完整的备份[完整+临时备份])
Entry:
Snapshot:日志备份{完整备份+增量备份}
node 节点:安装 kubelet 、kube proxy、 container(Docker)
在Node节点上实现Pod网络代理,维护网络规则和四层负载均衡工作。
kubelet:会跟我们的CRI(C 容器;R 运行环境; I 接口)—这里就是我们的Dokcer表现形式 。它会和我们的Docker进行交互,操作Docker去创建对应的容器[就是Kubelet维持我们Pod的生命周期]
Kube proxy:相当于SVC,可以进行负载操作。也就意味着如何实现Pod与Pod之间如何访问,包括负载均衡。它的默认操作时firewall,操作防火墙,实现对Pod的映射。(新版本中还支持IPVS 实现负载均衡)
总结这些节点
api server:所有服务访问统一入口
CrontrollerManager:维持副本期望数
Scheduler:负责介绍任务,选择合适的节点进行分配任务。
etcd:键值对数据库,存储K8S集群所有重要信息(持久化)
kubelet:直接跟容器引擎交互实现容器 的 生命周期管理
kube-proxy:负责写入规则至iptables(firewall)、ipvs(负载均衡) 实现服务映射访问的
- 其它组件介绍
#CoreDNS :
可以为集群中的svc 创建一个域名IP的对应关系解析
#Dashboard:
给k8s提供一个B/S 结构访问体系
#Ingress controller:
官方实现了四层代理,Ingress 可以实现七层代理
#Federation:
提供一个可以跨越集群中心多k8s 统一管理功能
#Prometheus:
提供k8s 集群的监控能力
#ELK:
提供k8s 集群日志 统一 分析接入平台
5. K8s 核心概念
5.1 Master 集群控制节点
- 每个集群至少一个master节点负责集群的管理
5.2 Node 工作负载节点
- 由masster 分配容器到这些node节点上,然后node 节点上的docker 负责容器运行
5.3 Pod kubernetes的最小控制单元
- **自主式pod **
Pod是在K8s集群中运行部署应用或服务的最小单元(原子单元),它是可以支持多容器的。
只要我们定义了一个Pod,它就会自动启动一个容器—pause的网络栈。也就意味着同一个Pod 容器间的端口不能冲突
一个Pod里封装了很多个容器,他们共用一个pause,共用存储卷
5.4 Controller 控制器Pod
-
控制器,通过它来实现对pod的管理,比如启动pod、停止pod、伸缩pod的数量等等
-
K8S内核提供了众多的pod控制器,常用的有:
Deployment 部署(暴露在最外面的)
DaemonSet 要求每一个运行节点都启动一个
ReplicaSet
StatefulSet
Job
Cronjob
5.4.1 复制控制器(Replication Controller,RC)— 确保预期的Pod副本数量
- RC 控制器
Replication Control1er 用来确保容器应用的副本数始终保持在用户定义的副本数,即如果有容器异常退出,会自动创建新的Pod 来替代;而如果异常多出来的容器也会自动回收。在新版本的Kubernetes 中建议使用ReplicaSet来取代 ReplicationControl1e
5.4.2 副本集(Replica Set,RS)— 确保预期的Pod副本数量
- RS副本集
ReplicaSet跟Replication Controller没有本质的不同,只是名字不一样,并且ReplicaSet支持集合式的selector
虽然ReplicaSet可以独立使用,但一般还是建议使用
Deployment来自动管理ReplicaSet ,这样就无需担心跟其他机制的不兼容问题(比如 ReplicaSet不支持rolling update {滚动更新}但 Deployment支持)
5.4.3 HPA
- HPA
HPA监控我们的RS,当我们的CPU达到80后(CPU>=80),他就会新建Pod,最多创建10个,最少保留2个。
如果高于80,就创建,小于80不在创建。
5.4.4 StatefulSet —为了解决有状态服务的问题
- StatefulSet
StatefulSet是为了解决有状态服务的问题(对应 Deployments 和 ReplicaSets是为无状态服务而设计),
其应用场景包括:
1.稳定的持久化存储,即 Pod重新调度后还是能访问到相同的持久化数据,基于PVC来实现
2.稳定的网络标志,即 Pod重新调度后其 PodName和 HostName不变,基于 Headless Service(即没有Cluster IP的Service )来实现
3.有序部署,有序扩展,即 Pod是有顺序的,在部署或者扩展的时候要依据定义的顺序依次依次进行(即从О到N-1,在下一个Pod运行之前所有之前的 Pod必须都是Running 和 Ready状态),基于init containers来实现
4.有序收缩,有序删除(即从N-1到0>
5.4.5 部署(Deployment)
- Deployment
DaemonSet确保全部(或者一些)Node 上运行一个Pod 的副本。当有Node加入集群时,也会为他们新增一个Pod 。当有Node从集群移除时,这些 Pod 也会被回收。删除 DaemonSet将会删除它创建的所有Pod
运行集群存储daemon,例如在每个Node 上运行glusterd、cepho.
在每个Node上运行日志收集daemon,例如fluentd、logstash。
在每个Node上运行监控daemon,例如Prometheus Node Exporter
5.4.6 Job、Cron Job 负责批处理任务
- Job、Cron Job
Job 负责批处理任务,即仅执行一次的任务,它保证批处理任务的一个或多个Pod 成功结束
Cron Job管理基于时间的 Job,即:
在给定时间点只运行一次
周期性地在给定时间点运行
5.5 服务发现(Service)
- pod 对外服务的统一入口,可以维护同一类的多个Pod
在K8S里,虽然每个POD都会被分一个单独的IP地址,但这个IP地址会随着POD的销毁而消失,Service 就是来解决这个问题的核心概念
一个service 可以看作一组提供相同服务的Pod的对外访问接口
Service 作用于哪些Pod 是通过标签选择器来定义的
一个 Service 在 Kubernetes 中是一个 REST 对象,和 Pod 类似。 像所有的 REST 对象一样, Service 定义可以基于 POST 方式,请求 apiserver 创建新的实例。
5.6 Lable 标签
-
标签,用于对Pod进行分类,同一类POD会拥有相同的标签
-
附加到某个资源上,用于关联对象、查询和筛选
给资源打上标签后,可以使用标签选择器过滤指定的标签
标签选择器目前有2个:一个是基于 等值关系(等于、不等于)
一个是 基于集合关系(属于、不属于、存在)
许多资源支持内嵌标签选择器 字段
matchLabels
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
hLabels
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-mfd8Pu2u-1710884244471)]
[外链图片转存中…(img-4GhZav0h-1710884244472)]
[外链图片转存中…(img-oupDxXoH-1710884244473)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-BNROwKRS-1710884244473)]
更多推荐
所有评论(0)