Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >kubeadm 搭建K8S 1.18集群--初始化环境

kubeadm 搭建K8S 1.18集群--初始化环境

原创
作者头像
陈不成i
修改于 2021-07-01 06:30:59
修改于 2021-07-01 06:30:59
55300
代码可运行
举报
文章被收录于专栏:ops技术分享ops技术分享
运行总次数:0
代码可运行

一.环境说明

Kubernetes高可用一般建议大于等于3台的奇数台,我使用3台master来做高可用,如果是虚机的话不最好不要克隆

  • 192.168.31.105:6443 #为VIP
  • kube-apiserver #三台节点
  • kube-schedulet #三台节点
  • kube-controller-manager #三台节点
  • ETCD #三台节点

需要注意的是在master节点需要将CPU设置为2,kubeadm安装cpu需要为2

二.初始化环境

1.批量修改主机名,以及免密

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
hostnamectl set-hostname k8s01  #所有机器按照要求修改
bash        #刷新主机名
#配置host
cat >> /etc/hosts <<EOF
192.168.31.100  k8s-01
192.168.31.101  k8s-02
192.168.31.102  k8s-03
192.168.31.103  k8s-04
192.168.31.104  k8s-05
EOF
#设置k8s-01为分发机 (只需要在k8s-01服务器操作即可)
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum install -y expect
#分发公钥
ssh-keygen -t rsa -P "" -f /root/.ssh/id_rsa
for i in k8s-01 k8s-02 k8s-03 k8s-04 k8s-05;do
expect -c "
spawn ssh-copy-id -i /root/.ssh/id_rsa.pub root@$i
        expect {
                \"*yes/no*\" {send \"yes\r\"; exp_continue}
                \"*password*\" {send \"123456\r\"; exp_continue}
                \"*Password*\" {send \"123456\r\";}
        } "
done 
所有节点关闭Selinux、iptables、swap分区
systemctl stop firewalld
systemctl disable firewalld
iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat
iptables -P FORWARD ACCEPT
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

2.升级内核 (可选方案)

目前官方推荐内核版本大于3.10,因为kubernetes 1.18版本还是属于较新版本,如果不用最新的内核,个人会担心出现一些故障问题等。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
#默认安装为最新内核
yum --enablerepo=elrepo-kernel install kernel-ml
#修改内核顺序
grub2-set-default  0 && grub2-mkconfig -o /etc/grub2.cfg
#使用下面命令看看确认下是否启动默认内核指向上面安装的内核
grubby --default-kernel
#这里的输出结果应该为我们升级后的内核信息
reboot
#可以等所有初始化步骤结束进行reboot操作

在Kubernetes 1.18版本出现DNS解析异常,原因是最新Kubernetes使用IPVS模块比较新,需要内核系统版本支持,所以希望大家都升级为最新内核issues

3.所有节点配置yum源

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum makecache

新安装的服务器可以安装下面的软件包,可以解决99%的依赖问题

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yum -y install gcc gcc-c++ make autoconf libtool-ltdl-devel gd-devel freetype-devel libxml2-devel libjpeg-devel libpng-devel openssh-clients openssl-devel curl-devel bison patch libmcrypt-devel libmhash-devel ncurses-devel binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel glibc glibc-common glibc-devel libgcj libtiff pam-devel libicu libicu-devel gettext-devel libaio-devel libaio libgcc libstdc++ libstdc++-devel unixODBC unixODBC-devel numactl-devel glibc-headers sudo bzip2 mlocate flex lrzsz sysstat lsof setuptool system-config-network-tui system-config-firewall-tui ntsysv ntp pv lz4 dos2unix unix2dos rsync dstat iotop innotop mytop telnet iftop expect cmake nc gnuplot screen xorg-x11-utils xorg-x11-xinit rdate bc expat-devel compat-expat1 tcpdump sysstat man nmap curl lrzsz elinks finger bind-utils traceroute mtr ntpdate zip unzip vim wget net-tools

4.由于开启内核 ipv4 转发需要加载 br_netfilter 模块,所以加载下该模块,每台节点: modprobe br_netfilter modprobe ip_conntrack

5.优化内核参数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cat > kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
vm.swappiness=0 # 禁止使用 swap 空间,只有当系统 OOM 时才允许使用它
vm.overcommit_memory=1 # 不检查物理内存是否够用
vm.panic_on_oom=0 # 开启 OOM
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
EOF
cp kubernetes.conf  /etc/sysctl.d/kubernetes.conf
sysctl -p /etc/sysctl.d/kubernetes.conf
#分发到所有节点
for i in k8s-02 k8s-03 k8s-04 k8s-05
do
    scp kubernetes.conf root@$i:/etc/sysctl.d/
    ssh root@$i sysctl -p /etc/sysctl.d/kubernetes.conf
done
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bridge-nf 使得netfilter可以对Linux网桥上的 IPv4/ARP/IPv6 包过滤。比如,设置net.bridge.bridge-nf-call-iptables=1后,二层的网桥在转发包时也会被 iptables的 FORWARD 规则所过滤。常用的选项包括:
net.bridge.bridge-nf-call-arptables:是否在 arptables 的 FORWARD 中过滤网桥的 ARP 包
net.bridge.bridge-nf-call-ip6tables:是否在 ip6tables 链中过滤 IPv6 包
net.bridge.bridge-nf-call-iptables:是否在 iptables 链中过滤 IPv4 包
net.bridge.bridge-nf-filter-vlan-tagged:是否在 iptables/arptables 中过滤打了 vlan 标签的包。

6.所有节点安装ipvs

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
为什么要使用IPVS,从k8s的1.8版本开始,kube-proxy引入了IPVS模式,IPVS模式与iptables同样基于Netfilter,但是采用的hash表,因此当service数量达到一定规模时,hash查表的速度优势就会显现出来,从而提高service的服务性能。
ipvs依赖于nf_conntrack_ipv4内核模块,4.19包括之后内核里改名为nf_conntrack,1.13.1之前的kube-proxy的代码里没有加判断一直用的nf_conntrack_ipv4,好像是1.13.1后的kube-proxy代码里增加了判断,我测试了是会去load nf_conntrack使用ipvs正常
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack
#查看是否已经正确加载所需的内核模块

7.所有节点安装ipset yum install ipset -y

iptables是Linux服务器上进行网络隔离的核心技术,内核在处理网络请求时会对iptables中的策略进行逐条解析,因此当策略较多时效率较低;而是用IPSet技术可以将策略中的五元组(协议,源地址,源端口,目的地址,目的端口)合并到有限的集合中,可以大大减少iptables策略条目从而提高效率。测试结果显示IPSet方式效率将比iptables提高100倍

为了方面ipvs管理,这里安装一下ipvsadm yum install ipvsadm -y

8.所有节点设置系统时区

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#将当前的 UTC 时间写入硬件时钟
timedatectl set-timezone Asia/Shanghai
timedatectl set-local-rtc 0
#重启依赖于系统时间的服务
systemctl restart rsyslog
systemctl restart crond

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
K8S集群安装
为了方便后面集群节点间的直接调用,在这配置一下主机名解析,企业中推荐使用内部DNS服务器
ha_lydms
2023/08/10
6210
K8S集群安装
基于Kubernetes v1.24.0的集群搭建(二)
上一篇文章主要是介绍了,每台虚拟机的环境配置。接下来我们开始有关K8S的相关部署。
AI.NET 极客圈
2022/11/11
7410
基于Kubernetes v1.24.0的集群搭建(二)
K8s集群环境搭建
说明:现在需要安装kubernetes的集群环境,但是又不想过于麻烦,所有选择使用kubeadm方式
Alone-林
2022/11/22
1.8K0
K8s集群环境搭建
kubeadm 安装 k8s 集群(版本自选)
互联网早期,企业将服务直接部署在物理机上;后来由于一系列变化,经历了虚拟化部署,开始了 容器部署之路,Docker 无疑是其中的佼佼者。
看、未来
2022/08/11
8851
kubeadm 安装 k8s 集群(版本自选)
快速入门Kubernetes(K8S)——介绍及安装
首先我在这里说明一下我为什么学习K8S,现在的大型联网公司基本都镜像的方式进行一个管理(docker教程),但是当镜多的时候就不方便管理和维护所以就产生了Kubernetes这个组件。
大数据老哥
2021/02/04
9340
快速入门Kubernetes(K8S)——介绍及安装
k8s(二)搭建「建议收藏」
本次环境搭建需要三台CentOS服务器(一主二从),然后在每台服务器中分别安装Docker(18.06.3)、kubeadm(1.18.0)、kubectl(1.18.0)和kubelet(1.18.0)。
全栈程序员站长
2022/09/22
4690
k8s(二)搭建「建议收藏」
2020-07-22-腾讯云-slb-kubeadm高可用集群搭建
title: "2020-07-22-腾讯云-slb-kubeadm高可用集群搭建"
对你无可奈何
2020/07/23
1.5K0
01-k8s集群搭建-基础环境准备
安装依赖包 cd /etc/yum.repos.d sudo mkdir bak sudo mv * bak sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo sudo wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo sudo sed -i 's\$releaseve
云计算小黑
2022/12/28
3190
k8s部署篇之Kubeadm高可用
公司DDD架构的新项目采用云原生,K8s+Docker这方面的知识就必不可少了 因此,我背着同事偷偷的卷了卷,然后Docker考核成了公司唯一一个优秀,然后。。。后续就不多说了,总之一言难尽
小炜同学
2022/09/23
1K0
Kubernetes高可用集群二进制部署(六)Kubernetes集群节点添加
必须配置native.cgroupdriver,不配置这个步骤会导致kubelet启动失败
鱼找水需要时间
2023/08/03
3980
Kubernetes高可用集群二进制部署(六)Kubernetes集群节点添加
虚拟机搭建 k8s 集群实验环境及 Harbor 私有仓库
VMware Fusion -> 偏好设置 -> 网络 -> 解锁后点击 + 号 需要下面的设置
用户1446655
2021/01/10
1.9K0
虚拟机搭建 k8s 集群实验环境及 Harbor 私有仓库
k8s 实践经验(二):搭建 k8s 集群
Kubernetes集群大致分为两类:一主多从和多主多从。 一主多从:一个Master节点和多台Node节点,搭建简单,但是有单机故障风险,适合用于测试环境。 多主多从:多台Master和多台Node节点,搭建麻烦,安全性高,适合用于生产环境。
看、未来
2022/05/06
1.4K0
k8s 实践经验(二):搭建 k8s 集群
Kubernetes高可用集群二进制部署(一)主机准备和负载均衡器安装
Kubernetes(简称为:k8s)是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效,Kubernetes提供了资源调度、部署管理、服务发现、扩容缩容、监控,维护等一整套功能,努力成为跨主机集群的自动部署、扩展以及运行应用程序容器的平台。 它支持一系列容器工具, 包括Docker、Containerd等。
鱼找水需要时间
2023/08/03
6830
Kubernetes高可用集群二进制部署(一)主机准备和负载均衡器安装
二进制部署k8s教程04 - 初始化服务器
!TIP二进制部署 k8s - 初始化系统环境***转载请注明出处:https://janrs.com/4xoz有任何问题欢迎在底部评论区发言。初始化系统环境!NOTE需要在每台服务器都执行。只需要初始化部署 k8s 集群的服务器。部署 etcd 集群的服务器不需要初始化。设置主机名hostnamectl set-hostname k8s-master01hostnamectl set-hostname k8s-master02hostnamectl set-hostname k8s-master03设置
janrs.com
2023/03/08
5660
centos8+kubeadm1.20.5+cilium+hubble环境搭建
https://cloud.tencent.com/document/product/457/35747 一些containerd与docker的对应
对你无可奈何
2021/03/24
2.1K1
Kubernetes安装准备环境
这里所有的操作命令需要在kubernetes集群内所有的主机上执行,是安装kubernetes集群环境所需要的基本设置。 安装相关依赖包
jwangkun
2021/12/23
5820
kubeadm快速部署kubernetes(十九)
安装完成后配置启动时的命令,否则docker会将iptables FORWARD chain的默认策略设置为DROP
yuezhimi
2020/09/30
4780
kubeadm快速部署kubernetes(十九)
k8s1.15单机部署
由于我这里在装系统的时候默认就没有设置swap分区,所以可以跳过,如果有swap分区,关闭方法如下:
dogfei
2020/07/31
6390
Kubernetes 集群部署
​kubeadm是Kubernetes官方提供的用于快速安装Kubernetes集群的工具,致力于简化集群的安装过程,并解决Kubernetes集群的高可用问题。
星哥玩云
2022/09/15
5800
Kubernetes 集群部署
k8s部署实战
节点名称如果都是lcoal,会造成后续加入 kubeadm join 时,pods pending,名称名称相同
AndreKzWu
2022/09/19
1K0
相关推荐
K8S集群安装
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档