要求 :三台虚拟机
以下步骤在三台虚拟机上均要执行
检查虚拟机内核版本uname -r关闭SELinux
检查SELinux状态,enabled为开启状态
/usr/sbin/sestatus -v
或者使用getenforce命令查看:
getenforce
关闭SELinux,修改配置文件,将SELINUX设置为disabled,并且修改SELinux模式为Premissive
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
或者修改配置文件,将SELINUX设置为disabled,然后重启虚拟机生效
vim /etc/selinux/config
systemctl stop firewalld
关闭防火墙开机自启动
systemctl disable firewalld
检查防火墙状态,inactive为关闭状态,active为运行状态
systemctl status firewalld安装依赖包
yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git设置防火墙为iptables并设置空规则
yum -y install iptables-services && systemctl start iptables && systemctl enable iptables && iptables -F && service iptables save永久关闭虚拟内存
swapoff -a && sed -i '/ swap / s/^(.*)$/#1/g' /etc/fstab调整内核参数,写入配置文件中
在/etc/sysctl.d/目录下创建kubernetes.conf文件,写入配置数据:
vim /etc/sysctl.d/kubernetes.conf
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 vm.swappiness=0 vm.overcommit_memory=1 vm.panic_on_oom=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 net.netfilter.nf_conntrack_max=2310720
保存退出后刷新配置立马生效
sysctl -p /etc/sysctl.d/kubernetes.conf关闭系统不需要的服务
systemctl stop postfix && systemctl disable postfix日志配置
systemd-journald 用于检索 systemd 的日志,是 systemd 自带的日志系统。设置rsyslogd 和systemd journald
创建持久化日志目录
mkdir /var/log/journal
创建配置文件目录
mkdir /etc/systemd/journald.conf.d
创建99-prophet.conf配置文件,写入配置
vim /etc/systemd/journald.conf.d/99-prophet.conf
[Journal] #持久化保存到磁盘 Storage=persistent #压缩历史日志 Compress=yes SyncIntervalSec=5m RateLimitInterval=30s RateLimitBurst=1000 #最大占用空间10G SystemMaxUse=10G #单日志文件最大200M SystemMaxFileSize=200M #日志保存时间2周 MaxRetentionSec=2week #不将日志转发到syslog ForwardToSyslog=no
重启日志
systemctl restart systemd-journald升级内核到4.44或以上版本
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
安装完成后检查 /boot/grub2/grub.cfg 中对应内核menuentry中是否包含initrd16配置,如果没有,再安装一次
cat /boot/grub2/grub.cfg
安装内核
yum --enablerepo=elrepo-kernel install -y kernel-lt
查看内核
cat /boot/grub2/grub.cfg
设置开机从新内核启动,下载的内核版本可能不一样,将命令中冒号里的内核版本换成对应的版本再执行
grub2-set-default 'CentOS Linux (5.4.184-1.el7.elrepo.x86_64) 7 (Core)'
然后重启虚拟机
reboot
查看系统内核版本是否不低于4.44版本
uname -rkube-proxy开启ipvs前置条件
加载netfilter模块
modprobe br_netfilter
写入依赖配置文件
cat > /etc/sysconfig/modules/ipvs.modules <给配置文件赋权,引导配置文件
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4如果报FATAL: Module nf_conntrack_ipv4 not found的错误,是因为高版本的centos内核nf_conntrack_ipv4被nf_conntrack替换了,所以装不了,执行以下操作可解决,配置正常则无需执行
修改ipvs.modules文件,nf_conntrack_ipv4修改为nf_conntrack,可解决vim /etc/sysconfig/modules/ipvs.modules安装Docker软件
再次执行之前的命令
yum install -y yum-utils device-mapper-persistent-data lvm2导入阿里云Docker镜像仓库
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo安装docker-ce
yum update -y && yum install -y docker-ce安装完docker-ce相关组件重启服务器
reboot重启后,Linux内核又变回原来的,所以要重新设置成4.4以上版本并再次重启
grub2-set-default 'CentOS Linux (5.4.184-1.el7.elrepo.x86_64) 7 (Core)' && reboot启动dockersystemctl start docker设置docker开机自启
systemctl enable docker创建deamon.json的配置文件
vim /etc/docker/deamon.json{ "exec-opts":["native.cgroupdriver=systemd"], "log-driver":"json-file", "log-opts":{ "max-size":"100m" } }创建docker.service.d文件夹,用于存放docker相关服务
mkdir -p /etc/systemd/system/docker.service.d重启docker服务
systemctl daemon-reload && systemctl restart docker && systemctl enable docker安装Kubeadm先配置阿里镜像源
vim /etc/yum.repos.d/kubernetes.repo写入列内容后保存退出
[kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg安装kubeadm、kubectl和kubelet
yum -y install kubeadm-1.15.1 kubectl-1.15.1 kubelet-1.15.1设置启动开机自启kubelet服务
systemctl enable kubelet.serviceKubeadm在初始化k8s集群的时候,会从谷歌云服务器取pull所需的镜像,由于国内网络的原因,无法直接从谷歌pull镜像,所以在初始化之前要先将镜像导入到k8s集群中。
Kubeadm-basic.images镜像国内下载地址,如果下载地址失效请搜索其他下载地址
云盘下载地址
https://blog.csdn.net/weixin_45632212/article/details/119995901
下载之后将kubeadm-basic.images.tar.gz移动到虚拟机中/root目录下
解压镜像压缩文件tar -zxvf kubeadm-basic.images.tar.gz
创建load-images.sh,用于批量导入kubeadm-basic镜像,内容如下:vim load-images.sh#!/bin/bash ls /root/kubeadm-basic.images > /tmp/image-list.txt cd /root/kubeadm-basic.images for i in $(cat /tmp/image-list.txt) do docker load -i $i done rm -rf /tmp/image-list.txt给创建的脚本赋权
chmod a+x load-images.sh执行脚本批量导入镜像
./load-images.sh
将镜像文件kubeadm-basic.images与批量导入脚本load-images.sh复制到其他节点执行
注意:以上所有操作需在所有节点上操作**
初始化主节点(以下步骤只在主节点执行,其他虚拟机不执行)**
将kubeadm配置输出到kubeadm-config.yamlkubeadm config print init-defaults > kubeadm-config.yaml打开kubeadm-config.yaml,并修改相关配置
vim kubeadm-config.yaml将advertiseAddress修改当前主机ip地址
修改kubernetes版本,kubernetesVersion: v1.15.1
在dnsDomain行下添加podSubnet: “10.244.0.0/16”,注意缩进
在最后添加如下内容,将默认的调度方式改为ipvs调度模式,注意缩进(2个空格),之后保存退出--- apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration featureGates: SupportIPVSProxyMode: true mode: ipvs
指定从yml文件初始化安装,以及自动颁发证书kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs | tee kubeadm-init.log查看日志是否提示安装成功,同时要求需要执行以下命令
mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config执行kubectl get node命令查看节点状态
kubectl get node
添加其他节点
在初始化日志中也提示了对加如节点的操作,复制到其他节点机器上执行即可
可能出现的问题
因为kubeadm在使用过程中token的有效期只有24h,需要重新生成,才能解决上述问题,在安装过程中因为其他节点是1天以后才安装的,所以导致了该问题
解决办法:
在主节点上执行命令生产新的加入节点命令kubeadm token create --print-join-command使用输出的新的命令到节点上执行即可
部署网络Flannel
加入节点成功
Flannel是 CoreOS 团队针对 Kubernetes 设计的一个覆盖网络(Overlay Network)工具,其目的在于帮助每一个使用 Kuberentes 的 CoreOS 主机拥有一个完整的子网。
在主节点上创建文件夹mkdir -p k8s_install/coremkdir -p k8s_install/plugin/flannel将 kubeadm-init.log kubeadm-config.yaml放到core目录,其他文件则可以删除
mv kubeadm-init.log kubeadm-config.yaml k8s_install/core进入到flannel目录下
cd k8s_install/plugin/flannel然后执行命令:
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml之后执行:
kubectl create -f kube-flannel.yml添加子节点后可通过命令查看个节点状态
kubectl get node
三个节点状态都是 Ready则说明部署成功
如果其他节点状态是NoReady,可能是节点在初始化过程中,等几分再执行命令查看节点状态



