当前位置: 首页 > news >正文

【kubernetes】环境准备及K8S二进制安装【最新最全】

一,规划

1,架构

主节点(3台 master)+ 工作节点 (1台 node1)
Pod网段: 10.0.0.0/16
Service网段: 10.255.0.0/16

实验环境规划:
操作系统:centos7.6
配置: 4Gib内存/6vCPU/100G硬盘
注意:也可以用4vCPU
网络:NAT
开启虚拟机的虚拟化:
在这里插入图片描述

2,K8S集群角色 Ip 主机名 安装的组件

K8S集群角色Ip主机名安装的组件
控制节点192.168.40.180master1apiserver、controller-manager、scheduler、etcd、docker、keepalived、nginx
控制节点192.168.40.181master2apiserver、controller-manager、scheduler、etcd、docker、keepalived、nginx
控制节点192.168.40.182master3apiserver、controller-manager、scheduler、etcd、docker
工作节点192.168.40.183node1kubelet、kube-proxy、docker、calico、coredns
Vip192.168.40.199

二,初始准备

1,配置静态ip

对四台机器分别配置,IP地址为192.168.40.180/181/182/183

# vim /etc/sysconfig/network-scripts/ifcfg-ens33TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.40.180
NETMASK=255.255.255.0
GATEWAY=192.168.40.2
DNS1=192.168.40.2

设置完毕后,重启:

service network restart

2,配置/ 互相绑定主机名

设置主机名,并刷新:

hostnamectl set-hostname master1 && bash

绑定主机名:

# /etc/hosts
192.168.40.180   master1
192.168.40.181   master2
192.168.40.182   master3
192.168.40.183   node1

3,配置主机之间无密码登录

每台机器,生成ssh 密钥对:

ssh-keygen -t rsa    #一路回车,不输入密码

每台机器上,把本地的ssh公钥文件安装到远程主机对应的账户

ssh-copy-id  -i  .ssh/id_rsa.pub  master1
ssh-copy-id  -i  .ssh/id_rsa.pub  master2
ssh-copy-id  -i  .ssh/id_rsa.pub  master3
ssh-copy-id  -i  .ssh/id_rsa.pub  node1

4,关闭防火墙

在每一台机器上,关闭firewalld防火墙。

systemctl stop firewalld ; systemctl disable firewalld

5,关闭selinux

在每一台机器上,关闭selinux

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

重启服务器,reboot

# 一定重启后,执行如下命令,如果显示Disabled说明selinux已经关闭
getenforce

6,关闭交换分区swap

在每一台机器上,关闭交换分区swap

# 临时关闭
swapoff -a# 永久关闭
vi /etc/fstab   
#/dev/mapper/centos-swap swap      swap    defaults        0 0

如果是克隆的虚拟机,需要同时删除UUID

7,修改机器内核参数

每台机器执行同样操作

# 加载内核
modprobe br_netfilter#验证模块是否加载成功:
lsmod |grep br_netfilter#修改内核参数
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# 使刚才修改的内核参数生效
sysctl -p /etc/sysctl.d/k8s.conf

sysctl:在运行时配置内核参数工具
-p :从指定的文件加载系统参数,如不指定即从/etc/sysctl.conf中加载

8,配置阿里云repo源

每台机器上设置阿里云的repo源,和安装docker和containerd需要配置安装阿里云的repo源。

# 安装scp
yum install openssh-clients# 安装工具
yum install yum-utils -y# 安装阿里源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo# 配置国内阿里云docker的repo源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

9,时间同步

每台机器,都做相同操作

# 安装ntpdate命令
yum install ntpdate -y# 跟网络时间做同步
ntpdate cn.pool.ntp.org# 把时间同步做成计划任务
crontab -e
* */1 * * * /usr/sbin/ntpdate   cn.pool.ntp.org# 重启crond服务
service crond restart

10,安装iptables(可选)

#安装iptables
yum install iptables-services -y
#禁用iptables
service iptables stop   && systemctl disable iptables
#清空防火墙规则
iptables -F

11,开启ipvs

不开启ipvs将会使用iptables进行数据包转发,但是效率低,所以官网推荐需要开通ipvs。

# 安装
yum install ipvsadm

加载相关模块:
vi /etc/sysconfig/modules/ipvs.modules

#!/bin/bash
ipvs_modules="ip_vs ip_vs_lc ip_vs_wlc ip_vs_rr ip_vs_wrr ip_vs_lblc ip_vs_lblcr ip_vs_dh ip_vs_sh ip_vs_nq ip_vs_sed ip_vs_ftp nf_conntrack"
for kernel_module in ${ipvs_modules}; do/sbin/modinfo -F filename ${kernel_module} > /dev/null 2>&1if [ 0 -eq 0 ]; then/sbin/modprobe ${kernel_module}fi
done

添加权限: chmod 755 /etc/sysconfig/modules/ipvs.modules
执行文件: bash /etc/sysconfig/modules/ipvs.modules
检查IPVS是否正确安装:

lsmod | grep ip_vs 
或 
ps -ef | grep ip_vs

在这里插入图片描述

【扩展】:IPVS常用的调度方式
(1)轮询调度
以轮转的方式在服务器间分发连接。
轮询调度:缩写 rr
加权轮询调度 缩写 wrr
(2)最小连接调度
将连接分发给活动连接最小的工作服务器。
最小连接调度:缩写 lc
加权最小连接调度:缩写 wlc
(3)局部性的调度
基本原则是最小化服务器之间的共享缓存,从而避免增加服务器的负载。
基于局部性的最小连接调度: 缩写 lblc
适用情形:当来自共享数据的同一ip的多个连接请求会给服务器带来大量的负载,比如出现庞大cookie或当量会话数据的情况。

12,安装基础软件包

在每台机器上,安装基础软件包

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 zlib-devel  python-devel epel-release openssh-server socat  ipvsadm conntrack ntpdate telnet rsync

13,安装docker-ce

在每台机器上,安装docker-ce

yum install docker-ce docker-ce-cli containerd.io -y systemctl start docker && systemctl enable docker.service && systemctl status docker

【说明】

  • 如果用kubeadm安装k8s,那么控制节点必须安装docker,因为apiserver、controller-manager、scheduler、etcd组件,都是以pod运行。
  • 如果二进制安装k8s,并且不打算在控制节点部署其他相关服务,那么控制节点是可以不安装docker的。

14,配置docker镜像加速器

在每台机器上,配置docker镜像加速器

tee /etc/docker/daemon.json << 'EOF'
{"registry-mirrors":["https://rsbud4vc.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com","http://qtid6917.mirror.aliyuncs.com", "https://rncxm540.mirror.aliyuncs.com"],"exec-opts": ["native.cgroupdriver=systemd"]
} 
EOF

【注意】:修改docker文件驱动为systemd,默认为cgroupfs。
kubelet默认使用systemd,两者必须一致才可以。

systemctl daemon-reload && systemctl restart docker && systemctl status docker

下载搭建所需的文件:k8s二进制文件和cfssl可执行文件.zip

三,搭建etcd集群

etcd集群仅在3台控制服务器,安装即可。

1,配置工作目录

#创建配置文件和证书文件存放目录
mkdir -p /etc/etcd
mkdir -p /etc/etcd/ssl

2,安装签发证书工具cfssl

mkdir /data/work -p
cd /data/work/

cfssl-certinfo_linux-amd64 、
cfssljson_linux-amd64 、
cfssl_linux-amd64
上传到/data/work/目录下

#把文件变成可执行权限
chmod +x *
mv cfssl_linux-amd64 /usr/local/bin/cfssl
mv cfssljson_linux-amd64 /usr/local/bin/cfssljson
mv cfssl-certinfo_linux-amd64 /usr/local/bin/cfssl-certinfo

3,配置ca证书

3-1,生成ca证书请求文件
# vim /data/work/ca-csr.json{"CN": "kubernetes","key": {"algo": "rsa","size": 2048},"names": [{"C": "CN","ST": "Hubei","L": "Wuhan","O": "k8s","OU": "system"}],"ca": {"expiry": "87600h" # 证书过期时间10年}
}
3-2,生成ca证书文件
# vim /data/work/ca-config.json {"signing": {"default": {"expiry": "87600h"},"profiles": {"kubernetes": {"usages": ["signing","key encipherment","server auth","client auth"],"expiry": "87600h"}}}
}
3-3,签发证书命令
cfssl gencert -initca ca-csr.json  | cfssljson -bare ca

4,生成etcd证书

配置etcd证书请求,hosts的ip变成自己etcd所在节点的ip

# vim /data/work/etcd-csr.json {"CN": "etcd","hosts": ["127.0.0.1","192.168.40.180","192.168.40.181","192.168.40.182",  "192.168.40.199"],"key": {"algo": "rsa","size": 2048},"names": [{"C": "CN","ST": "Hubei","L": "Wuhan","O": "k8s","OU": "system"}]
} 

【注意】:
上述文件hosts字段中IP为所有etcd节点的集群内部通信IP,可以预留几个ip,做扩容用。

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes etcd-csr.json | cfssljson  -bare etcd

查看是否生成:

ls etcd*.pem#显示如下文件,说明生成证书成功:
etcd-key.pem  etcd.pem

5,部署etcd集群

在3台master节点上,把etcd-v3.4.13-linux-amd64.tar.gz上传到/data/work目录下

tar -xf etcd-v3.4.13-linux-amd64.tar.gz
cp -p etcd-v3.4.13-linux-amd64/etcd* /usr/local/bin/
scp -r etcd-v3.4.13-linux-amd64/etcd* master2:/usr/local/bin/
scp -r etcd-v3.4.13-linux-amd64/etcd* master3:/usr/local/bin/
5-1,创建配置文件:
# vim /data/work/etcd.conf #[Member]
ETCD_NAME="etcd1"
ETCD_DATA_DIR

http://www.mrgr.cn/news/45327.html

相关文章:

  • 【Centos】系统安装虚拟系统管理器创建虚拟机
  • Maven 父子模块的 pom.xml 文件编写
  • 查找满足条件的行
  • MySQL使用innodb引擎的查询优化
  • 常见的图像处理算法:Canny边缘检测
  • 火情监测摄像机:守护生命与财产安全的“眼睛”
  • JVS·智能BI数据可视化图表:普通列表与分组列表配置全解析
  • QT开发:深入掌握 QtGui 和 QtWidgets 基本控件:QLabel、 QPushButton 和 QLineEdit 的应用
  • 【优选算法】--- 分治 快速排序
  • winform appconfig
  • Chromium 如何查找前端Browser 等对象定义在c++中的实现呢
  • 为什么Linux系统下的程序无法在Windows下运行
  • ORA-00257 archiver error 错误的处理方法
  • CAN XL协议标准在CANoe中的应用
  • 如何处理建筑材料弯曲?玛哈特矫平机高效应对
  • ruoyi-python 若依python版本部署及新增模块【问题解决】
  • 拍立淘API接口以图搜商品列表功能实现技术分享item_search_img|返回商品列表商品id商品价格url
  • 43页PPT | 大健康行业BI解决方案
  • Chromium 中JavaScript navigator对象c++实现分析
  • 获取外盘期货高频数据的方法以及量化分析