Pod是Kubernetes的基础单元,Pod 启动典型创建过程如下
注意:在创建 Pod 的工作就已经完成了后,为什么 kubelet 还要一直监听呢?原因很简单,假设这个时候 kubectl 发命令,要扩充 Pod 副本数量,那么上面的流程又会触发一遍,kubelet 会根据最新的 Pod 的部署情况调整 Node 的资源。又或者 Pod 副本数量没有发生变化,但是其中的镜像文件升级了,kubelet 也会自动获取最新的镜像文件并且加载。
Kubernetes通过list-watch的机制进行每个组件的协作,每个组件之间的设计实现了解耦。
apiVersion: v1
kind: Pod
metadata:
name: pod-example
labels:
app: nginx
spec:
nodeName: node1
containers:
- name: nginx
image: nginx:1.15
kubectl create -f pod-example.yaml
kubectl get pods -o wide
kubectl describe po pod-example
#清空pod
kubectl delete -f .
#查看标签用法
kubectl label --help
Usage:
kubectl label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N
[--resource-version=version] [options]
#需要获取node上的NAME名称
kubectl get node
#给对应的node设置标签分别为sb=lichen和lc=fuheinan
kubectl label nodes node1(节点名字为none的用IP)sb=lichen
kubectl label nodes node2 lc=fuheinan
#查看标签
kubectl get nodes --show-labels
[root@master ~]# vim pod-example.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-example
labels:
app: nginx
spec:
nodeSelector:
lc: fuheinan
containers:
- name: nginx
image: nginx:1.15
kubectl create -f pod-example.yaml
kubectl get pods -o wide
kubectl describe po pod-example
#查看详细事件(通过事件可以观察经过调度器分配)
值 | 描述 |
---|---|
Pending | Pod创建已经提交到Kubernetes.但是,因为某种原因而不能顺利创建。例如下载镜像慢,调度不成功 |
Running | Pod已经绑定到一个节点,并且已经创建了所有容器。至少有一个容器正在运行中,或正在启动或重新启动。 |
Successed | Pod中的所有容器都已经成功终止,不会重新启动 |
Failed | Pod的所有容器均已终止,且至少有一个容器已在故障中终止。也就是说,容器要么以非零状态退出,要么被系统终止 |
Unknown | 由于某种原因apiserver无法获得Pod的状态,通常是由于Master与Pod所在主机kubelet通信时出错。 |
#查看pod事件
kubectl describe TYPE NAME_PREFIX
#查看pod日志(Failed状态下)
kubectl logs POD_NAME
#进入pod(状态为running,但是服务没有提供)
kubectl exec –it POD_NAME bash