文章目录
调度方式
调度方式用于将pod资源调度到相应的node上,可自动分配也可自己指定
- nodeName:用于将pod调度到指定node上(跳过调度器直接分配)
- nodeSelect:用于将pod调度到匹配label的node上
nodeName方式
用于将pod调度到指定node上(跳过调度器直接分配)
[root@master demo]# vim pod-ns.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-example
labels:
app: nginx
spec:
nodeName: 20.0.0.30
containers:
- name: nginx
image: nginx:1.15
查看详细事件,看到events中并没有经过调度器scheduler
[root@master demo]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
pod-example 1/1 Running 0 108s 172.17.3.3 20.0.0.30 <none>
[root@master demo]# kubectl describe pod pod-example
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Pulling 3m55s kubelet, 20.0.0.30 pulling image "nginx:1.15"
Normal Pulled 3m25s kubelet, 20.0.0.30 Successfully pulled image "nginx:1.15"
Normal Created 3m25s kubelet, 20.0.0.30 Created container
Normal Started 3m25s kubelet, 20.0.0.30 Started container
nodeSelect方式
用于将pod调度到匹配label的node上
[root@master demo]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
20.0.0.30 Ready <none> 14d v1.12.3
20.0.0.40 Ready <none> 14d v1.12.3
[root@master demo]# kubectl label nodes 20.0.0.30 njit=a
node/20.0.0.30 labeled
[root@master demo]# kubectl label nodes 20.0.0.40 njit=b
node/20.0.0.40 labeled
[root@master demo]# kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
20.0.0.30 Ready <none> 14d v1.12.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=20.0.0.30,njit=a
20.0.0.40 Ready <none> 14d v1.12.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=20.0.0.40,njit=b
[root@master demo]# vim pod-ns.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-example
labels:
app: nginx
spec:
nodeSelector:
njit: b
containers:
- name: nginx
image: nginx:1.15
[root@master demo]# kubectl get pods
NAME READY STATUS RESTARTS AGE
pod-example 1/1 Running 0 83s
查看详细事件,看到events中有记录经过了scheduler
[root@master demo]# kubectl describe pod pod-example
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 2m2s default-scheduler Successfully assigned default/pod-example to 20.0.0.40
Normal Pulling 2m1s kubelet, 20.0.0.40 pulling image "nginx:1.15"
Normal Pulled 98s kubelet, 20.0.0.40 Successfully pulled image "nginx:1.15"
Normal Created 97s kubelet, 20.0.0.40 Created container
Normal Started 97s kubelet, 20.0.0.40 Started container
故障排除
值 | 描述 |
---|---|
Pending | Pod创建已经提交到Kubernetes。但是,因为某种原因而不能顺利创建。例如下载镜像慢,调度不成功。 |
Running | Pod已经绑定到一个节点,并且已经创建了所有容器。至少有一个容器正在运行中,或正在启动或重新启动。. |
Succeeded | Pod中的所有容器都已成功终止,不会重新启动。 |
Failed | Pod的所有容器均已终止,且至少有一个容器己在故障中终止。也就是说,容器要么以非零状态退出,要么被系统终止。 |
Unknown | 由于某种原因apiserver无法获得Pod的状态,通常是由于Master与 Pod所在主机kubelet通信时出错。 |
控制器
控制器:又称之为工作负载,包含以下5种类型的控制器
- Deployment
- StatefulSet
- DaemonSet
- Job
- CronJob
controllers:在群集上管理和运行容器,用过label-select相关联
pod通过控制器实现应用的运维,如伸缩,升级等
Deployment
- 部署无状态化应用,没有特定的角色,任何一个可以替代另一个
- 管理pod和replicaset
- 具有上线部署、副本设定、滚动升级、回滚等功能
- 提供声明式更新,例如只更新一个新的image