容器管控平台的搭建(Rancher+helm+harbor+promethus+grafana)

rancher 1.x已经暂停维护,仅做记录参考,不建议生产使用

此方案为2019时的rancher 1的离线搭建方案,几年过去了应用都已经都已经迁移上云,仅作记录。

一、Harbor 私有仓库搭建

前期准备:1.docker环境和docker-compose环境。

                   2.offline版本的离线安装包。

harbor安装包获取地址:Releases · goharbor/harbor · GitHub

# 下载离线安装包
wget https://github.com/goharbor/harbor/releases/download/v1.10.1/harbor-offline-installer-v1.10.1.tgz

将安装包上传到服务器后:

# 解压
tar -xzf harbor-online-installer-v1.10.1.tgz

# 创建harbor目录
mkdir /opt/harbor

# 移动解压harbor文件,到新目录
mv harbor/* /opt/harbor/

# 修改配置文件
cd  /opt/harbor/
cp harbor.yml.tmpl harbor.yml
vim harbor.yml

  • 1.修改hostname为本机地址
  • 2.修改数据库密码database.password
  • 3.修改harbor登录密码 harbor_admin_password:
  • 4.如果有https配置把相关注释去掉即可

 修改完配置文件后:

# cd  /opt/harbor/
./prepare  # 执行使配置文件生效
./install.sh --help #查看启动参数
./install.sh  --with-chartmuseum # 加载chart

# 启动
docker-compose ps #查看运行pod
docker-compose up -d #后台启动docker-compose
docker-compose down #

最后修改其他需要访问镜像仓库docker配置

# 修改内网其他需要访问harbor的机器docker配置
vim /etc/docker/daemon.json
{
  "insecure-registries": ["harborIp:Port"] 
}


# 重新加载配置
systemctl daemon-reload
# 重启docker
systemctl restart docker

使用方式:

1. 镜像管理方式同样使用docker命令,具体参考docker官方即可。

2. 在rancher中使用新的镜像,下图位置中填写好上述修改后的镜像即可。

 

二、Rancher搭建

需要准备:harbor 私有仓库、docker安装包(docker安装过程没有记录,但需要每台机器均需要安装)、rancher-server镜像、kubectl、rke、helm(也可以通过git仓库方式创建私有商店)

 1. kubectl安装

# 下载需求版本的kubectl
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.16.0/bin/linux/amd64/kubectl

# 最新版本
#curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl

# 
chmod +x ./kubectl

# 
sudo mv ./kubectl /usr/local/bin/kubectl

# 查看版本
kubectl version

2. rke安装

打开Release Release v0.3.2 · rancher/rke · GitHub

 

# 重命名并复制到系统路径
mv rke_linux-amd64 rke 
chmod +x rke

# 确认已安装版本
rke --version
 

3. 安装helm

# 可以参考官方安装方法
//https://helm.sh/zh/docs/intro/install/

# 下载需要的版本
//https://github.com/helm/helm/releases

# 解压缩并移动到指定目录
tar -zxvf helm-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/helm && chmod +x usr/local/bin/helm

# 测试helm客户端
helm version

4.安装 helm 服务端

        注:需要先拉取 tiller 对应版本镜像并推送至服务器。

# 安装 helm 服务端
kubeconfig=xxx.yml
helm_version=`helm version |grep Client | awk -F""\" '{print $2}'` helm init --kubeconfig=$kubeconfig --skip-refresh \
--service-account tiller \
--tiller-image	registry.cn-shanghai.aliyuncs.com/rancher/tiller:${helm_version}

5. 安装 Rancher

5.1 获取Rancher Chart 

从可以访问 Internet 的系统中,获取 Rancher Helm Chart。

使用 helm repo add 来添加仓库,不同的地址适应不同的 Rancher 版本(latest,stable或alpha)。更多信息请参考如何选择 Rancher 版本选择

  • latest: 最新版
  • stable:稳定版
  • alpha:预览版
# 一般选择稳定版
helm repo add rancher-stable https://releases.rancher.com/server-charts/stable

获取最新的 Rancher Chart,您会看到对应的 tgz 文件下载到本地。

helm fetch rancher-stable/rancher

如果需要下载特定版本 Rancher 的,你可以用--version参数指定版本:

helm fetch rancher-stable/rancher --version=vx.x.x

5.2 获取Rancher镜像 

从可以访问 Internet 的系统中,获取rancher镜像

# 下载对应版本需求文件
# https://github.com/rancher/rancher/releases

通过 rke 处理镜像清单(可选)

rke config --system-images -all >> ./rancher-images.txt

# 去重
sort -u rancher-images.txt -o rancher-images.txt 

拉取镜像并保存清单

rancher-save-images.sh 与 rancher-images.txt 放在同一目录并执行

chmod +x ./rancher-save-images.sh && ./rancher-save-images.sh -- image-list ./rancher-images.txt

rancher-save-images.sh 脚本如下: 

#!/bin/bash
list="rancher-images.txt"
images="rancher-images.tar.gz"

usage () {
    echo "USAGE: $0 [--image-list rancher-images.txt] [--images rancher-images.tar.gz]"
    echo "  [-l|--image-list path] text file with list of images; one image per line."
    echo "  [-i|--images path] tar.gz generated by docker save."
    echo "  [-h|--help] Usage message"
} 

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
        ;;
        *)
        usage
        exit 1
        ;;
    esac
done

if [[ $help ]]; then
    usage
    exit 0
fi

pulled=""
while IFS= read -r i; do
    [ -z "${i}" ] && continue
    if docker pull "${i}" > /dev/null 2>&1; then
        echo "Image pull success: ${i}"
        pulled="${pulled} ${i}"
    else
        if docker inspect "${i}" > /dev/null 2>&1; then
            pulled="${pulled} ${i}"		
        else
            echo "Image pull failed: ${i}"
        fi
    fi
done < "${list}"

echo "Creating ${images} with $(echo ${pulled} | wc -w | tr -d '[:space:]') images"
docker save $(echo ${pulled}) | gzip --stdout > ${images}

5.3 上传Rancher镜像 

在harbor私有创建相应项目,例如rancher:

 然后将文件 rancher-images.txt 和 rancher-images.tar.gz上传到服务器中,在同一目录下运行 rancher-load-images.sh 脚本。

# 1.登录私有镜像库
docker login <REGISTRY.YOURDOMAIN.COM:PORT>

# 2.为rancher-load-images.sh 添加可执行权限
chmod +x rancher-load-images.sh

# 3.使用脚本 rancher-load-images.sh提取rancher-images.tar.gz文件中的镜像,根据文件rancher-images.txt中的镜像列表对提取的镜像文件重新打 tag 并推送到你的私有镜像库中
./rancher-load-images.sh --image-list ./rancher-images.txt --registry <REGISTRY.YOURDOMAIN.COM:PORT>`

rancher-load-images.sh 脚本如下:

#!/bin/bash
images="rancher-images.tar.gz"
list="rancher-images.txt"
windows_image_list=""
windows_versions="1903"
usage () {
    echo "USAGE: $0 [--images rancher-images.tar.gz] --registry my.registry.com:5000"
    echo "  [-l|--image-list path] text file with list of images; one image per line."
    echo "  [-i|--images path] tar.gz generated by docker save."
    echo "  [-r|--registry registry:port] target private registry:port."
    echo "  [--windows-image-list path] text file with list of images used in Windows. Windows image mirroring is skipped when this is empty"
    echo "  [--windows-versions version] Comma separated Windows versions. e.g., \"1809,1903\". (Default \"1903\")"
    echo "  [-h|--help] Usage message"
}

push_manifest () {
    export DOCKER_CLI_EXPERIMENTAL=enabled
    manifest_list=()
    for i in "${arch_list[@]}"
    do
        manifest_list+=("$1-${i}")
    done

    echo "Preparing manifest $1, list[${arch_list[@]}]"
    docker manifest create "$1" "${manifest_list[@]}" --amend
    docker manifest push "$1" --purge
}

while [[ $# -gt 0 ]]; do
    key="$1"
    case $key in
        -r|--registry)
        reg="$2"
        shift # past argument
        shift # past value
        ;;
        -l|--image-list)
        list="$2"
        shift # past argument
        shift # past value
        ;;
        -i|--images)
        images="$2"
        shift # past argument
        shift # past value
        ;;
        --windows-image-list)
        windows_image_list="$2"
        shift # past argument
        shift # past value
        ;;
        --windows-versions)
        windows_versions="$2"
        shift # past argument
        shift # past value
        ;;
        -h|--help)
        help="true"
        shift
        ;;
        *)
        usage
        exit 1
        ;;
    esac
done
if [[ -z $reg ]]; then
    usage
    exit 1
fi
if [[ $help ]]; then
    usage
    exit 0
fi

docker load --input ${images}

linux_images=()
while IFS= read -r i; do
    [ -z "${i}" ] && continue
    linux_images+=("${i}");
done < "${list}"

arch_list=()
if [[ -n "${windows_image_list}" ]]; then
    IFS=',' read -r -a versions <<< "$windows_versions"
    for version in "${versions[@]}"
    do
        arch_list+=("windows-${version}")
    done

    windows_images=()
    while IFS= read -r i; do
        [ -z "${i}" ] && continue
        windows_images+=("${i}")
    done < "${windows_image_list}"

    # use manifest to publish images only used in Windows
    for i in "${windows_images[@]}"; do
        if [[ ! " ${linux_images[@]}" =~ " ${i}" ]]; then
            case $i in
            */*)
                image_name="${reg}/${i}"
                ;;
            *)
                image_name="${reg}/rancher/${i}"
                ;;
            esac
            push_manifest "${image_name}"
        fi
    done
fi


arch_list+=("linux-amd64")
for i in "${linux_images[@]}"; do
    [ -z "${i}" ] && continue
    arch_suffix=""
    use_manifest=false
    if [[ (-n "${windows_image_list}") && " ${windows_images[@]}" =~ " ${i}" ]]; then
        # use manifest to publish images when it is used both in Linux and Windows
        use_manifest=true
        arch_suffix="-linux-amd64"
    fi
    case $i in
    */*)
        image_name="${reg}/${i}"
        ;;
    *)
        image_name="${reg}/rancher/${i}"
        ;;
    esac

    docker tag "${i}" "${image_name}${arch_suffix}"
    docker push "${image_name}${arch_suffix}"

    if $use_manifest; then
        push_manifest "${image_name}"
    fi
done

5.4 rke部署Kubernetes集群

rancher-cluster.yml 示例(根据实际配置修改对应配置信息即可):

nodes:
  - address: 192.168.1.110 # 离线环境节点 IP
    internal_address: 192.168.1.110 # 节点内网 IP
    user: rancher
    role: ["controlplane", "etcd", "worker"]
    ssh_key_path: /home/user/.ssh/id_rsa
  - address: 192.168.1.111 # 离线环境节点 IP
    internal_address: 192.168.1.111 # 节点内网 IP
    user: rancher
    role: ["controlplane", "etcd", "worker"]
    ssh_key_path: /home/user/.ssh/id_rsa
  - address: 192.168.1.112 # 离线环境节点 IP
    internal_address: 192.168.1.112 # 节点内网 IP
    user: rancher
    role: ["controlplane", "etcd", "worker"]
    ssh_key_path: /home/user/.ssh/id_rsa

private_registries:
  - url: <REGISTRY.YOURDOMAIN.COM:PORT> # harbor私有镜像库地址
    user: rancher
    password: "*********"
    is_default: true

services: 
	etcd:
		extra_args:
			auto-compaction-retention: 240 #(单位小时)
			# 修改空间配额为$((6*1024*1024*1024)),默认 2G,最大 8G
			quota-backend-bytes: '6442450944' 
			# rke 0.2 之前版本
		snapshot: true 
		creation: 6h 
		retention: 24h
		backup_config:
			enabled: true		  # enables recurring etcd snapshots 
			interval_hours: 6     # time increment between snapshots 
			retention: 60	      # time in days before snapshot purge 

SSH配置可通过ssh-keygen生成:

ssh-keygen
ssh-copy-id -i /root/.ssh/id_rsa.pub root@<集群主机IP>

启动 Kubernetes 集群:

rke up --config ./rancher-cluster.yml

完成后,它应显示:Finished building Kubernetes cluster successfully,并产生一个kube_config_rancher-cluster.yml文件,这个文件是访问和操作k8s集群的凭证。

设置环境变量(方便使用kubectl命令):

export KUBECONFIG=$(pwd)/kube_config_rancher-cluster.yml


执行下列指令应当可以看到节点状态:

kubectl get nodes

如图:

 

执行下列指令应当可以看到集群服务状态

kubectl get pods --all-namespaces 

5.5 初始化 helm(可选

        Helm 在 Kubernetes 集群上安装 Tiller 服务以管理 charts,由于rke默认启用 RBAC, 因此我们需要使用 kubectl 来创建一个service account,clusterRoleBinding 才能让 Tiller 具有部署到集群的权限。

# 指定 kubeconfig 配置文件

kubectl --kubeconfig=$kubeconfig -n kube-system \ 
        create serviceaccount tiller

kubectl --kubeconfig=$kubeconfig \ 
        create clusterrolebinding tiller \
        --clusterrole cluster-admin \
        --serviceaccount=kube-system:tiller

5.6 cert-manager方案渲染rancher charts

在可以访问Internet的机器上,安装 helm 客户端。执行以下命令以

# 获取 cert-manager
helm fetch stable/cert-manager

# 需要准备 cert-manager-controller 对应镜像,推送至harbor仓库。
helm template ./cert-manager-<version>.tgz --output-dir . \
            --name cert-manager --namespace kube-system \
            --set image.repository=<REGISTRY.YOURDOMAIN.COM:PORT>/quay.io/jetstack/cert-manager-controller

# 使用您期望的参数渲染 chart 模板,需要设置 image.repository 从harbor仓库中拉取 Chart。
helm template ./rancher-<version>.tgz --output-dir . \
--name rancher --namespace cattle-system \
--set hostname=<RANCHER.YOURDOMAIN.COM> \
--set
rancherImage=<REGISTRY.YOURDOMAIN.COM:PORT>/rancher/rancher

5.7 安装 cert-manager 和 rancher

# 为 cert-manager 创建 namespace
kubectl create namespace cert-manager

# 启动 cert-manager
kubectl -n kube-system apply -R -f ./cert-manager 

# 安装Rancher
kubectl create namespace cattle-system 
kubectl -n cattle-system apply -R -f ./rancher

三、Prometheus + Grafana

        前期准备:rancher平台。

        方案一:通过helm将应用商店成功部署到rancher平台。

        方案二:通过git将商店部署到rancher平台。

        商店模板可参考官方:私有应用商店 | Rancher文档

        可从官方应用商店git中获取对应模板,然后部署到私有git中

GitHub - rancher/chartsContribute to rancher/charts development by creating an account on GitHub.https://github.com/rancher/charts

如能成功部署商店,即可通过商店进行安装使用。

当时资料暂时没有找到,通过商店安装可以参考:Rancher 2.x 一键式部署 Prometheus + Grafana 监控 Kubernetes 集群_哎_小羊_168的博客-CSDN博客_rancher部署prometheus

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值