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

2019-10-12  本文已影响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的反向代理。具体节点角色如下:

节点需要安装的工具

离线安装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

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

下载镜像

rancher-releases页面下载

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"
                    }
                ]
            }
        }
    }
}'
上一篇下一篇

猜你喜欢

热点阅读