K8S
APIServer接收到请求后把创建Pod的信息存储到Etcd中,从集群运行那一刻起,资源调度系统Scheduler就会定时去监控APIServer通过APIServer得到创建Pod的信息,Scheduler采用watch机制,一旦Etcd存储Pod信息成功便会立即通知APIServerundefinedAPIServer会立即把Pod创建的消息通知SchedulerundefinedSched
目录
Kubelet与kubeproxy作用。Kubeproxy的三种代理模式和各自的原理以及它们的区别。
K8S
k8s起源:创造者是Google他是google大规模容器管理技术Borg的开源版本
k8s是做什么用的:是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署,自动扩缩容,维护等功能。
k8s的优点:①可以管理大量跨主机的容器②快速部署和扩展应用③无缝对接新的应用功能④节省资源,优化硬件资源的使用。
为什么使用k8s?
快速部署应用而且安全
资源调度:一个节点不够时,可以扩充节点
故障迁移:当一个节点不工作时,自动发现可以找到另一个节点
资源隔离:只能看到自己的命名空间,不干扰
K8s 功能或适用场景:
(1)自动装箱:基于容器对应用运行环境的资源配置要求自动部署应用容器
(2)自我修复(自愈能力):当容器失败时,会对容器进行重启undefined当所部署的 Node 节点有问题时,会对容器进行重新部署和重新调度undefined当容器未通过监控检查时,会关闭此容器直到容器正常运行时,才会对外提供服务
(3)水平扩展:通过简单的命令、用户 UI 界面或基于 CPU 等资源使用情况,对应用容器进行规模扩大或规模剪裁
(3)服务发现:用户不需使用额外的服务发现机制,就能够基于 Kubernetes 自身能力实现服务发现和负载均衡
(4)滚动更新:可以根据应用的变化,对应用容器运行的应用,进行一次性或批量式更新
(5)版本回退:可以根据应用部署情况,对应用容器运行的应用,进行历史版本即时回退
(6)密钥和配置管理:在不需要重新构建镜像的情况下,可以部署和更新密钥和应用配置,类似热部署。
(7)存储编排:自动实现存储系统挂载及应用,特别对有状态应用实现数据持久化非常重要存储系统可以来自于本地目录、网络存储(NFS、Gluster、Ceph 等)、公共云存储服务
(8)批处理:提供一次性任务,定时任务;满足批量数据处理和分析的场景
K8s master节点组件
Api server 是整个系统的对外接口,调用和管理k8s时使用的接口undefined产生的数据 存储在etcd
Schedule 主要是调度容器的
Controll manager 负责控制器管理的
Etcd k8s运行中产生的元数据存储在etcd中 由k8s自动管理
Kubelet 负责维护容器的生命周期
Container runtime 负责镜像管理以及pod和容器的运行
kube-proxy 提供服务发现和负载均衡的
K8S控制器或内置的工作负载资源
controller(控制器)这些相当于一个状态机,用来控制Pod的具体状态和行为
1、Deployment:适合无状态的服务部署
2、StatefullSet:适合有状态的服务部署
3、DaemonSet:一次部署,所有的node节点都会部署,例如一些典型的应用场景:
运行集群存储 daemon,例如在每个Node上运行 glusterd、ceph
在每个Node上运行日志收集 daemon,例如 fluentd、 logstash
在每个Node上运行监控 daemon,例如 Prometheus Node Exporter
4、Job:一次性的执行任务
5、Cronjob:周期性的执行任务
job和daemonset和cronjob区别?(参考上面)
控制器deploymen和satefulset的区别
statefuset和deployment的区别就是"唯一身份标识"
deployment用于部署无状态应用:什么是无状态特点
1、所有pod无差别
2、所有pod中容器运行同一个镜像
3、所有pod可以运行在集群中任意node上
4、所有pod无启动顺序先后之分
5、随意pod数量扩容或缩容
SatefulSet有状态服务控制器:有状态服务的特点
(1)所有的的因素都要考虑到
(2)让每个pod都是独立的,保持pod的启动顺序和唯一性
(3)通过 唯一网络标识符、持久存储区分
(4)有序undefined 比如mysql主从 必须先有主后有从
监控k8s指标
Operator promethues server adapter metrics-state node-exporter altermanager grafana
Promethues 监控k8s指标:
1.Node的资源利用率-node节点的CPU 内存 硬盘的使用率 系统平均负载
2.Node的数量与资源利用率,业务的负载比例 每小时流量 每秒网络宽带使用
3.Pod 正常的pod 有问题的
k8s四大命令空间?查看别的命名空间下,用什么参数?
default:默认的命名空间中。在创建替代的命名空间之前,该命名空间会充当用户新添加资源的主要目的地,无法删除。
kube-public:公共数据,这对于公开bootstrap组件所需的集群信息非常有用,所有用户可以读取它。它主要是由Kubernetes自己管理。
kube-system:它一般由系统直接管理,因此具有相对宽松的策略。
kube-node-lease:为高可用提供心跳监视的空间
k8s集群架构或管理:
核心角色:master(管理节点)node(计算节点)image(镜像仓库)
master节点:①提供集群的控制②对集群进行全局决策③检测和响应集群事件④master主要由apiserverundefinedschedulerundefinedetcd和controllermanager服务组成。
node节点:①运行容器的实际节点②维护运行pod并提供具体应用的运行环境③node由kubeletundefinedkube-proxy和docker组成④计算节点设计成水平拓展,该组件在多个节点上运行。
k8s集群安装
1. 配置yum仓库
2. 安装 kubectl kubeadm kubelet docker-ce 配置json文件
3. 需要用到的镜像导入私有仓库
4. 配置tab键
5. 安装负载均衡代理
6. 修改hosts文件,修改内核参数
7. 使用kubeadm 初始化集群
8. Node节点加入集群
Node节点安装flannel插件进行通信(修改镜像地址)
集群排错步骤
1. Kubectl get 资源名称 kubectl get pods
查看所有的服务状态
2. Kubectl [名称空间] 资源类型 资源名称
Kubectl kube-system pod 名称
3. Kubectl logs 名称
master主控节点服务:
①api server :是整个系统的对外接口,供客户端和其他组件调用②etcd(键值数据库):分布式键值数据库,k8s产生的元数据全部存储在这。③scheduler:负责对集群内部的资源进行调度,相当于调度室。④controller manager:负责管理控制器,相当于大总管。
node 工作节点服务(运行容器的实际节点,维护运行pod,并提供具体的运行环境):
①docker 服务:容器管理②kubelet:负责监视 pod包括创建,修改和删除③kube-proxy 服务:主要负责对 pod 对象提供代理,实现 service 的通信与负载均衡
作用?
在Kubernetes集群中,在每个Node(又称Worker)上都会启动一个kubelet服务进程。该进程用于处理Master下发到本节点的任务,管理Pod及Pod中的容器。每个kubelet进程都会在API Server上注册节点自身的信息,定期向Master汇报节点资源的使用情况,并通过cAdvⅵsor监控容器和节点资源。
PV和pVC?
PV是对底层网络共享存储的抽象,将共享存储定义为一种“资源”。
PVC则是用户对存储资源的一个“申请”。
k8s的调度机制。
1、Scheduler工作原理:
请求及Scheduler调度步骤:
节点预选:排除完全不满足条件的节点,如内存大小,端口等条件不满足。
节点优先级排序:根据优先级选出最佳节点;
节点择优:根据优先级选定节点;
2、具体步骤:
首先用户通过Kubernetes客户端Kubectl提交创建Pod的Yaml的文件,向Kubernetes系统发起资源请求,该资源请求被提交到
Kubernetes系统中,用户通过命令行工具Kubectl向Kubernetes集群即APIServer用的方式发送“POST”请求,即创建Pod的请求。
APIServer接收到请求后把创建Pod的信息存储到Etcd中,从集群运行那一刻起,资源调度系统Scheduler就会定时去监控APIServer通过APIServer得到创建Pod的信息,Scheduler采用watch机制,一旦Etcd存储Pod信息成功便会立即通知APIServerundefinedAPIServer会立即把Pod创建的消息通知SchedulerundefinedScheduler发现Pod的属性中Dest Node为空时(Dest Node=””)便会立即触发调度流程进行调度。
而这一个创建P0d对象,在调度的过程当中有3个阶段:
节点预选、节点优选、节点选定,从而筛选出最佳的节点
(1).节点预选:基于一系列的预选规则对每个节点进行检查,将那些不符合条件的节点过滤,从而完成节点的预选
(2).节点优选:对预选出的节点进行优先级排序,以便选出最合适运行Pod对象的节点
(3).节点选定:从优先级排序结果中挑选出优先级最高的节点运行Podundefined当这类节点多于1个时,则进行随机选择
调用工作方式
Kubernetes调度器作为集群的大脑,在如何提高集群的资源利用率、保证集群中服务的稳定运行中也会变得越来越重要Kubernetes的资源分为两种属性。
可压缩资源(例如CPU循环,DskI/O带宽)都是可以被限制和被回收的,对于一个Pod来说可以降低这些资源的使用量而不去杀掉Pod。
不可压缩资源(例如内存、硬盘空间)一般来说不杀掉Pod就没法回收。未来Kubernetes会加入更多资源,如网络带宽,存储IOPS的支持。
K8s安装部署方式:
①源码部署,需要创建大量的证书。②容器部署,把服务做成镜像,下载镜像,启动即可。
k8s集群的搭建流程
①更新并安装依赖②安装Docker(安装必要的依赖,设置docker仓库,启动docker)③修改所有节点的hosts文件④系统基础前提配置(关闭防火墙,Selinux和swap配置iptables的ACCEPT规则)
⑤安装工具的部署:1.kubeadm:用来初始化集群的指令2.kubelet:在集群中的每个节点上用来启动pod和容器等3.kubectl:与集群通信的命令行工具4.docker:容器管理工具
⑥拉取镜像⑦kube init初始化master(1.初始化主节点2.根据日志提示创建相关目录以及授权3.健康检查)⑧部署calico网络插件(在master节点服务器上运行)⑨kube join( 在node节点服务器上执行kubeadm join信息)
搭建完成后怎么检查是否正常运行:
在Kubernetes集群中创建一个pod,验证是否正常运行①创建一个pod,开放对外端口访问,这里会随机映射一个端口
②查看pod状态,必须是running状态而且ready是1,并查看nginx svc的80端口映射到了哪个端口③访问任意机器的刚刚查看的映射端口,看看是否nginx已经运行
Kubernetes deployment升级策略?
在Deployment的定义中,可以通过spec.strategy指定Pod更新的策略,目前支持 两种策略:
Recreate(重建)和RollingUpdate(滚动更新),默认值为RollingUpdate。
1.Recreate:设置spec.strategy.type=Recreate,表示 Deployment在更新 Pod时,会先杀掉所有正在运行的Pod,然后创建新的Pod。
2.RollingUpdate:设置 spec.strategy.type=RollingUpdate,表示Deployment会以滚动更新的方式来逐个更新Pod。同时,可以通过设置spec.strategy.rollingUpdate下的两个参数(maxUnavailable和 maxSurge)来控制滚动更新的过程。
简述kube-proxy的三种工作模式和原理:
1.userspace模式:该模式下kube-proxy会为每一个Service创建一个监听端口。发向Cluster IP的请求被Iptables规则重定向到Kube-proxy监听的端口上,Kube-proxy根据LB算法选择一个提供服务的Pod并和其建立链接,以将请求转发到Pod上。该模式下,Kube-proxy充当了一个四层Load balancer的角色。由于kube-proxy运行在userspace中,在进行转发处理时会增加两次内核和用户空间之间的数据拷贝,效率较另外两种模式低一些;好处是当后端的Pod不可用时,kube-proxy可以重试其他Pod。
2、iptables模式
为了避免增加内核和用户空间的数据拷贝操作,提高转发效率,Kube-proxy提供了iptables模式。在该模式下,Kube-proxy为service后端的每个Pod创建对应的
iptables规则,直接将发向Cluster IP的请求重定向到一个Pod IP。该模式下Kube-proxy不承担四层代理的角色,只负责创建iptables规则。该模式的优点是较userspace模式效率更高,但不能提供灵活的LB策略,当后端Pod不可用时也无法进行重试。
3、该模式和iptables类似,kube-proxy监控Pod的变化并创建相应的ipvs rules。.ipvs也是在kernel模式下通过netfilter实现的,但采用了hash table来存储规则,
因此在规则较多的情况下,Ipvs相对iptables转发效率更高。除此以外,ipvs支持更多的LB算法。如果要设置kube-proxy为ipvs模式,必须在操作系统中安装IPVS内
核模块。
Kubelet与kubeproxy作用。Kubeproxy的三种代理模式和各自的原理以及它们的区别。
kubelet进程用于处理master下发的任务,管理pod中的容器,注册自身所在的节点.kube-proy运行机制解析kube-proy本质上,类似一个反向代理.我们可以把每个节点上运行的
kube-proxy看作service的透明代理兼LB.Service是k8s中资源的一种,也是k8s能够实现减少运维工作量,甚至免运维的关键点,我们公司的运维都要把服务搭在我们集群里,接触过的人应该都能体会到其方便之处。Service能将pod的变化屏蔽在集群内部,同时提供负载均衡的能力,自动将请求流量分布到后端的podundefined这一功能的实现靠的就是kube-proxy的流量代理,
一共有三种模式,userspace、iptables以及ipvs。
(1)userspace:为每个service在node上打开一个随机端口(代理端口)建立iptables规则,将clusterip的请求重定向到代理端口
到达代理端口(用户空间)的请求再由kubeproxy转发到后端pod。这里为什么需要建iptables规则,因为kube-proxy监听的端口在用户空间,所以需
要一层iptables把访问服务的连接重定向给kube-proy服务,这里就存在内核态到用户态的切换,代价很大,因此就有了iptables。.
(2)iptables:kube-proy不再负责转发,数据包的走向完全由iptables规则决定,这样的过程不存在内核态到用户态的切换,效率明显会高很多。但是随着service的增加,iptables规
则会不断增加,导致内核十分繁忙(等于在读一张很大的没建索引的表)。
(3)ipvs:用ipset存储iptables规则,这样规则的数量就能够得到有效控制,而在查找时就类似hash表的查找。
Kubernetes 与 Docker 有什么关系?
Docker提供容器的生命周期管理,Docker镜像构建运行时容器。由于这些单独的容器必须通信,因此使用 Kubernetes。我们说 Docker 构建容器,这些容器通过 Kubernetes 相互通信。因此,可以使用 Kubernetes 手动关联和编排在多个主机上运行的容器.
更多推荐
所有评论(0)