Kubernetes(简称K8S)是一个容器编排平台,可以用于管理和部署容器化应用程序。在K8S中,节点调度是非常重要的功能之一。节点调度指的是将容器化应用程序调度到集群中的某个节点上运行。这篇文章将向小白开发者介绍如何进行K8S的单节点调度实验。

## 1. 准备工作

在开始之前,我们需要进行一些准备工作。

### 安装 Minikube

Minikube是一个可以在本地快速运行K8S集群的工具。可以使用以下命令安装Minikube:

```shell
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
```

### 启动 Minikube

使用以下命令启动Minikube:

```shell
minikube start
```

### 安装 Kubectl

Kubectl是一个与K8S集群交互的命令行工具。可以使用以下命令安装kubectl:

```shell
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/
```

### 设置 Kubectl 上下文

将Kubectl设置为与Minikube关联的上下文:

```shell
kubectl config use-context minikube
```

## 2. 实现单节点调度

接下来,让我们来实现K8S的单节点调度实验。

### 创建一个 Pod

首先,我们需要创建一个Pod描述文件(pod.yaml),并填入以下内容:

```yaml
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx
command: ["sleep", "3600"]
```

上述文件定义了一个名为my-pod的Pod,其中包含一个名为my-container的容器。容器使用nginx镜像,并运行一个sleep命令,使其保持运行状态。

### 应用 Pod 描述文件

使用以下命令将Pod描述文件应用于Minikube集群:

```shell
kubectl apply -f pod.yaml
```

### 查看 Pod 状态

使用以下命令查看Pod的状态:

```shell
kubectl get pods
```

### 调度 Pod 到指定节点

K8S默认会自动将Pod调度到集群中的某个节点上。但我们可以通过节点选择器(nodeSelector)将Pod调度到指定的节点上。首先,我们需要查看可用的节点名称:

```shell
kubectl get nodes
```

假设我们的集群中有一个节点的名称为minikube,我们可以在Pod描述文件中添加nodeSelector字段,将Pod调度到该节点上。修改pod.yaml文件如下:

```yaml
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx
command: ["sleep", "3600"]
nodeSelector:
kubernetes.io/hostname: minikube
```

然后,使用以下命令重新应用Pod描述文件:

```shell
kubectl apply -f pod.yaml
```

### 验证 Pod 调度

使用以下命令验证Pod是否成功调度到指定节点:

```shell
kubectl get pods -o wide
```

通过查看Pod的NODE列,我们可以确认Pod是否成功调度到了minikube节点上。

## 结论

通过以上步骤,我们成功地进行了K8S的单节点调度实验。首先,我们安装并启动了Minikube,并安装了Kubectl。然后,我们创建了一个Pod,并通过节点选择器将其调度到指定节点上。最后,我们验证了Pod是否成功调度到了指定的节点。

希望这篇文章能够帮助到你,让你更好地理解和掌握K8S的单节点调度实验。如果你有任何问题或疑惑,可以在下方留言,我会尽快回复。