# 从零开始搭建Kubernetes集群

## 概述
在搭建Kubernetes(K8S)集群之前,我们需要确保有至少三台服务器来构成一个最基本的Kubernetes集群。Kubernetes是一个开源的容器编排引擎,在生产环境中通常需要更多的服务器来保证高可用性。

## 搭建流程

| 步骤 | 操作 | 说明 |
|------|-----------------|------------------------------------------------------------|
| 1 | 安装Docker | 在所有服务器上安装Docker,作为Kubernetes的容器运行时 |
| 2 | 安装kubeadm | 在所有服务器上安装kubeadm,用于初始化Kubernetes集群 |
| 3 | 初始化Master节点 | 在Master节点上运行kubeadm init命令来初始化Kubernetes Master节点 |
| 4 | 安装网络插件 | 安装网络插件来实现集群内部通信,如Calico、Flannel等 |
| 5 | 加入Worker节点 | 在Worker节点上运行kubeadm join命令来加入Kubernetes集群 |
| 6 | 验证集群 | 使用kubectl命令来验证集群是否正常运行 |

### 步骤1:安装Docker
```bash
# 更新包管理器
sudo apt update
# 安装Docker
sudo apt install docker.io
# 启动Docker服务
sudo systemctl start docker
# 设置Docker开机自启
sudo systemctl enable docker
```

### 步骤2:安装kubeadm
```bash
# 安装kubeadm、kubelet和kubectl
sudo apt update
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
sudo apt install kubeadm kubelet kubectl
```

### 步骤3:初始化Master节点
```bash
# 在Master节点上运行初始化命令
sudo kubeadm init --pod-network-cidr=192.168.0.0/16
# 完成后会有类似的输出,记录下来:
# kubeadm join 192.168.1.1:6443 --token abcdef.0123456789abcdef \
# --discovery-token-ca-cert-hash sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
```

### 步骤4:安装网络插件
在Master节点上运行以下命令安装Calico网络插件:
```bash
kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml
kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml
```

### 步骤5:加入Worker节点
在Worker节点上运行从步骤3中得到的kubeadm join命令:
```bash
sudo kubeadm join 192.168.1.1:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
```

### 步骤6:验证集群
在Master节点上运行以下命令来查看集群状态:
```bash
kubectl get nodes
kubectl get pods --all-namespaces
```

通过以上步骤,你可以成功搭建一个基本的Kubernetes集群,至少需要三台服务器来完成。希望这篇文章对你有帮助!