kubeadm是Kubernetes官方提供的用于快速安装Kubernetes集群的工具,比起复杂繁琐的源码安装要方便快捷很多。这一章我们就通过kubeadm搭建起一个Kubernetes集群。为后面的学习做准备。
我是T型人小付,一位坚持终身学习的互联网从业者。喜欢我的博客欢迎在csdn上关注我,如果有问题欢迎在底下的评论区交流,谢谢。
文章目录
一键安装脚本
为了方便重复安装,我将本节中一直到flannel部分的步骤制作成了一键安装脚本,分为master部分和node部分。
master: https://github.com/Victor2Code/centos-k8s-init/blob/master/centos_7-k8s_v1_15-init-master.sh
node: https://github.com/Victor2Code/centos-k8s-init/blob/master/centos_7-k8s_v1_15-init-node.sh
有兴趣的朋友可以对照着本文理解和使用一键安装脚本。
准备
在正式用kubeadm安装之前,有一些准备条件先要做好
系统准备
准备了两台全新的centos7机器如下,按照本文章中方法请先确保所有机器都可以科学上网
172.29.56.175 k8s-master
172.29.56.176 k8s-node1
其中每台机器的规格为
- CPU 4
- RAM 4G
- Disk 100G
确保所有机器的hosts文件都同步
cat >> /etc/hosts << EOF
172.29.56.175 k8s-master
172.29.56.176 k8s-node1
EOF
后续如果有新的机器加入集群可以考虑用saltstack之类的工具批量修改文件
关掉系统自带的firewalld
防火墙服务而改为iptables
sudo systemctl stop firewalld.service
sudo systemctl disable firewalld.service
sudo yum -y install iptables-services
sudo systemctl start iptables.service
sudo systemctl enable iptables.service
开放官方文档中列出的组件所需要的端口
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 6443 -j ACCEPT
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 2379:2380 -j ACCEPT
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 10250:10252 -j ACCEPT
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 30000:32767 -j ACCEPT
根据机器局域网环境开放局域网ip段,并将上述规则保存至配置文件
iptables -I INPUT -d 172.29.0.0/16 -j ACCEPT
iptables -I INPUT -s 172.29.0.0/16 -j ACCEPT
service iptables save
之后跑iptables -nvL
确认一下iptables filter表中FOWARD链的默认策略(pllicy)为ACCEPT。
这里补充下一个比较坑的点,后来在安装完了flannel以后,coreDNS一直报错,根据网上的建议发现是防火墙的原因
将默认的拒绝FORWARD包的规则注释掉,重启生效
sed -i '/-A FORWARD -j REJECT/s/^/#/g' /etc/sysconfig/iptables
sudo systemctl restart iptables
禁用Selinux
setenforce 0
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
修改内核参数
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
modprobe br_netfilter
sysctl -p /etc/sysctl.d/k8s.conf
开启ipvs所需模块
kube-proxy可以开启ipvs模式或者iptables模式,因为效率更高所以采用ipvs模式,如果下面这些模块没加载成功即使配置开启了ipvs模式也会回退到iptables模式。
加载5个所需模块并设置为机器重启也能自动加载
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
安装ipvs管理工具ipvsadm以及ipset
sudo yum -y install ipvsadm
sudo yum -y install ipset
安装Docker
Docker目前仍然是Kubernetes默认的容器运行接口,也就是CRI(Container Runtime Interface),所以要安装Docker。
安装Docker的yum源
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
查看一下可安装的docker版本
yum list docker-ce.x86_64 --showduplicates |sort -r
Kubernetes 1.15当前支持的d