Janrs.com | 杨建勇
Janrs.com | 杨建勇

Centos7 kubeadm部署k8s教程01 - 安装kubeadm

[!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 Drivercgroupfs ,而 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,导致运行的 DockerKubernetes 不稳定

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

至此。安装 k8s 完成。

如果你有任何问题,欢迎在底部留言。或者点击加入微信技术交流群 | 我的GitHub

码仔

文章作者

Janrs.com

发表回复

textsms
account_circle
email

  • 给灰太狼吃一只码洋洋吧

    码洋洋

    2月前 回复

Janrs.com | 杨建勇

Centos7 kubeadm部署k8s教程01 - 安装kubeadm
[!TIP] Centos7 使用 kubeadm 部署 k8s 集群 转载请注明出处:https://janrs.com CentOS7版本2009 k8s版本v1.23.9 Docker版本docker-ce-v20.10 Centos7 安装 k8s [!NOTE] 在每个节点都…
扫描二维码继续阅读
2022-05-19