[!TIP]
Centos7
使用kubeadm
部署k8s
集群转载请注明出处:https://janrs.com
CentOS7
版本2009
k8s
版本v1.23.9
Docker
版本docker-ce-v20.10
Centos7 安装 k8s
[!NOTE]
在每个节点都要执行安装k8s
1.设置主机名以及/etc/hosts
1-1.设置主机名
# master上执行
hostnamectl set-hostname k8s-master01
# node01上执行
hostnamectl set-hostname k8s-node01
# node02上执行
hostnamectl set-hostname k8s-node02
1-2.设置 /etc/hosts 解析
172.16.222.231 k8s-master01
172.16.222.241 k8s-node01
172.16.222.242 k8s-node02
2.安装依赖
yum install -y conntrack ipvsadm ipset jq curl sysstat libseccomp wget vim net-tools git unzip
3.禁用 selinux
临时禁用和永久禁用
setenforce 0 && \
sed -ri '/^SELINUX/s/(SELINUX=)(.*)/\1disabled/' /etc/selinux/config
4.禁用 firewalld 和 iptables
[!NOTE]
如果提示iptables
不存在则不用管
使用ipvs
替代iptables
,所以可以禁用iptables
systemctl stop firewalld && systemctl disable firewalld && \
systemctl stop iptables && systemctl disable iptables
5.关闭 postfix
systemctl stop postfix && systemctl disable postfix
6.设置时间同步
# 设置系统时区为 中国/上海
timedatectl set-timezone Asia/Shanghai &&
# 将当前的 UTC 时间写入硬件时钟
timedatectl set-local-rtc 0 &&
# 重启依赖于系统时间的服务
systemctl restart rsyslog &&
systemctl restart crond
7.修改 ulimit 设置
echo '* soft nofile 204800
* hard nofile 204800
* soft nproc 204800
* hard nproc 204800' >> /etc/security/limits.conf
8.禁用 swap 分区
8-1.永久禁用
打开 /etc/fstab
注释掉 swap
分区
通常是最后一行
vim /etc/fstab
8-2.临时禁用
swapoff -a
9.加载 br_netfilter 模块
[!NOTE]
由于开启内核ipv4
转发需要加载br_netfilter
模块,所以加载下该模块
9-1.临时加载
modprobe br_netfilter && modprobe ip_conntrack
9-2.开机加载
cat >>/etc/rc.sysinit<<EOF
#!/bin/bash
for file in /etc/sysconfig/modules/*.modules ; do
[ -x $file ] && $file
done
EOF
echo "modprobe br_netfilter" >/etc/sysconfig/modules/br_netfilter.modules && \
echo "modprobe ip_conntrack" >/etc/sysconfig/modules/ip_conntrack.modules && \
chmod 755 /etc/sysconfig/modules/br_netfilter.modules && \
chmod 755 /etc/sysconfig/modules/ip_conntrack.modules
10.优化内核参数
cat > /etc/sysctl.d/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
sysctl -p /etc/sysctl.d/kubernetes.conf
11.配置 ipvs
配置 kube-proxy
开启 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
12.设置 rsyslogd 和 systemd journald
创建持久化保存日志的目录以及添加配置并生效
mkdir /var/log/journal && \
mkdir /etc/systemd/journald.conf.d && \
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
systemctl restart systemd-journald
13.安装 Docker
安装 docker
需要的软件
yum install -y yum-utils device-mapper-persistent-data lvm2
设置官方源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
安装 docker-ce
yum install -y docker-ce
设置配置文件 daemon-json
[!NOTE]
Docker在默认情况下使用的Cgroup Driver
为cgroupfs
,而kubernetes
推荐使用systemd
来代替cgroupfs
mkdir /etc/docker && \
cat <<EOF > /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": [
"http://hub-mirror.c.163.com",
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn"
],
"log-opts": {
"max-size": "100m"
}
}
EOF
启动 docker
以及设置开机启动
systemctl enable docker.service && systemctl start docker && systemctl daemon-reload
14.升级内核
[!NOTE]
CentOS 7.x
系统自带的3.10.x
内核存在一些Bugs
,导致运行的Docker
、Kubernetes
不稳定
14-1.升级内核
载入 ELRepo
仓库的公共密钥
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
安装 ELRepo
仓库的 yum
源
yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm -y
安装长期维护版本 kernel-lt
如需更新最新稳定版选择 kernel-ml
yum --enablerepo=elrepo-kernel install kernel-lt -y
14-2.安装辅助工具
yum install -y grub2-pc
14-3.设置启动内核启动顺序
查看可用内核版本及启动顺序命令
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /boot/grub2/grub.cfg
按照顺序设置内核启动顺序
grub2-set-default 0
编辑 /etc/default/grub
文件,设置 GRUB_DEFAULT=0
。这里按照上面显示的顺序来修改
vim /etc/default/grub
设置 GRUB_DEFAULT=0
只需要修改这里即可
GRUB_TIMEOUT=1
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved #---将这里的saved修改成0----
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto spectre_v2=retpoline rhgb quiet net.ifnames=0 console=tty0 console=ttyS0,115200n8 noibrs"
GRUB_DISABLE_RECOVERY="true"
生成 grub
配置文件
运行 grub2-mkconfig
命令来重新创建内核配置
grub2-mkconfig -o /boot/grub2/grub.cfg
重启
sync && shutdown -r now
重启后查看是否已使用新内核以及已安装的内核
uname -a && rpm -qa | grep kernel
删除旧内核(可选)
yum remove kernel-tools-libs-3.10.0 -y && \
yum remove kernel-3.10.0 -y
安装新版本的内核工具包
yum --disablerepo=\* --enablerepo=elrepo-kernel install kernel-lt-tools.x86_64 -y
查看已安装内核
rpm -qa | grep kernel
15.安装 k8s
设置国内源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
备注:官方源地址
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
指定版本安装
yum install kubeadm-1.23.9 kubectl-1.23.9 kubelet-1.23.9 -y
配置 kubelet
[!NOTE]
编辑/etc/sysconfig/kubelet
指定kubelet
的驱动。对应docker
的驱动systemd
打开
vim /etc/sysconfig/kubelet
修改成以下配置
使用 systemd
驱动
使用 ipvs
转发功能
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"
启动并设置开机启动
systemctl enable kubelet && systemctl start kubelet
发表回复