K8S架构熟悉及日常操作
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
目录
一、架构介绍
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动态变化并更新转发表通过负载均衡算法最终将流量转发到后端的pod。4层tcp。
8ingressingress是一个管理kubernetes集群外部到内部流量的api对象7层httphttps。9configmap用来将非加密数据保存到键值对中。一般用作环境变量、命令行参数或者存储卷中的配置文件。
三、调度介绍
四、CLI指令介绍
五、常见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组件状态不正常查看kebelet、docker等服务
3Unknown节点已失联查看节点状态
pod的常见状态
1RunningPod已经绑定到一个节点上了并且已经创建了所有容器。只是有一个容器正在运行或者在启动中。
2PendingPod创建已经提交给k8s但是因为某种原因不能顺利创建例如集群内存不足
3InvalidImageName 无法解析镜像名称
4ImagePullBackOff 正在重试拉取
5ErrImagePull 通用的拉取镜像出错
上面这几种状态都可以用kubectl describe pod查看event有详细原因
6CrashLoopBackOff 容器退出容器kubelet正在将它重启
7Unkown由于某中原因apiserver无法获取到Pod的状态。通常是由于Master与pod所在的主机失去连接了。
8Evicted由于资源不足被驱逐