<p>I want one of my node only accepts some kind of pods. 
So I wonder, is there a way to make one node only accept those pods with some specific labels? </p>

Jasonling
<p>You have two options: </p>

<ol>
<li><a href="https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#node-affinity-beta-feature" rel="nofollow noreferrer">Node Affinity</a>: property of Pods which attract them to set of nodes.</li>
<li><a href="https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/" rel="nofollow noreferrer">Taints &amp; Toleration</a> : Taints are opposite of Node Affinity, they allow node to repel set of Pods. </li>
</ol>

<p><strong>Using Node Affinity</strong> </p>

<ol>
<li><p>You need to label your nodes: 
<code>kubectl label nodes node1 mylabel=specialpods</code></p></li>
<li><p>Then when you launch Pods specify the <code>affinity</code>: </p></li>
</ol>

<pre>
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: mylabel
            operator: In
            values:
            - specialpods
  containers:
  - name: nginx-container
    image: nginx
</pre>

<p><strong>Using Taint &amp; Toleration</strong> </p>

<p>Taint &amp; Toleration work together: you taint a node, and then specify the toleration for pod, only those Pods will be scheduled on node whose toleration "matches" taint: </p>

<ol>
<li><p>Taint: <code>kubectl taint nodes node1 mytaint=specialpods:NoSchedule</code></p></li>
<li><p>Add toleration in Pod Spec:</p></li>
</ol>

<pre>
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  tolerations:
  - key: "mytaint"
    operator: "Equal"
    value: "specialpods"
    effect: "NoSchedule"
  containers:
  - name: nginx-container
    image: nginx
</pre>
