一、创建虚拟机
首先使用vmware15 pro创建了4台centos7虚拟机,其中,3台用来组建k8s集群,1台为master节点,2台为node节点,
剩下的一台用来安装harbor配置私有仓库(可选)。
最大磁盘空间尽量大一点,我这里选择的是80G,虚拟磁盘文件存储为单个文件可以提升磁盘读写性能,一般不会有迁移的
情况。
![指定磁盘空间](https://img-blog.csdnimg.cn/20191128155126742.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk1NDIxNw==,size_16,color_FFFFFF,t_70)
虚拟机的网络设置要特别注意,一定要保证各个虚拟机之间能相互访问,且虚拟机能访问外网,我使用的虚拟机网络设置为NAT模式,相关配置如下图,注意虚拟网关与虚拟网卡的IP地址不能相同,之前我误将这两个地址搞混了,全部设置为了192.168.238.1,导致虚拟机一直无法ping通百度,报错为域名无法解析。后将网关设置为192.168.238.2,虚拟网卡设置为192.168.238.1,网络正常。
二、虚拟机环境准备
官网关于安装的必备环境说明,至少2G内存和2CPU,节点间全网络互联,每个节点都有单独的主机名和mac地址,开放对应端口,关闭swap分区。
1、修改虚拟机网卡配置文件
为了之后操作方便,先通过修改网卡配置文件,将虚拟机的ip地址设为静态ip。步骤如下:
vi /etc/sysconfig/network-scripts/ifcfg-ens33 #ens33为使用的网卡名,默认为ens33,可根据实际情况修改
BOOTPROTO=static #改为static静态ip,默认为dhcp
NAME=ens33
DEVICE=ens33
ONBOOT=yes #yes表示开机自动联网
IPADDR=192.168.238.128
GATEWAY=192.168.238.2
DNS1=8.8.8.8
DNS2=192.168.238.2 #网关ip
NETMASK=255.255.255.0
修改完成后重启网络配置使修改生效
systemctl restart network
其他虚拟机同样进行以上操作,完成后通过ping另外三台虚拟机的静态ip以及www.baidu.com判断内网和外网是否正常。
2、修改主机名
hostnamectl set-hostname xxx #我这里设置的主机名分别是 k8s-node01 k8s-node02 master harbor
修改后通过hostnamectl status
查看主机名是否修改成功
3、修改/etc/hosts文件
修改hosts文件,来让各虚拟机间通过主机名能相互访问。
vi /etc/hosts #添加到文件末尾
192.168.238.128 k8s-node01
192.168.238.129 k8s-node02
192.168.238.130 k8s-node03
192.168.238.131 k8s-master
修改了一台虚拟机上的该文件后,可在该虚拟机上通过scp命令直接将该文件拷贝到其他各虚拟机。
scp /etc/hosts root@k8s-node02:/etc/hosts
scp /etc/hosts root@k8s-node03:/etc/hosts
4、安装依赖包
yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wgetvimnet-tools git
5、设置防火墙为iptables并设置空规则
//关闭centos7默认的firewalld防火墙并取消自启
systemctl stop firewalld && systemctl disable firewalld
//安装Iptables管理工具&&启动Iptables&&设为Iptables开机自启&&清空Iptables规则&&保存Iptables默认规则
yum -y install iptables-services && systemctl start iptables && systemctl enable iptables&& iptables -F && service iptables save
6、关闭selinux
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
//关闭swap分区,永久关闭虚拟内存。K8s初始化init时,会检测swap分区有没有关闭,如果虚拟内存开启,容器pod就可能会放置在虚拟内存中运行,会大大降低运行效率
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
7、调整内核参数,对于k8s
cat > kubernetes.conf <<EOF
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 # 禁止使用 swap 空间,只有当系统 OOM 时才允许使用它
vm.overcommit_memory=1 # 不检查物理内存是否够用
vm.panic_on_oom=0 # 开启 OOM
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
EOF
#其中必备参数
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1 #开启网桥模式
net.ipv6.conf.all.disable_ipv6=1 #关闭ipv6的协议
#其余为优化参数,可不设置
cp kubernetes.conf /etc/sysctl.d/kubernetes.conf #拷贝,开机能调用该配置文件
sysctl -p /etc/sysctl.d/kubernetes.conf #手动刷新,使配置立刻生效
8、调整系统时区
#设置系统时区为中国/上海
timedatectl set-timezone Asia/Shanghai
#将当前的 UTC 时间写入硬件时钟
timedatectl set-local-rtc 0
# 重启依赖于系统时间的服务
systemctl restart rsyslog
systemctl restart crond
9、关闭不需要的邮件服务
systemctl stop postfix && systemctl disable postfix
10、设置 rsyslogd 和 systemd journald
centos7默认有两个日志系统rsyslogd 和systemd journald同时在工作,修改journ