K8S架构熟悉及日常操作

目录

一、架构介绍

二、组件介绍

三、调度介绍

四、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:由于资源不足,被驱逐

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码

)">
< <上一篇
下一篇>>