k8s-----pod资源工作流程与调度约束 及 故障排除
文章目录前言一:k8s工作分析1.1:k8s创建pod工作流程二:调度方式示例1--nodeName方式创建资源查看详细事件(发现未经过调度器)清空所有pod示例2:nodeSelector获取标签帮助给对应的node设置标签分别为sha=a和sha=b查看详细事件(通过事件可以观察经过调度器分配)二. 故障排除查看pod事件查看pod日志(Failed状态下)进入pod(状态为running,但
文章目录
前言
一:k8s工作分析
1.1:k8s创建pod工作流程
1、用户创建pod的信息通过API Server存储到etcd中,etcd记录pod的元信息并将结果返回API Server
2、API Server告知调度器请求资源调度分配,调度器给后端打分,将优先级高的node与pod绑定并告知API Server
3、API Server将此信息写入etcd,得到etcd回复后调用kubelet创建pod
4、kubelet使用docker run创建pod内的容器,得到反馈信息后将容器信息告知API Server
5、API Server将收到的信息写入etcd并得到回馈
6、此时使用kubectl get pod就可以查看到信息了
二 :调度方式
1、nodeName:
用于将Pod调度到指定的node名称上(跳过调度器直接分配)
2、nodeSelector:
用于将pod调度到匹配label的node上
两种方式都是通过yaml文件来实现
示例1 --nodeName方式
编写yaml文件
直接指定节点创建资源测试
用于将Pod调度到指定的node名称上(跳过调度器直接分配)
[root@master demo]# vim pod6.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-example
labels:
app: nginx
spec:
nodeName: 192.168.100.5
containers:
- name: nginx
image: nginx:1.15
创建资源
[root@master demo]# kubectl create -f pod6.yaml
pod/pod-example created
查看详细事件(发现未经过调度器)
[root@master demo]# kubectl describe pod pod-example
清空所有pod
[root@master demo]# kubectl delete -f .
[root@master demo]# kubectl get pods
NAME READY STATUS RESTARTS AGE
pod-example 0/1 Terminating 0 5m10s
示例2:nodeSelector
用于将pod调度到匹配label的node上
获取标签帮助
[root@master demo]# kubectl label --help
Update the labels on a resource.
Usage:
kubectl label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version]
[options]
Use "kubectl options" for a list of global command-line options (applies to all commands).
//需要获取node上的NAME名称
[root@master demo]# kubectl get node
NAME STATUS ROLES AGE VERSION
192.168.100.5 Ready <none> 4d9h v1.12.3
192.168.100.6 Ready <none> 4d8h v1.12.3
给对应的node设置标签分别为sha=a和sha=b
[root@master demo]# kubectl get node
NAME STATUS ROLES AGE VERSION
192.168.100.5 Ready <none> 4d9h v1.12.3
192.168.100.6 Ready <none> 4d8h v1.12.3
[root@master demo]# kubectl label nodes 192.168.100.5 sha=a
node/192.168.100.5 labeled
[root@master demo]# kubectl label nodes 192.168.100.6 sha=b
node/192.168.100.6 labeled
[root@master demo]#
查看标签
[root@master demo]# kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
192.168.100.5 Ready <none> 4d9h v1.12.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=192.168.100.5,sha=a
192.168.100.6 Ready <none> 4d8h v1.12.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=192.168.100.6,sha=b
[root@master demo]# vim pod7.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-example
labels:
app: nginx
spec:
nodeSelector:
sha: b
containers:
- name: nginx
image: nginx:1.15
~
查看详细事件(通过事件可以观察经过调度器分配)
[root@master demo]# kubectl get pods -w
NAME READY STATUS RESTARTS AGE
pod-example 0/1 ContainerCreating 0 7s
pod-example 1/1 Running 0 53s
[root@master demo]kubectl describe pod pod-example
二 . 故障排除
查看pod事件
kubectl describe TYPE NAME_PREFIX
查看pod日志(Failed状态下)
kubectl logs POD_NAME
进入pod(状态为running,但是服务没有提供)
Running 状态资源,外部访问不到
在node 节点,用内部地址访问服务, 如果可以访问,哪问题出在 proxy 端口映射出了问题,导致外部无法访问。
如果节点本身都访问不到
Exec 进入容器进行查看修复。
需要进入容器 kubectl exec –it POD_NAME bash
更多推荐
所有评论(0)