本地安装sealos记录


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: 从官方源下载
wget https://github.com/labring/sealos/releases/download/v5.0.0/sealos_5.0.0_linux_amd64.deb

# 安装deb包
sudo dpkg -i sealos_5.0.0_linux_amd64.deb

3. 验证安装

sealos version

如果成功,应该能看到Sealos的版本信息。

安装Kubernetes

1. 配置系统参数

由于Sealos运行Kubernetes需要纯净环境,我们需要确保系统配置正确:

# 关闭交换分区(Kubernetes要求)
sudo swapoff -a

# 永久禁用交换分区(添加到fstab注释)
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

# 启用内核模块
sudo modprobe overlay
sudo modprobe br_netfilter

# 配置内核参数
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

# 设置系统参数
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF

# 应用系统参数
sudo sysctl --system

2. 安装Containerd(如果系统没有默认安装)

# 安装containerd
sudo apt install -y containerd

# 配置containerd
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml

# 修改设置以使用systemd作为cgroup驱动
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml

# 重启containerd
sudo systemctl restart containerd
sudo systemctl enable containerd

3. 使用Sealos部署单节点Kubernetes集群

获取本机IP地址(这将是控制节点的IP):

MASTER_IP=$(hostname -I | awk '{print $1}')
echo "Master IP: $MASTER_IP"

使用Sealos创建单节点集群:

# 运行Kubernetes集群
sudo sealos run labring/kubernetes:v1.28.15 labring/calico:v3.26.2 --masters $MASTER_IP

这将:

  • 拉取并安装Kubernetes v1.28.15
  • 安装Calico网络插件
  • 创建单节点集群

配置kubectl

1. 配置访问凭证

mkdir -p $HOME/.kube
sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

2. 验证集群状态

kubectl get nodes

如果一切正常,您应该看到类似以下输出:

NAME     STATUS   ROLES           AGE   VERSION
<hostname> Ready control-plane 2m v1.28.15

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
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

# 2. 初始化集群
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=$MASTER_IP

# 3. 配置kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 4. 安装网络插件(Flannel作为示例)
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

如果遇到容器运行时错误

如果出现与containerd相关的错误,尝试重新启动服务:

sudo systemctl restart containerd
sudo systemctl restart kubelet

验证安装

1. 检查集群信息

kubectl cluster-info

2. 创建测试Pod

kubectl create deployment nginx --image=nginx
kubectl get pods

3. 检查集群组件状态

kubectl get componentstatuses

清理和重置

如果需要重新开始,可以使用以下命令清理环境:

# 使用Sealos重置集群
sudo sealos reset

# 或者使用kubeadm重置
sudo kubeadm reset

# 清理iptables规则
sudo iptables -F && sudo iptables -t nat -F && sudo iptables -t mangle -F && sudo iptables -X

过程中的问题与解决

在实际安装过程中,我遇到了以下几个关键问题,记录如下:

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
sudo apt remove containerd.io containerd -y

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
sudo tar Cxzf /usr/local 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环境,主要收获如下:

  1. Sealos和Kubernetes环境:成功安装了Sealos CLI工具和单节点Kubernetes集群
  2. kubectl配置:正确配置了kubectl命令行工具,可以正常管理集群
  3. 网络插件:成功部署了Flannel网络插件,使Pod间可以正常通信
  4. 问题解决经验:在过程中解决了多个典型问题,包括环境冲突、容器运行时配置和节点状态问题

经验教训

  1. 环境准备的重要性:在部署Kubernetes前,确保系统环境符合要求至关重要
  2. 备选方案的准备:当首选方案(Sealos)遇到问题时,kubeadm是一个可靠的备选方案
  3. 网络插件必不可少:集群初始化后必须安装CNI网络插件,否则Pod无法正常通信
  4. 单节点集群的特殊配置:需要移除master节点的污点才能在单节点上调度Pod

这次安装过程虽然遇到了一些挑战,但也提供了宝贵的实践经验,对理解和部署Kubernetes环境有很大帮助。

Docker与Containerd的共存关系

在安装过程中,我发现了一个有趣的现象:系统上同时存在Docker容器和服务以及Kubernetes集群。

共存机制

实际上,Docker和Kubernetes可以共存,因为它们都使用了containerd作为容器运行时:

  1. 双重命名空间:containerd支持多客户端,Docker使用’moby’命名空间,而Kubernetes使用’k8s.io’命名空间
  2. 共享容器运行时:Docker和Kubernetes共享同一个containerd实例,但通过不同的命名空间隔离
  3. 进程结构:Docker daemon通过--containerd=/run/containerd/containerd.sock连接到containerd,而Kubernetes的kubelet也连接到同一个containerd

注意事项

虽然技术上可行,但这种配置在生产环境中不推荐,因为:

  • 容器资源竞争
  • 网络和存储配置可能冲突
  • 安全性和隔离性可能受到影响

运维命令

kubectl运维命令

kubectl的配置文件通常存储在$HOME/.kube/config,这是访问Kubernetes集群的凭证文件。

常用运维命令:

  • kubectl get nodes - 查看集群节点状态
  • kubectl get pods -A - 查看所有命名空间中的Pod
  • kubectl 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组件。


文章作者: huhuhuhr
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 huhuhuhr !
  目录