K8S集群初始化实验环境配置

目录

1、初始化安装 k8s 集群的实验环境

1.1 修改机器 IP,变成静态 IP

1.2 配置机器主机名

1.3 配置主机 hosts 文件,相互之间通过主机名互相访问

1.4 配置主机之间无密码登录

1.5 关闭交换分区 swap,提升性能

1.6 修改机器内核参数 

1.7 关闭 firewalld 防火墙

1.8 关闭 selinux

1.9 配置阿里云的 repo 源

1.10 配置安装 k8s 组件需要的阿里云的 repo 源

1.11 配置时间同步

1.12 开启 ipvs

1.13 安装基础软件包 

1.14 安装 iptables


K8S集群初始化实验环境配置_第1张图片

1、初始化安装 k8s 集群的实验环境

1.1 修改机器 IP,变成静态 IP

K8S集群初始化实验环境配置_第2张图片

1.2 配置机器主机名

在 192.168.231.140 上执行如下:

hostnamectl set-hostname K8S-Master1 && bash

在 192.168.231.141 上执行如下:

hostnamectl set-hostname K8S-Master2 && bash

在 192.168.231.142 上执行如下:

hostnamectl set-hostname K8S-Node1 && bash 

1.3 配置主机 hosts 文件,相互之间通过主机名互相访问

修改每台机器的/etc/hosts 文件,增加如下三行:

192.168.231.140 K8S-Master1

192.168.231.141 K8S-Master2

192.168.231.142 K8S-Node1

1.4 配置主机之间无密码登录

[root@xianchaomaster1 ~]# ssh-keygen

#一路回车,不输入密码 把本地生成的密钥文件和私钥文件拷贝到远程主机

[root@k8s-master1 ~]# ssh-copy-id K8S-Master1  

[root@k8s-master1 ~]# ssh-copy-id K8S-Master2

[root@k8s-master1 ~]# ssh-copy-id K8S-Node1

[root@k8s-master2 ~]# ssh-keygen

#一路回车,不输入密码 把本地的生成的密钥文件和私钥文件拷贝到远程主机

[root@k8s-master2 ~]# ssh-copy-id K8S-Master1  

[root@k8s-master2 ~]# ssh-copy-id K8S-Master2

[root@k8s-master2 ~]# ssh-copy-id K8S-Node1

[root@k8s-node1 ~]# ssh-keygen

#一路回车,不输入密码 把本地的生成的密钥文件和私钥文件拷贝到远程主机

[root@k8s-node1 ~]# ssh-copy-id K8S-Master1 

[root@k8s-node1 ~]# ssh-copy-id K8S-Master2

[root@k8s-node1 ~]# ssh-copy-id K8S-Node1

1.5 关闭交换分区 swap,提升性能

#临时关闭

[root@k8s-master1 ~]# swapoff -a

[root@k8s-master2 ~]# swapoff -a

[root@k8s-node1 ~]# swapoff -a

#永久关闭:注释 swap 挂载,给 swap 这行开头加一下注释

[root@k8s-master1 ~]# vim /etc/fstab

#/dev/mapper/centos-swap swap swap defaults 0 0 #如果是克隆的虚拟机,需要删除 UUID

[root@k8s-master2 ~]# vim /etc/fstab

#/dev/mapper/centos-swap swap swap defaults 0 0 #如果是克隆的虚拟机,需要删除 UUID

[root@k8s-node1 ~]# vim /etc/fstab #给 swap 这行开头加一下注释# #/dev/mapper/centos-swap swap swap defaults 0 0 #如果是克隆的虚拟机,需要删除 UUID

K8S集群初始化实验环境配置_第3张图片

问题 1:为什么要关闭 swap 交换分区?

        Swap 是交换分区,如果机器内存不够,会使用 swap 分区,但是 swap 分区的性能较低,k8s 设计的 时候为了能提升性能,默认是不允许使用交换分区的。Kubeadm 初始化的时候会检测 swap 是否关 闭,如果没关闭,那就初始化失败。如果不想要关闭交换分区,安装 k8s 的时候可以指定--ignorepreflight-errors=Swap 来解决。 

1.6 修改机器内核参数 

[root@k8s-master1 ~]# modprobe br_netfilter 

[root@k8s-master1 ~]# echo "modprobe br_netfilter" >> /etc/profile 

[root@k8s-master1 ~]# cat > /etc/sysctl.d/k8s.conf <> /etc/profile 

[root@k8s-master2 ~]# cat > /etc/sysctl.d/k8s.conf <> /etc/profile 

[root@k8s-node1 ~]# cat > /etc/sysctl.d/k8s.conf <

问题 1:sysctl 是做什么的?

        在运行时配置内核参数

                -p 从指定的文件加载系统参数,如不指定即从/etc/sysctl.conf 中加载

问题 2:为什么要执行 modprobe br_netfilter?

        修改/etc/sysctl.d/k8s.conf 文件,增加如下三行参数:

                net.bridge.bridge-nf-call-ip6tables = 1

                net.bridge.bridge-nf-call-iptables = 1

                net.ipv4.ip_forward = 1

        sysctl -p /etc/sysctl.d/k8s.conf 出现报错:

                sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-ip6tables: No such file or 

directory

                sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables: No such file or 

directory

        解决方法:

                modprobe br_netfilter

问题 3:为什么开启 net.bridge.bridge-nf-call-iptables 内核参数?

        在 centos 下安装 docker,执行 docker info 出现如下警告:

                WARNING: bridge-nf-call-iptables is disabled

                WARNING: bridge-nf-call-ip6tables is disabled

        解决办法:

                vim /etc/sysctl.d/k8s.conf

                        net.bridge.bridge-nf-call-ip6tables = 1

                        net.bridge.bridge-nf-call-iptables = 1

问题 4:为什么要开启 net.ipv4.ip_forward = 1 参数?

        kubeadm 初始化 k8s 如果报错:

        就表示没有开启 ip_forward,需要开启。

                net.ipv4.ip_forward 是数据包转发:

                        出于安全考虑,Linux 系统默认是禁止数据包转发的。所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的 ip 地址将数据包发往本机另一块网卡,该网卡根据路由表继续发送数据包。这通常是路由器所要实现的功能。

                        要让 Linux 系统具有路由转发功能,需要配置一个 Linux 的内核参数 net.ipv4.ip_forward。这个参数指定了 Linux 系统当前对路由转发功能的支持情况;其值为 0 时表示禁止进行 IP 转发;如果是 1,则说明 IP 转发功能已经打开。

1.7 关闭 firewalld 防火墙

[root@k8s-master1 ~]# systemctl stop firewalld ; systemctl disable firewalld [root@k8s-master2 ~]# systemctl stop firewalld ; systemctl disable firewalld [root@k8s-node1 ~]# systemctl stop firewalld ; systemctl disable firewalld 

1.8 关闭 selinux

[root@k8s-master1 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

#修改 selinux 配置文件之后,重启机器,selinux 配置才能永久生效

[root@k8s-master2 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

#修改 selinux 配置文件之后,重启机器,selinux 配置才能永久生效

[root@k8s-node1 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

#修改 selinux 配置文件之后,重启机器,selinux 配置才能永久生效

[root@k8s-master1 ~]#getenforce

Disabled

#显示 Disabled 说明 selinux 已经关闭

[root@k8s-master2 ~]#getenforce

Disabled

#显示 Disabled 说明 selinux 已经关闭

[root@k8s-node1 ~]#getenforce

Disabled

#显示 Disabled 说明 selinux 已经关闭 

1.9 配置阿里云的 repo 源

在 k8s-master1 上操作:

安装 rzsz 命令 ,方便传包

[root@k8s-master1 ~]# yum install lrzsz -y

安装 scp,方便传包

[root@k8s-master1 ~]#yum install openssh-clients

#备份基础 repo 源

[root@k8s-master1 ~]# mkdir /root/repo.bak

[root@k8s-master1 ~]# cd /etc/yum.repos.d/

[root@k8s-master1 ~]# mv * /root/repo.bak/ 

#下载阿里云的 repo 源 

把编辑好的CentOS-Base.repo 文件上传到 k8s-master1 主机的/etc/yum.repos.d/目录下

从本地目录中直接拖拽到xshell终端,也可通过其他传输方法执行

----------------------------------------------------------------------------------------------

在 k8s-master2 上操作:

安装 rzsz 命令 ,方便传包

[root@k8s-master2 ~]# yum install lrzsz -y

安装 scp,方便传包

[root@k8s-master2 ~]#yum install openssh-clients

#备份基础 repo 源

[root@k8s-master2 ~]# mkdir /root/repo.bak

[root@k8s-master2 ~]# cd /etc/yum.repos.d/

[root@k8s-master2 ~]# mv * /root/repo.bak/ 

#下载阿里云的 repo 源 

把编辑好的CentOS-Base.repo 文件上传到 k8s-master2 主机的/etc/yum.repos.d/目录下

从本地目录中直接拖拽到xshell终端,也可通过其他传输方法执行

----------------------------------------------------------------------------------------------

在 k8s-node1 上操作:

安装 rzsz 命令 ,方便传包

[root@k8s-node1 ~]# yum install lrzsz -y

安装 scp,方便传包

[root@k8s-node1 ~]#yum install openssh-clients

#备份基础 repo 源

[root@k8s-node1 ~]# mkdir /root/repo.bak

[root@k8s-node1 ~]# cd /etc/yum.repos.d/

[root@k8s-node1 ~]# mv * /root/repo.bak/ 

#下载阿里云的 repo 源 

把编辑好的 CentOS-Base.repo 文件上传到 k8s-node1 主机的/etc/yum.repos.d/目录下

从本地目录中直接拖拽到xshell终端,也可通过其他传输方法执行
​
#配置国内阿里云 docker 的 repo 源

[root@k8s-master1 ~]# yum install yum-utils -y

[root@k8s-master1 ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

[root@k8s-master2 ~]# yum install yum-utils -y

[root@k8s-master2 ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

[root@k8s-node1 ~]# yum install yum-utils -y

[root@k8s-node1 ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

​

1.10 配置安装 k8s 组件需要的阿里云的 repo 源

[root@k8s-master1 ~]#vim /etc/yum.repos.d/kubernetes.repo

[kubernetes]

name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1

gpgcheck=0

#将 k8s-master1 上 Kubernetes 的 repo 源复制给 k8s-master2 和 k8s-node1

[root@k8s-master1 ~]# scp /etc/yum.repos.d/kubernetes.repo k8s-master2:/etc/yum.repos.d/

[root@k8s-master1 ~]# scp /etc/yum.repos.d/kubernetes.repo k8s-node1:/etc/yum.repos.d/ 

1.11 配置时间同步

#安装 ntpdate 命令

[root@k8s-master1 ~]# yum install ntpdate -y

#跟网络时间做同步

[root@k8s-master1 ~]# ntpdate cn.pool.ntp.org #把时间同步做成计划任务

[root@k8s-master1 ~]# crontab -e

* */1 * * * /usr/sbin/ntpdate cn.pool.ntp.org

#重启 crond 服务

[root@k8s-master1 ~]#service crond restart

在 k8s-master2 上执行如下:

#安装 ntpdate 命令

[root@k8s-master2 ~]# yum install ntpdate -y

#跟网络时间做同步

[root@k8s-master2 ~]#ntpdate cn.pool.ntp.org

#把时间同步做成计划任务

[root@k8s-master2 ~]#crontab -e

* */1 * * * /usr/sbin/ntpdate cn.pool.ntp.org #重启 crond 服务

[root@k8s-master2 ~]#service crond restart

在 k8s-node1 上执行如下:

#安装 ntpdate 命令

[root@k8s-node1 ~]# yum install ntpdate -y

#跟网络时间做同步

[root@k8s-node1 ~]# ntpdate cn.pool.ntp.org

#把时间同步做成计划任务

[root@k8s-node1 ~]# crontab -e

* */1 * * * /usr/sbin/ntpdate cn.pool.ntp.org

#重启 crond 服务

[root@k8s-node1 ~]# service crond restart 

1.12 开启 ipvs

#把 ipvs.modules 上传到 k8s-master1 机器的/etc/sysconfig/modules/目录下 
[root@k8s-master1 docker]# chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep ip_vs

K8S集群初始化实验环境配置_第4张图片

[root@k8s-master1 ~]# scp /etc/sysconfig/modules/ipvs.modules k8s-master2:/etc/sysconfig/modules/

[root@k8s-master1 ~]# scp /etc/sysconfig/modules/ipvs.modules k8s-node1:/etc/sysconfig/modules/

[root@k8s-master2 ~]# chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep ip_vs

K8S集群初始化实验环境配置_第5张图片

[root@k8s-node1 ~]# chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep ip_vs

K8S集群初始化实验环境配置_第6张图片

问题 1:ipvs 是什么?

        ipvs (IP Virtual Server) 实现了传输层负载均衡,也就是我们常说的 4 层 LAN 交换,作为 Linux 内核的一部分。ipvs 运行在主机上,在真实服务器集群前充当负载均衡器。ipvs 可以将基于 TCP 和 UDP 的服务请求转发到真实服务器上,并使真实服务器的服务在单个 IP 地址上显示为虚拟服务。

问题 2:ipvs 和 iptable 对比分析

        kube-proxy 支持 iptables 和 ipvs 两种模式, 在 kubernetes v1.8 中引入了 ipvs 模式,在 v1.9 中处于 beta 阶段,在 v1.11 中已经正式可用了。iptables 模式在 v1.1 中就添加支持了,从 v1.2 版本开始 iptables 就是 kube-proxy 默认的操作模式,ipvs 和 iptables 都是基于 netfilter 的,但是 ipvs 采用的是 hash 表,因此当 service 数量达到一定规模时,hash 查表的速度优势就会显现 出来,从而提高 service 的服务性能。

        那么 ipvs 模式和 iptables 模式之间有哪些差异呢?

                1、ipvs 为大型集群提供了更好的可扩展性和性能

                2、ipvs 支持比 iptables 更复杂的复制均衡算法(最小负载、最少连接、加权等等)

                3、ipvs 支持服务器健康检查和连接重试等功能 

1.13 安装基础软件包 

[root@k8s-master1 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlibdevel python-devel epel-release openssh-server socat ipvsadm conntrack ntpdate telnet ipvsadm

[root@k8s-master2 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlibdevel python-devel epel-release openssh-server socat ipvsadm conntrack ntpdate telnet ipvsadm

[root@k8s-node1 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlibdevel python-devel epel-release openssh-server socat ipvsadm conntrack ntpdate telnet ipvsadm 

1.14 安装 iptables

如果用 firewalld 不习惯,可以安装 iptables ,在 k8s-master1、k8s-master2、 k8s-node1 上操作:

#安装 iptables

yum install iptables-services -y

#禁用 iptables

service iptables stop && systemctl disable iptables

#清空防火墙规则

iptables -F

你可能感兴趣的:(linux,运维,docker,kubernetes)