kubernates 集群实战-概念

  1. 相关概念介绍

kubernetes 是google 旗下的用go 语言开发的服务编排,资源管理框架;具有轻量级,开源,弹性伸缩,负载均衡(ipvs)等特点;

官网:Kubernetes 是什么? | Kubernetes

概念列表:

k8s资源 分类:

1.名称空间级别: 仅当前空间可见;如 kubectl get pods -n kebe-ststem;

工作负载型资源:pod,replicaSet,Deployment

服务发现及负载均衡资源:ServiceDiscovery loadBalance: ingress,service...

配置与存储:volume ,csi

特殊存储卷: configMap,secret...

2. 集群级别: 在整个集群中可见 可调用;

3.元数据级别:通过系统参数来实现集群高可用,如 HPA 弹性伸缩机制;

资源清单及编写: 类似一套剧本;通过yml 格式文件来创建pod 对象; 其中制定关键字段;version,kind,metadata.namespace ...

pod生命周期:

pod:最 受集群控制,死亡以后不会恢复;

控制器管理的pod: 有控制器维护状态;

kubectl 发送创建pod的请求到控制器,调用kubelet 通过 cni 接口 开始创建pod; 

首先启动pause 基础容器 ,然后init c 阶段,然后进行 start main c(组容器)阶段, 最后stop阶段; 在启动与停止容器之间通过 readiness 与 livenss 探针来保证服务’ 

 状态: Init,pending,running,success,Failed,unknow

pod控制器类型与使用:

控制器-可以去确保预期pod 副本的数量;完成有状态与无状态的部署;可以完成一次性任务与定时任务;

服务发现:

1.原理以及构建方式:

2. SVC 原理及其构建方式:

存储:nfs 方式

调度器:

   一个容器平台的主要功能就是为容器分配运行时所需要的计算,存储和网络资源。容器调 度系统负责选择在最合适的主机上启动容器,并且将它们关联起来。它必须能够自动的处 理容器故障并且能够在更多的主机上自动启动更多的容器来应对更多的应用访问。

1.调度过程

   首先,客户端通过 API Server 的 REST API 或者 kubectl 工具创建 Pod 资源 API Server 收到用户请求后,存储相关数据到 etcd 数据库中 调度器监听 API Server 查看为调度(bind)的 Pod 列表,循环遍历地为每个 Pod 尝试分 配节点,这个分配过程就会经过两个阶段: 预选阶段(Predicates),过滤节点,调度器用一组规则过滤掉不符合要求的 Node 节点, 比如 Pod 设置了资源的 request,那么可用资源比 Pod 需要的资源少的主机显然就会被 过滤掉 优选阶段(Priorities),为节点的优先级打分,将上一阶段过滤出来的 Node 列表进行打 分,调度器会考虑一些整体的优化策略,比如把 Deployment 控制的多个 Pod 副本分布到 不同的主机上,使用最低负载的主机等等策略 经过上面的阶段过滤后选择打分最高的 Node 节点和 Pod 进行 binding 操作,然后将结 果存储到 etcd 中 最后被选择出来的 Node 节点对应的 kubelet 去执行创建 Pod 的相关操作 其中 Predicates 过滤有一系列的算法可以使用,我们这里简单列举几个: PodFitsResources:节点上剩余的资源是否大于 Pod 请求的资源 PodFitsHost:如果 Pod 指定了 NodeName,检查节点名称是否和 NodeName 匹配 PodFitsHostPorts:节点上已经使用的 port 是否和 Pod 申请的 port 冲突 PodSelectorMatches:过滤掉和 Pod 指定的 label 不匹配的节点 NoDiskConflict:已经 mount 的 volume 和 Pod 指定的 volume 不冲突,除非它们都是 只读的 CheckNodeDiskPressure:检查节点磁盘空间是否符合要求 CheckNodeMemoryPressure:检查节点内存是否够用 除了这些过滤算法之外,还有一些其他的算法,更多更详细的我们可以查看源码文件: k8s.io/kubernetes/pkg/scheduler/algorithm/predicates/predicates.go。 而 Priorities 优先级是由一系列键值对组成的,键是该优先级的名称,值是它的权重值, 同样,我们这里给大家列举几个具有代表性的选项: LeastRequestedPriority:通过计算 CPU 和内存的使用率来决定权重,使用率越低权重越 高,当然正常肯定也是资源是使用率越低权重越高,能给别的 Pod 运行的可能性就越大 SelectorSpreadPriority:为了更好的高可用,对同属于一个 Deployment 或者 RC 下面 的多个 Pod 副本,尽量调度到多个不同的节点上,当一个 Pod 被调度的时候,会先去查 找该 Pod 对应的 controller,然后查看该 controller 下面的已存在的 Pod,运行 Pod 越少的节点权重越高 ImageLocalityPriority:就是如果在某个节点上已经有要使用的镜像节点了,镜像总大小 值越大,权重就越高 NodeAffinityPriority:这个就是根据节点的亲和性来计算一个权重值;

 节点调度亲和性:

 POD调度亲和性;

 污点容忍度:

2.自定义调度器

service: 定义一组pod 的访问规则;

集群安全:RBAC(Role-Based Access Control,基于角色的访问控制);

1.认证:

2.鉴权:

3.访问控制及其流程:

HELM: kubernetes的包管理工具;内部由三部分组成:helm,chart,release;

1.原理 

  通过 chart 组件连接 kube-xonfig ,然后连接kube-apiserver 操作 deployment,ingress,servive;

2.模板自定义

3. 插件部署

集群架构图:

解释: 一个完整的k8s集群由master node 和 worker node 组成; mater 节点用来控制集群, worker node 节点用来工作; master 包含 Api server,scheduler,controller-manager,etcd 组成, worker node 由 kubelet , kube-proxy 组成;

api-server: 集群统一入口;负责所有请求的分发;遵循restful 风格的请求方式,最有将请求交给etcd 存储;

scheduler: 调度器,用来做节点调度,选择合适的节点部署应用;

controller-manager:控制器,用来做资源控制,一般一个资源会有一个控制器,维护副本期望值;

etcd:键值对存储系统;用来保存集群中持久化数据;

kubelet :是master 在 worker node 中的代表,用来管理本机容器状态,生命周期等;

kube-proxy:提供网络代理,负载均衡;

插件:

coreDNS: 域名解析服务;

INGRESS: 七层负载;

prometheus: 监控服务;

  1. 准备

环境装备:

三台 2 核4g的Ubuntu 的服务器,拥有自己独立的公网ip; 并保证三台服务器之间网络互通;同时禁止swap 分区;

集群规划: 多msater 部署;

部署方式: 基于kubeadm 部署工具; 基于 二进制包部署;(为了学习,两种都实践)(选择视情况而定)

猜你喜欢

转载自blog.csdn.net/zy_jun/article/details/124053911