一、说明
Sealos是一款基于Kubernetes(K8s)的云操作系统发行版,它将K8s以及常见的分布式应用如Docker、Dashboard、Ingress等进行了集成和封装,使得用户可以在不深入了解复杂的K8s底层原理的情况下,快速搭建起一个功能完备的云原生应用运行平台。Sealos具有简单易用、快速部署、高度可定制化等优点,适用于开发测试环境的快速搭建以及生产环境的稳定部署
二、 准备工作
1.服务器配置要求
- 推荐使用奇数台 Master 节点和若干 Node 节点
- 每个集群节点应该有不同的主机名,不同的ip
- 所有节点的时间需要同步
有VMware Workstation 里的VMware tools 开启时自动同主机同步
- 建议使用干净的操作系统来创建集群。不要自己装 Docker!
- 支持大多数 Linux 发行版,例如:Ubuntu、Debian、CentOS、Rocky linux。
Ubuntu 22.04.5系统
- 内核版本 :5.4 及以上
满足
2. 网络要求
- 所有节点之间网络互通
- Master 节点可以通过 SSH 免密登陆到其他节点
- 所有节点可以通过 Ping 通信
- 需要在 Kubernetes 集群的第一个 Master 节点上执行脚本,目前集群外的节点不支持集群安装;
3. 域名要求
- 需要一个域名用于访问 Sealos 及相关服务
- 如果您没有域名,可以使用
nip.io
提供的免费域名服务4. 证书
- Sealos 需要使用证书来保证通信安全,默认在您不提供证书的情况下我们会使用 cert-manager 来自动签发证书
如果您能提供证书,证书需要解析下列域名 (假设您提供的域名为:http://cloud.example.io):
*.cloud.example.io
cloud.example.io
三、初始化系统
1、安装并启动全部ubuntu 虚拟机
master:8c+8g
node1:2c+2g
node2:2c+2g
我开始就是内存小了,直接安装被系统杀死了,搞了半天才搞明白
echo "192.168.1.120 single" | tee -a /etc/hosts
2、 禁用ufw(测试方便)
#禁禁用ufw用ufw
systemctl stop ufw && systemctl disable ufw
3、SSH免密登录(在Single节点执行)
ssh-keygen -t rsa
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.101
这里给自己copy一个
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.111
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.112
4、初始化所有节点
# 所有节点执行 apt update && apt install -y conntrack ipvsadm ipset socat modprobe br_netfilter && echo "br_netfilter" | tee /etc/modules-load.d/br_netfilter.conf sysctl --system
5、安装其它
apt-get install jq
四、域名解决方案
由于没有公网域名,也不想自定义域名,选择直接使用
nip.io
提供的免费域名服务。nip.io
是一个免费的通配符 DNS 服务,它可以将动态分配的 IP 地址映射到一个固定的子域名上,特别适合用于本地开发环境。具体的工作原理为:您可以使用任何 IP 地址作为
nip.io
子域名的一部分,而nip.io
会将它解析回相应的 IP 地址。例如,如果你有一个内网 IP 地址192.168.1.10
,你可以使用192.168.1.10.nip.io
作为域名,所有向这个域名发送的请求都会被解析到192.168.1.10
这个 IP 地址上。这样就无需修改本地 hosts 文件,也不需要搭建内网 DNS 服务,直接通过这个域名就能访问内网服务了。
五、部署
1、下载一键安装脚本
# 下载install.sh
curl -sfL https://gh-proxy.com/https://github.com/labring/sealos/blob/v5.0.1/scripts/cloud/install.sh -o install.sh
wget https://github.com/labring/sealos/blob/v5.0.1/scripts/cloud/install.sh
修改install.sh 解决安装过程中无法下载docker.io的镜像的问题
execute_commands() {
[[ $k8s_installed == "y" ]] || (get_prompt "k8s_installation" && sealos apply -f $CLOUD_DIR/Clusterfile)
modify_containerd_config
command -v helm > /dev/null 2>&1 || sealos run "${image_registry}/${image_repository}/helm:v${helm_version#v:-3.14.1}"
[[ $k8s_ready == "y" ]] || (get_prompt "cilium_requirement" && sealos run "${image_registry}/${image_repository}/cilium:v${cilium_version#v:-1.15.8}" --env ExtraValues="ipam.mode=kubernetes")
wait_cluster_ready
# containerd配置用于下载docker.io
# 参考 /etc/containerd/certs.d/sealos.hub:5000/hosts.toml
echo "modify_containerd_config start"
mkdir -p /etc/containerd/certs.d/docker.io
touch /etc/containerd/certs.d/docker.io/hosts.toml
cat>/etc/containerd/certs.d/docker.io/hosts.toml<<EOF
server = "https://docker.io"
[host."https://docker.m.daocloud.io"]
capabilities = ["pull", "resolve"]
[host."https://dockerproxy.com/"]
capabilities = ["pull", "resolve"]
EOF
systemctl restart containerd
echo "modify_containerd_config end"
sealos run "${image_registry}/${image_repository}/cert-manager:v${cert_manager_version#v:-1.14.6}"
sealos run "${image_registry}/${image_repository}/openebs:v${openebs_version#v:-3.10.0}"
sealos run "${image_registry}/${image_repository}/metrics-server:v${metrics_server_version#v:-0.6.4}"
2、一键安装(单节点安装)
# 运行脚本
bash install.sh \
--image-registry=registry.cn-shanghai.aliyuncs.com \
--proxy-prefix=https://gh-proxy.com \
--cloud-version=v5.0.1 \
# --debug
单节点安装选择,
请输入 Master IP (单节点安装可输入回车跳过该步骤; 多个 Master 节点使用逗号分隔, 例: 192.168.0.1,192.168.0.2,192.168.0.3):回车就是单节点
3、删除
# 清理
sealos reset
#下面是是清除sealos reset删不掉的文件
pkill -9 kubelet
pkill -9 etcd
pkill -9 containerd
rm -rf /etc/kubernetes/
rm -rf /var/lib/kubelet/
rm -rf /var/lib/etcd/
rm -rf /etc/containerd/
rm -rf $HOME/.kube/
rm -rf /var/lib/containerd/*
rm -rf /run/containerd/*
rm -rf /etc/cni/net.d/
rm -rf /var/run/containerd/*
ip link delete cni0 2>/dev/null
ip link delete flannel.1 2>/dev/null
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
umount $(mount | grep kubelet | awk '{print $3}') 2>/dev/null
六、测试
Sealos cloud login info:
Cloud Version: v5.0.1
URL: https://192.168.1.200.nip.io
admin Username: admin
admin Password: sealos2023
# 查看 Kubernetes 集群中的所有节点信息
kubectl get nodes
NAME STATUS ROLES AGE VERSION
single Ready control-plane 10h v1.28.11
#-o wide 选项会显示更多的信息,比如节点的内部IP、外部IP、操作系统等
kubectl get nodes -o wide
root@single:~# kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
single Ready control-plane 10h v1.28.11 192.168.1.200 <none> Ubuntu 22.04.5 LTS 5.15.0-136-generic containerd://1.7.20
#需要更详细的节点信息,可以查看特定节点的描述:
kubectl describe node <node-name>
sealos reset
bash install.sh \
--image-registry=registry.cn-shanghai.aliyuncs.com \
--proxy-prefix=https://gh-proxy.com \
--cloud-version=v5.0.1