使用kubeadm部署Kubernetes集群:从零开始的实践指南

作者:半吊子全栈工匠2024.03.08 18:00浏览量:3

简介:本文将指导您如何使用kubeadm工具从头开始部署一个生产级别的Kubernetes集群。我们将详细讲解每个步骤,并配以实例和源码,确保即使是非专业读者也能轻松掌握Kubernetes集群的部署。

Kubernetes(K8s)是一个开源的,用于自动部署,扩展和管理容器化应用程序的系统。kubeadm是Kubernetes官方提供的一个命令行工具,用于快速部署Kubernetes集群。下面我们将详细介绍如何使用kubeadm部署一个Kubernetes集群。

一、环境准备

首先,我们需要准备一些运行Kubernetes的节点。Kubernetes集群至少需要一个主节点(Master)和一个工作节点(Worker)。每个节点都需要安装Docker和kubeadm,kubelet,kubectl等必要的工具。

  1. 在每个节点上安装Docker。
  1. sudo apt-get update && sudo apt-get install -y docker.io
  2. sudo systemctl enable --now docker
  1. 在每个节点上安装kubeadm,kubelet和kubectl。
  1. sudo apt-get update && sudo apt-get install -y kubeadm=1.20.0-00 kubectl=1.20.0-00 kubelet=1.20.0-00
  2. sudo systemctl enable --now kubelet

二、初始化主节点

在主节点上运行以下命令来初始化集群。

  1. sudo kubeadm init --pod-network-cidr=10.244.0.0/16

这将初始化主节点并生成一些token和证书。最后会打印出一个join命令,这个命令需要在每个工作节点上运行以将它们加入到集群中。

三、加入工作节点

在每个工作节点上运行从主节点上获取到的join命令。

  1. sudo kubeadm join <master-ip>:<master-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>

四、部署网络插件

Kubernetes本身不提供网络功能,需要依赖网络插件来实现Pod之间的通信。这里我们使用Calico作为网络插件。

在主节点上运行以下命令来部署Calico。

  1. kubectl apply -f https://docs.projectcalico.org/v3.16/manifests/calico.yaml

五、验证集群状态

在主节点上运行以下命令来验证集群状态。

  1. kubectl cluster-info
  2. kubectl get nodes

如果一切正常,你应该能看到所有的节点都已经Ready了。

六、部署应用

现在你的Kubernetes集群已经准备好了,你可以开始部署你的应用了。下面是一个简单的示例,部署一个Nginx服务。

首先,创建一个名为nginx.yaml的YAML文件,内容如下:

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: nginx-deployment
  5. spec:
  6. replicas: 3
  7. selector:
  8. matchLabels:
  9. app: nginx
  10. template:
  11. metadata:
  12. labels:
  13. app: nginx
  14. spec:
  15. containers:
  16. - name: nginx
  17. image: nginx:1.14.2
  18. ports:
  19. - containerPort: 80

然后,运行以下命令来部署Nginx服务。

  1. kubectl apply -f nginx.yaml

你可以使用以下命令来查看Pod的状态。

  1. kubectl get pods

如果一切正常,你应该能看到三个Nginx的Pod都已经Running了。

以上就是用kubeadm部署Kubernetes集群的基本步骤。当然,Kubernetes还有很多高级特性和用法,比如Service,Ingress,PersistentVolume等,这些都需要你进一步学习和探索。希望这篇文章能帮助你入门Kubernetes,并在实践中不断提升自己的技能。