美文网首页
基于私有harbor仓库的rancher2.x HA 离线部署

基于私有harbor仓库的rancher2.x HA 离线部署

作者: 冥王星的卧底 | 来源:发表于2019-10-12 11:03 被阅读0次

    参考文档:https://rancher.com/docs/rancher/v2.x/en/installation/air-gap/

    HA框架和节点

    rancher HA 框架

    rancher HA基于k8s集群,为了节省节点,将k8s master和worker合一;另外需要一个节点作为Load Balancer和harbor节点,本文使用nginx作为rancher的反向代理。具体节点角色如下:

    • node1 k8s master/worker, rancher server
    • node2 k8s master/worker, rancher server
    • node3 k8s master/worker, rancher server
    • Load Balancer(nginx),harbor节点

    节点需要安装的工具

    • docker 四个节点都需要
    • kubectl k8s 节点
    • rke k8s 节点
    • helm k8s 节点
    离线安装docker-ce-18

    https://docs.docker.com/install/linux/docker-ce/centos/#install-from-a-package
    通过rpm包部署docker,下载三个安装包
    containerd.io-1.2.6-3.3.el7.x86_64.rpm
    docker-ce-18.09.9-3.el7.x86_64.rpm
    docker-ce-cli-18.09.9-3.el7.x86_64.rpm

    yum install xxx.rpm
    
    设置非root用户使用docker
    # 创建docker用户组
    groupadd docker   
    # 添加普通用户
    useradd rancher
    # 将rancher用户添加到docker组中
    usermod -aG docker rancher
    

    切换换到rancher用户,测试是否可以使用docker ps

    离线安装kubectl、helm、rke

    https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl
    确保三个工具可以在创建的普通用户中可以使用。

    # 添加可执行权限
    chmod a+x ./kubectl
    # 移动至PATH
    mv ./kubectl /usr/local/bin/kubectl
    # 测试是否正常
    kubectl version
    
    # 解压 helm压缩包
    tar -zxvf helm-*-linux-amd64.tgz
    chmod a+x helm
    # 将可执行文件移动至PATH中
    mv linux-amd64/helm /usr/local/bin/helm
    # 测试helm是否正常
    helm help
    
    # 添加可执行权限
    chmod a+x rke
    # 移动至PATH路径
    mv rke_linux-amd64 /usr/local/bin/rke
    # 测试是否可用
    rke --version
    

    harbor离线安装

    安装docker-compose

    https://github.com/docker/compose/releases
    在连接中下载release版本,

    mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
    chmod a+x /usr/local/bin/docker-compose
    
    安装harbor

    https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md

    1. Download the installer;
    2. Configure harbor.yml;
    3. Run install.sh to install and start Harbor;

    解压下载好的离线安装包

    tar xvf harbor-offline-installer-<version>.tgz
    

    修改harbor.yml

    • hostname:修改为节点ip地址
    • http 可以自定义端口
      修改完毕之后,执行install.sh脚本

    下载rancher需要的镜像并导入到harbor

    下载镜像

    rancher-releases页面下载

    • rancher-save-images.sh
    • rancher-images.txt
    • rancher-load-images.sh
      添加cert-manger的镜像信息至rancher-images.txt
    helm repo add jetstack https://charts.jetstack.io
    helm repo update
    helm fetch jetstack/cert-manager --version v0.9.1
    helm template ./cert-manager-<version>.tgz | grep -oP '(?<=image: ").*(?=")' >> ./rancher-images.txt
    sort -u rancher-images.txt -o rancher-images.txt
    

    执行下载脚本

    chmod +x rancher-save-images.sh
    ./rancher-save-images.sh --image-list ./rancher-images.txt
    
    将镜像导入harbor

    如果harbor使用http,则需要在每个节点上配置安全规则

    vi /etc/docker/daemon.json
    # 写入自己的harbor ip和port
    {
      "insecure-registries" : ["harbor_ip:harbor_port"]
    }
    # 重启docker
    systemctl daemon-reload
    systemctl restart docker
    

    在harbor中创建quay.io和rancher两个项目


    image.png
    1. 登录harbor
    docker login <harbor_ip:harbor_port>
    
    1. 添加可执行权限
    chmod +x rancher-load-images.sh
    
    1. 执行脚本
    ./rancher-load-images.sh --image-list ./rancher-images.txt --registry <harbor_ip:harbor_port>
    

    使用rke安装k8s集群

    使用密钥登录三个k8s节点

    这些操作都是在普通用户rancher下进行

    1. 生成密钥文件
    ssh-keygen -t rsa
    
    1. 上传id_rsa.pub,然后将公钥文件中的内容导入authorized_keys
    cat id_rsa.pub >> ~/.ssh/authorized_keys
    
    1. 测试是否可以使用私钥ssh登录到三个节点
    ssh -i ~/.ssh/id_ras rancher@192.168.3.34
    ssh -i ~/.ssh/id_ras rancher@192.168.3.35
    ssh -i ~/.ssh/id_ras rancher@192.168.3.36
    
    使用rke部署k8s

    配置ancher-cluster.yml 文件,address替换为自己的地址,只有一个网络的可以将internal_adress删掉,user替换为自己的用户名。

    nodes:
    - address: 192.168.3.36
      user: rancher
      role: [ "controlplane", "etcd", "worker" ]
      ssh_agent_auth: true
    - address: 192.168.3.35
      user: rancher
      role: [ "controlplane", "etcd", "worker" ]
      ssh_agent_auth: true
    - address: 192.168.3.34
      user: rancher
      role: [ "controlplane", "etcd", "worker" ]
      ssh_agent_auth: true
    
    private_registries:
    - url: 192.168.3.37:10080
      user: xxx
      password: xxx12345
      is_default: true
    
    

    执行rke up

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

    显示Finished building Kubernetes cluster successfully表示部署k8s成功。
    rkehi自动生成kube-config文件kube_config_rancher-cluster.yml,可以将其重命名后复制至$HOME/.kube/config,就可以使用kubectl命令了。

    # 检查集群节点状态
    kubectl get nodes
    # 检查集群上pod状态
    kubectl get pods --all-namespaces
    

    部署rancher

    部署cert-manger

    1.下载cert manger 的helm chart:

    helm repo add jetstack https://charts.jetstack.io
    helm repo update
    helm fetch jetstack/cert-manager --version v0.9.1
    

    2.生成cert-manger目录,包含cert-manger的k8s对象的yaml文件。

    helm template ./cert-manager-v0.9.1.tgz --output-dir . \
        --name cert-manager --namespace cert-manager \
        --set image.repository=192.168.3.37:10080/quay.io/jetstack/cert-manager-controller
        --set webhook.image.repository=192.168.3.37:10080/quay.io/jetstack/cert-manager-webhook
        --set cainjector.image.repository=192.168.3.37:10080/quay.io/jetstack/cert-manager-cainjector
    
    1. 下载cert-manger CRD文件
    curl -L -o cert-manager/cert-manager-crd.yaml https://raw.githubusercontent.com/jetstack/cert-manager/release-0.9/deploy/manifests/00-crds.yaml
    
    
    1. 部署cert-manger
    kubectl create namespace cert-manager
    kubectl label namespace cert-manager certmanager.k8s.io/disable-validation=true
    kubectl apply -f cert-manager/cert-manager-crd.yaml
    kubectl apply -R -f ./cert-manager
    
    部署rancher
    1. 下载rancher helm chart
    helm init -c
    helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
    helm fetch rancher-stable/rancher
    
    1. 生成rancher目录,包含rancher的k8s对象的yaml文件:
    helm template ./rancher-2.2.8.tgz --output-dir . \
     --name rancher \
     --namespace cattle-system \
     --set hostname=rancher.my.org \
     --set rancherImage=192.168.3.37:10080/rancher/rancher \
     --set systemDefaultRegistry=192.168.3.37:10080 \ 
    
    1. 部署rancher
    kubectl create namespace cattle-system
    kubectl -n cattle-system apply -R -f ./rancher
    

    load balancer节点安装nginx

    本问使用容器的方式运行nginx。将三个k8s节点ip填入下面nginx.conf中。

    worker_processes 4;
    worker_rlimit_nofile 40000;
    
    events {
        worker_connections 8192;
    }
    
    stream {
        upstream rancher_servers_http {
            least_conn;
            server <IP_NODE_1>:80 max_fails=3 fail_timeout=5s;
            server <IP_NODE_2>:80 max_fails=3 fail_timeout=5s;
            server <IP_NODE_3>:80 max_fails=3 fail_timeout=5s;
        }
        server {
            listen     80;
            proxy_pass rancher_servers_http;
        }
    
        upstream rancher_servers_https {
            least_conn;
            server <IP_NODE_1>:443 max_fails=3 fail_timeout=5s;
            server <IP_NODE_2>:443 max_fails=3 fail_timeout=5s;
            server <IP_NODE_3>:443 max_fails=3 fail_timeout=5s;
        }
        server {
            listen     443;
            proxy_pass rancher_servers_https;
        }
    }
    

    执行docker run命令,注意nginx.conf的路径为上述文件的路径。

    docker run -d --restart=unless-stopped \
      -p 80:80 -p 443:443 \
      -v /etc/nginx.conf:/etc/nginx/nginx.conf \
      nginx:1.14
    

    访问rancher

    Linux下在/etc/hosts下添加,该ip为lb节点的ip

    192.168.3.37 rancher.my.org
    

    win10是在 C:\Windows\System32\drivers\etc\hosts

    为cattle-cluster-agent和cattle-node-agent添加主机别名

    kubectl -n cattle-system patch  deployments cattle-cluster-agent --patch '{
        "spec": {
            "template": {
                "spec": {
                    "hostAliases": [
                        {
                            "hostnames":
                            [
                                "rancher.my.org"
                            ],
                                "ip": "192.168.3.37"
                        }
                    ]
                }
            }
        }
    }'
    
    kubectl -n cattle-system patch  ds cattle-node-agent --patch '{
        "spec": {
            "template": {
                "spec": {
                    "hostAliases": [
                        {
                            "hostnames":
                            [
                                "rancher.my.org"
                            ],
                                "ip": "192.168.3.37"
                        }
                    ]
                }
            }
        }
    }'
    

    相关文章

      网友评论

          本文标题:基于私有harbor仓库的rancher2.x HA 离线部署

          本文链接:https://www.haomeiwen.com/subject/cwhapctx.html