跳到主要内容

使用k3s部署一个服务,并最快发布到公网上

1. 前言

在学习一个东西的时候,我总是喜欢先跑通一个最小化的demo,这样就可以根据这个demo不断往上叠加新的知识,这也是“成功才是成功之母”的一种体现。

而这篇博客也是我在学习kubernetes时最小化demo的一个例子。选择了k3s,能在轻量级的服务器上运行,选择cloudflare,不用担心ssl证书配置的繁琐。

后面的内容基于以下前提条件实现:

  • 一台1H1G以上的香港云服务器
    • 服务器系统选择了debian
Akile Aff | [HKLite-One CPU 1核 | 内存 1024 M 硬盘 5 GB | 带宽 5000M 1000G/月 | 超出限速共享10Mbps 重置流量 ¥7.00 IPv4 1个 | IPv6 1个 ¥9.99/月]

[HKLite-One CPU 1核 | 内存 1024 M 硬盘 5 GB | 带宽 5000M 1000G/月 | 超出限速共享10Mbps 重置流量 ¥7.00 IPv4 1个 | IPv6 1个 ¥9.99/月]

下单链接:https://akile.io/shop/server?type=traffic&areaId=3&nodeId=1&planId=819&aff_code=c29f0219-83cb-4abf-88b2-be17da2c1987

  • Cloudflare账号 + 一个域名
    • 域名使用了cloudflare做DNS解析

接着,让我们开始吧

2. 安装k3s

为什么选择k3s?

因为这只是一个最小化的demo,所以一条命令直接搞定!

curl -sfL https://get.k3s.io |  sh -s - server

执行完成之后,使用systemctl status k3s检查一下k3s状态

显示Running则表示服务正常

执行过程中出错想要重新安装怎么办?

/usr/local/bin/k3s-uninstall.sh 执行这个shell则能直接卸载。

这个/usr/local/bin/k3s-uninstall.sh/usr/local/bin/k3s-killall.sh也是在搞不定各种问题的时候可以让你直接卸载重来,

3. 在k3s中部署一个简单的HTTP服务

3.1 创建一个测试Deployment

新建文件 test-deployment.yaml,内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:
name: http-test
spec:
replicas: 1
selector:
matchLabels:
app: http-test
template:
metadata:
labels:
app: http-test
spec:
containers:
- name: nginx
image: nginx:alpine
ports:
- containerPort: 80

3.2 创建Service暴露端口

新建文件 test-service.yaml,内容如下:

apiVersion: v1
kind: Service
metadata:
name: http-test-service
spec:
selector:
app: http-test
ports:
- protocol: TCP
port: 80
targetPort: 80

3.3 应用配置

kubectl apply -f test-deployment.yaml
kubectl apply -f test-service.yaml

检查一下服务是否部署成功,显示running状态则为正常

kubectl get pods

3.4 配置Ingress路由(使用Traefik)

k3s默认安装了Traefik作为Ingress Controller,直接创建Ingress资源即可。

3.4.1 创建Ingress规则

新建文件 test-ingress.yaml,内容如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: http-test-ingress
spec:
rules:
- host: your-domain.com # 替换为你的域名(如 test.example.com)
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: http-test-service
port:
number: 80

3.5 应用Ingress

kubectl apply -f test-ingress.yaml

测试服务此时就已经部署好了,但是你通过ip进行访问肯定看到的还是404 page not found

别担心,接下来要在cloudflare上配置DNS解析才能访问

4. Cloudflare配置DNS解析

增加一条DNS解析

等个30s左右,再通过域名访问,就会看到nginx的界面了