1.1 安装前必读
请不要使用带中文的服务器和克隆的虚拟机。
生产环境建议使用二进制的方式安装。
文档中的IP地址要更换成自己的IP地址,要谨记!!!
1.2 基本环境配置
kubeadm安装方式自1.14版本以后,安装方法几乎没有任何变化,此文档可以尝试安装最新的K8S集群,centos采用的是7.x版本。
K8S官网:
https://kubernetes.io/docs/setup/
最新版高可用安装:
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/
1.2.1 高可用Kubernetes集群规划
主机名 | IP地址 | 说明 | k8s-master01 | 10.3.50.11 | master节点1 | k8s-master02 | 10.3.50.12 | master节点02 | k8s-master03 | 10.3.50.13 | master节点03 | k8s-master-lb | 10.3.50.100 | keepalived虚拟IP | k8s-node01 | 10.3.50.14 | worker节点01 | k8s-node02 | 10.3.50.15 | worker节点02 |
配置信息 | 备注 | 系统版本 | CentOS 7.9 | Docker版本 | 20.10.x | Pod网段 | 10.16.0.0/12 | Service网段 | 10.244.0.0、16 | 注意:宿主机网段、k8s Service网段、Pod网段不能重复!!!
VIP(虚拟IP)不要和公司内网IP重复,首先去ping一下,不通才可用。VIP需要和你的主机在同一个局域网内(不是直接用上述IP,要和本主机网段相同)!
公有云上搭建VIP是公有云的负载均衡的IP,比如阿里云的内网SLB的地址,腾讯云内网ELB的地址。不需要再搭建keepalived和haproxy!
1.2.2 基本环境配置
所有节点配置hosts,修改/etc/hosts如下:
注意用自己本机的IP地址!!!- [root@k8s-master01 ~]# vim /etc/hosts<br>10.3.50.11 k8s-master01<br>10.3.50.12 k8s-master02<br>10.3.50.13 k8s-master03<br>10.3.50.100 k8s-master-lb # 如果不是高可用集群,该IP为master01的IP!<br>10.3.50.14 k8s-node01<br>10.3.50.15 k8s-node02
复制代码 CentOS 7安装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<br>
- sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
复制代码 所有节点配置limit:- yum install wget jq psmisc vim net-tools telnet yum-utils device-mapper-persistent-data lvm2 git -y
复制代码
vim /etc/security/limits.conf
# 末尾添加如下内容
* soft nofile 65536
* hard nofile 131072
* soft nproc 65535
* hard nproc 655350
* soft memlock unlimited
* hard memlock unlimited
master01节点免密钥登陆其他节点,安装过程中生成配置文件和证书均在master上操作,集群管理也在master01上操作,阿里云或者AWS上需要单独一台kubectl服务器。密钥配置如下:- 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
复制代码 下载安装所有的源码文件:- swapoff -a && sysctl -w vm.swappiness=0
- sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab
复制代码 如果无法下载就下载:
https://gitee.com/dukuan/k8s-ha-install.git
所有节点升级系统并重启,此处没有升级内核。- rpm -ivh http://mirrors.wlnmp.com/centos/wlnmp-release-centos.noarch.rpm
- yum install ntpdate -y
复制代码 1.3 内核配置
CentOS 7需要升级内核至4.18+,本地升级的版本为4.19。
在master01节点下载内核!- ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
- echo 'Asia/Shanghai' >/etc/timezone
- ntpdate time2.aliyun.com<br>crntab -e
- # 加入到crontab
- */5 * * * * /usr/sbin/ntpdate time2.aliyun.com
复制代码 从master01节点传到其他节点:所有节点安装内核- 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
复制代码 所有节点更改内核启动顺序- cd /root/
- git clone https://github.com/dotbalo/k8s-ha-install.git
- git clone https://gitee.com/dukuan/k8s-ha-install.git # 如果上面的无法下载就使用这个
复制代码 检查默认内核是不是4.19- yum update -y --exclude=kernel* && reboot # CentOS 7需要升级,CentOS 8可以按需升级系统
复制代码 所有节点重启,然后检查内核是不是4.19- cd /root
- wget http://193.49.22.109/elrepo/kernel/el7/x86_64/RPMS/kernel-ml-devel-4.19.12-1.el7.elrepo.x86_64.rpm
- wget http://193.49.22.109/elrepo/kernel/el7/x86_64/RPMS/kernel-ml-4.19.12-1.el7.elrepo.x86_64.rpm
复制代码 所有节点安装ipvsadm:- for i in k8s-master02 k8s-master03 k8s-node01 k8s-node02;do scp kernel-ml-4.19.12-1.el7.elrepo.x86_64.rpm kernel-ml-devel-4.19.12-1.el7.elrepo.x86_64.rpm $i:/root/ ; done
复制代码 所有节点配置ipvs模块,在内核4.19+版本nf_conntrack_ipv4已经改为nf_conntrack,4.18以下使用nf_conntrack_ipv4即可:- cd /root && yum localinstall -y kernel-ml*
复制代码 然后执行systemctl enable --now systemd-modules-load.service即可
开启一些k8s集群中必须的内核参数,所有节点配置k8s内核:
[code]cat |