# 如何实现K8S扩容进来的机器不能识别

在Kubernetes(K8S)集群中,我们经常需要对集群进行横向扩容,即增加更多的节点来应对负载增加的情况。但是有时候我们希望这些扩容进来的新机器不被识别,这样可以更灵活地进行一些特定操作。

下面将详细介绍如何实现这一过程,让刚入行的小白也能轻松掌握。

### 操作流程

下面是实现K8S扩容进来的机器不能识别的操作流程:

| 步骤 | 操作 |
| ------ | ------ |
| 1 | 配置新机器的kubelet启动参数 |
| 2 | 过滤新机器的标签 |
| 3 | 限制新机器的调度 |

### 操作步骤及代码示例

#### 步骤 1: 配置新机器的kubelet启动参数

我们可以通过配置新机器的kubelet启动参数,让新机器加入集群后不主动与Master节点进行通信,以达到被“隐藏”的效果。

```bash
# 编辑kubelet启动参数配置文件
vim /etc/default/kubelet

# 添加以下参数,并保存退出
KUBELET_EXTRA_ARGS="--register-node=false --kubeconfig=/var/lib/kubelet/kubeconfig"
```

#### 步骤 2: 过滤新机器的标签

通过为新机器添加特定的标签,并在Pod的调度策略中排除这些标签,可以实现对新机器的过滤操作。

```bash
# 为新机器添加特定标签
kubectl label node special=hidden

# 在Pod的调度策略中排除特定标签的节点
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: my-image
nodeSelector:
special: "hidden"
```

#### 步骤 3: 限制新机器的调度

通过修改调度器的配置文件,限制新机器的调度情况,避免新机器被用于正常的Pod部署。

```bash
# 编辑调度器的配置文件
vim /etc/kubernetes/manifests/kube-scheduler.yaml

# 添加以下参数,并保存退出
- --policy-config-file=/etc/kubernetes/scheduler-policy.json
```

```json
# 创建新的调度策略文件
vim /etc/kubernetes/scheduler-policy.json

# 添加以下内容
{
"kind": "Policy",
"apiVersion": "v1",
"predicates": [
{
"name": "PodFitsHostPorts"
},
{
"name": "MatchNodeSelector"
}
]
}
```

通过以上步骤,就可以实现K8S扩容进来的机器不能识别的效果。希望这篇文章能够帮助到刚入行的小白了解并掌握这个操作流程。祝学习顺利!