K8S架构熟悉及日常操作

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

目录

一、架构介绍

二、组件介绍

三、调度介绍

四、CLI指令介绍

五、常见CLI指令

六、常见问题排查思路


一、架构介绍

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

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

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

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

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

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

1负责管理所有容器Container

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

二、组件介绍

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

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

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

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

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

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

Node节点主要包含如下组件

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

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

4namespacekubernetes集群中的虚拟空间将资源进行逻辑上的隔离。

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

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

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

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

三、调度介绍

 

1创建 Deployment 请求被发送至 API Server 经过认证、鉴权和准入 Deployment 对象被保存至 etcd
2Controller Manager 中的 Deployment Controller 监听 API Server 中所有 Deployment 的变更事件捕获 Deployment 的创建事件。
3Deployment Controller 会创建新的 ReplicaSet
4ReplicaSet 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 分别介绍如下。
1Command 指定命令操作例如 create get describe delete 等。
2TYPE 指定资源类型例如 pod pods rc 等。资源类型不区分大小写。
3NAME 指定资源名称可指定多个例如 name1 name2 。资源名称需要区分大小写。
4Flag 指定可选命令行参数例如 -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由于资源不足被驱逐

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: k8s