Sealos和Kubernetes本地安装记录
目的
本记录详细说明了如何在本地环境中安装Sealos和Kubernetes。我们将提供一个简洁实用的安装流程,以确保成功搭建Kubernetes环境。
环境要求
- Ubuntu 22.04 LTS 或更高版本
- 至少4GB RAM和2个CPU核心
- 至少40GB可用磁盘空间
- 能够访问网络以下载组件
- root权限或sudo权限
系统准备
1. 更新系统包
sudo apt update && sudo apt upgrade -y |
2. 安装必要工具
sudo apt install -y curl wget apt-transport-https ca-certificates |
安装Sealos
1. 安装依赖
sudo apt install -y uidmap fuse-overlayfs |
2. 下载并安装Sealos
# 方式1: 从官方源下载 |
3. 验证安装
sealos version |
如果成功,应该能看到Sealos的版本信息。
安装Kubernetes
1. 配置系统参数
由于Sealos运行Kubernetes需要纯净环境,我们需要确保系统配置正确:
# 关闭交换分区(Kubernetes要求) |
2. 安装Containerd(如果系统没有默认安装)
# 安装containerd |
3. 使用Sealos部署单节点Kubernetes集群
获取本机IP地址(这将是控制节点的IP):
MASTER_IP=$(hostname -I | awk '{print $1}') |
使用Sealos创建单节点集群:
# 运行Kubernetes集群 |
这将:
- 拉取并安装Kubernetes v1.28.15
- 安装Calico网络插件
- 创建单节点集群
配置kubectl
1. 配置访问凭证
mkdir -p $HOME/.kube |
2. 验证集群状态
kubectl get nodes |
如果一切正常,您应该看到类似以下输出:
NAME STATUS ROLES AGE VERSION |
3. 验证所有系统Pod运行状态
kubectl get pods -A |
配置单节点集群
在单节点集群中,我们需要允许Pod在控制平面上运行:
kubectl taint nodes --all node-role.kubernetes.io/control-plane- |
故障排除
如果Sealos安装失败
如果Sealos无法正常部署Kubernetes,您可以使用kubeadm手动部署:
# 1. 安装kubeadm、kubelet和kubectl |
如果遇到容器运行时错误
如果出现与containerd相关的错误,尝试重新启动服务:
sudo systemctl restart containerd |
验证安装
1. 检查集群信息
kubectl cluster-info |
2. 创建测试Pod
kubectl create deployment nginx --image=nginx |
3. 检查集群组件状态
kubectl get componentstatuses |
清理和重置
如果需要重新开始,可以使用以下命令清理环境:
# 使用Sealos重置集群 |
过程中的问题与解决
在实际安装过程中,我遇到了以下几个关键问题,记录如下:
1. Sealos环境冲突问题
在使用sudo sealos run labring/kubernetes:v1.28.15 labring/calico:v3.26.2 --masters 192.168.1.18命令时,遇到错误:
Error: failed to run checker: containerd is installed on 192.168.1.18:22 please uninstall it first |
解决方案:Sealos要求纯净环境,不允许存在预安装的containerd。我执行了以下命令:
sudo systemctl stop containerd && sudo systemctl disable containerd |
2. 镜像仓库访问问题
在尝试使用Sealos安装时,遇到了网络插件镜像无法拉取的问题:
Error: error parsing image name "//labring/calico:v3.26.2": reading manifest v3.26.2 in docker.io/labring/calico: manifest unknown |
解决方案:切换到使用kubeadm手动安装,这是备选方案。
3. GPG密钥问题
在使用kubeadm安装过程中,执行添加Kubernetes GPG密钥的命令时遇到问题:
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg |
出现 gpg: cannot open '/dev/tty': 没有那个设备或地址 错误。
解决方案:改用apt-key命令:
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo apt-key add - |
4. 容器运行时重新配置
由于之前移除了containerd,Kubernetes无法启动,因为CRI(容器运行时接口)不可用。
解决方案:下载并安装containerd二进制文件:
wget https://github.com/containerd/containerd/releases/download/v1.7.20/containerd-1.7.20-linux-amd64.tar.gz |
然后创建systemd服务文件并启动containerd。
5. 节点状态问题
在kubeadm初始化集群后,节点显示为NotReady状态,而不是预期的Ready。
解决方案:
- 安装Flannel网络插件解决CNI问题
- 移除节点的污点以允许Pod在单节点集群上调度:
kubectl taint nodes --all node-role.kubernetes.io/control-plane- |
- 等待一段时间使所有组件就绪
总结
通过这次安装实践,我成功搭建了本地的Kubernetes环境,主要收获如下:
- Sealos和Kubernetes环境:成功安装了Sealos CLI工具和单节点Kubernetes集群
- kubectl配置:正确配置了kubectl命令行工具,可以正常管理集群
- 网络插件:成功部署了Flannel网络插件,使Pod间可以正常通信
- 问题解决经验:在过程中解决了多个典型问题,包括环境冲突、容器运行时配置和节点状态问题
经验教训
- 环境准备的重要性:在部署Kubernetes前,确保系统环境符合要求至关重要
- 备选方案的准备:当首选方案(Sealos)遇到问题时,kubeadm是一个可靠的备选方案
- 网络插件必不可少:集群初始化后必须安装CNI网络插件,否则Pod无法正常通信
- 单节点集群的特殊配置:需要移除master节点的污点才能在单节点上调度Pod
这次安装过程虽然遇到了一些挑战,但也提供了宝贵的实践经验,对理解和部署Kubernetes环境有很大帮助。
Docker与Containerd的共存关系
在安装过程中,我发现了一个有趣的现象:系统上同时存在Docker容器和服务以及Kubernetes集群。
共存机制
实际上,Docker和Kubernetes可以共存,因为它们都使用了containerd作为容器运行时:
- 双重命名空间:containerd支持多客户端,Docker使用’moby’命名空间,而Kubernetes使用’k8s.io’命名空间
- 共享容器运行时:Docker和Kubernetes共享同一个containerd实例,但通过不同的命名空间隔离
- 进程结构:Docker daemon通过
--containerd=/run/containerd/containerd.sock连接到containerd,而Kubernetes的kubelet也连接到同一个containerd
注意事项
虽然技术上可行,但这种配置在生产环境中不推荐,因为:
- 容器资源竞争
- 网络和存储配置可能冲突
- 安全性和隔离性可能受到影响
运维命令
kubectl运维命令
kubectl的配置文件通常存储在$HOME/.kube/config,这是访问Kubernetes集群的凭证文件。
常用运维命令:
kubectl get nodes- 查看集群节点状态kubectl get pods -A- 查看所有命名空间中的Podkubectl get services -A- 查看所有服务kubectl get deployments -A- 查看所有部署kubectl describe pod <pod-name> -n <namespace>- 查看Pod详细信息kubectl logs <pod-name> -n <namespace>- 查看Pod日志kubectl apply -f <file.yaml>- 部署资源kubectl delete -f <file.yaml>- 删除资源kubectl scale deployment <name> --replicas=<number>- 扩缩容部署kubectl cluster-info- 查看集群信息kubectl top nodes/pods- 查看资源使用情况
Sealos运维命令
虽然我们最终没有使用Sealos完成安装,但其基本运维命令包括:
sealos run <image>- 部署集群sealos destroy- 销毁集群sealos reset- 重置集群sealos version- 查看版本sealos status- 查看集群状态sealos exec <command>- 在集群上执行命令
这些命令提供了管理Kubernetes集群的便捷方式,通过容器镜像封装了Kubernetes组件。