k8s部署yaml时一直处于Pending状态问题

本文介绍在Kubernetes环境中部署Nginx时遇到的Pending状态问题及解决方法,包括调整YAML配置文件中的nodeSelector选项和修改节点标签。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.在k8s环境中使用nginx-deployment.yaml部署一个nginx

[root@k8s-master nginx]# cat nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
  name: nginx-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx:1.14.0
        name: nginx
      nodeSelector:
        type: nginx
      tolerations:
      - key: "key"
        operator: "Equal"
        value: "nginx"
        effect: "NoSchedule"

2.查询状态,一直显示为Pending状态,所有节点尝试手动下载镜像,发现还是这个问题。

[root@k8s-master nginx]# kubectl get pods -o wide
NAME                                READY   STATUS    RESTARTS   AGE     IP           NODE        NOMINATED NODE   READINESS GATES
cloud-flaskapp-6c785ddd7b-dnhrp     1/1     Running   0          4d17h   10.244.2.2   k8s-node2   <none>           <none>
nginx-deployment-74bbc7fff8-425r9   0/1     Pending   0          12s     <none>       <none>      <none>           <none>
nginx-deployment-8464c54f76-mmg6l   0/1     Pending   0          15s     <none>       <none>      <none>           <none>

3.查看pod的详细信息,发现最后提示Warning FailedScheduling default-scheduler 0/3 nodes are available: 3 node(s) didn’t match node selector.

[root@k8s-master nginx]# kubectl describe pod nginx-deployment-8464c54f76-mmg6l
Name:           nginx-deployment-8464c54f76-mmg6l
Namespace:      default
Priority:       0
Node:           <none>
Labels:         app=nginx
                pod-template-hash=8464c54f76
Annotations:    kubectl.kubernetes.io/restartedAt: 2021-01-18T10:19:42+08:00
Status:         Pending
IP:             
IPs:            <none>
Controlled By:  ReplicaSet/nginx-deployment-8464c54f76
Containers:
  nginx:
    Image:        nginx:1.14.0
    Port:         <none>
    Host Port:    <none>
    Environment:  <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-bzdrm (ro)
Conditions:
  Type           Status
  PodScheduled   False
Volumes:
  default-token-bzdrm:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-bzdrm
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  type=nginx
Tolerations:     key=nginx:NoSchedule
                 node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type     Reason            Age        From               Message
  ----     ------            ----       ----               -------
  Warning  FailedScheduling  <unknown>  default-scheduler  0/3 nodes are available: 3 node(s) didn't match node selector.
  Warning  FailedScheduling  <unknown>  default-scheduler  0/3 nodes are available: 3 node(s) didn't match node selector.

4.解决方式,修改yaml文件,将nodeSelector注释掉

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
  name: nginx-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx:1.14.0
        name: nginx
#      nodeSelector:
#        type: nginx
      tolerations:
      - key: "key"
        operator: "Equal"
        value: "nginx"
        effect: "NoSchedule"

5.再在k8s中启动nginx-deployment.yaml,查看pod状态。

[root@k8s-master nginx]# kubectl apply -f nginx-deployment.yaml
deployment.apps/nginx-deployment created
[root@k8s-master nginx]# kubectl get pod -o wide
NAME                                READY   STATUS    RESTARTS   AGE     IP           NODE        NOMINATED NODE   READINESS GATES
cloud-flaskapp-6c785ddd7b-dnhrp     1/1     Running   0          4d17h   10.244.2.2   k8s-node2   <none>           <none>
nginx-deployment-7b988d8687-vrkvw   1/1     Running   0          8s      10.244.2.3   k8s-node2   <none>           <none>

6.另外一种方式,也可以修改k8s节点中,将node节点添加type=nginx的label,也是可以的。
查看当前节点信息

[root@k8s-master nginx]# kubectl  get node -o wide --show-labels
NAME         STATUS   ROLES    AGE     VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION              CONTAINER-RUNTIME   LABELS
k8s-master   Ready    master   6d20h   v1.17.0   172.30.18.19   <none>        CentOS Linux 7 (Core)   3.10.0-862.2.3.el7.x86_64   docker://20.10.2    beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master,kubernetes.io/os=linux,node-role.kubernetes.io/master=
k8s-node1    Ready    worker   6d20h   v1.17.0   172.30.18.15   <none>        CentOS Linux 7 (Core)   3.10.0-862.2.3.el7.x86_64   docker://20.10.2    beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node1,kubernetes.io/os=linux,node-role.kubernetes.io/worker=worker
k8s-node2    Ready    <none>   6d19h   v1.17.0   172.30.18.10   <none>        CentOS Linux 7 (Core)   3.10.0-862.2.3.el7.x86_64   docker://20.10.2    beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node2,kubernetes.io/os=linux

修改k8s-node1节点label为type=nginx,在k8s-node1节点信息最后会添加type=nginx的信息。

[root@k8s-master nginx]# kubectl  label nodes k8s-node1 type=nginx
node/k8s-node1 labeled
[root@k8s-master nginx]# kubectl  get node -o wide --show-labels
k8s-master   Ready    master   6d20h   v1.17.0   172.30.18.19   <none>        CentOS Linux 7 (Core)   3.10.0-862.2.3.el7.x86_64   docker://20.10.2    beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master,kubernetes.io/os=linux,node-role.kubernetes.io/master=
k8s-node1    Ready    worker   6d20h   v1.17.0   172.30.18.15   <none>        CentOS Linux 7 (Core)   3.10.0-862.2.3.el7.x86_64   docker://20.10.2    beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node1,kubernetes.io/os=linux,node-role.kubernetes.io/worker=worker,type=nginx
k8s-node2    Ready    <none>   6d19h   v1.17.0   172.30.18.10   <none>        CentOS Linux 7 (Core)   3.10.0-862.2.3.el7.x86_64   docker://20.10.2    beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node2,kubernetes.io/os=linux

再运行nginx-deployment.yaml,这个文件中没有注释nodeSelector两行代码。

[root@k8s-master nginx]# kubectl apply -f nginx-deployment.yaml
deployment.apps/nginx-deployment created
[root@k8s-master nginx]# kubectl get pods -o wide
NAME                                READY   STATUS    RESTARTS   AGE     IP            NODE        NOMINATED NODE   READINESS GATES
cloud-flaskapp-6c785ddd7b-dnhrp     1/1     Running   0          4d18h   10.244.2.2    k8s-node2   <none>           <none>
nginx-deployment-84fdbd9f54-4cpsp   1/1     Running   0          108s    10.244.1.11   k8s-node1   <none>           <none>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值