使用 Sealos 快速部署一个生产级别的 Kubernetes 高可用集群

一、集群规划

k8s-master1 10.0.19.127
k8s-master2 10.0.19.128
k8s-master3 10.0.19.129
k8s-node1 10.0.19.130
k8s-node2 10.0.19.131

二、初始化服务器

1 设置防火墙为 Iptables 并设置空规则 【所有节点都执行】

[root@k8s-master1 ~]# systemctl stop firewalld
[root@k8s-master1 ~]# systemctl disable firewalld
[root@k8s-master1 ~]# yum -y install iptables-services ipvsadm && systemctl start iptables && systemctl enable iptables && iptables -F && service iptables save

2 关闭selinux 【所有节点都执行】

# setenforce 0
# vim /etc/selinux/config
修改SELINUX=enforcing 为 SELINUX=disabled

3 配置主机名 【所有节点都执行】

hostnamectl set-hostname 主机名

4 配置名称解析 【所有节点都执行】

# vi /etc/hosts
添加如下五行
10.0.19.127 k8s-master1
10.0.19.128 k8s-master2
10.0.19.129 k8s-master3
10.0.19.130 k8s-node1
10.0.19.131 k8s-node2

5 配置时间同步 选择一个节点作为服务端,剩下的作为客户端 master1为时间服务器的服务端 其他的为时间服务器的客户端

1)配置k8s-master1

# yum install chrony -y
# vim /etc/chrony.config
修改三项
server 127.127.1.0 iburst
allow 10.0.19.0/24
local stratum 10
# systemctl start chronyd
# systemctl enable chronyd
# ss -unl | grep 123
UNCONN 0 0 *:123 *:*

2)配置其他节点

# yum install chrony -y
# vim /etc/chrony.conf
server 10.0.19.127 iburst
# systemctl start chronyd
# systemctl enable chronyd
# chronyc sources
210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* k8s-master1 10 6 17 4 +11us[ +79us] +/- 95us

6 关闭交换分区 【所有节点都执行】

[root@k8s-master1 ~]# swapoff -a
[root@k8s-master1 ~]# vim /etc/fstab
删除一行: 检查是否关闭成功
[root@k8s-master1 ~]# free -m
total used free shared buff/cache available
Mem: 2827 157 2288 9 380 2514
Swap: 0 0 0

7、调整内核参数,对于 K8S 【所有节点都执行】

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
cp kubernetes.conf /etc/sysctl.d/kubernetes.conf
sysctl -p /etc/sysctl.d/kubernetes.conf

出现,不用担心,因为没开通网桥我们后面会开通

8、关闭系统不需要服务,并升级systemd

yum -y upgrade systemd  #通过 centos 更新 systemd因为我的比较旧
systemctl stop postfix && systemctl disable postfix

9、设置 rsyslogd 和 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 # 最大占用空间 10G
SystemMaxUse=10G # 单日志文件最大 200M
SystemMaxFileSize=200M # 日志保存时间 2 周
MaxRetentionSec=2week # 不将日志转发到 syslog
ForwardToSyslog=no
EOF
systemctl restart systemd-journald

10、升级系统内核为 4.44 【所有节点都执行】 CentOS 7.x 系统自带的 3.10.x 内核存在一些 Bugs,导致运行的 Docker、Kubernetes 不稳定,例如: rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm 我已经下载到百度网盘: 链接: 提取码:pwcq

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
# 安装完成后检查 /boot/grub2/grub.cfg 中对应内核 menuentry 中是否包含 initrd16 配置,如果没有,再安装一次!
yum --enablerepo=elrepo-kernel install -y kernel-lt
# 查看内核版本
cat /boot/grub2/grub.cfg |grep 4.4
# 设置开机从新内核启动
grub2-set-default 'CentOS Linux (4.4.222-1.el7.elrepo.x86_64) 7 (Core)'
# 重启
init 6
# 查看内核
uname -r

11、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_ipv4
EOF chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

三、Kubernetes安装

前提条件 下载kubernetes 离线安装包. 下载sealos 第一步,下载sealos最新版和kubernetes离线安装包

本次下载sealos版本为v3.3.9-rc.10,kubernetes版本为1.22.0

我的百度网盘:链接:https://pan.baidu.com/s/16T3Xo1jw8okOdK9bBMsXew 链接: 提取码:thu7

wget -c https://sealyun.oss-cn-beijing.aliyuncs.com/latest/sealos
wget -c https://sealyun.oss-cn-beijing.aliyuncs.com/05a3db657821277f5f3b92d834bbaf98-v1.22.0/kube1.22.0.tar.gz

第二步,安装sealos工具

chmod +x sealos &&  mv sealos /usr/bin

第三步,安装高可用kubernetes 多master HA:

sealos init \
--master 10.0.19.127 \
--master 10.0.19.128 \
--master 10.0.19.129 \
--node 10.0.19.130 \
--node 10.0.19.131 \
--version v1.22.0 \
--pkg-url /root/kube1.22.0.tar.gz

使用免密钥或者密钥对: 如果密钥对有密码, 添加–pk-passwd password

sealos init \
--passwd '123456' \
--master 10.0.19.127 \
--master 10.0.19.128 \
--master 10.0.19.129 \
--node 10.0.19.130 \
--node 10.0.19.131 \
--version v1.22.0 \
--pkg-url /root/kube1.22.0.tar.gz

自定义ssh端口号,如3222:

sealos init --passwd '123456' --master 10.0.19.127:55 \
--master 10.0.19.128:55 \
--master 10.0.19.129:55 \
--node 10.0.19.130:55 \
--node 10.0.19.131:55 \
--version v1.22.0 \
--pkg-url /root/kube1.22.0.tar.gz

验证集群是否升级成功

[root@k8s-master1 ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-master1 Ready control-plane,master 14m v1.22.0
k8s-master2 Ready control-plane,master 13m v1.22.0
k8s-master3 Ready control-plane,master 13m v1.22.0
k8s-node1 Ready <none> 12m v1.22.0
k8s-node2 Ready <none> 12m v1.22.0

清理集群

sealos clean --all

增加master

sealos join --master 172.16.4.68 --master 172.16.4.69
sealos join --master 172.16.4.68-172.16.4.70 # 或者多个连续IP

增加node

sealos join --node 172.16.4.56 --node 172.16.4.57
sealos join --node 172.16.4.56-172.16.4.63 # 或者多个连续IP

删除指定master节点 注意clean不加任何参数会清理整个集群

sealos clean --master 172.16.4.68 --master 172.16.4.69
sealos clean --master 172.16.4.56-172.16.4.63 # 或者多个连续IP

删除指定node节点

sealos clean --node 1172.16.4.56 --node 172.16.4.57
sealos clean --node 172.16.4.56-172.16.4.63 # 或者多个连续IP

sealos快速部署K8S的更多相关文章

  1. 菜鸟系列k8s——快速部署k8s集群

    快速部署k8s集群 1. 安装Rancher Rancher是业界唯一完全开源的企业级容器管理平台,为企业用户提供在生产环境中落地使用容器所需的一切功能与组件. Rancher2.0基于Kuberne ...

  2. 使用RKE快速部署k8s集群

    一.环境准备 1.1环境信息 IP地址 角色 部署软件 10.10.100.5 K8s Master Etcd.Control 10.10.100.17 K8s Worker1 Worker 10.1 ...

  3. 通过kubeadm快速部署K8S集群

    kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具. 这个工具能通过两条指令完成一个kubernetes集群的部署: # 创建一个 Master 节点 $ kubeadm i ...

  4. 【Kubernetes学习笔记】-使用Minikube快速部署K8S单机学习环境

    介绍 https://minikube.sigs.k8s.io/docs/ Minikube 用于快速在本地搭建 Kubernetes 单节点集群环境,它对硬件资源没有太高的要求,方便开发人员学习试用 ...

  5. 阿里云单机快速部署K8S

    网上有很多关于K8S部署测试环境的文章,但是有些部署比较繁琐.这里推荐使用 https://github.com/gjmzj/kubeasz地址文章.文章介绍很详细,记录一下方便自己日后学习使用. # ...

  6. 利用kubeadm快速部署k8s

    内外网络互通 [root@k8s-1 ~]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) 配置k8syum仓库,及Dock ...

  7. 使用kubeadm快速部署k8s高可用集群

    二进制安装方法请移步到:二进制部署高可用kubernetes-1.22.7集群 一:环境初始化 系统规划 k8s-master01 192.168.113.100   k8s-master02 192 ...

  8. 使用 Sealos 在 3 分钟内快速部署一个生产级别的 Kubernetes 高可用集群

    本文首发于:微信公众号「运维之美」,公众号 ID:Hi-Linux. 「运维之美」是一个有情怀.有态度,专注于 Linux 运维相关技术文章分享的公众号.公众号致力于为广大运维工作者分享各类技术文章和 ...

  9. 使用kubeadm快速部署一套K8S集群

    一.Kubernetes概述 1.1 Kubernetes是什么 Kubernetes是Google在2014年开源的一个容器集群管理系统,Kubernetes简称K8S. K8S用于容器化应用程序的 ...

  10. 快速安装k8s,版本为1.13.8

    利用rpm快速部署k8s #!/bin/bash #快速安装k8s #by love19791126 107420988@qq.com pwd=$(pwd) masteripaddr=#(ip a s ...

随机推荐

  1. 掌握Java面向对象OOP篇(一)

    掌握面向对象OOP篇(一) 边学边记 -- OOP(Object Orientated Programing) 1. 为什么要引入面向对象? 原因:封装.继承.多态 举个例子理解面向对象代码的好处: ...

  2. 编译器实现之旅——第十三章 if语句和while语句的代码生成器分派函数的实现

    在上一章的旅程中,我们已经实现了表达式类代码生成器分派函数,而在这一章的旅程中,我们将要实现if语句和while语句的代码生成器分派函数.if语句和while语句是两种典型的带有跳转指令的语句.观察C ...

  3. Java基础12

    抽象类与抽象方法 abstract : 抽象的 abstract可以用来修饰:类.方法 abstract修饰类 > 此类称为抽象类 > 抽象类不能实例化 > 抽象类中是包含构造器的, ...

  4. Windbg常用命令及分析套路

    自己也在使用windbg分析问题,但是属于刚入门所以转发下大神的总结:https://www.cnblogs.com/fj365/p/13295453.html 常用 !threadpool 查看线程 ...

  5. Canvas简历编辑器-Monorepo+Rspack工程实践

    Canvas简历编辑器-Monorepo+Rspack工程实践 在之前我们围绕Canvas聊了很多代码设计层面的东西,在这里我们聊一下工程实践.在之前的文中我也提到过,因为是本着学习的态度以及对技术的 ...

  6. HuggingChat macOS 版现已发布

    Hugging Face 的开源聊天应用程序 Hugging Chat,现已推出适用于 macOS 的版本. 主要特点 Hugging Chat macOS 版本具有以下亮点: 强大的模型支持: 用户 ...

  7. 如何在SQL中查找某一字段在哪些表中

    在SQL中,要找出数据库中包含特定字段(列)的所有表,可以使用数据库的系统表或信息架构视图.不同的数据库系统(如MySQL, SQL Server, PostgreSQL等)有不同的系统表和查询方式. ...

  8. Java日期时间API系列36-----Jdk8中java.time包中的新的日期时间API类应用,使用LocalTime计算十二时辰。

    十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰.二十四小时和十二时辰对照表:     时辰 时间 24时制 子时 深夜 11:00 - 凌晨 01:00 23:00 - 01 : ...

  9. vue2基于 vue-cropper插件对图片裁剪

    <template> <div id="app"> <div class="model" v-show="model&q ...

  10. element输入天数,获取当前时间加上天数 【时间获取】

    handleInput (val) { // console.log(this.formModel.ITEM_PM) if (!(/[^\d]/g).test(val)) { // console.l ...