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

news/2024/10/11 10:32:51/

一,规划

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.ppmy.cn/news/1537400.html

相关文章

D3.js(五):实现组织架构图

实现组织架构图 效果初始化组织机构容器并实现缩放平移功能效果源码 渲染节点效果源码 渲染连线效果源码 完整源码 效果 初始化组织机构容器并实现缩放平移功能 效果 源码 import {useEffect} from react; import TreeData from ./json/tree-data.json;interface ITreeConfig…

【SQL调优指南--附带实例】

以下是50个SQL调优的例子&#xff0c;每个例子都附带了可执行的SQL语句&#xff1a; 删除重复记录&#xff1a; DELETE FROM table_name WHERE id NOT IN (SELECT MIN(id) FROM table_name GROUP BY col1, col2);使用索引来加速查询&#xff1a; ALTER TABLE table_name ADD…

MySQL(B站CodeWithMosh)——2024.10.7(10)

ZZZZZZ目的ZZZZZZ代码ZZZZZZ重点ZZZZZZ操作&#xff08;非代码&#xff0c;需要自己手动&#xff09; 3- HAVING子句 | The HAVING Clause_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1UE41147KC?p43&vd_sourceeaeec77dfceb13d96cce76cc299fdd08 在sql_invoici…

手撕数据结构 —— 单链表(C语言讲解)

目录 1.为什么要有链表 2.什么是链表 3.链表的分类 4.无头单向非循环链表的实现 SList.h中接口总览 具体实现 链表节点的定义 打印链表 申请结点 尾插 头插 尾删 头删 查找 在pos位置之前插入 在pos位置之后插入 删除pos位置 删除pos位置之后的值 5.完整代码…

物理学基础精解【61】

文章目录 线性滤波器一、线性滤波器的结构二、线性滤波器的性质三、线性滤波器的公式四、线性滤波器的数学原理五、线性滤波器的计算六、例子 线性滤波器的数学方程式线性滤波器的主要种类一、线性滤波器的主要种类及其特点二、每个种类的数学原理与公式1. 均值滤波器2. 高斯滤…

【计算机网络 - 基础问题】每日 3 题(三十四)

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?typeblog &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞…

数学建模算法与应用 第7章 数理统计与方法

目录 7.1 参数估计与假设检验 Matlab代码示例&#xff1a;均值的假设检验 7.2 Bootstrap方法 Matlab代码示例&#xff1a;Bootstrap估计均值的置信区间 7.3 方差分析 Matlab代码示例&#xff1a;单因素方差分析 7.4 回归分析 Matlab代码示例&#xff1a;线性回归 7.5 基…

Matlab实现海洋捕食者优化算法优化回声状态网络模型 (MPA-ESN)(附源码)

目录 1.内容介绍 2部分代码 3.实验结果 4.内容获取 1内容介绍 海洋捕食者优化算法&#xff08;Marine Predators Algorithm, MPA&#xff09;是一种基于海洋生物捕食行为的新型群体智能优化算法。MPA通过模拟海洋捕食者如鲨鱼、海豚等在寻找猎物时的追踪、包围和攻击行为&…