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文件来实现
编写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
[root@master demo]# kubectl delete -f .
[root@master demo]# kubectl get pods
NAME READY STATUS RESTARTS AGE
pod-example 0/1 Terminating 0 5m10s
用于将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
[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
kubectl describe TYPE NAME_PREFIX
kubectl logs POD_NAME
Running 状态资源,外部访问不到
在node 节点,用内部地址访问服务, 如果可以访问,哪问题出在 proxy 端口映射出了问题,导致外部无法访问。
如果节点本身都访问不到
Exec 进入容器进行查看修复。
需要进入容器 kubectl exec –it POD_NAME bash