logo

轻量级Kubernetes:k3s高效部署Nginx实践指南

作者:php是最好的2025.10.10 15:45浏览量:12

简介:本文详细介绍了如何使用轻量级Kubernetes发行版k3s部署Nginx,涵盖k3s安装、Nginx镜像准备、YAML配置编写、部署与验证等步骤,适合开发者和企业用户参考。

一、引言:为什么选择k3s部署Nginx?

云计算和容器化技术快速发展的今天,Kubernetes已成为容器编排的事实标准。然而,传统Kubernetes(如kubeadm部署的版本)对资源要求较高,尤其在边缘计算或资源受限的环境中显得笨重。这时,k3s作为一款轻量级Kubernetes发行版,凭借其低资源消耗、快速部署和简单运维的特点,成为理想选择。

而Nginx作为一款高性能的Web服务器和反向代理,广泛应用于负载均衡、静态资源服务等场景。将Nginx部署在k3s上,既能享受Kubernetes的自动化管理能力,又能避免资源浪费。本文将详细介绍如何在k3s上高效部署Nginx,适合开发者和企业用户参考。

二、k3s简介:轻量级Kubernetes的优势

1. k3s的核心特性

k3s由Rancher Labs(现被SUSE收购)开发,专为资源受限环境设计。其核心优势包括:

  • 轻量级:二进制包仅约100MB,内存占用低(单节点约50-100MB)。
  • 单二进制文件:集成所有Kubernetes组件(如etcd、kubelet、API Server等),无需额外依赖。
  • 支持ARM架构:兼容树莓派等ARM设备,适合边缘计算。
  • 简化安装:一条命令即可完成集群部署。

2. 适用场景

  • 边缘计算:如工业物联网、零售门店等资源受限环境。
  • 开发和测试:快速搭建本地Kubernetes环境。
  • CI/CD流水线:作为临时环境运行测试。

三、部署前准备:环境与工具

1. 硬件要求

  • 单节点部署:至少1GB内存(推荐2GB),1核CPU。
  • 多节点集群:根据负载调整,Nginx本身资源消耗低。

2. 软件要求

  • 操作系统:Linux(支持Ubuntu、CentOS等主流发行版)。
  • 网络:节点间需互通,开放端口6443(Kubernetes API)、10250(kubelet)等。

3. 工具准备

  • kubectl:Kubernetes命令行工具,用于管理集群。
  • Docker/containerd:k3s默认使用containerd作为容器运行时,但支持Docker。
  • 文本编辑器:如Vim、VS Code,用于编写YAML文件。

四、k3s安装与配置

1. 单节点安装(All-in-One)

  1. # 下载并安装k3s(自动包含kubectl配置)
  2. curl -sfL https://get.k3s.io | sh -
  3. # 验证安装
  4. sudo k3s kubectl get nodes

输出应显示节点状态为Ready

2. 多节点集群安装

  • 主节点:添加--tls-san参数指定外部IP或域名
    1. curl -sfL https://get.k3s.io | sh -s - --tls-san <EXTERNAL_IP>
  • 工作节点:从主节点获取token后加入。
    1. curl -sfL https://get.k3s.io | K3S_URL=https://<MASTER_IP>:6443 K3S_TOKEN=<TOKEN> sh -

3. 配置kubectl

k3s安装后会自动生成/etc/rancher/k3s/k3s.yaml配置文件。将其复制到本地并修改服务器地址:

  1. mkdir -p ~/.kube
  2. sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
  3. sed -i 's/127.0.0.1/<MASTER_IP>/g' ~/.kube/config

五、Nginx部署步骤

1. 准备Nginx镜像

  • 官方镜像:直接使用nginx:latest
  • 自定义镜像:如需修改配置,可构建Dockerfile:
    1. FROM nginx:latest
    2. COPY nginx.conf /etc/nginx/nginx.conf
    构建并推送至镜像仓库(如Docker Hub或私有仓库)。

2. 编写Deployment YAML

创建nginx-deployment.yaml

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: nginx-deployment
  5. spec:
  6. replicas: 2
  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:latest
  18. ports:
  19. - containerPort: 80
  • replicas:指定副本数。
  • selectorlabels:用于匹配Pod。

3. 编写Service YAML

创建nginx-service.yaml

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: nginx-service
  5. spec:
  6. selector:
  7. app: nginx
  8. ports:
  9. - protocol: TCP
  10. port: 80
  11. targetPort: 80
  12. type: LoadBalancer # 或NodePort(根据需求)
  • LoadBalancer:在支持云提供商的环境中暴露外部IP。
  • NodePort:手动指定节点端口访问。

4. 部署Nginx

  1. # 创建Deployment和Service
  2. kubectl apply -f nginx-deployment.yaml
  3. kubectl apply -f nginx-service.yaml
  4. # 验证状态
  5. kubectl get pods
  6. kubectl get svc

输出应显示Pod状态为Running,Service有外部IP或节点端口。

六、验证与测试

1. 访问Nginx

  • LoadBalancer:通过<EXTERNAL_IP>访问。
  • NodePort:通过<NODE_IP>:<NODE_PORT>访问。

2. 扩展与更新

  • 水平扩展:修改replicas后执行kubectl apply
  • 滚动更新:修改镜像版本后重新部署。

3. 日志与调试

  1. # 查看Pod日志
  2. kubectl logs <POD_NAME>
  3. # 进入容器
  4. kubectl exec -it <POD_NAME> -- /bin/bash

七、进阶配置

1. 使用ConfigMap管理配置

创建nginx-configmap.yaml

  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4. name: nginx-config
  5. data:
  6. nginx.conf: |
  7. events {}
  8. http {
  9. server {
  10. listen 80;
  11. location / {
  12. return 200 "Hello from k3s!\n";
  13. }
  14. }
  15. }

在Deployment中挂载:

  1. volumes:
  2. - name: nginx-config
  3. configMap:
  4. name: nginx-config
  5. volumeMounts:
  6. - name: nginx-config
  7. mountPath: /etc/nginx/nginx.conf
  8. subPath: nginx.conf

2. 使用Ingress暴露服务

安装Ingress Controller(如Traefik,k3s默认集成):

  1. apiVersion: networking.k8s.io/v1
  2. kind: Ingress
  3. metadata:
  4. name: nginx-ingress
  5. spec:
  6. rules:
  7. - host: example.com
  8. http:
  9. paths:
  10. - path: /
  11. pathType: Prefix
  12. backend:
  13. service:
  14. name: nginx-service
  15. port:
  16. number: 80

八、总结与最佳实践

1. 资源优化

  • 为Nginx分配合理的CPU/内存请求和限制。
  • 使用resources字段在Deployment中定义。

2. 高可用

  • 多节点部署k3s,启用etcd高可用模式。
  • 使用k3s --cluster-init初始化集群。

3. 监控与日志

  • 集成Prometheus和Grafana监控。
  • 使用EFK(Elasticsearch-Fluentd-Kibana)收集日志。

通过k3s部署Nginx,用户能够在资源受限的环境中高效运行容器化应用,同时享受Kubernetes的自动化管理能力。无论是边缘计算还是本地开发,k3s+Nginx的组合都提供了灵活、可靠的解决方案。

相关文章推荐

发表评论

活动