在线咨询
开发教程

Kubernetes集群搭建教程从入门到精通完整指南

微易网络
2026年3月4日 19:59
2 次阅读
Kubernetes集群搭建教程从入门到精通完整指南

本指南提供从零开始的Kubernetes集群搭建完整教程。文章首先介绍Kubernetes的核心概念与集群架构,包括控制平面和工作节点。随后,教程将详细指导读者逐步部署一个生产可用的集群,并融入Linux系统管理、数据库优化等实践知识,同时探讨TypeScript在云原生中的应用。目标是帮助读者不仅成功搭建集群,更能深入理解并优化其运维,实现从入门到精通的跨越。

Kubernetes集群搭建教程从入门到精通完整指南

在当今云原生时代,容器化技术已成为应用部署和运维的基石。而Kubernetes,作为容器编排领域的事实标准,能够高效地管理、扩展和自动化容器化应用的部署。本指南旨在提供一个从零开始,逐步深入的Kubernetes集群搭建教程。我们将从基础概念讲起,逐步完成一个生产可用集群的搭建,并融入Linux系统管理数据库优化思路以及TypeScript在云原生生态中的应用视角,帮助你不仅“搭起来”,更能“用得好”。

一、搭建前的准备:环境与概念梳理

在动手之前,我们需要明确目标和准备环境。一个典型的Kubernetes集群包含一个控制平面和多个工作节点

  • 控制平面 (Control Plane): 集群的大脑,负责调度、API服务、状态存储等。核心组件包括kube-apiserver, etcd, kube-scheduler, kube-controller-manager
  • 工作节点 (Worker Node): 运行实际容器负载的机器。核心组件包括kubelet, kube-proxy, 容器运行时(如Docker或containerd)。

环境要求

  • 至少两台运行Linux的机器(虚拟机或物理机),建议使用Ubuntu 20.04/22.04 LTS或CentOS 7/8。
  • 每台机器2GB以上RAM,2个以上CPU核心。
  • 网络互通,主机名唯一,并正确配置/etc/hosts或DNS。
  • 关闭交换分区:sudo swapoff -a,并注释掉/etc/fstab中的swap行。
  • 关闭防火墙或配置相应规则(生产环境慎用)。

以下是一个简单的Linux主机名和 hosts 配置示例:

# 在所有节点上执行,设置主机名(以控制节点为例)
sudo hostnamectl set-hostname k8s-master

# 编辑 /etc/hosts,确保所有节点都能解析彼此
# 假设IP地址如下:
# 192.168.1.100 k8s-master
# 192.168.1.101 k8s-node1
sudo vi /etc/hosts
# 添加行:192.168.1.100 k8s-master
# 添加行:192.168.1.101 k8s-node1

二、使用kubeadm快速搭建集群

kubeadm是Kubernetes官方提供的集群生命周期管理工具,能极大简化搭建过程。我们以一台控制节点(master)和一台工作节点(node)为例。

步骤1:在所有节点安装容器运行时和kubeadm

我们选择containerd作为容器运行时,它比Docker更轻量,是Kubernetes推荐的运行时。

# 1. 安装必要的工具和配置内核参数
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl

# 2. 安装containerd
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y containerd.io

# 3. 配置containerd
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
# 将SystemdCgroup设置为true(重要!)
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
sudo systemctl restart containerd
sudo systemctl enable containerd

# 4. 安装kubeadm, kubelet, kubectl
curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet=1.27.3-00 kubeadm=1.27.3-00 kubectl=1.27.3-00
sudo apt-mark hold kubelet kubeadm kubectl # 防止自动更新

步骤2:初始化控制平面

控制节点上执行初始化命令。这里我们使用flannel作为Pod网络插件(CNI)。

# 初始化集群,指定API Server的访问地址(控制节点的IP)
sudo kubeadm init --apiserver-advertise-address=192.168.1.100 --pod-network-cidr=10.244.0.0/16

# 初始化成功后,按照提示配置kubectl(普通用户)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 安装Pod网络插件(Flannel)
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

记录下初始化成功时输出的kubeadm join命令,用于工作节点加入。

步骤3:加入工作节点

工作节点上,运行上一步记录的kubeadm join命令。

sudo kubeadm join 192.168.1.100:6443 --token <your-token> --discovery-token-ca-cert-hash sha256:<your-hash>

回到控制节点,验证节点状态:

kubectl get nodes
# 输出应显示两个节点,状态均为 Ready

三、部署应用与深入配置

集群搭建完成后,我们来部署一个简单的应用,并介绍一些关键概念。

部署一个Nginx应用

创建一个YAML文件nginx-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.21-alpine
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: NodePort # 通过节点IP和端口访问

应用配置:

kubectl apply -f nginx-deployment.yaml
kubectl get pods,svc # 查看Pod和服务

融入数据库优化与TypeScript视角

在真实场景中,应用往往需要连接数据库。Kubernetes中运行数据库(如MySQL、PostgreSQL)时,数据库优化的经典原则依然适用,但需结合云原生特点:

  • 持久化存储: 必须使用PersistentVolume (PV)PersistentVolumeClaim (PVC)来保存数据,防止Pod重启后数据丢失。
  • 资源限制: 为数据库Pod设置合理的resources.limits(CPU、内存),避免其占用过多资源影响其他应用,也防止其因内存不足被OOM Killer终止。
  • 配置分离: 将数据库连接字符串、密码等敏感信息存储在Secret中,将普通配置(如连接池大小)存储在ConfigMap中。

同时,现代应用后端越来越多地使用TypeScript(配合Node.js)编写。在Kubernetes中部署TypeScript应用的最佳实践是:

  1. 使用多阶段Docker构建,将TypeScript编译为JavaScript,最终镜像只包含运行时的Node环境和编译后的JS文件,减小镜像体积。
  2. 在Deployment中配置livenessProbereadinessProbe,对健康检查接口进行探活。
  3. 利用Kubernetes的HorizontalPodAutoscaler (HPA),根据CPU或自定义指标(如QPS)自动扩缩容应用实例。

四、生产环境进阶考量

从“可用”到“生产可用”,还需要考虑以下方面:

  • 高可用控制平面: 使用多个Master节点,并通过负载均衡器暴露kube-apiserver。使用kubeadm--control-plane-endpoint参数和外部etcd集群可以实现。
  • 安全的镜像仓库: 搭建私有镜像仓库(如Harbor),并配置Kubernetes使用其拉取镜像。
  • 网络策略: 使用NetworkPolicy实现Pod间的网络隔离,遵循最小权限原则。
  • 日志与监控: 集成EFK(Elasticsearch, Fluentd, Kibana)栈进行日志收集,集成Prometheus + Grafana进行集群和应用监控。
  • Ingress控制器: 部署Ingress Controller(如Nginx Ingress或Traefik),管理集群外部HTTP/S流量的路由。
  • 备份与恢复: 定期备份etcd集群数据,这是恢复整个集群状态的关键。

一个简单的NetworkPolicy示例,只允许带有特定标签的Pod访问数据库:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: db-access-policy
spec:
  podSelector:
    matchLabels:
      role: db
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: my-api
    ports:
    - protocol: TCP
      port: 5432

五、日常运维与故障排查命令

掌握以下命令是运维Kubernetes集群的基础:

  • kubectl get <resource>: 查看资源状态(pods, nodes, svc, deployments等)。
  • kubectl describe <resource> <name>: 查看资源的详细信息和事件,是故障排查的第一选择
  • kubectl logs <pod-name> [-c <container-name>]: 查看Pod或容器的日志。
  • kubectl exec -it <pod-name> -- /bin/sh: 进入Pod内的容器进行调试。
  • kubectl apply -f <file.yaml> / kubectl delete -f <file.yaml>: 应用或删除配置。
  • kubectl cordon/uncordon/drain <node-name>: 标记节点不可调度、恢复调度、安全驱逐节点上的Pod。

总结

通过本指南,我们完成了一个从零到一的Kubernetes集群搭建之旅。我们从环境准备、核心概念入手,利用kubeadm工具快速搭建了一个基础集群,并部署了示例应用。更重要的是,我们超越了简单的搭建,探讨了如何将数据库优化的思维融入云原生环境,以及TypeScript应用在Kubernetes中的部署模式。最后,我们展望了生产环境所需的高可用、安全、监控等进阶主题。

Kubernetes的学习曲线虽然陡峭,但其带来的自动化、弹性和可移植性收益是巨大的。建议读者在掌握本指南内容后,继续深入探索Helm包管理、Operator模式、服务网格(如Istio)等高级主题,并始终在测试环境中充分验证后再应用于生产。记住,扎实的Linux系统管理功底是玩转Kubernetes的坚实后盾。祝你在这条云原生道路上越走越远!

微易网络

技术作者

2026年3月4日
2 次阅读

文章分类

开发教程

需要技术支持?

专业团队为您提供一站式软件开发服务

相关推荐

您可能还对这些文章感兴趣

Windows Server教程实战项目开发教程
开发教程

Windows Server教程实战项目开发教程

这篇文章讲的是Windows Server上做项目开发的那些事儿,特别分享了用Nginx和Java Spring框架组合的实战经验。作者是个IT老手,用亲身经历告诉你,怎么避免在服务器部署时翻车。文章从为啥选Windows Server讲起,还提到帮企业节省30%部署时间的实战方法,适合被部署问题困扰的朋友看看。

2026/4/30
负载均衡教程项目实战案例分析
开发教程

负载均衡教程项目实战案例分析

这篇文章讲了电商老板老张的网站因流量高峰崩溃的真实案例,分享了负载均衡如何解决服务器卡顿问题。文章用腾讯云域名解析的"加权轮询"模式为例,说明怎么把流量分散到多台服务器上,帮在线教育客户稳住了晚高峰。读起来就像听行内老手聊天,轻松搞懂负载均衡其实没那么难。

2026/4/30
ESLint教程项目实战案例分析
开发教程

ESLint教程项目实战案例分析

这篇文章讲的是一个团队用 Ant Design、Node.js 和 Docker 做项目时,因为代码质量没把控好,差点翻车的真实经历。作者用朋友电商平台上线出bug的例子,点出代码规范是很多团队的隐形炸弹。然后分享他们怎么用 ESLint 这个工具,一步步把乱糟糟的代码管起来,避免类似问题。说白了,就是教您怎么用个小工具,省心省力地保项目平安。

2026/4/30
AWS教程项目实战案例分析
开发教程

AWS教程项目实战案例分析

这篇文章分享了作者团队做AWS项目迁移的真实经历,从选AWS的理由到踩过的坑都讲得很实在。文章重点说了用EC2加S3的方案把Vue.js前端和CentOS后端整合到云上,结果页面加载速度提升了40%。如果您也在考虑上云或者做技术迁移,这些实战经验能帮您少走不少弯路。

2026/4/30

需要专业的软件开发服务?

郑州微易网络科技有限公司,15+年开发经验,为您提供专业的小程序开发、网站建设、软件定制服务

技术支持:186-8889-0335 | 邮箱:hicpu@me.com