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

参考文档: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"
                    }
                ]
            }
        }
    }
}'
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,784评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,745评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,702评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,229评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,245评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,376评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,798评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,471评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,655评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,485评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,535评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,235评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,793评论 3 304
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,863评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,096评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,654评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,233评论 2 341