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

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>
要通过YAML文件部署Kubernetes Dashboard,可以按照以下步骤进行操作: 1. 首先,创建一个名为`dashboard.yaml`的YAML文件,并使用文本编辑器打开它。 2. 在`dashboard.yaml`文件中,添加以下内容: ```yaml apiVersion: v1 kind: Namespace metadata: name: kubernetes-dashboard --- apiVersion: v1 kind: ServiceAccount metadata: name: admin-user namespace: kubernetes-dashboard ``` 这将创建一个名为`kubernetes-dashboard`的命名空间以及一个名为`admin-user`的ServiceAccount。 3. 接下来,添加以下内容来授予ServiceAccount相关权限: ```yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: admin-user roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: admin-user namespace: kubernetes-dashboard ``` 这将创建一个名为`admin-user`的ClusterRoleBinding,并将其绑定到`cluster-admin`角色。 4. 最后,在`dashboard.yaml`文件中添加以下内容来部署Dashboard: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: kubernetes-dashboard namespace: kubernetes-dashboard labels: k8s-app: kubernetes-dashboard spec: replicas: 1 selector: matchLabels: k8s-app: kubernetes-dashboard template: metadata: labels: k8s-app: kubernetes-dashboard spec: serviceAccountName: admin-user containers: - name: kubernetes-dashboard image: kubernetesui/dashboard:v2.4.0 ports: - containerPort: 8443 protocol: TCP args: - --enable-skip-login ``` 这将创建一个名为`kubernetes-dashboard`的Deployment,并使用`admin-user` ServiceAccount进行验证。Dashboard的镜像版本为v2.4.0,并且启用了跳过登录的功能。 5. 保存并关闭`dashboard.yaml`文件。 6. 运行以下命令来部署Dashboard: ``` kubectl apply -f dashboard.yaml ``` 这将使用`dashboard.yaml`文件中定义的配置部署Kubernetes Dashboard。 部署完成后,可以使用以下命令检查Dashboard的状态: ``` kubectl get all -n kubernetes-dashboard ``` 确保所有相关的Pod和服务都处于运行状态。然后,可以通过访问Dashboard的URL(通常是https://<cluster-ip>:8443)来访问Kubernetes Dashboard。请注意,具体的URL和访问方式可能因集群配置而有所不同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值