centos7---kubernetes搭建

kubernetes集群部署

提示:


文章目录


前言

提示:这里可以添加本文要记录的大概内容:

例如:


提示:以下是本篇文章正文内容,下面案例可供参考

一、k8s是什么?

示例:xxxx。

二、系统初始化

2.1、 机器配置

机器名配置系统
hostname12C4G100gcentos7
hostname22C4G00gcentos7
hostname32C4G100gcentos7

2.2、机器配置更改

2.2.1、设置系统主机名以及 Host 文件的相互解析

hostnamectl set-hostname 要设置的机器名
hostnamectl set-hostname k8s-master01 设置机器名为k8s-master01

2.2.2、安装依赖包

yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git

2.2.3、设置防火墙为 Iptables 并设置空规则

代码如下(示例):

systemctl stop firewalld && systemctl disable firewalld   # 关闭防火漆设置开机自启

yum -y install iptables-services && systemctl start iptables && systemctl enable iptables && iptables -F && service iptables save

2.2.4、关闭 SELINUX

代码如下(示例):

swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

2.2.5、调整内核参数,对于 K8S

2.2.5.1、调整内核参数

代码如下(示例):

cat > kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
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
2.2.5.2、重启让配置生效
再执行:
cp kubernetes.conf /etc/sysctl.d/kubernetes.conf
sysctl -p /etc/sysctl.d/kubernetes.conf

再执行这一步调整内核参数的时候有可能会报错:
sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables: 没有那个文件或目录 sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-ip6tables: 没有那个文件或目录

  • 升级内核版本即可解决,下面提供了升级内核版本的步骤
    在这里插入图片描述

2.2.6、调整系统时区

2.2.6.1、 查看当前系统时区
timedatectl

在这里插入图片描述

2.2.6.2、如果时区不是上海的修改为上海的

代码如下(示例):

# 设置系统时区为 中国/上海
timedatectl set-timezone Asia/Shanghai
# 将当前的 UTC 时间写入硬件时钟
timedatectl set-local-rtc 0
# 重启依赖于系统时间的服务
systemctl restart rsyslog
systemctl restart crond

2.2.7、关闭系统不需要服务

代码如下(示例):

systemctl stop postfix && systemctl disable postfix

2.2.8、设置 rsyslogd 和 systemd journald

2.2.8.1、创建配置日志目录及日志文件

代码如下(示例):

mkdir /var/log/journal # 持久化保存日志的目录
mkdir /etc/systemd/journald.conf.d  # 创建新系统日志配置文件存放目录
2.2.8.2、日志文件配置添加

代码如下(示例):

cat > /etc/systemd/journald.conf.d/99-prophet.conf <<EOF
[Journal]
# 持久化保存到磁盘
Storage=persistent
# 压缩历史日志
Compress=yes
SyncIntervalSec=5m
RateLimitInterval=30s
RateLimitBurst=1000
# 最大占用空间 10G
SystemMaxUse=10G
# 单日志文件最大 200M
SystemMaxFileSize=200M
# 日志保存时间 2 周
MaxRetentionSec=2week
# 不将日志转发到 syslog
ForwardToSyslog=no
EOF
2.2.8.3、重启journald服务
systemctl restart systemd-journald

3、升级系统内核

3.1、调整k8s内核参数的时会出现报错

  • 调整内核参数
    代码如下(示例):
cat > kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables=1  #开启网桥模式
net.bridge.bridge-nf-call-ip6tables=1  # 开启网桥模式
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
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    #关闭ipv6协议           
net.netfilter.nf_conntrack_max=2310720
EOF
最重要的是:
net.bridge.bridge-nf-call-iptables=1     -- 开启网桥模式
net.bridge.bridge-nf-call-ip6tables=1    --- 开启网桥模式
net.ipv6.conf.all.disable_ipv6=1                ----- 关闭ipv6协议

有可能会出现:
sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables: 没有那个文件或目录 sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-ip6tables: 没有那个文件或目录

在这里插入图片描述

3.2、 查看当前的系统内核版本

**查看内核版本 uname -r **

在这里插入图片描述

3.3、 升级内核版本

3.3.1、 查看现在可使用内核

代码如下(示例):

cat /boot/grub2/grub.cfg |grep menuentry
  • 只有3.1的内核 在这里插入图片描述

3.3.2、升级内核

代码如下(示例):

3.3.2.1、获取源
1.获取源
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm
3.3.2.2、安装,装完成后检查
2.安装,装完成后检查 /boot/grub2/grub.cfg中对应内核menuentry中是否包含 initrd16 配置,如果没有,再安装一次!
yum --enablerepo=elrepo-kernel install -y kernel-lt 
3.3.2.3、查看系统的全部内核
3.查看系统的全部内核
rpm -qa | grep kernel

在这里插入图片描述

3.3.2.4、查看设置内核的名称
cat /boot/grub2/grub.cfg |grep menuentry

在这里插入图片描述

3.3.2.5、设置开机从新内核启动
设置开机从新内核启动
grub2-set-default '你的内核'

低版本是:
grub2-set-default 'CentoS Linux(4.4.202-1.el7.elrepo.×86_64) 7 (Core)’ 
我的7.9版本是:
grub2-set-default 'CentOS Linux (5.4.188-1.el7.elrepo.x86_64) 7 (Core)'
3.3.2.6、重启使配置有效
reboot
3.3.2.7、查看正在使用的内核
uname -a
  • 执行第五步的时候要查看你的内核都有哪些 我的centos是7.9的所有我的下载的内核版本较高
  • 查看内核版本: cat /boot/grub2/grub.cfg |grep menuentry
    • 执行: grub2-set-default ‘CentOS Linux (5.4.188-1.el7.elrepo.x86_64) 7 (Core)’在这里插入图片描述
    • 然后重启系统使配置生效

4. 安装k8s

4.1、kube-proxy开启ipvs的前置条件

执行:

modprobe br_netfilter

4.1.1、低版本配置:

执行:

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_ipv4
EOF
  • 再执行:
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules &&
lsmod | grep -e ip_vs -e nf_conntrack_ipv4
  • 报错: modprobe: FATAL: Module nf_conntrack_ipv4 not found.
    在这里插入图片描述

  • 但是在进行配置时会报错modprobe: FATAL: Module nf_conntrack_ipv4 not found.
    这是因为使用了高内核,较如博主就是使用了5.2的内核,一般教程都是3.2的内核。在高版本内核已经把nf_conntrack_ipv4替换为nf_conntrack了。所以正确配置应该如下

cat <<EOF> /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF

4.1.2、高版本配置

# 1.安装ipset和ipvsadm
[root@master ~]# yum install ipset ipvsadmin -y
# 2.添加需要加载的模块写入脚本文件
[root@master ~]# cat <<EOF> /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF
# 3.为脚本添加执行权限
[root@master ~]# chmod +x /etc/sysconfig/modules/ipvs.modules
# 4.执行脚本文件
[root@master ~]# bash /etc/sysconfig/modules/ipvs.modules
# 5.查看对应的模块是否加载成功
[root@master ~]# lsmod | grep -e -ip_vs -e nf_conntrack
nf_conntrack_netlink    49152  0 
nfnetlink              20480  3 nf_conntrack_netlink,ip_set
nf_conntrack          155648  5 xt_conntrack,nf_nat,nf_conntrack_netlink,xt_MASQUERADE,ip_vs
nf_defrag_ipv6         24576  2 nf_conntrack,ip_vs
nf_defrag_ipv4         16384  1 nf_conntrack
libcrc32c              16384  4 nf_conntrack,nf_nat,xfs,ip_vs

在这里插入图片描述
在这里插入图片描述

5、安装 Docker 软件

5.1、安装 Docker 软件(方式一:)

5.1.1、删除所有的docker

代码示例: (如下)

yum remove -y docker \
 docker-client \
 docker-client-latest \
 docker-common \
 docker-latest \
 docker-latest-logrotate \
 docker-logrotate \
 docker-selinux \
 docker-engine-selinux \
 docker-engin

5.1.2、修改镜像源并安装依赖

代码示例: (如下)

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

yum install -y yum-utils \
 device-mapper-persistent-data \
 lvm2
 
  • 或者
 yum install wget jg psmisc vim net-tools telnet yum-utils device-mapper-persistent-data lvm2 git -y

5.1.3、配置并下载docker 源为阿里云的

代码示例: (如下)

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum install -y docker-ce-19.03.5-3.el7

5.1.4、再依次执行

代码示例: (如下)

modprobe br_netfilter

5.1.5、再执行

代码示例: (如下)

echo "*/3 * * * * /usr/sbin/ntpdate ntp1.aliyun.com > /dev/null 2>&1 &" >> /var/spool/cron/root
systemctl restart crond
mkdir -p /opt/docker
mkdir -p /etc/docker

5.1.6、配置你的docker仓库(也可后续搭建完成docker仓库后再操作)

代码示例: (如下)

cat > /etc/docker/daemon.json  << EOF
{
  "registry-mirrors": ["https://fozxkv57.mirror.aliyuncs.com"],
  "insecure-registries": ["192.168.25.69"],
  "data-root": "/home/docker/",
  "log-driver": "json-file",
  "max-concurrent-downloads":20,
  "live-restore":true,
  "max-concurrent-uploads":10,
  "debug":true,
  "log-opts": {
    "max-size": "300m",
    "max-file": "1"
  }
}
EOF

5.1.7、重启docker

代码示例: (如下)

systemctl daemon-reload && systemctl enable docker && systemctl restart docker

5.2、安装 Docker 软件(方式二:)

也可以执行下面的初步安装

5.2.1、安装依赖

yum install -y yum-utils device-mapper-persistent-data lvm2

5.2.2、配置docker源

代码示例: (如下)

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

5.2.3、下载最新版docker

代码示例: (如下)

yum update -y && yum install -y docker-ce

5.2.4、创建 /etc/docker 目录,配置 daemon

代码示例: (如下)

mkdir /etc/docker

cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
}
}
EOF

mkdir -p /etc/systemd/system/docker.service.d

5.2.5、重启docker服务

代码示例: (如下)

systemctl daemon-reload && systemctl restart docker && systemctl enable docker

6、安装 kubernetes(主从配置)

6.1、安装 Kubeadm (主从配置)

6.1.1、更改yum源配置

也可参考 https://blog.csdn.net/Lovely_red_scarf/article/details/123535212

  • 因为默认的源或者阿里云源没有kubernetes的下载地址
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

6.1.2、下载 kubeadm、kubectl、kubelet

代码示例: (如下) 我这里下载1.8.1版本的,今天是2022.4.6截至今天各大厂商支持最低版本就是1.8.1

yum -y install kubeadm-1.18.1 kubectl-1.18.1 kubelet-1.18.1 -y

6.1.2、kubelet设置开机自启动

代码示例: (如下)

systemctl enable kubelet.service

6.1.2、kubelet设置开机自启动

代码示例: (如下)

6.2、 初始化主节点–(仅在master节点执行)

6.2.1、获取k8s默认的配置文件

代码示例: (如下)

kubeadm config print init-defaults > kubeadm-config.yaml

在这里插入图片描述

6.2.2、修改默认的配置文件与本机适配

代码示例: (如下)

在这里插入图片描述

在这里插入图片描述

  • 再把默认的调度方式改为ipvs
    在这里插入图片描述

配置


apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.21.214
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  name: k8s-master01
  taints:
  - effect: NoSchedule
    key: node-role.kubernetes.io/master
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: k8s.gcr.io
kind: ClusterConfiguration
kubernetesVersion: v1.18.0
networking:
  dnsDomain: cluster.local
  podSubnet: "10.244.0.0/16"
  serviceSubnet: 10.96.0.0/12
scheduler: {}
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
featureGates:
  SupportIPVSProxyMode: true
mode: ipvs

6.2.2、使用k8s的配置文件 执行安装

代码示例: (如下)

kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs | tee kubeadm-init.log

报错: unknown flag: --experimental-upload-certs To see the stack trace of this error execute with --v=5 or higher

解决办法

  • 之前安装V1.15的时候是可以的,可能是版本升级的原因。
    unknown flag: --experimental-upload-certs,将–experimental-upload-certs 替换为 --upload-certs

重新执行:

kubeadm init --config=kubeadm-config.yaml --upload-certs | tee kubeadm-init.log

安装
在这里插入图片描述

在这里插入图片描述

6.2.2.1:安装成功后当前安装目录下会出现kubeadm-init.log

在这里插入图片描述

6.2.3、创建集群管理的配置文件(master需要)

代码示例: (如下)


  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

6.2.3、查看已安装kubectl版本

yum list kubectl –showduplicates

7、加入主节点以及其余工作节点 (安装完kubeadm 和kubectl kubelet后执行下述)

执行安装日志中的加入命令即可 kubeadm-init.log 中的
在这里插入图片描述

8、部署网络

flannel 网段默认地址: 10.244.0.0/16 所以pod的podSubnet 要设为一致

8.1、查看集群状态

代码示例: (如下)

kubectl get nodes

在这里插入图片描述

8.2、 下载fiannel

代码示例: (如下)

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

在这里插入图片描述

8.2、 执行安装

代码示例: (如下)


kubectl create -f kube-flannel.yml

注意:有时候可能会安装失败因为网络的原因,只需要再次执行安装即可

  • 也可以使用 kubectl describe pod kube-flannel-ds-28m2p -n kube-system 查看pod日志

8.3、 查看fiannel是否已经安装

kubectl get pods -n kube-system
因为默认安装的工具都在kube-system这个namespace中 所以查看kube-system中的pods

在这里插入图片描述

  • 等了许久后发现终于好了,这个时候再执行: kubectl get pods -n kube-system
    在这里插入图片描述

  • 就可以查看现在集群的节点的状态 现在已经是ready的了

kubectl get nodes

在这里插入图片描述


总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了使用kubeadm安装k8s。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Lovely_red_scarf

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

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

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

打赏作者

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

抵扣说明:

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

余额充值