近几天在研究一件安装k8s,安装过程中由于会安装大量的docker,kubernetes相关软件,整个安装过程会非常长,很多时候都会超时,为了加速安装过程,因而选择自己本地搭建YUM仓库,并定期同步最新版本和版本变更消息。

1、修改yum源为阿里云源

1.1、备份系统自带的yum源

  1. tar -zcvf CentOS-bk.tar.gz /etc/yum.repos.d/CentOS-*

1.2、修改yum源

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

1.3、检验阿里云源是否正常

yum repolist

2、安装yum相关的软件

 yum install -y wget make cmake gcc gcc-c++ pcre-devel zlib-devel openssl openssl-devel createrepo yum-utils

yum-utils:reposync同步工具
createrepo:编辑yum库工具
plugin-priorities:控制yum源更新优先级工具,这个工具可以用来控制进行yum源检索的先后顺序,建议可以用在client端。

3、根据源标识同步源到本地目录

3.1、创建本地目录

mkdir /mirror

3.2、同步到本地目录

$ reposync -r docker-ce-stable kubernetes -p /mirror

warning: /mirror/kubernetes/Packages/29e7806d1d54cc0eea2963f4ab276778526538816c88c963ece7d1a05fd80792-cri-tools-1.0.0_beta.1-0.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID 3e1ba8d5: NOKEY ETA
29e7806d1d54cc0eea2963f4ab276778526538816c88c963ece7d1a05fd80792-cri-tools-1.0.0_beta.1-0.x86_64.rpm 的公钥尚未安装
(1/678): 29e7806d1d54cc0eea2963f4ab276778526538816c88c963ece7d1a05fd80792-cri-tools-1.0.0_beta.1-0.x86_64.rpm                                                                  | 4.0 MB  00:00:36
(2/678): e253c692a017b164ebb9ad1b6537ff8afd93c35e9ebc340a52c5bd42425c0760-cri-tools-1.11.0-0.x86_64.rpm                                                                        | 4.2 MB  00:00:44
......

注:不用担心没有创建相关目录,系统自动创建相关目录,并下载,时间较长请耐心等待。

可以使用下面命令同步全部源
$ reposync -p / mirror

也可以用 repo -r —repoid=repoid 指定要查询的repo id,可以指定多个(# reposync -r docker-ce-stable -p /mirror #这里同步base目录到本地)

3.3、更新新的rpm包

# reposync -np /mirror

3.4、创建索引

createrepo -po /mirror/docker-ce-stable/ /mirror/docker-ce-stable/
createrepo -po /mirror/kubernetes/ /mirror/kubernetes/

3.5、更新源数据

createrepo --update /mirror/docker-ce-stable
createrepo --update /mirror/kubernetes

3.6、创建定时任务脚本

# vim /data/shell/docker_yum_update.sh
#!/bin/bash
echo 'Updating Aliyum Source'
DATETIME=`date +%F_%T`
exec > /var/log/aliyumrepo_$DATETIME.log
     reposync -r docker-ce-stable kubernetes -p /mirror
if [ $? -eq 0 ];then
      createrepo --update /mirror/docker-ce-stable
      createrepo --update /mirror/kubernetes
    echo "SUCESS: $DATETIME aliyum_docker_yum update successful"
  else
    echo "ERROR: $DATETIME aliyum_docker_yum update failed"
fi

将脚本加入到定时任务中
# crontab -e
# Updating Aliyum Source
00 13 * * 6 [ $(date +%d) -eq $(cal | awk 'NR==3{print $NF}') ] && /bin/bash /data/shell/docker_yum_update.sh

4、安装nginx开启目录权限保证本地机器可以直接本地yum源

4.1、创建运行账户

# groupadd nginx
# useradd -r -g nginx -s /bin/false -M nginx
# yum install nginx -y

4.2、修改nginx 配置文件

# vim nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       8080;
        server_name  localhost;
        root         /mirror ;           #这里是yum源存放目录
        location / {
            autoindex on;        #打开目录浏览功能
            autoindex_exact_size off;  # off:以可读的方式显示文件大小
            autoindex_localtime on;    # on/off:是否以服务器的文件时间作为显示的时间
            charset utf-8,gbk;     #展示中文文件名
            index index.html;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

由于我的IP地址是172.17.3.143,而且80端口被占用,因而改变80端口为8080,因而本地YUM 仓库访问地址为172.17.3.143:8080

image.png

5、客户端创建repo文件

5.1、修改客户端服务器yum仓库地址

修改master,worker三台服务器的docker和kubernetes安装源为本地YUM仓库地址。

vim kubernetes.repo

[kubernetes]
name=Kubernetes
baseurl=http://172.17.3.143:8080/kubernetes/
enabled=1
gpgcheck=0

vim docker-ce.repo

[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=http://172.17.3.143:8080/docker-ce-stable/
enabled=1
gpgcheck=0

5.2、更新本地yum仓库,重新索引

yum update