前言

一: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
Logo

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

更多推荐