K8S架构熟悉及日常操作
创始人
2024-05-21 10:56:41
0

目录

一、架构介绍

二、组件介绍

三、调度介绍

四、CLI指令介绍

五、常见CLI指令

六、常见问题排查思路


一、架构介绍

Kubernetes系统架构为客户端/服务端(C/S)架构,Master作为服务端,Node作为客户端。

Master服务端也被称为主控节点,它在集群中主要负责如下任务:

(1)集群的“大脑”,负责管理所有Node

(2)负责调度Pod在哪些节点上运行

(3)负责控制集群运行过程中的所有状态

Node客户端也被称为工作节点,它在集群中主要负责如下任务:

(1)负责管理所有容器(Container)

(2)负责监控/上报所有Pod的运行状态

二、组件介绍

Master服务端主要负责管理和控制整个Kubernetes集群,对集群做出全局性决策。

Master服务端主要包含如下组件:

(1)kube-apiserver组件:集群的HTTP REST API接口,是集群控制的入口。

(2)kube-controller-manager组件:集群中所有资源对象的自动化控制中心。

(3)kube-scheduler组件:集群中Pod资源对象的调度服务。

Node客户端是Kubernetes集群中的工作节点,Node节点上的工作由Master服务端进行分配。

Node节点主要包含如下组件:

(1)kubelet组件:负责管理节点上容器的创建、删除、启停等任务,与Master节点进行通信。(2)kube-proxy组件:负责Kubernetes服务的通信及负载均衡服务。

(3)container组件:负责容器的基础管理服务,接收kubelet组件的指令。

(4)namespace:kubernetes集群中的虚拟空间,将资源进行逻辑上的隔离。

(5)pod:Kubernetes中能够创建和部署的最小单元,是Kubernetes集群中的一个应用实例Pod中包含了一个或多个容器,还包括存储、网络等各个容器共享的资源。可简单理解为一个启动java服务,基本单独创建pod使用。

(6)deployment:最常用无状态服务资源,会自动创建replicasets,replicasets能够控制副本数量。

(7)service:service是一组逻辑pod的抽象,为一组pod提供统一入口,用户只需与service打交道,service提供DNS解析名称,负责追踪pod动态变化并更新转发表,通过负载均衡算法最终将流量转发到后端的pod。4层tcp。

(8)ingress:ingress是一个管理kubernetes集群外部到内部流量的api对象,7层http,https。(9)configmap:用来将非加密数据保存到键值对中。一般用作环境变量、命令行参数或者存储卷中的配置文件。

三、调度介绍

 

(1)创建Deployment,请求被发送至API Server,经过认证、鉴权和准入,Deployment 对象被保存至etcd。 (2)Controller Manager 中的Deployment Controller 监听API Server 中所有Deployment 的变更事件,捕获Deployment 的创建事件。 (3)Deployment Controller 会创建新的ReplicaSet。 (4)ReplicaSet Controller 将新建Pod 的请求发送至API Server,API Server将Pod保存至etcd 。 (5)调度器监听API Server 中所有nodeName 为空的Pod,经过一系列调度算法评分,将pod的nodeName属性保存至etcd。 (6)被调度节点的kubelet 监听到有归属于自己节点的新Pod 时,开始加载Pod 清单,下载Pod 所需的配置信息,并完成Pod 的启动。

四、CLI指令介绍

kubectl CLI命令行结构分别为Command、TYPE、NAME及Flag,分别介绍如下。 (1)Command:指定命令操作,例如create、get、describe、delete等。 (2)TYPE:指定资源类型,例如pod、pods、rc等。资源类型不区分大小写。 (3)NAME:指定资源名称,可指定多个,例如name1 name2。资源名称需要区分大小写。 (4)Flag:指定可选命令行参数,例如-n命令行参数用于指定不同的命名空间。

五、常见CLI指令

查看资源信息kubect get  *****
kubectl get pods -n namespace  查看pods
kubectl get deploy -n namespace  查看deployment
kubectl get service -n namespace  查看service
kubectl get ingress -n namespace
kubectl get node

查看资源属性kubectl describe *****
kubectl describe pods -n namespace pod-name
kubectl describe deploy -n namespace deploy-name
kubectl describe service -n namespace service-name
kubectl describe ingress -n namespace ingress-name

编辑资源kubect edit  *****
kubectl edit pods -n namespace pod-name
kubectl edit deploy -n namespace deploy-name
kubectl edit service -n namespace service-name
kubectl edit ingress -n namespace ingress-name

查看资源使用
kubectl top node
kubectl top pods -n namespace pod-name
kubectl describe node

重启
kubectl delete pod -n  namespace pod-name

kubectl rollout restart deploy -n namespace deployname


查看日志
kubectl logs -n cityos pod-name -c container-name -f

kubectl logs -n cityos pod-name -c container-name --tail=100

进入容器
kubectl exec -it -n cityos pod-name -c container-name --sh

设置节点不调度/调度,驱离
kubectl cordon node node-name
kubectl uncordon node node-name
kubectl drain node-name --force --ignore-daemonsets

回滚
kubectl rollout history deploy   -n namespace deploy-name
kubectl rollout history deploy -n namespace deploy-name --revision 2
kubectl rollout undo deploy -n namespace deploy-name --to-revision=2

设置服务个数

kubectl scale deployment servicename -n namespace --replicas=1

六、常见问题排查思路

node常见状态:

1)Ready:正常运行状态

2)UnReady:组件状态不正常,查看kebelet、docker等服务

3)Unknown:节点已失联,查看节点状态

pod的常见状态:

1)Running:Pod已经绑定到一个节点上了,并且已经创建了所有容器。只是有一个容器正在运行,或者在启动中。

2)Pending:Pod创建已经提交给k8s,但是因为某种原因不能顺利创建,例如集群内存不足

3)InvalidImageName: 无法解析镜像名称

4)ImagePullBackOff: 正在重试拉取

5)ErrImagePull: 通用的拉取镜像出错

上面这几种状态都可以用kubectl describe pod查看,event有详细原因

6)CrashLoopBackOff: 容器退出,容器kubelet正在将它重启

7)Unkown:由于某中原因apiserver无法获取到Pod的状态。通常是由于Master与pod所在的主机失去连接了。
8)Evicted:由于资源不足,被驱逐

相关内容

热门资讯

【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...
ASM贪吃蛇游戏-解决错误的问... 要解决ASM贪吃蛇游戏中的错误问题,你可以按照以下步骤进行:首先,确定错误的具体表现和问题所在。在贪...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...