我们知道, 使用 kubeadm 建立的 k8s 集群,master 节点会被标注上 node-role.kubernetes.io/master:NoSchedule 的 taint

一种办法是将这个 taint 取消掉:

kubectl taint nodes --all node-role.kubernetes.io/master-

另一种方法是指定 toleration 描述让它能够容忍上面的 taint 。我觉得这种方式更好一些。

应用程序的 yaml 文件中,只需要简单加入以下内容就可以了:

  1. 使用 nodeSelector 选择需要放置的节点
  2. 使用 tolerations 配置需要容忍的内容

例子如下:

      nodeSelector:
        kubernetes.io/hostname: k8s-master1
      serviceAccount: cert-manager
      serviceAccountName: cert-manager
      tolerations:
      - effect: NoSchedule
        key: node-role.kubernetes.io/master
        operator: Exists

参考: