使用sealos一键部署k8s高可用集群
sealos官网地址:
- https://sealyun.com/
- 备注
- 企业级应用的集群离线包需要付费,学习测试,可以使用作者提供的免费离线包【离线包已经收藏在百度云盘】
- wget -c https://sealyun.oss-cn-beijing.aliyuncs.com/2fb10b1396f8c6674355fcc14a8cda7c-v1.20.0/kube1.20.0.tar.gz
sealos常用参数说明
--master Master 节点服务器地址列表
--node Node 节点服务器地址列表
--user 服务器 SSH 用户名
--passwd 服务器 SSH 用户密码
--pkg-url 离线包所在位置,可以是本地目录,也可以是一个 HTTP 地址
--version 指定需要部署的 Kubernetes 版本
--pk 指定 SSH 私钥所在位置,默认为 /root/.ssh/id_rsa
Other flags:
--kubeadm-config string kubeadm-config.yaml 用于指定自定义 kubeadm 配置文件
--vip string virtual ip (default "10.103.97.2") 本地负载时虚拟 IP ,不推荐修改,集群外不可访问
安装注意事项
高版本离线包自带docker,如没安装docker会自动安装。所以说需要纯净的系统
下载kubernetes 离线安装包.
尽量使用新版本sealos 用新不用旧
务必同步服务器时间
主机名不可重复
master节点CPU必须2C以上
cni组件选择cilium时要求内核版本不低于5.4
podSubnet: 100.64.0.0/10
serviceSubnet: 10.96.0.0/12
服务器列表
master01 172.31.108.31
master02 172.31.108.32
master03 172.31.108.33
node01 172.31.108.34
部署
防火墙设置
systemctl stop firewalld
systemctl disable firewalld
yum -y install iptables-services ipvsadm
systemctl start iptables
systemctl enable iptables
iptables -F
service iptables save
主机名设置
$ hostnamectl set-hostname 主机名
$ cat > /etc/hosts <<-'EOF'
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.5.151 k8s-master1
192.168.5.152 k8s-master2
192.168.5.153 k8s-master3
192.168.5.154 k8s-node1
192.168.5.155 k8s-node2
EOF
时间同步
yum install -y ntpdate
ntpdate time.windows.com
内核参数调整
cat > kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
EOF
$ sysctl -p /etc/sysctl.d/kubernetes.conf
关闭swap分区
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
设置rsyslog和systemd journald
$ mkdir /var/log/journal # 持久化保存日志的目录
$ mkdir /etc/systemd/journald.conf.d
$ cat > /etc/systemd/journald.conf.d/99-prophet.conf <<EOF
[Journal]
Storage=persistent # 持久化保存到磁盘
Compress=yes # 压缩历史日志
SyncIntervalSec=5m
RateLimitInterval=30s
RateLimitBurst=1000
SystemMaxUse=10G # 最大占用空间 10G
SystemMaxFileSize=200M # 单日志文件最大 200M
MaxRetentionSec=2week # 日志保存时间 2 周
ForwardToSyslog=no # 不将日志转发到 syslog
EOF
$ systemctl restart systemd-journald
升级内核版本【】
$ rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
$ yum --enablerepo=elrepo-kernel install -y kernel-lt
$ grep initrd16 /boot/grub2/grub.cfg
$ grub2-set-default 0
$ reboot
kube-proxy开启ipvs
$ modprobe br_netfilter
$ cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF
$ chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack
安装sealos
$ wget -c https://sealyun.oss-cn-beijing.aliyuncs.com/latest/sealos
$ chmod +x sealos
$ cp sealos /usr/sbin/sealos
使用sealos部署k8s
$ sealos init --passwd '5LmUmTTu' \
--master 172.31.108.31 --master 172.31.108.32 --master 172.31.108.33 \
--node 172.31.108.34 \
--pkg-url /root/kube1.14.10.tar.gz \
--version v1.14.10
sealos参数解析
--master 192.168.0.4:22 # master地址列表,若端口是22可以省略不写
--node 192.168.0.5 # node地址列表
--user root # 服务用户名
--passwd your-server-password # 服务器密码,用于远程执行命令
--pkg kube1.14.10.tar.gz # 离线安装包名称
--version v1.14.10 # kubernetes 离线安装包版本,这渲染kubeadm配置时需要使用
-–pk-passwd '123...qA' # 使用密钥对远程服务器,密钥对的密码
kuboard部署
$ kubectl apply -f https://addons.kuboard.cn/kuboard/kuboard-v3.yaml
# 您也可以使用下面的指令,唯一的区别是,该指令使用华为云的镜像仓库替代 docker hub 分发 Kuboard 所需要的镜像
# kubectl apply -f https://addons.kuboard.cn/kuboard/kuboard-v3-swr.yaml
$ watch kubectl get pods -n kuboard
# 执行指令 watch kubectl get pods -n kuboard,等待 kuboard 名称空间中所有的 Pod 就绪,如下所示,
# 如果结果中没有出现 kuboard-etcd-xxxxx 的容器,请查看 中关于 缺少 Master Role 的描述。
$ kubectl get pods -n kuboard
其他信息
新增节点
# 新增master节点
$ sealos join --master 192.168.198.127 --master 192.168.198.128 # 新增不连续IP
$ sealos join --master 192.168.198.127-192.168.198.128 # 新增多个连续IP
# 删除master节点
$ sealos clean --master 192.168.198.122 --master 192.168.198.123 # 删除不连续IP
$ sealos clean --master 192.168.198.122-192.168.198.123 # 删除多个连续IP
# 新增node节点
$ sealos join --node 192.168.198.127 --node 192.168.198.128 # 新增不连续IP
$ sealos join --node 192.168.198.127-192.168.198.128 # 新增多个连续IP
# 删除node节点
$ sealos clean --node 192.168.198.125 --node 192.168.198.126 # 删除不连续IP
$ sealos clean --node 192.168.198.125-192.168.198.126 # 删除多个连续IP
# 清理集群
$ sealos clean --all -f