本文已参与「新人创作礼」活动,一起开启掘金创作之路
一、完善虚拟机模板,为K8s运行环境做准备
1、升级Linux内核
CentOS 7.x 系统自带的3.10.x内核存在Bugs,导致运行的Docker不稳定,解决方案是升级内核到4.4.X以上
[root@128CentOS7 ~]# uname -a
Linux 128CentOS7 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
[root@128CentOS7 ~]# uname -sr
Linux 3.10.0-1160.el7.x86_64
[root@128CentOS7 ~]# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
获取http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
警告:/var/tmp/rpm-tmp.u3KKYx: 头V4 DSA/SHA1 Signature, 密钥 ID baadae52: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:elrepo-release-7.0-3.el7.elrepo ################################# [100%]
[root@128CentOS7 ~]# yum --enablerepo=elrepo-kernel install -y kernel-lt
已加载插件:fastestmirror
Determining fastest mirrors
* base: mirrors.aliyun.com
... ... ... ... ...
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在安装 : kernel-lt-5.4.188-1.el7.elrepo.x86_64 1/1
验证中 : kernel-lt-5.4.188-1.el7.elrepo.x86_64 1/1
已安装:
kernel-lt.x86_64 0:5.4.188-1.el7.elrepo
完毕!
[root@128CentOS7 ~]# grub2-set-default 0
[root@128CentOS7 ~]# sync
[root@128CentOS7 ~]# uname -sr
Linux 5.4.188-1.el7.elrepo.x86_64
[root@128CentOS7 ~]#
kernel-lt 和 kernel-ml 二者的区别:
kernel-ml软件包是根据Linux Kernel Archives的主线稳定分支提供的源构建的。 内核配置基于默认的RHEL-7配置,并根据需要启用了添加的功能。 这些软件包有意命名为kernel-ml,以免与RHEL-7内核发生冲突,因此,它们可以与常规内核一起安装和更新。
kernel-lt包是从Linux Kernel Archives提供的源代码构建的,就像kernel-ml软件包一样。 不同之处在于kernel-lt基于长期支持分支,而kernel-ml基于主线稳定分支。
3、配置yum源(阿里云)
[root@128CentOS7 ~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
[root@128CentOS7 ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2523 100 2523 0 0 948 0 0:00:02 0:00:02 --:--:-- 948
[root@128CentOS7 ~]# yum clean all
已加载插件:fastestmirror
正在清理软件源: base elrepo extras updates
Cleaning up list of fastest mirrors
Other repos take up 11 M of disk space (use --verbose for details)
[root@128CentOS7 yum.repos.d]# yum makecache
已加载插件:fastestmirror
Determining fastest mirrors
* base: mirrors.aliyun.com
... ... ... ... ... ... ...
base | 3.6 kB 00:00:00
elrepo | 3.0 kB 00:00:00
extras | 2.9 kB 00:00:00
updates | 2.9 kB 00:00:00
元数据缓存已建立
[root@128CentOS7 ~]# yum upgrade
[root@128CentOS7 ~]# yum update
4、安装依赖包
[root@128CentOS7 ~]# yum install -y epel-release
[root@128CentOS7 ~]# yum install -y chrony conntrack ipvsadm ipset jq iptables curl sysstat
[root@128CentOS7 ~]# yum install -y libseccomp wget socat git
5、设置开机自动加载 IPVS 模块(/etc/modules-load.d/kubernetes.conf)
[root@128CentOS7 ~]# cat >> /etc/modules-load.d/kubernetes.conf <<EOF
ip_vs_dh
ip_vs_ftp
ip_vs
ip_vs_lblc
ip_vs_lblcr
ip_vs_lc
ip_vs_nq
ip_vs_pe_sip
ip_vs_rr
ip_vs_sed
ip_vs_sh
ip_vs_wlc
ip_vs_wrr
nf_conntrack
overlay
br_netfilter
EOF
4.19 内核将nf_conntrack_ipv4 更名为 nf_conntrack,之前版本请用 nf_conntrack_ipv4 或者不开启 IPVS,使用 iptables 模式
- 设置开机加载
[root@128CentOS7 ~]# systemctl enable systemd-modules-load.service
[root@128CentOS7 ~]# reboot
- 重启后,检查ipvs模块是否加载
[root@128CentOS7 ~]# lsmod | grep -e ip_vs -e nf_conntrack
nf_conntrack_ipv4 15053 6
nf_defrag_ipv4 12729 1 nf_conntrack_ipv4
ip_vs_wrr 12697 0
ip_vs_wlc 12519 0
ip_vs_sh 12688 0
ip_vs_sed 12519 0
ip_vs_rr 12600 0
ip_vs_pe_sip 12740 0
nf_conntrack_sip 33780 1 ip_vs_pe_sip
ip_vs_nq 12516 0
ip_vs_lc 12516 0
ip_vs_lblcr 12922 0
ip_vs_lblc 12819 0
ip_vs_ftp 13079 0
nf_nat 26583 3 ip_vs_ftp,nf_nat_ipv4,nf_nat_ipv6
ip_vs_dh 12688 0
ip_vs 145458 24 ip_vs_dh,ip_vs_lc,ip_vs_nq,ip_vs_rr,ip_vs_sh,ip_vs_ftp,ip_vs_sed,ip_vs_wlc,ip_vs_wrr,ip_vs_pe_sip,ip_vs_lblcr,ip_vs_lblc
nf_conntrack 139264 8 ip_vs,nf_nat,nf_nat_ipv4,nf_nat_ipv6,xt_conntrack,nf_conntrack_sip,nf_conntrack_ipv4,nf_conntrack_ipv6
libcrc32c 12644 4 xfs,ip_vs,nf_nat,nf_conntrack
[root@128CentOS7 ~]#
6、关闭防火墙、SWAP分区及SELinux
- 关闭防火墙,清理防火墙规则,设置默认转发策略
[root@128CentOS7 ~]# systemctl stop firewalld
[root@128CentOS7 ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@128CentOS7 ~]# iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat
[root@128CentOS7 ~]# iptables -P FORWARD ACCEPT
- 关闭swap分区,否则kubelet会启动失败,也可以设置kubelet启动参数 --fail-swap-on为false关闭swap检查
[root@128CentOS7 ~]# swapoff -a
[root@128CentOS7 ~]# cp /etc/fstab /etc/fstab.backup
[root@128CentOS7 ~]# sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
[root@128CentOS7 ~]# diff /etc/fstab /etc/fstab.backup
11c11
< #/dev/mapper/centos-swap swap swap defaults 0 0
---
> /dev/mapper/centos-swap swap swap defaults 0 0
[root@128CentOS7 ~]#
- 关闭 SELinux,否则 kubelet 挂载目录时可能报错Permission denied
[root@128CentOS7 ~]# setenforce 0
[root@128CentOS7 ~]# cp /etc/selinux/config /etc/selinux/config.backup
[root@128CentOS7 ~]# sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
[root@128CentOS7 ~]# diff /etc/selinux/config /etc/selinux/config.backup
7c7
< SELINUX=disabled
---
> SELINUX=enforcing
[root@128CentOS7 ~]# sestatus -v
SELinux status: disabled
[root@128CentOS7 ~]# getenforce
Disabled
[root@128CentOS7 ~]#
- 查看SELinux状态:getenforce 或 sestatus
7、优化内核参数
[root@128CentOS7 ~]# cat > /etc/sysctl.d/sysctl.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
vm.swappiness=0
vm.overcommit_memory=1
vm.panic_on_oom=0
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
[root@128CentOS7 ~]# sysctl -p /etc/sysctl.d/sysctl.conf
4.12之前版本内核需要关闭 tcp_tw_recycle,否则与NAT冲突,可能导致服务不通,即在上面文件中添加一行 net.ipv4.tcp_tw_recycle=0 4.12版本内核开始不存在这个问题
- 参考 tcp: remove tcp_tw_recycle git.kernel.org/pub/scm/lin…
- 参考 Linux 从4.12内核版本开始移除了 tcp_tw_recycle 配置 www.cnblogs.com/rsapaper/p/…
8、关闭无关的服务
[root@128CentOS7 ~]# systemctl stop postfix && systemctl disable postfix
9、设置系统时区、时钟同步
[root@128CentOS7 ~]# timedatectl set-timezone Asia/Shanghai
[root@128CentOS7 ~]# systemctl enable chronyd
[root@128CentOS7 ~]# systemctl start chronyd
二、安装Docker
1、卸载旧版本(如果安装过旧版本的话)
[root@128CentOS7 ~]# rpm -qa | grep docker
[root@128CentOS7 ~]# yum remove docker docker-common docker-selinux docker-engine
[root@128CentOS7 ~]# rm -rf /var/lib/docker
2、安装Docker依赖的软件包
[root@128CentOS7 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
- yum-util提供yum-config-manager功能
- 另外两个是devicemapper驱动依赖
3、设置Docker的yum源
[root@128CentOS7 ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
[root@128CentOS7 ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 这里使用的是阿里云镜像
4、安装Docker的稳定版本
- 更新yum缓存
- 查看所有仓库中所有docker版本
- 选择特定版本安装
[root@128CentOS7 ~]# yum clean all
[root@128CentOS7 ~]# yum makecache fast
[root@128CentOS7 ~]# yum list docker-ce --showduplicates | sort -r
[root@128CentOS7 ~]# yum install -y docker-ce-20.10.9-3.el7.x86_64
5、配置Docker镜像加速:/etc/docker/daemon.json
[root@128CentOS7 ~]# vi /etc/docker/daemon.json
{
"storage-driver": "overlay2",
"registry-mirrors":[ "https://h7p1ls20.mirror.aliyuncs.com", "https://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn" ],
"max-concurrent-downloads": 20,
"max-concurrent-uploads": 5
}
6、设置开机启动
[root@128CentOS7 ~]# systemctl start docker
[root@128CentOS7 ~]# systemctl enable docker
7、验证Docker是否安装成功
[root@128CentOS7 ~]# docker version
[root@128CentOS7 ~]# docker info
[root@128CentOS7 ~]# docker -h
8、复制镜像仓库harbor.demo证书,并验证
[root@128CentOS7 ~]# scp root@harbor.demo:/etc/docker/certs.d/harbor.demo/* /etc/docker/certs.d/harbor.demo/
[root@128CentOS7 ~]# systemctl restart docker
[root@128CentOS7 ~]# docker login harbor.demo
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
[root:718@master1 ~]#
- 确保后续克隆的每台虚拟机都可以成功登录harbor.demo 并顺利拉取镜像
参考: clodfisher.github.io/2018/09/nf_…
- 先用起来,通过操作实践认识kubernetes(k8s),积累多了自然就理解了
- 把理解的知识分享出来,自造福田,自得福缘
- 追求简单,容易使人理解,知识的上下文也是知识的一部分,例如版本,时间等
- 欢迎留言交流,也可以提出问题,一般在周末回复和完善文档
- Jason@vip.qq.com 2022-3-30