0-sealer-介绍与集群初始化
一、什么是sealer
-
介绍
- sealer[ˈsiːlər]是一款分布式应用打包交付运行的解决方案,通过把分布式应用及其数据库中间件等依赖一起打包以解决应用整个集群整体交付问题。 sealer构建出来的产物我们称之为"集群镜像", 集群镜像里内嵌了一个kubernetes, 解决了分布式应用的交付一致性问题。 集群镜像可以push到registry中共享给其他用户使用,也可以在官方仓库中找到非常通用的分布式软件直接使用。
- Docker可以把一个操作系统的rootfs+应用 build成一个容器镜像,sealer把kubernetes看成操作系统,在这个更高的抽象纬度上做出来的镜像就是集群镜像。 实现整个集群的Build Share Run !!!
-
资源、资料
-
使用场景及特性
- 极其简单的方式在生产环境中或者离线环境中安装kubernetes、以及kubernetes生态中其它软件
- 通过Kubefile可以非常简单的自定义kubernetes集群镜像对集群和应用进行打包,并可以提交到仓库中进行分享
- 强大的生命周期管理能力,以难以想象的简单的方式去做如集群升级,集群备份恢复,节点扩缩等操作
- 速度极快3min以内完成集群安装
- 支持ARM x86, v1.20以上版本支持containerd,几乎兼容所有支持systemd的linux操作系统
- 不依赖ansible haproxy keepalived, 高可用通过ipvs实现,占用资源少,稳定可靠
- 官方仓库中有非常多的生态软件镜像可以直接使用,包含所有依赖,一键安装
- 自动对接公有云基础设施
- 强大的配置管理能力,非常方便灵活的调整kubeadm安装参数,或者集群镜像内部的业务组件参数
- 强大的插件能力,支持在安装的各各阶段自定义自己的操作,如修改主机名与时间同步等操作,支持out of tree插件开发
二、安装kubernetes集群
- 机器资源准备
- 注意:所有的服务器用户名密码必须保持一致
- 注意:所有的服务器用户名密码必须保持一致
- 注意:所有的服务器用户名密码必须保持一致
机器信息 | IP地址 | 登录用户名称 | 登录密码 | 配置信息 |
---|---|---|---|---|
xincan-sealer-portal139-10.1.90.139-long | 10.1.90.139 | ****** | ****** | 配置信息:8核16G,100G硬盘 |
xincan-sealer-master140-10.1.90.140-long | 10.1.90.140 | ****** | ****** | 配置信息:8核16G,100G硬盘 |
xincan-sealer-master141-10.1.90.141-long | 10.1.90.141 | ****** | ****** | 配置信息:8核16G,100G硬盘 |
xincan-sealer-slave142-10.1.90.142-long | 10.1.90.142 | ****** | ****** | 配置信息:8核16G,100G硬盘 |
xincan-sealer-slave143-10.1.90.143-long | 10.1.90.143 | ****** | ****** | 配置信息:8核16G,100G硬盘 |
xincan-sealer-slave144-10.1.90.144-long | 10.1.90.144 | ****** | ****** | 配置信息:8核16G,100G硬盘 |
xincan-sealer-slave145-10.1.90.145-long | 10.1.90.145 | ****** | ****** | 配置信息:8核16G,100G硬盘 |
-
初始化服务器资源
-
每台服务器执行如下操作(当前是在portal服务器上创建、后续可以分别copy到其它服务器上进行执行)
- 在其每台机器的根目录下,创建init-system.sh,并赋予执行权限
#!/bin/bash echo '===关闭防火墙===' sudo systemctl stop firewalld && sudo systemctl disable firewalld echo '===开启远程连接===' sudo sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config && systemctl restart sshd echo '===关闭selinux===' sudo sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config echo '===关闭swap分区===' sudo sed -i 's/.*swap.*/#&/' /etc/fstab && sudo swapoff -a && swapon -a && sudo sysctl -p echo '===安装wget vim nfs-utils rpcbind===' sudo yum install -y wget vim nfs-utils rpcbind echo '===备份默认软件yum源===' sudo mkdir /etc/yum.repos.d/backup && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup echo '===下载并配置aliyun的yum源===' sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo echo '===清空yum源缓存===' sudo yum clean all sudo yum makecache echo '===配置hosts===' while getopts ":h:n:i:" opt do case $opt in h) host_ip=(${OPTARG//,/ }) ;; n) host_name=(${OPTARG//,/ }) ;; i) internet=${OPTARG} ;; ?) echo "未知参数" exit 1;; esac done for ((i=0; i< ${#host_ip[@]}; i++)); do echo "${host_ip[$i]} ${host_name[$i]} ${host_name[$i]%%.*}" >> /etc/hosts ipaddr=`ip a | grep -w inet | grep -w $internet | awk '{print $2}'` ip=${ipaddr%%/*} if [ $ip = "${host_ip[$i]}" ]; then sudo hostnamectl set-hostname ${host_name[$i]} echo ${host_name[$i]} fi done echo '===同步时间===' sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime echo '===配置ntp,同步时间===' sudo yum install -y ntp sudo sed -i 's/server 0.centos.pool.ntp.org iburst/#server 0.centos.pool.ntp.org iburst/' /etc/ntp.conf sudo sed -i 's/server 1.centos.pool.ntp.org iburst/#server 1.centos.pool.ntp.org iburst/' /etc/ntp.conf sudo sed -i 's/server 2.centos.pool.ntp.org iburst/#server 2.centos.pool.ntp.org iburst/' /etc/ntp.conf sudo sed -i 's/server 3.centos.pool.ntp.org iburst/server ntp.aliyun.com iburst/' /etc/ntp.conf sudo systemctl start ntpd systemctl enable ntpd.service ntpq -p # 配置nfs sudo systemctl start rpcbind.service && systemctl enable rpcbind.service sudo systemctl start nfs.service && systemctl enable nfs.service # 升级内核 echo '===升级内核===' kernel_current_version=`sudo uname -r | awk '{print substr($1,1,3)}'` echo "当前系统kernel内核为:${kernel_current_version}" if [[ "${kernel_current_version}" < "4.4" ]]; then sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org sudo yum install -y https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm sudo yum list available --disablerepo=* --enablerepo=elrepo-kernel kernel_new_version=`yum list available --disablerepo=* --enablerepo=elrepo-kernel | grep kernel-lt.x86_64 | awk '{print $2}'` echo "升级内核中,升级版本为:kernel-lt-${kernel_new_version}完成后手动重启,执行命令为:reboot" sudo yum install -y kernel-lt-${kernel_new_version} --enablerepo=elrepo-kernel sudo grub2-set-default "CentOS Linux (${kernel_new_version}.x86_64) 7 (Core)" sudo grub2-editenv list else echo "当前版本满足kubernetes安装1.18.0以上版本,无需升级" fi
-
设置执行权限、执行安装
-
-h host 服务器ip地址
-
-n hostname 服务器域名
-
-i interface 服务器网关
-
./init-system.sh -h 127.0.0.139,127.0.0.140,127.0.0.141 -n aaa139.hatech.com.cn,aaa140.hatech.com.cn,aaa141.hatech.com.cn -i ens192
-
# 每台机器执行如下操作,域名跟随服务器或虚拟机更换 [root@master140 ~]# chmod 777 init-system.sh [root@master140 ~]# ./init-system.sh -h 127.0.0.139,127.0.0.140,127.0.0.141 -n aaa139.hatech.com.cn,aaa140.hatech.com.cn,aaa141.hatech.com.cn -i ens192
- 重启所有服务器
[root@master140 ~]# reboot
- 重新连接服务器,验证时间、内核、防火墙
[root@master140 ~]# date Wed Jun 22 14:08:35 CST 2022 [root@master140 ~]# ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== *203.107.6.88 10.137.38.86 2 u 234 512 377 16.438 0.340 3.367 [root@master140 ~]# firewall-cmd --state not running [root@master140 ~]# uname -r 5.4.199-1.el7.elrepo.x86_64 [root@master140 ~]#
-