基础环境:

  • Rancher版本:2.3.1
  • 3台主机 Centos7
    • k8s-master 192.168.2.201
    • k8s-node1 192.168.2.11
    • k8s-node2 192.168.2.12
  • Docker version 19.03.4

镜像准备

github-rancher上下载racher-images.txt
然后使用shell脚本下载镜像

sudo su
chmod +x ./rancher-save-images.sh && ./rancher-save-images.sh --image-list ./rancher-images.txt
rancher-save-images.sh
#!/bin/bash
# 定义日志
workdir=`pwd`
log_file=${workdir}/sync_images_$(date +"%Y-%m-%d").log
logger()
{
    log=$1
    cur_time='['$(date +"%Y-%m-%d %H:%M:%S")']'
    echo ${cur_time} ${log} | tee -a ${log_file}
}
list="rancher-images.txt"
POSITIONAL=()
while [[ $# -gt 0 ]]; do
    key="$1"
    case $key in
        -i|--images)
        images="$2"
        shift # past argument
        shift # past value
        ;;
        -l|--image-list)
        list="$2"
        shift # past argument
        shift # past value
        ;;
        -h|--help)
        help="true"
        shift
    ;;
    esac
done
usage () {
    echo "USAGE: $0 [--image-list rancher-images.txt] [--images rancher-images.tar.gz]"
    echo "  [-l|--images-list path] text file with list of images. 1 per line."
    echo "  [-l|--images path] tar.gz generated by docker save."
    echo "  [-h|--help] Usage message"
}
if [[ $help ]]; then
    usage
    exit 0
fi
mkdir -p rancher-images-$(date +"%Y-%m-%d")
for i in $(cat ${list});
do
    if [[ ! -f rancher-images-$(date +"%Y-%m-%d")/$(echo $i | sed "s#/#-#g; s#:#-#g").tgz ]];then
        docker pull ${i}
        if [ $? -ne 0 ]; then
            logger "${i} pull failed."
        else
            logger "${i} pull successfully."
        fi
        docker save ${i} | gzip > rancher-images-$(date +"%Y-%m-%d")/$(echo $i | sed "s#/#-#g; s#:#-#g").tgz
        if [ $? -ne 0 ]; then
            logger "${i} save failed."
        else
            logger "${i} save successfully."
        fi
    else
        logger "${i} Images downloaded."
    fi
done

重命名镜像名,方便上传至私有docker registry

chmod +x ./rancher-push-images.sh && ./rancher-push-images.sh

执行脚本后根据提示输入镜像仓库地址和用户名、用户密码。

rancher-push-images.sh
#!/bin/bash
## 镜像上传说明
# 需要先在镜像仓库中创建 rancher 项目
# 根据实际情况更改以下私有仓库地址
# 定义日志
workdir=`pwd`
log_file=${workdir}/sync_images_$(date +"%Y-%m-%d").log
logger()
{
    log=$1
    cur_time='['$(date +"%Y-%m-%d %H:%M:%S")']'
    echo ${cur_time} ${log} | tee -a ${log_file}
}
images_hub() {
    while true; do
        read -p "输入镜像仓库地址(不加http/https): " registry
        read -p "输入镜像仓库用户名: " registry_user
        read -p "输入镜像仓库用户密码: " registry_password
        echo "您设置的仓库地址为: ${registry},用户名: ${registry_user},密码: xxx"
        read -p "是否确认(Y/N): " confirm
        if [ $confirm != Y ] && [ $confirm != y ] && [ $confirm == '' ]; then
            echo "输入不能为空,重新输入"
        else
            break
        fi
    done
}
images_hub
echo "镜像仓库 $(docker login -u ${registry_user} -p ${registry_password} ${registry})"
#images=$(docker images -a | grep -v TAG | awk '{print $1 ":" $2}')
images=$(cat rancher-images.txt )
# 定义全局项目,如果想把镜像全部同步到一个仓库,则指定一个全局项目名称;
global_namespace=   # rancher
docker_push() {
    for imgs in $(echo ${images}); do
        if [[ -n "$global_namespace" ]]; then
            n=$(echo ${imgs} | awk -F"/" '{print NF-1}')
            # 如果镜像名中没有/,那么此镜像一定是library仓库的镜像;
            if [ ${n} -eq 0 ]; then
                img_tag=${imgs}
                #重命名镜像
                docker tag ${imgs} ${registry}/${global_namespace}/${img_tag}
                #删除原始镜像
                #docker rmi ${imgs}
                #上传镜像
                docker push ${registry}/${global_namespace}/${img_tag}
            # 如果镜像名中有一个/,那么/左侧为项目名,右侧为镜像名和tag
            elif [ ${n} -eq 1 ]; then
                img_tag=$(echo ${imgs} | awk -F"/" '{print $2}')
                #重命名镜像
                docker tag ${imgs} ${registry}/${global_namespace}/${img_tag}
                #删除旧镜像
                #docker rmi ${imgs}
                #上传镜像
                docker push ${registry}/${global_namespace}/${img_tag}
            # 如果镜像名中有两个/,
            elif [ ${n} -eq 2 ]; then
                img_tag=$(echo ${imgs} | awk -F"/" '{print $3}')
                #重命名镜像
                docker tag ${imgs} ${registry}/${global_namespace}/${img_tag}
                #删除旧镜像
                #docker rmi ${imgs}
                #上传镜像
                docker push ${registry}/${global_namespace}/${img_tag}
            else
                #标准镜像为四层结构,即:仓库地址/项目名/镜像名:tag,如不符合此标准,即为非有效镜像。
                echo "No available images"
            fi
        else
            n=$(echo ${imgs} | awk -F"/" '{print NF-1}')
            # 如果镜像名中没有/,那么此镜像一定是library仓库的镜像;
            if [ ${n} -eq 0 ]; then
                img_tag=${imgs}
                namespace=library
                #重命名镜像
                docker tag ${imgs} ${registry}/${namespace}/${img_tag}
                #删除原始镜像
                #docker rmi ${imgs}
                #上传镜像
                docker push ${registry}/${namespace}/${img_tag}
            # 如果镜像名中有一个/,那么/左侧为项目名,右侧为镜像名和tag
            elif [ ${n} -eq 1 ]; then
                img_tag=$(echo ${imgs} | awk -F"/" '{print $2}')
                namespace=$(echo ${imgs} | awk -F"/" '{print $1}')
                #重命名镜像
                docker tag ${imgs} ${registry}/${namespace}/${img_tag}
                #删除旧镜像
                #docker rmi ${imgs}
                #上传镜像
                docker push ${registry}/${namespace}/${img_tag}
            # 如果镜像名中有两个/,
            elif [ ${n} -eq 2 ]; then
                img_tag=$(echo ${imgs} | awk -F"/" '{print $3}')
                namespace=$(echo ${imgs} | awk -F"/" '{print $2}')
                #重命名镜像
                docker tag ${imgs} ${registry}/${namespace}/${img_tag}
                #删除旧镜像
                #docker rmi ${imgs}
                #上传镜像
                docker push ${registry}/${namespace}/${img_tag}
            else
                #标准镜像为四层结构,即:仓库地址/项目名/镜像名:tag,如不符合此标准,即为非有效镜像。
                echo "No available images"
            fi
        fi
    done
}
docker_push

安装Rancher

安装Racher Server

最简单的方式就是通过以下方式安广Rancher-server

docker run -d --restart=unless-stopped \
-p 8081:80 -p 8443:443 \
-v /data/rancher:/var/lib/rancher/ \
-v /root/var/log/auditlog:/var/log/auditlog \
-e AUDIT_LEVEL=3 \
<REGISTRY.YOURDOMAIN.COM:PORT>/rancher/rancher:<RANCHER_VERSION_TAG>

配置默认镜像仓库地址

登录Rancher并配置默认管理员密码
进入Settings视图配置System-default-registry

配置Racher系统chart

同步system-charts2.3
git clone --bare https://github.com/rancher/system-charts.git
cd system-charts.git
git push --mirror ssh@private-gitlab_url/rancher/system-charts.git
配置system-chart

https://192.168.2.201:8443/v3/catalogs/system-library
单击右上角的“ 编辑”,将url的值更新为内部Git代码库system-charts的地址
点击Show Request
点击Send Request
点击go up

安装k8s

登录rancher
添加集群
配置相关参数
添加主机

参考网址

rancher github 官网
rancher中文官网
system-charts

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐