Kubernetes 配置与部署完整教程

Kubernetes 配置与部署完整教程

引言

Kubernetes 是一个开源的平台,旨在自动化容器化应用的部署、扩展和管理。它为容器化应用提供了一个强大而灵活的基础架构,支持大规模的分布式应用部署。在本教程中,我们将详细介绍如何安装、配置和部署 Kubernetes 集群,从环境搭建到应用部署的整个过程。

一、前提条件

在开始之前,确保你满足以下条件:

  1. Linux 系统:教程中以 Ubuntu 20.04 为例,但 Kubernetes 支持的 Linux 发行版不限于此。
  2. 容器化工具:安装 Docker 或 Containerd(Kubernetes 使用容器运行时来运行和管理容器)。
  3. Kubeadm, kubelet 和 kubectl:这些是 Kubernetes 集群的核心工具。
  4. 访问权限:你需要有一个具有 sudo 权限的用户。
  5. 至少两台机器:一台作为控制平面节点(Master Node),一台作为工作节点(Worker Node)。如果是本地环境,可以使用虚拟机或 Docker 容器模拟多个节点。

二、Kubernetes 集群的安装

1. 安装 Docker

Kubernetes 使用容器运行时来管理和运行容器,Docker 是最常用的容器运行时。首先,在所有节点上安装 Docker。

```bash

更新 apt 包列表

sudo apt-get update

安装必要的依赖

sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common

添加 Docker 官方的 GPG 密钥

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

添加 Docker 仓库

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

更新 apt 包列表并安装 Docker

sudo apt-get update
sudo apt-get install -y docker-ce

启动 Docker 并设置开机自启动

sudo systemctl enable docker
sudo systemctl start docker
```

2. 安装 kubeadm, kubelet 和 kubectl

在所有节点上安装 Kubernetes 的命令行工具(kubeadm、kubelet 和 kubectl)。

```bash

添加 Kubernetes 仓库

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

添加 Kubernetes 仓库地址

sudo apt-add-repository "deb https://apt.kubernetes.io/ kubernetes-xenial main"

更新 apt 包列表

sudo apt-get update

安装 kubeadm, kubelet 和 kubectl

sudo apt-get install -y kubeadm kubelet kubectl

禁用 swap(Kubernetes 要求禁用 swap)

sudo swapoff -a
```

3. 启动 Kubernetes 集群

控制平面节点(Master Node)

在控制平面节点上,使用 kubeadm init 初始化 Kubernetes 集群。

bash
sudo kubeadm init --pod-network-cidr=192.168.0.0/16

此命令会输出一个用于加入工作节点的命令,类似如下:

kubeadm join <master-ip>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>

此外,系统会要求你设置 kubectl 的配置文件路径。根据提示设置:

bash
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

工作节点(Worker Node)

在工作节点上,执行 kubeadm join 命令,连接到控制平面节点:

bash
sudo kubeadm join <master-ip>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>

其中 <master-ip>, <token>, <hash> 需要替换为实际的值,来自于 kubeadm init 输出的内容。

4. 安装网络插件

Kubernetes 需要一个网络插件来提供容器之间的网络通信。常见的网络插件包括 Flannel、Calico 和 Weave 等。这里我们使用 Flannel。

在控制平面节点上执行以下命令:

bash
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

此命令将会部署 Flannel 网络插件,确保 Kubernetes 集群的各个 Pod 之间可以相互通信。

三、验证集群状态

1. 查看节点状态

使用以下命令查看集群的节点状态:

bash
kubectl get nodes

输出示例:

bash
NAME STATUS ROLES AGE VERSION
master-node Ready master 2d v1.23.4
worker-node Ready <none> 2d v1.23.4

2. 查看 Pod 状态

在集群初始化后,可以使用以下命令查看所有的 Pod 状态:

bash
kubectl get pods --all-namespaces

四、部署应用

1. 创建一个简单的 Deployment

我们以部署一个简单的 Nginx 服务为例:

bash
kubectl create deployment nginx --image=nginx

此命令会创建一个名为 nginx 的 Deployment,并使用 Nginx 镜像。

2. 暴露服务

为了让外部访问到 Nginx 服务,我们需要暴露它。可以通过以下命令暴露一个端口:

bash
kubectl expose deployment nginx --port=80 --type=NodePort

这会在集群的每个节点上随机选择一个端口来映射到 Nginx 服务的端口 80。

3. 查看服务

可以使用以下命令查看 Nginx 服务的详情:

bash
kubectl get svc

输出示例:

bash
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx NodePort 10.96.168.212 <none> 80:31000/TCP 5m

在这里,80:31000/TCP 表示你可以通过集群的任何节点 IP 地址和端口 31000 来访问 Nginx 服务。

五、管理 Kubernetes 集群

1. 使用 kubectl 管理集群

  • 查看所有的 Pods:
    bash
    kubectl get pods

  • 查看 Pod 的日志:
    bash
    kubectl logs <pod-name>

  • 删除一个 Pod:
    bash
    kubectl delete pod <pod-name>

  • 扩展一个 Deployment:
    bash
    kubectl scale deployment nginx --replicas=3

2. 升级 Kubernetes 版本

升级 Kubernetes 集群时,通常是通过 kubeadm upgrade 命令来实现的。首先,查看集群当前的版本:

bash
kubectl version

然后,通过以下命令进行升级:

bash
sudo kubeadm upgrade plan
sudo kubeadm upgrade apply v1.23.4

在升级控制平面节点后,还需要升级每个工作节点:

bash
sudo apt-get upgrade kubelet kubectl

六、总结

本文详细介绍了如何配置和部署一个 Kubernetes 集群的全过程。从安装 Docker、kubeadm 到配置网络插件、部署应用程序,每一步都提供了详细的命令和步骤。通过这些步骤,你可以成功搭建起自己的 Kubernetes 集群,并部署和管理容器化应用。

随着对 Kubernetes 的深入理解,你还可以探索更多高级功能,如自动扩展、服务发现、持久存储等,以构建更为复杂和高效的集群环境。

THE END