kubeadm部署k8s v1.23高可用集群

kubeadm安装k8s v1.23 高可用环境


生产环境建议:

1、使用大版本下超过小版本后5个版本,如v1.23.6
2、etcd 应该独立部署且为SSD盘

3、集群高可用部署

注意:生产环境不建议使用kubeadm部署(维护不方便)

K8S官网:https://kubernetes.io/docs/setup/
最新版高可用安装:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/

IP地址 主机名 备注
192.168.10.64 k8s-master01 测试最少2核2G(必须最少要2核)
192.168.10.65 k8s-master02 测试最少2核2G(必须最少要2核)
192.168.10.66 k8s-master03 测试最少2核2G(必须最少要2核)
192.168.10.67 k8s-node01 测试最少2核2G(必须最少要2核)
192.168.10.68 k8s-node02 测试最少2核2G(必须最少要2核)
192.168.10.225 高可用虚拟IP(VIP) 与集群网段一样,不通才可以使用。

注意:最少需要2核,不然kubeadm安装过程中会报错 ,有条件尽量将内存搞6G

ERROR NumCPU]: the number of available CPUs 1 is less than the required 2 。

配置信息 备注
系统版本 CentOS 7.6
Docker版本 19.03.x
Pod网段 172.168.0.0/12
Service网段 10.96.0.0/12

1.基础环境准备(------所有节点)

# 原始系统版本与内核版本如下
[root@k8s-master01 ~]# cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)
[root@k8s-master01 ~]# uname -a
Linux k8s-master01 3.10.0-1127.el7.x86_64 #1 SMP Tue Mar 31 23:36:51 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

2.安装步骤

#1.所有节点配置hosts,修改/etc/hosts如下:---->所有节点
[root@k8s-master01 ~]# cat << EOF >> /etc/hosts
192.168.10.64 k8s-master01
192.168.10.65 k8s-master02
192.168.10.66 k8s-master03
192.168.10.67 k8s-node01
192.168.10.68 k8s-node02
192.168.10.225 k8s-master-lb    # 如果不是高可用集群,该IP为Master01的IP
EOF

#2.centos7.x安装yum源   ----->所有节点

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo

#3.安装必备工具----所有节点
yum install net-tools vim tree htop iftop \
            iotop lrzsz sl wget unzip telnet nmap nc psmisc \
            dos2unix bash-completion bash-completion-extras sysstat \
            rsync nfs-utils httpd-tools wget jq psmisc vim net-tools \
            telnet yum-utils device-mapper-persistent-data lvm2 git dnsmasq -y
           
#4.所有节点关闭防火墙、selinux、dnsmasq、swap。服务器命令如下:---->所有节点
systemctl disable --now firewalld
systemctl disable --now dnsmasq
systemctl disable --now NetworkManager
setenforce 0  #临时关闭
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config

#5.关闭swap分区
swapoff -a && sysctl -w vm.swappiness=0
sed -ir '/^[^#]*swap/s@^@#@' /etc/fstab

#6.安装ntpdate进行时间同步
rpm -ivh http://mirrors.wlnmp.com/centos/wlnmp-release-centos.noarch.rpm
yum install ntpdate -y

#6.1所有节点同步时间。时间同步配置如下:
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo 'Asia/Shanghai' >/etc/timezone
ntpdate time2.aliyun.com

# 加入到crontab
shell# crontab -e
*/2 * * * * /usr/sbin/ntpdate time2.aliyun.com &>/dev/null

#7.所有节点配置limit:
echo '* - nofile 65535' >> /etc/security/limits.conf    #设置最大打开文件数

cat << EOF >> /etc/security/limits.conf
* soft nofile 655360
* hard nofile 131072
* soft nproc 655350
* hard nproc 655350
* soft memlock unlimited
* hard memlock unlimited
EOF

Master01节点免密钥登录其他节点,安装过程中生成配置文件和证书均在Master01上操作,集群管理也在Master01上操作,阿里云或者AWS上需要单独一台kubectl服务器。密钥配置如下:

#分步执行-----只在master01执行192.168.10.64
ssh-keygen -t rsa    #一路回车

for i in k8s-master01 k8s-master02 k8s-master03 k8s-node01 k8s-node02;do ssh-copy-id -i .ssh/id_rsa.pub $i;done

3.系统升级并重启(所有节点):

3.1所有节点升级系统并重启

#此处升级还没有升级内核
yum update -y --exclude=kernel* && reboot         #CentOS7需要升级,CentOS8可以按需升级系统

4.内核配置

CentOS7 需要升级内核至4.18+,本地升级的版本为最新版

在master01节点下载内核

cd /root
[root@k8s-master01 ~]# wget https://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-ml-5.16.13-1.el7.elrepo.x86_64.rpm

[root@k8s-master01 ~]# wget https://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-ml-devel-5.16.13-1.el7.elrepo.x86_64.rpm

# 从master01节点传到其他节点:
for i in k8s-master02 k8s-master03 k8s-node01 k8s-node02;do scp kernel-ml-* $i:/root/ ; done

#所有节点安装内核
cd /root && yum localinstall -y kernel-ml*

#所有节点更改内核启动顺序
grub2-set-default  0 && grub2-mkconfig -o /etc/grub2.cfg
grubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)"

#检查默认内核是不是5.16
[root@k8s-master02 ~]# grubby --default-kernel
/boot/vmlinuz-5.16.13-1.el7.elrepo.x86_64

#重启(所有节点)
reboot
#所有节点重启,然后检查内核是不是5.16.13
[root@k8s-master01 ~]# uname -a
Linux k8s-master01 5.16.13-1.el7.elrepo.x86_64 #1 SMP PREEMPT Tue Mar 8 08:32:26 EST 2022 x86_64 x86_64 x86_64 GNU/Linux

#所有节点安装ipvsadm:
yum install ipvsadm ipset sysstat conntrack libseccomp -y
#所有节点配置ipvs模块,在内核4.19+版本nf_conntrack_ipv4已经改为nf_conntrack,这里内核是5.15,所有节点使用如下命令配置:
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack

cat  << EOF >> /etc/modules-load.d/ipvs.conf
# new ipvs
ip_vs
ip_vs_lc
ip_vs_wlc
ip_vs_rr
ip_vs_wrr
ip_vs_lblc
ip_vs_lblcr
ip_vs_dh
ip_vs_sh
ip_vs_fo
ip_vs_nq
ip_vs_sed
ip_vs_ftp
ip_vs_sh
nf_conntrack
ip_tables
ip_set
xt_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip
EOF

#然后执行
systemctl enable --now systemd-modules-load.service    #即可
#开启一些k8s集群中必须的内核参数,所有节点配置k8s内核:
cat <<EOF > /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
fs.may_detach_mounts = 1
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_watches=89100
fs.file-max=52706963
fs.nr_open=52706963
net.netfilter.nf_conntrack_max=2310720
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl =15
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_orphans = 327680
net.ipv4.tcp_orphan_retries = 3
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.ip_conntrack_max = 65536
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_timestamps = 0
net.core.somaxconn = 16384
EOF
sysctl --system
#所有节点配置完内核后,重启服务器
reboot
#保证内核依旧加载成功---->目的:保证关机或者重启以后我们的服务器是正常运行的
lsmod | grep --color=auto -e ip_vs -e nf_conntrack

5.基本组件安装

本节主要安装的是集群中用到的各种组件,比如Docker-ce、Kubernetes集群使用到的各组件等。
#1.所有节点安装Docker-ce 19.03
yum install docker-ce-19.03.* -y
# 说明:新版kubelet建议使用systemd,我们把docker的CgroupDriver改成systemd
mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

#所有节点设置开机自启动Docker:------>所有节点
systemctl daemon-reload && systemctl enable --now docker

#所有节点安装最新版本kubeadm:---->注意:所有节点
yum install kubeadm -y
# 默认配置的pause镜像使用gcr.io仓库,所有节点更换Kubelet使用阿里云的pause镜像:
cat >/etc/sysconfig/kubelet<<EOF
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.2"
EOF

# 设置Kubelet开机自启动:
systemctl daemon-reload
systemctl enable --now kubelet

6.高可用组件安装

(注意:如果不是高可用集群,haproxy和keepalived无需安装)

公有云要用公有云自带的负载均衡,比如阿里云的SLB,腾讯云的ELB,用来替代haproxy和keepalived,因为公有云是不支持。后续会更新阿里云以及腾讯云如何集群搭建。

# 所有Master节点通过yum安装HAProxy和KeepAlived,HAProxy配置相同
yum install keepalived haproxy -y

[root@k8s-master01 ~]#  mkdir /etc/haproxy -p  #所有master节点执行

#所有master节点删除源文件,加入下列配置,注意IP地址的改变 (注意:是所有master节点)
[root@k8s-master01 ~]#  cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak
[root@k8s-master01 ~]#  vim /etc/haproxy/haproxy.cfg
global
  maxconn  2000
  ulimit-n  16384
  log  127.0.0.1 local0 err
  stats timeout 30s
defaults
  log global
  mode  http
  option  httplog
  timeout connect 5000
  timeout client  50000
  timeout server  50000
  timeout http-request 15s
timeout http-keep-alive 15s
frontend monitor-in
  bind *:33305
  mode http
  option httplog
  monitor-uri /monitor
frontend k8s-master
  bind 0.0.0.0:16443
  bind 127.0.0.1:16443
  mode tcp
  option tcplog
  tcp-request inspect-delay 5s
  default_backend k8s-master
backend k8s-master
  mode tcp
  option tcplog
  option tcp-check
  balance roundrobin
  default-server inter 10s downinter 5s rise 2 fall 2 slowstart 60s maxconn 250 maxqueue 256 weight 100
  server k8s-master01    192.168.10.64:6443  check
  server k8s-master02    192.168.10.65:6443   check
  server k8s-master03    192.168.10.66:6443   check
 

所有Master节点配置KeepAlived,配置不一样,注意区分 [root@k8s-master01 pki]# vim /etc/keepalived/keepalived.conf ;

特别注意:注意每个节点的IP和网卡(interface参数)ens33 根据自己实际改变---->使用ifconfig查看自己的网卡

# Master01节点的配置:
[root@k8s-master01 etc]# mkdir /etc/keepalived -p
[root@k8s-master01 ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
[root@k8s-master01 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   
    router_id LVS_DEVEL
script_user root
    enable_script_security
}
vrrp_script chk_apiserver {
   
    script "/etc/keepa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值