【K3s】在 AWS EC2 上运行生产 K3s 集群

2021-09-10T13:11:33+08:00 | 5分钟阅读 | 更新于 2021-09-10T13:11:33+08:00

Macro Zhao

【K3s】在 AWS EC2 上运行生产 K3s 集群

推荐超级课程:

本文将介绍如何在 AWS EC2 上运行 K3s。您将创建一个 EC2 实例并在 AWS 上运行单节点 K3s 集群。

自托管的 K3s 允许您在裸金属上运行 Kubernetes,并应用较小、低资源工作负载的原则。哦,你还可以控制你的控制平面。这有点像逃离托管 Kubernetes 的黑匣子。K3s 让一个小公司开发产品的服务器成本更合理。

设置 K3s AWS EC2 实例

EC2 就像是托管在云端的典型计算机。第一步是选择您擅长使用的操作系统发行版。本演示使用 Ubuntu 机器。按照以下步骤操作:

使用 Ubuntu 创建您的实例。记得始终检查是否使用了符合免费套餐资格的服务;在这种情况下,t2.microt3.micro 服务器类型将很好:

Complete Guide To Running Production K3s Cluster on AWS EC2

为了通过安全的 SSH 客户端访问实例,请创建一个 SSH 密钥并将其分配给这个 EC2:

Complete Guide To Running Production K3s Cluster on AWS EC2

您计划将这个 EC2 暴露给公众,并主要使用域名来访问运行在 AWS 上的 K3s 集群吗?设置您的网络,以便集群可以允许来自互联网的 HTTPHTTPS 流量:

Complete Guide To Running Production K3s Cluster on AWS EC2

如果您准备好了这些设置,启动您的实例。

创建一个永久 K3S AWS EC2 IP 地址

您的 EC2 将暴露给互联网。如果它重新启动,将会被分配一个新的 IP 地址。您不想发生这种情况。流量必须指向一个稳定的 IP 地址。

前往 弹性 IP

Complete Guide To Running Production K3s Cluster on AWS EC2

按照以下步骤 配置 Elastic IP 地址

Complete Guide To Running Production K3s Cluster on AWS EC2

您无需进一步编辑这些设置。点击 Allocate 继续创建 Elastic IP 地址。

您的实例将被分配到这个 IP。但您需要 选择这个 IP,在 操作(Action) 中选择 关联 Elastic IP 地址

Complete Guide To Running Production K3s Cluster on AWS EC2

您将选择您的实例和私有 IP 地址最后 关联 这个 IP。

Complete Guide To Running Production K3s Cluster on AWS EC2

实例已经运行并准备配置 K3s AWS EC2:

Complete Guide To Running Production K3s Cluster on AWS EC2

使用 SSH 访问 AWS EC2

要在 AWS EC2 上设置 K3s,您必须在终端中访问 EC2 实例以运行设置 K3s 的命令。

一种方法是使用通过 FTP 生成的密钥对来使用 SSH 访问实例。如果您知道如何使用这个选项,请继续使用。

然而,为了简化操作,您可以使用在线 AWS SSH 客户端,如下:

  • 选择您的实例并导航至 连接

Complete Guide To Running Production K3s Cluster on AWS EC2

  • 选择使用 EC2 实例连接:

Complete Guide To Running Production K3s Cluster on AWS EC2

  • 浏览器将启动一个终端,您可以在其中运行命令:

Complete Guide To Running Production K3s Cluster on AWS EC2

在 AWS EC2 上安装 K3s

使用单个命令即可快速启动 K3s。以下是在 K3s 文档中提供的基本安装命令 K3s

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

Complete Guide To Running Production K3s Cluster on AWS EC2

现在运行以下命令检查 K3s 服务器是否正在运行:

kubectl get nodes
# 或者
kubectl cluster-info

Complete Guide To Running Production K3s Cluster on AWS EC2

如果您遇到错误,例如:

Complete Guide To Running Production K3s Cluster on AWS EC2

前往本指南并学习 解决 WARN\[0003\] 无法读取 /etc/rancher/k3s/k3s.yaml 错误

顺便说一句,以下命令是解决此错误的最佳命令:

curl -sfL https://get.k3s.io | sh -s - --write-kubeconfig-mode 644

关于 k3s AWS EC2 的一个快速注释:如果您从生产目的运行此设置,我已包含了以下命令。我添加了一个 --tls-san 作为配置值 来为 K3s 安装添加主机名或 IPv4/IPv6 地址。这不是必须使用的设置。但是,如果您想使用 TLS 证书,您需要使用您的 IPv4 地址作为 your_server_ip 值来安装 K3s 在以下命令中:

curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--tls-san your_server_ip" sh -

在 AWS EC2 上运行 K3s Kubernetes 集群

就安装 K3s 所需的来说,这就是您所需要的。现在让我们在此服务器上运行一个应用程序。

为了简化操作,我创建了一个简单的静态网页应用程序,使用 React 并将其制作为 DockerHub 中的镜像。

这是我如何创建一个经过 dockerize 处理后的 DockerHub 镜像。如果要跟随 React,请确保您的本地计算机已设置 Node.js

首先,创建您的应用程序。使用以下命令安装应用程序:

npx create-react-app my-react-app

现在将目录更改为创建的应用程序目录:

cd my-react-app

我将继续编辑这里的一个文件。导航至 /src/App.js 文件并添加以下一行:

<p>
    欢迎访问运行在 AWS EC2 上的 K3 Kubernetes 集群
</p>

使用以下命令启动 React:

npm start

在浏览器上使用 http://localhost:3000/ 打开应用程序。您将在浏览器上接收到运行在 AWS EC2 上的 K3s 集群中的相同应用程序:

Complete Guide To Running Production K3s Cluster on AWS EC2

Dockerize 应用程序

现在,您必须确保有一个 Dockerfile 为您的特定应用程序构建一个镜像。

在您的 my-react-app 目录中,创建一个 Dockerfile 并添加以下指令:

FROM node:19-alpine
WORKDIR /app
COPY package.json ./
COPY package-lock.json ./
RUN npm install
COPY ./ ./
CMD ["npm", "start"]

注意:您可以创建比这个更好的 Dockerfile。这个例子是为了演示让您启动一个应用程序。因此,请为一个准备投入生产的 Dockerfile 进行优化。

K3s 在 AWS EC2 上将访问此镜像。简单来说,AWS EC2 是一项云服务。要访问您的镜像,您还必须将其托管在互联网上。DockerHub 就是这样做的好地方。

让我们构建镜像并将其存储在 DockerHub 中的存储器中:

在您的 Dockerfile 根目录中,运行以下命令:

  • 登录到 Docker Hub:
docker login

添加 DockerHub 用户名和密码。如果您没有,前往 DockerHub 创建一个帐户。

  • 使用 DockerHub 用户名构建您的镜像
docker build -t your_dockerhub_username/my-react-app .

Complete Guide To Running Production K3s Cluster on AWS EC2

  • 推送并发布镜像到 DockerHub:
docker push your_dockerhub_username/my-react-app:latest

在 AWS EC2 上创建 K3s Kubernetes 集群

为了运行此应用程序,在 AWS EC2 上创建 K3s Kubernetes 集群。

在您的 EC2 SSH 终端中,创建一个 Kubernetes 部署文件:

nano deployment.yml

并将以下 K3s 部署配置添加到这个 deployment.yml 文件中并保存:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: react-deployment
  labels:
    app: react-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: react-app
  template:
    metadata:
      labels:
        app: react-app
    spec:
      containers:
        - name: react-app
          image: your_dockerhub_username/my-react-app
          imagePullPolicy: Always
          ports:
            - containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: react-app-service
  name: react-app-service
  namespace: default
spec:
  ports:
    - name: 3000-3000
      port: 3000
      protocol: TCP
      targetPort: 3000
  selector:
    app: react-app
  sessionAffinity: None
  type: ClusterIP
status:
  loadBalancer: {}
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: react-app-ingress
  annotations:
    ingress.kubernetes.io/ssl-redirect: "false"
spec:
  rules:
    - http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: react-app-service
                port:
                  number: 3000

在这个 deployment.yml 文件中:

  • 您有将应用程序镜像运行在 image: your_dockerhub_username/my-react-app 上的部署。因此,请确保 your_dockerhub_username 反映了您的 DockerHub 用户名。
  • 将应用程序暴露在 ClusterIP 上的服务
  • Traefik 以负载均衡器的形式运行 Ingress,将流量路由到服务并暴露应用程序。

部署 K3s AWS EC2 集群

现在您已经准备好所有文件。让我们启动集群。执行以下命令:

kubectl apply -f deployment.yml

Complete Guide To Running Production K3s Cluster on AWS EC2

要确认集群正在运行,请检查其 Pod 状态:

kubectl get pods

Complete Guide To Running Production K3s Cluster on AWS EC2

如果您在这里遇到错误,例如 无法连接到服务器: net/http: TLS 握手超时。这意味着您的 AWS EC2 实例没有足够的资源。考虑使用更大的实例类型创建您的实例。但是,请记住,如果您用于测试目的,请删除它以避免额外的 AWS 费用。

Pod 正在运行。要测试此部署,打开浏览器并输入您的 EC2 弹性 IP 地址。例如,在这里,我使用的是 44.212.229.204。这将在浏览器上为我提供以下应用程序:

Complete Guide To Running Production K3s Cluster on AWS EC2

© 2011 - 2025 Macro Zhao的分享站

关于我

如遇到加载502错误,请尝试刷新😄

Hi,欢迎访问 Macro Zhao 的博客。Macro Zhao(或 Macro)是我在互联网上经常使用的名字。

我是一个热衷于技术探索和分享的IT工程师,在这里我会记录分享一些关于技术、工作和生活上的事情。

我的CSDN博客:
https://macro-zhao.blog.csdn.net/

欢迎你通过评论或者邮件与我交流。
Mail Me

推荐好玩(You'll Like)
  • AI 动·画
    • 这是一款有趣·免费的能让您画的画中的角色动起来的AI工具。
    • 支持几十种动作生成。
我的项目(My Projects)
  • 爱学习网

  • 小乙日语App

    • 这是一个帮助日语学习者学习日语的App。
      (当然初衷也是为了自用😄)
    • 界面干净,简洁,漂亮!
    • 其中包含 N1 + N2 的全部单词和语法。
    • 不需注册,更不需要订阅!完全免费!
  • 小乙日文阅读器

    • 词汇不够?照样能读日语名著!
    • 越读积累越多,积跬步致千里!
    • 哪里不会点哪里!妈妈再也不担心我读不了原版读物了!
赞助我(Sponsor Me)

如果你喜欢我的作品或者发现它们对你有所帮助,可以考虑给我买一杯咖啡 ☕️。这将激励我在未来创作和分享更多的项目和技术。🦾

👉 请我喝一杯咖啡

If you like my works or find them helpful, please consider buying me a cup of coffee ☕️. It inspires me to create and share more projects in the future. 🦾

👉 Buy me a coffee