通过采用微服相关架构构建一套以Kubernetes+Docker为自动化运维基础平台,以微服务为服务中心,在此基础之上构建业务中台,并通过Jekins自动构建、编译、测试、发布的自动部署,形成一套完整的自动化运维、发布的快速DevOps平台。
本文为了搭建Kubernetes集群而准备的服务器以及针对服务器基础环境配置。
文章的操作过程大部分参照【基于青云LB搭建高可用的k8s集群】
微服架构基础设施环境平台搭建 系列文章
微服架构基础设施环境平台搭建 -(一)基础环境准备
微服架构基础设施环境平台搭建 -(二)Docker私有仓库Harbor服务搭建
微服架构基础设施环境平台搭建 -(三)Docker+Kubernetes集群搭建
微服架构基础设施环境平台搭建 -(四)在Kubernetes集群基础上搭建Kubesphere平台
微服架构基础设施环境平台搭建 -(五)Docker常用命令
序号 | 技术框架 | 说明 |
---|---|---|
1 | Kubernetes | |
2 | Kubesphere | Kubernetes编排器,管理平台 |
3 | Dockers | |
4 | Harbor | Docker私有仓库 |
5 | GitLab | 源码库 |
6 | Jekins | 自动编译、测试、发布平台 |
7 | Spring Cloud Alibaba | Spring Cloud Alibaba微服体系架构 |
8 | Nacos | Api网关、服务注册发现配置管理中心 |
9 | Sentinel | 限流溶断安全中心 |
10 | Seata | 分布式事务管理框架 |
11 | Redis | 分布式缓存服务 |
12 | ElasticSearch/Solr | 数据检索服务 |
13 | Mysql | 结构化数据存储 |
14 | Grafana | 监控平台 |
15 | Nginx | 服务代理、Web服务 |
序号 | IP | HostName | 操作系统 | K8s角色 | 说明 |
---|---|---|---|---|---|
1 | 192.168.1.141 | ks-m1 | CentOS7_x64 | 控制节点 | Kubernetes Master |
2 | 192.168.1.142 | ks-m2 | CentOS7_x64 | 控制节点 | Kubernetes Master高可用节点,如果不需要高可用,可不部署此服务器 |
3 | 192.168.1.143 | ks-m3 | CentOS7_x64 | 控制节点 | Kubernetes Master高可用节点,如果不需要高可用,可不部署此服务器 |
4 | 192.168.1.144 | ks-n1 | CentOS7_x64 | 工作节点 | Kubernetes Worker |
5 | 192.168.1.145 | ks-n2 | CentOS7_x64 | 工作节点 | Kubernetes Worker |
6 | 192.168.2.146 | ks-harbor | CentOS7_x64 | 工作节点 | Harbor服务+NFS文件服务 |
使用hostnamectl命令修改主机名,执行该命令后立即生效,代码如下
#在192.168.1.141上执行如下:
[root@localhost ~]# hostnamectl set-hostname ks-m1
其余的机器也使用hostnamectl命令修改主机名,示例如下:
## 在192.168.1.142上执行如下:
[root@localhost ~]# hostnamectl set-hostname ks-m2
#在192.168.1.143上执行如下:
[root@localhost ~]# hostnamectl set-hostname ks-m3
#在192.168.1.144上执行如下:
[root@localhost ~]# hostnamectl set-hostname ks-n1
#在192.168.1.145上执行如下:
[root@localhost ~]# hostnamectl set-hostname ks-n2
#在192.168.2.146上执行如下:
[root@localhost ~]# hostnamectl set-hostname ks-harbor
[root@localhost ~]# vim /etc/hosts
192.168.1.141 ks-m1
192.168.1.142 ks-m2
192.168.1.143 ks-m3
192.168.1.144 ks-n1
192.168.1.145 ks-n2
192.168.2.146 ks-harbor
# 关闭防火墙
systemctl stop firewalld.service
# 禁止防火墙开机启动
systemctl disable firewalld.service
# 永久关闭selinux 注:重启机器后,selinux配置才能永久生效
sed -i 's/enforcing/disabled/' /etc/selinux/config
# 临时关闭selinux 执行getenforce 显示Disabled说明selinux已经关闭
setenforce 0
# 永久关闭交换分区swap 注:重启机器后,才能永久生效
sed -ri 's/.*swap.*/#&/' /etc/fstab
# 临时关闭交换分区swap
swapoff -a
# 生成密钥对
ssh-keygen -t rsa ## 一路回车即可
# 进入.ssh目录,如果目录不存在则创建
cd ~/.ssh
# 将公钥导入至authorized_keys
cat id_rsa.pub >> authorized_keys
# 修改文件权限
chmod 700 ~/.ssh
chmod 600 authorized_keys
在ks-m1上执行以下命令,使主节点能免密访问其他俩从节点:
# 配置主从互相免密登陆
cat ~/.ssh/id_rsa.pub | ssh root@ks-m2 'cat - >> ~/.ssh/authorized_keys'
cat ~/.ssh/id_rsa.pub | ssh root@ks-m3 'cat - >> ~/.ssh/authorized_keys'
cat ~/.ssh/id_rsa.pub | ssh root@ks-n1 'cat - >> ~/.ssh/authorized_keys'
cat ~/.ssh/id_rsa.pub | ssh root@ks-n2 'cat - >> ~/.ssh/authorized_keys'
cat ~/.ssh/id_rsa.pub | ssh root@ks-harbor 'cat - >> ~/.ssh/authorized_keys'
其它服务器参照上面命令依次每台服务器上执行免密登录命令
在升级内核十分重要,低版本的内核下k8s集群不稳定,且对插件的兼容性不好,例如3.10版本的内核不支持网络插件Calico3.23版本等。
共有两种开机引导模式:bios和uefi,其中uefi引导模式下需要关闭安全引导,否则无法正常开机。
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm -y
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
$ yum --enablerepo=elrepo-kernel install kernel-lt -y
说明:
首先需要确定Linux系统开机引导模式是BIOS还是UEFI,可以通过命令 [ -d /sys/firmware/efi ] && echo UEFI || echo BIOS 来确定系统开机引导模式
- 如果输出是BIOS就是BIOS;
- 如果是 UEFI ,则是UEFI
执行命令:
[ -d /sys/firmware/efi ] && echo UEFI || echo BIOS
1)、BIOS模式执行下面命令:
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
2)、UEFI模式执行下面命令:
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /boot/efi/EFI/centos/grub.cfg
grub2-set-default 0
1)、BIOS模式执行下面命令:
$ grub2-mkconfig -o /boot/grub2/grub.cfg
2)、UEFI模式执行下面命令:
$ grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
内核升级完成后需要重新启动系统才能生效
1)、重启系统执行命令:
reboot
2)、查看系统内核执行命令:
uname -r
# 加载br_netfilter模块
modprobe br_netfilter
# 验证模块是否加载成功
lsmod | grep br_netfilter
1)、修改配置文件
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF
说明
禁止使用swap空间,只有当系统OOM时才允许使用它
vm.swappiness = 0
2)、生效执行命令:
sysctl --system
# 或
sysctl -p /etc/sysctl.d/k8s.conf
说明
以下3项为必须参数,其他参数可根据需要添加
- net.bridge.bridge-nf-call-iptables:开启桥设备内核监控(ipv4)
- net.ipv4.ip_forward:开启路由转发
- net.bridge.bridge-nf-call-ip6tables:开启桥设备内核监控(ipv6)
# 下载常用的软件
yum clean all && yum makecache && yum repolist
yum install -y vim net-tools bash-completion wget lrzsz
# 配置国内阿里云docker的repo源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
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
# 安装ntpdate命令
yum install ntpdate -y
# 跟网络源做同步
ntpdate cn.pool.ntp.org
# 把时间同步做成计划任务
crontab -e
# 填入一下内容
* */1 * * * /usr/sbin/ntpdate cn.pool.ntp.org
# 重启crond服务
service crond restart
# 安装chronyd
yum install -y chronyd
# 启动chronyd及加入开机自启
systemctl start chronyd && systemctl enable chronyd
# 修改/etc/chrony.conf配置文件,同步服务器地址为阿里云,增加一行(server ntp1.aliyun.com iburst,其余服务地址注释了)
server ntp1.aliyun.com iburst
yum install -y ipvsadm ipset sysstat conntrack libseccomp
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
ipvs_modules="ip_vs ip_vs_lc ip_vs_wlc ip_vs_rr ip_vs_wrr ip_vs_lblc ip_vs_lblcr ip_vs_dh ip_vs_sh ip_vs_fo ip_vs_nq ip_vs_sed ip_vs_ftp nf_conntrack ip_tables ip_set xt_set ipt_set ipt_rpfilter ipt_REJECT ipip "
for kernel_module in \${ipvs_modules}; do
/sbin/modinfo -F filename \${kernel_module} > /dev/null 2>&1
if [ $? -eq 0 ]; then
/sbin/modprobe \${kernel_module}
fi
done
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules
sh /etc/sysconfig/modules/ipvs.modules
lsmod | grep ip_vs
说明
dummy0网卡和kube-ipvs0网卡:在安装k8s集群时,启用了ipvs的话,就会有这两个网卡。(将service的IP绑定在kube-ipvs0网卡上)
至此服务器的基础配置全部完成,下一篇将安装Docker的K8s集群