在线咨询
开发教程

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

微易网络
2026年3月4日 19:59
0 次阅读
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日
0 次阅读

文章分类

开发教程

需要技术支持?

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

相关推荐

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

Apache教程零基础学习路线图
开发教程

Apache教程零基础学习路线图

这篇文章就像一位经验丰富的朋友在聊天,专门写给那些觉得Apache很复杂、不知从何下手的Web开发新手。它分享了一张清晰的零基础学习路线图,承诺不讲枯燥理论,而是带您一步步从“搞懂Apache是什么”开始,避免一上来就盲目安装的常见坑。文章强调,按这个路线踏实学,不仅能真正用起Apache,还能为后续学习SQL、Cordova等打下坚实基础。

2026/3/16
JavaScript ES6语法教程最佳实践与技巧
开发教程

JavaScript ES6语法教程最佳实践与技巧

这篇文章讲的是怎么把ES6那些好用的新语法,真正用到咱们的实际项目里。作者就像个经验丰富的老同事在聊天,特别懂咱们的痛点:看着别人用箭头函数、Promise写得那么溜,自己搞Vue.js或者云原生项目时,代码总感觉不够“现代”。文章不扯理论,直接分享最佳实践和技巧,比如怎么用Promise和Async/Await告别烦人的“回调地狱”,让您的代码更简洁高效,看完就能立刻在项目里用起来。

2026/3/16
Material UI教程学习资源推荐大全
开发教程

Material UI教程学习资源推荐大全

这篇文章讲了,很多朋友学Material UI时,光看官方文档容易懵,不知道怎么灵活定制样式。它就像一份贴心的“避坑指南”,专门为您整理了一套从入门到精通的实战学习资源。文章不仅推荐了比官方文档更易懂的教程,还会分享如何结合像Less这样的工具来轻松管理样式,目标就是帮您把Material UI真正用顺手,变成开发中的得力工具。

2026/3/16
SQL语法教程项目实战案例分析
开发教程

SQL语法教程项目实战案例分析

这篇文章分享了我们团队打造一款交互式SQL语法教程的实战经验。我们觉得传统教程太理论,用户学完就忘,所以决心做一个能让用户直接在浏览器里动手练习、立刻看到结果的工具。文章会以这个项目为例,聊聊我们如何用TypeScript和Babel这些现代前端技术,把枯燥的语法学习变成有趣的互动体验,真正让技术服务于用户。

2026/3/16

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

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

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