零成本!用Typhoon在AWS极速部署Fedora CoreOS Kubernetes集群
你还在为Kubernetes集群部署的复杂性和成本而烦恼吗?本文将带你一步到位,使用Poseidon/Typhoon在AWS上快速部署一个稳定、安全且免费的Fedora CoreOS Kubernetes集群。读完本文,你将掌握从环境准备到集群验证的全流程,以及后续的维护和优化技巧,让你的Kubernetes之旅事半功倍。
为什么选择Typhoon与Fedora CoreOS?
Typhoon是一个极简且免费的Kubernetes发行版,它提供了上游Kubernetes的稳定基础,结合声明式基础设施和配置,既尊重用户自由又保护隐私,非常适合实验室、数据中心和云环境使用。而Fedora CoreOS作为一款专为容器优化的操作系统,具有自动更新、轻量级和安全性高等特点,是构建Kubernetes集群的理想选择。
Typhoon的核心优势
- 极简稳定:基于上游Kubernetes,提供稳定的集群基础
- 声明式配置:使用Terraform管理基础设施,配置即代码
- 完全免费:自由使用,无需支付许可费用
- 安全可靠:内置RBAC、网络策略和SELinux强制模式
架构概览
环境准备
前置要求
- AWS账号及IAM凭证
- AWS Route53 DNS区域(已注册域名或委托子域名)
- Terraform v0.13.0+
- SSH密钥对
安装Terraform
# 下载Terraform(以Linux为例)
wget https://releases.hashicorp.com/terraform/1.0.0/terraform_1.0.0_linux_amd64.zip
unzip terraform_1.0.0_linux_amd64.zip
sudo mv terraform /usr/local/bin/
# 验证安装
terraform version
# 应输出:Terraform v1.0.0
部署步骤
1. 配置AWS凭证
创建AWS凭证文件~/.aws/credentials:
[default]
aws_access_key_id = YOUR_ACCESS_KEY
aws_secret_access_key = YOUR_SECRET_KEY
2. 创建Terraform配置
创建工作目录并初始化:
mkdir -p infra/clusters/aws
cd infra/clusters/aws
创建providers.tf文件:
provider "aws" {
region = "eu-central-1"
shared_credentials_file = "/home/user/.config/aws/credentials"
}
provider "ct" {}
terraform {
required_providers {
ct = {
source = "poseidon/ct"
version = "0.13.0"
}
aws = {
source = "hashicorp/aws"
version = "4.61.0"
}
}
}
创建main.tf文件,定义Kubernetes集群:
module "tempest" {
source = "git::https://gitcode.com/gh_mirrors/typ/typhoon//aws/fedora-coreos/kubernetes?ref=v1.33.3"
# AWS
cluster_name = "tempest"
dns_zone = "aws.example.com"
dns_zone_id = "Z3PAABBCFAKEC0"
# 实例配置
worker_count = 2
worker_type = "t3.small"
# 认证配置
ssh_authorized_key = "ssh-ed25519 AAAAB3Nz..."
}
# 输出kubeconfig
resource "local_file" "kubeconfig" {
content = module.tempest.kubeconfig-admin
filename = "/home/user/.kube/configs/tempest-config"
file_permission = "0600"
}
3. 初始化Terraform
terraform init
4. 部署集群
# 检查执行计划
terraform plan
# 应用配置,创建集群
terraform apply
部署过程大约需要4-8分钟,Terraform将创建以下资源:
- VPC、子网和互联网网关
- 安全组规则
- 控制器节点和工作节点
- 网络负载均衡器
- etcd集群和Kubernetes控制平面组件
网络与安全配置详解
网络架构
Typhoon在AWS上的网络架构采用VPC、公有子网和网络负载均衡器,确保高可用性和可扩展性。
关键网络参数
| 参数 | 描述 | 默认值 |
|---|---|---|
| host_cidr | EC2实例IP地址范围 | 10.0.0.0/16 |
| pod_cidr | Kubernetes Pod IP地址范围 | 10.20.0.0/14 |
| service_cidr | Kubernetes Service IP地址范围 | 10.3.0.0/16 |
| networking | 网络插件选择 | cilium |
安全组规则
控制器节点安全组主要规则:
| 协议 | 端口 | 来源 | 描述 |
|---|---|---|---|
| TCP | 22 | 0.0.0.0/0 | SSH访问 |
| TCP | 6443 | 0.0.0.0/0 | Kubernetes API |
| TCP | 2379-2380 | 自身 | etcd通信 |
| UDP | 8472 | 自身和工作节点 | VXLAN网络 |
工作节点安全组主要规则:
| 协议 | 端口 | 来源 | 描述 |
|---|---|---|---|
| TCP | 22 | 0.0.0.0/0 | SSH访问 |
| TCP | 80 | 0.0.0.0/0 | HTTP ingress |
| TCP | 443 | 0.0.0.0/0 | HTTPS ingress |
| UDP | 8472 | 自身和控制器节点 | VXLAN网络 |
集群验证
配置kubectl
export KUBECONFIG=/home/user/.kube/configs/tempest-config
检查节点状态
kubectl get nodes
预期输出:
NAME STATUS ROLES AGE VERSION
ip-10-0-3-155 Ready <none> 10m v1.33.3
ip-10-0-26-65 Ready <none> 10m v1.33.3
ip-10-0-41-21 Ready <none> 10m v1.33.3
检查系统组件
kubectl get pods -n kube-system
预期输出应包含运行中的coredns、cilium或flannel、kube-proxy等Pod。
检查集群信息
kubectl cluster-info
预期输出:
Kubernetes control plane is running at https://tempest.aws.example.com:6443
CoreDNS is running at https://tempest.aws.example.com:6443/api/v1/namespaces/kube-system/services/coredns:dns/proxy
高级配置选项
自定义工作节点
可以通过修改Terraform变量来自定义工作节点配置:
module "tempest" {
# ... 其他配置 ...
# 工作节点数量
worker_count = 3
# 实例类型
worker_type = "t3.medium"
# 磁盘大小
worker_disk_size = 50
# 使用Spot实例节省成本
worker_price = "0.03"
# 添加节点标签
worker_node_labels = ["environment=production", "workload=app"]
}
网络插件选择
Typhoon支持Cilium和Flannel两种网络插件,默认使用Cilium:
module "tempest" {
# ... 其他配置 ...
# 切换到Flannel网络
networking = "flannel"
}
Cilium vs Flannel对比:
| 特性 | Cilium | Flannel |
|---|---|---|
| 网络策略 | 支持 | 不支持 |
| 负载均衡 | 内置 | 不支持 |
| 监控能力 | 丰富 | 基础 |
| 资源占用 | 较高 | 较低 |
| 学习曲线 | 较陡 | 平缓 |
添加Butane配置片段
通过Butane配置片段可以自定义节点系统配置:
module "tempest" {
# ... 其他配置 ...
# 控制器节点配置片段
controller_snippets = [
file("butane/controller-custom.yaml")
]
# 工作节点配置片段
worker_snippets = [
file("butane/worker-custom.yaml")
]
}
示例butane/worker-custom.yaml:
variant: fcos
version: 1.5.0
storage:
files:
- path: /etc/sysctl.d/custom.conf
contents:
inline: |
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
集群维护
升级集群版本
Typhoon推荐使用蓝绿部署策略升级集群:
- 部署新集群(使用新版本Typhoon模块)
- 迁移工作负载
- 验证新集群
- 下线旧集群
# 新版本集群配置
module "tempest_v2" {
source = "git::https://gitcode.com/gh_mirrors/typ/typhoon//aws/fedora-coreos/kubernetes?ref=v1.34.0"
# ... 其他配置 ...
}
扩展工作节点
通过修改worker_count变量并应用配置来扩展工作节点:
module "tempest" {
# ... 其他配置 ...
# 增加工作节点数量
worker_count = 4
}
应用变更:
terraform apply
AWS会自动执行实例刷新,逐步替换工作节点。
备份etcd数据
定期备份etcd数据是确保集群可恢复性的重要措施:
# 获取etcd证书
sudo cp /etc/kubernetes/pki/etcd/ca.crt /tmp/
sudo cp /etc/kubernetes/pki/apiserver-etcd-client.crt /tmp/
sudo cp /etc/kubernetes/pki/apiserver-etcd-client.key /tmp/
# 执行备份
sudo ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
--cacert=/tmp/ca.crt \
--cert=/tmp/apiserver-etcd-client.crt \
--key=/tmp/apiserver-etcd-client.key \
snapshot save /backup/etcd-snapshot-$(date +%Y%m%d).db
常见问题解决
节点无法加入集群
检查以下几点:
- 安全组规则是否允许节点间通信
- 网络负载均衡器是否正常工作
- 节点是否有权限访问AWS API
etcd集群健康检查
kubectl -n kube-system exec -it etcd-<controller-node> -- etcdctl \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
endpoint health
增加SSH调试日志
如果遇到SSH相关问题,可以增加调试日志:
TF_LOG=DEBUG terraform apply
总结与展望
通过本文,你已经掌握了使用Typhoon在AWS上部署Fedora CoreOS Kubernetes集群的完整流程。Typhoon提供了一个稳定、安全且易于维护的Kubernetes发行版,结合Fedora CoreOS的自动更新特性,可以大大减少集群的日常维护工作量。
未来,你可以进一步探索:
- 部署Ingress控制器以暴露应用服务
- 集成Prometheus和Grafana进行监控
- 配置自动扩缩容以应对负载变化
- 实现CI/CD流水线自动化部署应用
希望本文对你的Kubernetes之旅有所帮助!如果你有任何问题或建议,欢迎在评论区留言讨论。别忘了点赞、收藏并关注我们,获取更多Kubernetes相关教程和最佳实践。
下期预告:使用Typhoon在GCP上部署高可用Kubernetes集群
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



