k8S安装部署教程
要求 :三台虚拟机
以下步骤在三台虚拟机上均要执行
检查虚拟机内核版本
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 -r

kube-proxy开启ipvs前置条件
加载netfilter模块
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
如果报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
启动docker
systemctl 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.service
Kubeadm在初始化k8s集群的时候,会从谷歌云服务器取pull所需的镜像,由于国内网络的原因,无法直接从谷歌pull镜像,所以在初始化之前要先将镜像导入到k8s集群中。
Kubeadm-basic.images镜像国内下载地址,如果下载地址失效请搜索其他下载地址
云盘下载地址
https://blog.youkuaiyun.com/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.yaml
kubeadm 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/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo 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/core
mkdir -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,可能是节点在初始化过程中,等几分再执行命令查看节点状态
4749

被折叠的 条评论
为什么被折叠?



