K8S中的Pod概念和网络通讯方式+集群安装准备
在一个Pod中,可能有一个或多个容器。只要有Pod,就会启动Pause这个容器,Pod中的容器会共用这个pause的网络栈和存储卷。也就是说这两个容器没有自己独立的Ip地址,有的是这个pod的地址。...
在一个Pod中,可能有一个或多个容器。只要有Pod,就会启动Pause这个容器,Pod中的容器会共用这个pause的网络栈和存储卷。也就是说这两个容器没有自己独立的Ip地址,有的是这个pod的地址。这也就意味着,在同一个Pod里面,容器的端口不能设为同样的值,比如一个php和一个nginx容器,你把他们的端口都设置为9000,那这个pod肯定是起不来的,或者起来之后无限重启。
下面准备搭建K8s集群,需要一台master节点,两台node节点,配置CentOS 7.9 系统,网络设置为NAT模式,硬盘大小都为100G。
这里着重讲一下两个问题,花费了我整整一个下午的时间都没有解决,查阅了很多的资料和博客最后发现了问题:
①第一个就是VMware的网络设置,子网IP必须和虚拟机的Ip地址在一个网段,比如我的Master节点的ip地址设置为了192.168.88.100,另外两台node节点设置为192.168.88.101和192.168.88.102。这个问题导致的是我主机都无法和虚拟机相互ping通。
②第二个问题就是,在我解决了上述问题之后,当我使用xshell对虚拟机进行连接时发现无法做出任何反应,不出现用户名之类的,如下图
解决方法就是:
vi /etc/ssh/sshd_config
然后将里面的#UseDNS yes 改为 UseDNS no(注意去掉#)
然后重启ssh服务:
service sshd restart
成功:
下面进行系统的初始化:
1、 关闭防火墙和禁用iptables:
Kubernetes和Docker在运行过程中会产生大量的iptables规则,为了不让系统规则跟他们混淆,直接关闭系统的规则:
# 关闭防火墙
$ systemctl stop firewalld
$ systemctl disable firewalld
# 关闭iptables服务
$ systemctl stop iptables
$ systemctl disable iptables
2、关闭 selinux:
selinux是linux系统下的一个安全服务,如果不关闭他,在安装集群的过程中会出现各种各样的问题:
#编辑 /etc/selinux/config 文件 修改SELINUX的值为disabled
#注意修改完成后要重启linux服务
SELINUX=disabled
3、关闭 swap
swap分区指的是虚拟内存分区,它的作用是物理内存使用完之后,将磁盘空间虚拟成内存来使用。启用swap设备会对系统的性能产生非常负面的影响,因此Kubernetes要求每个节点都禁用swap设备,但是如果因为某些原因确实不能关闭swap分区,就需要在集群安装过程中通过明确的参数进行说明。
#编辑分区配置文件 /etc/fstab 注释掉swap分区那一行
# /dev/mapper/centos-swap swap
#注意修改完毕之后需要重启linux服务
4、对主机名进行设置
$ hostnamectl set-hostname <hostname>
三台机器分别为master、k8s-node1、k8s-node2
5、主机名解析
为了方便后面集群节点间的直接调用,在这里配置一下主机名解析,但是在企业中推荐使用内部DNS服务器
cat >> /etc/hosts << EOF
192.168.88.100 master
192.168.88.101 k8s-node1
192.168.66.102 k8s-node2
EOF
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system # 生效
7、 时间同步
Kubernetes要求集群中的节点时间必须是精确一致的,这里我们使用chronyd服务从网络同步时间,在企业内部推荐配置内部的时间同步服务器
#启动chronyd服务
systemctl start chronyd
#设置chronyd服务开机自启
systemctl enable chronyd
#稍等一会就可以用date命令进行验证了
8、修改linux内核参数
修改linux内核参数,添加网桥过滤和地址转发功能
# 新建一个文件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
#为了让文件生效,需要重新加载一下配置
$ sysctl -p
# 加载网桥过滤模块
$ modprobe br_netfilter
# 查看网桥过滤模块是否加载成功
$ lsmod | grep br_netfilter
模块存在,证明加载成功。
9、配置ipvs功能
在Kubernetes中service有两种代理模型,一种是基于iptables,一种是基于ipvs的,两者相比较的话,ipvs的性能明显是要高一点的,但是如果说要使用它,就需要手动载入ipvs模块
# 1、安装ipset和ipvsadm
$ yum install ipset ipvsadm -y
# 2、添加需要加载的模块写入脚本文件
$ cat <<EOF > /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
# 3、为脚本文件添加执行权限
$ chmod +x /etc/sysconfig/modules/ipvs.modules
# 4、执行脚本文件
$ /bin/bash /etc/sysconfig/modules/ipvs.modules
# 5、查看对应模块是否加载成功
$ lsmod | grep -e ip_vs -e nf_conntrack-ipv4
可以看到这五个模块都在里面了:
10、重启之后检查selinux和swap分区是否关闭
看到都是关闭状态。。。
更多推荐
所有评论(0)