CentOS 8安装Kubernetes集群基础工作

一、前言

根据10来天研讨网上关于K8s集群的教程,结合手上的硬件配置及实操经验,做个汇总,力求每个指令都说明其作用,知其然知其所以然。仅供参考,主要还是给自己做个笔记。本身就是喜新厌旧的主,后续会持续更新。

最近更新日期:2021-09-16。

二、硬件环境

没有用物理机或虚拟机,生产环境是全套阿里云服务、测试环境主要是华为云服务。当前主要以华为云为例。

服务器都是ECS,阿里云默认勾选购买弹性公网IP,华为云不绑定购买,根据需要另外购买。个人现在认为是否只需要购买两个弹性公网IP即可,一个绑定Master节点,所有暴露端口通过Ingress Nginx反向代理实现,此弹性公网IP固定不解绑;另一个根据实际需要绑定需要运程登录的Worker节点。

阿里云和华为云的ECS都有创建镜像功能,可选择创建整机镜像、系统盘镜像、数据盘镜像 等。一是为了备份,随时可根据情况还原;二是可以在购买ECS扩容时,直接用镜像预装,快速部署。目前发数据盘暂时不知道可以用于做什么,那就先创建系统盘镜像,毕竟这些私有镜像都是收费的。

生产环境下MySQL是用阿里云RDS,测试环境下尝试K8s部署MySQL。文件存储目前是用阿里云OSS和七牛云,所以感觉数据盘看情况挂载,具体就不细说了。

三、软件环境

ECS均选用CentOS 8系统,以下命令均以此系统为准,因为CentOS版本不同,相关指令都有变更,跟参考的教程用的CentOS 7的某些指令就完全不同。

基础示例是用3台ECS服务器,一台是配置成Master节点,另外两台是配置成Worker节点,通过云服务商的虚拟专有网络组成Kubernetes集群。

主机名IP操作系统角色
seak8s-master192.168.0.10 CentOS 8 Master节点
seak8s-node01192.168.0.21 CentOS 8 Worker节点
seak8s-node02192.168.0.22 CentOS 8 Worker节点
注:主机名称只能是字母、数字和“-”组合而成,不然会报错,字母建议全用小写字母。

以下各类节点安装的相关软件。

1、Master节点ECS服务器安装软件

软件名称软件版本暴露端口配置文件功能备注
docker20.10.8/etc/docker/daemon.json
kubelet组件工具
kube-apiserver组件工具
kube-controller-manager组件工具
kube-proxy组件工具
kube-schduler组件工具
etcd
flannel

2、 Worker节点ECS服务器安装软件

软件名称软件版本暴露端口配置文件功能备注
docker20.10.8/etc/docker/daemon.json
kubelet组件工具
kube-proxy组件工具
flannel

四、初始化服务器

无论是阿里云还是华为云ECS服务器都选的是用公共CentOS 8镜像,版本各有不同就不详细比较了。

以下均默认使用root远程登录ECS服务器,命令就省略“sudo”了,根据自身情况添加即可。ECS服务器在加入虚拟专有网络就会自动设置固定内网IP,在这就不再述手动设置方法,总之要设置各个节点的IP为固定IP。

1、升级系统已安装软件到最新版本

升级所有包同时也升级软件和系统内核指令:yum update -y

就是喜欢更新到最新版本的感觉,第一次更新时间略长,安心等待就行。更新完成后可以执行以下两个指令。

查看CentOS系统的当前版本指令:cat /etc/redhat-release

<输出>

CentOS Linux release 8.4.2105

查看CentOS系统的当前内核指令:uname -r

<输出>

4.18.0-240.10.1.el8_3.x86_64

在现在配置Master节点经验发现执行此命令会报错,提示安装了两个版本的kubelet,也是无语了,现计划安装一个软件就执行一下这个指令看看会不会报错,定位问题。

2、清理环境

其实使用公共镜像安装ECS服务器,此部分代码无需执行。

清除Kubernetes指令:

df -h|grep kubelet |awk -F % ‘{print $2}’|xargs umount

rm /var/lib/kubelet/* -rf

rm /etc/kubernetes/* -rf

rm /var/lib/rancher/* -rf

rm /var/lib/etcd/* -rf

rm /var/lib/cni/* -rf

iptables重置nat上网指令:iptables -F && iptables -t nat -F

删除flannel所生成的vxlan设备指令:ip link del flannel.1

docker查看所有容器并删除指令:docker ps -a|awk ‘{print $1}’|xargs docker rm -f

docker查看所有(持久化)数据并删除指令:docker volume ls|awk ‘{print $2}’|xargs docker volume rm

执行以上指令会有报错,看清楚都明白可以忽略。

3、系统配置

3.1、安装依赖包

安装依赖包指令:yum install -y yum-utils device-mapper-persistent-data lvm2 lrzsz conntrack ipvsadm ipset iptables iptables-services curl sysstat libseccomp wget vim net-tools git jq tc

3.2、配置yum源

删除之前可能安装过yum源的残留指令:rm -rfv /etc/yum.repos.d/*

在此选用阿里云的yum源,可打开链接http://mirrors.aliyun.com/repo/挑选适合自己的版本。

添加yum源指令:curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo

添加后,可用以下两个指令查看yum源。同时也可以执行一下升级所有包同时也升级软件和系统内核指令,一般会有更新。

查看当前可用yum源指令:yum repolist

查看所有yum源指令:yum repolist all

3.3、安装EPEL

EPEL,即Extra Packages for Enterprise Linux的简称,是为企业级Linux提供的一组高质量的额外软件包,包括但不限于Red Hat Enterprise Linux (RHEL), CentOS and Scientific Linux (SL), Oracle Enterprise Linux (OEL)。EPEL是社区强烈打造的免费开源发行软件包版本库。

针对系统架构选择相应的类型:http://dl.fedoraproject.org/pub/epel/,在此选择x86_64的相应包。

下载EPEL包指令:wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

安装EPEL包指令:rpm -ivh epel-release-latest-8.noarch.rpm

为了保险起见可执行以下指令,3.2安装完yum源后也是一样。

清理yum缓存和重建yum缓存指令:yum clean all && yum makecache

不过很多人的经验都是可以不执行上一条指令的,感觉yum缓存会自动更新。

3.4、关闭防火墙

关闭防火墙和设置开机禁用防火墙指令:systemctl stop firewalld && systemctl disable firewalld

检查防火墙状态指令:systemctl status firewalld

3.5、关闭SELinux

安全增强型Linux(Security-Enhanced Linux)简称SELinux,它是一个Linux内核模块,也是Linux的一个安全子系统。SELinux主要由美国国家安全局开发。2.6及以上版本的Linux内核都已经集成了SELinux模块。

临时关闭SELinux指令:setenforce 0

永久关闭SELinux指令:sed -i ‘s/enforcing/disable/’ /etc/selinux/config

3.6、关闭swap交换分区

临时关闭swap交换分区指令:swapoff -a

永久关闭swap交换分区指令:sed -ri ‘s/.swap./#&/’ /etc/fstab

关闭后检查是否关闭swap交换分区,若swap行出现的全部是0,则代表已经关闭。

查看Linux内存使用情况指令:free -mfree -h

3.7、检查系统时区

ECS服务器一般已经设置好系统时区,我们还是循例检查一下。

查看当前系统时区指令:timedatectl

3.8、设置日志系统

在CentOS 7以后,因为引导方式改为了system.d,使用systemd-journald来做日志中心库,使用rsyslog来做日志持久化,使用logrotate来做日志文件轮转。

systemd-journald守护进程提供一种改进的日志管理服务,可以收集来自内核,启动过程的早期阶段,标准输出,系统日志,以及守护进程启动和运行期间的错误的消息。它将这些消息写到一个结构化的事件日志中,默认情况下不在重新启动之间保留。现更改默认为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
SystemMaxUse=10G # 最大占用空间10G
SystemMaxFileSize=200M # 单日志文件最大200M
MaxRetentionSec=2week # 日志保存时间2周
ForwardToSyslog=no # 不将日志转发到syslog
EOF

重启systemd journald的指令:systemctl restart systemd-journald

3.9、配置主机名称以及配置名称解析

根据自身Kubernetes集群的计划配置主机名称以及配置名称解析。

配置主机名为seak8s-master指令:hostnamectl set-hostname seak8s-master

主机名seak8s-master根据自身需要调整。

查看本机的主机名指令:hostname

打开名称解析配置文件指令:vim /etc/hosts

然后将所有的节点服务的IP和名称加入进去,如:192.168.0.10 seak8s-master 。

3.10、配置iptables

iptables也叫netfilter,是Linux下自带的一款免费且优秀的基于包过滤的防火墙工具,他的功能十分强大,使用也非常灵活,可以对流入、流出、流经服务器的数据包进行精细的控制。但在CentOS 7以后已经被阉割掉了,需要自行安装,在此3.1、安装依赖包时已安装。

启动iptables和设置开机启动iptables指令:systemctl start iptables && systemctl enable iptables

清除(filter表)中所有规则指令:iptables -F

保存iptables配置指令:service iptables save

保存iptables配置后必须重启iptables。

重启iptables指令:systemctl restart iptables

查看iptables运行状态指令:systemctl status iptables

4、安装Docker

4.1、添加稳定版仓库

在此选择的是阿里云的Docker仓库。

添加指定yum仓库指令:yum-config-manager –add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

如果完全按本文所描述操作,执行上一条指令会提示“Repository extras is listed more than once in the configuration”即相关仓库已存在,无需操作此步骤。

更新yum缓存指令:yum makecache

4.2、安装docker-ce

查看选择docker-ce各版本指令:yum list docker-ce –showduplicates|sort -r

安装指定版本的docker-ce指令:yum install docker-ce-20.10.8-3.el8 -y

安装最新版本的docker-ce指令:yum install docker-ce -y

以上两条指令按自身实际情况选择执行,在此选择安装最新版本的docker-ce。

检查是否安装成功,查看Docker版本指令:docker version

4.3、配置daemon.json

Docker安装后默认没有daemon.json这个配置文件,需要进行手动创建。配置文件的默认路径:/etc/docker/daemon.json。

创建Docker配置存放目录指令:mkdir /etc/docker

创建Docker配置文件指令:cat > /etc/docker/daemon.json <<EOF
{
“exec-opts”: [“native.cgroupdriver=systemd”], # 让docker与k8s中cgroupdriver保持一致
“log-driver”: “json-file”,
“log-opts”: {
“max-size”: “100m”
},
“registry-mirrors”: [“https://hlusxtb4.mirror.aliyuncs.com”],
“insecure-registries”: [“192.168.0.10”]
}
EOF

重新加载Docker配置参数指令:systemctl daemon-reload

启动Docker服务和设置开机启动Docker服务指令:systemctl start docker && systemctl enable docker

daemon.json配置参数简介:

一级参数二级参数说明示例值
exec-opts运行时执行选项。[“native.cgroupdriver=systemd”]
log-driver容器日志驱动程序,默认为:json-file。“json-file”
log-opts容器日志配置参数
max-size滚动前日志的最大大小。一个正整数加上一个代表测量单位(k,m或g)的修饰符。默认为-1(无限制)。“100m”
max-file可以存在的最大日志文件数量。如果滚动日志会创建多余文件,则会删除最旧的文件。只有在设置了max-size时才有效。一个正整数。默认为1。“3”
labels在启动Docker守护进程时适用。守护进程接受的日志相关标签的逗号分隔列表。用于高级日志标记选项。“production_status,geo”
env在启动Docker守护进程时适用。此守护程序接受的与日志相关的环境变量的逗号分隔列表。用于高级日志标记选项。“os,customer”
env-regex与env类似且兼容。一个正则表达式来匹配与日志相关的环境变量。用于高级日志标记选项。“^(os”
registry-mirrors私库加速地址[“https://hlusxtb4.mirror.aliyuncs.com”]
insecure-registries镜像仓库地址[“192.168.0.10”]

引用:

《全网最全的搭建Kubernetes准备工作配置》:https://blog.csdn.net/qq_37840993/article/details/114396787

《局域网使用kubeadm安装k8s》:https://blog.csdn.net/zhaikaiyun/article/details/104273974

《基于Centos8.1 部署 kubernetes 1.20.2》:https://blog.csdn.net/tongzidane/article/details/113942942

《CentOS8安装Kubernetes1.20.2集群》:https://blog.csdn.net/weixin_38920945/article/details/113728463

《Centos 7/8 日志管理》:https://www.cnblogs.com/vincenshen/p/12441492.html

基于原文略有调整,如有不对之处还请指正。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注