目录

一、架构介绍

二、组件介绍

三、调度介绍

四、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)namespacekubernetes集群中的虚拟空间,将资源进行逻辑上的隔离。

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

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

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

(8)ingress:ingress是一个管理kubernetes集群外部到内部流量的api对象,7httphttps。(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常见状态:

1Ready:正常运行状态

2UnReady:组件状态不正常,查看kebeletdocker等服务

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

pod的常见状态:

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

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

3InvalidImageName: 无法解析镜像名称

4ImagePullBackOff: 正在重试拉取

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

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

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

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

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐