【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.180 master1 apiserver、controller-manager、scheduler、etcd、docker、keepalived、nginx
控制节点 192.168.40.181 master2 apiserver、controller-manager、scheduler、etcd、docker、keepalived、nginx
控制节点 192.168.40.182 master3 apiserver、controller-manager、scheduler、etcd、docker
工作节点 192.168.40.183 node1 kubelet、kube-proxy、docker、calico、coredns
Vip 192.168.40.199

二,初始准备

1,配置静态ip

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

# vim /etc/sysconfig/network-scripts/ifcfg-ens33

TYPE=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

加载相关模块:
vim /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>&1
 if [ 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="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.40.180:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.40.180:2379,http://127.0.0.1:2379"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.40.180:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.40.180:2379"
ETCD_INITIAL_CLUSTER="etcd1=https://192.168.40.180:2380,etcd2=https://192.168.40.181:2380,etcd3=https://192.168.40.182:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"

【注意】:etcd1 是master1上的etct名称,其他机器上的配置文件,相应要依次更改名称为 etcd2,etcd3,etcd4...

【说明】
ETCD_NAME:节点名称,集群中唯一
ETCD_DATA_DIR:数据目录
ETCD_LISTEN_PEER_URLS:集群通信监听地址
ETCD_LISTEN_CLIENT_URLS:客户端访问监听地址
ETCD_INITIAL_ADVERTISE_PEER_URLS:集群通告地址
ETCD_ADVERTISE_CLIENT_URLS:客户端通告地址
ETCD_INI

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直奔跑在路上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值