rancher 高可用 + 离线部署

rancher 高可用 + 离线部署

rancher 的结构分为 rancher-serverrancher-agent,以及一个或多个被管理的 k8s 集群。其中,rancher-agent 运行在被管理的 k8s 集群中,并与 rancher-server 通信,为 rancher-server 实施集群的管理。

rancher-server,提供了一个比较完善的网页端 k8s 管理工具以及对应的 api 接口。rancher-server 仅支持 https 访问。因此,rancher 支持多种方式为 rancher-server 提供所需要的 tls 证书。在本文中,推荐使用自建 ca 后为 rancher 签发所需的证书。推荐使用 xca 这个全平台证书管理绿色软件,图形化的为所有项目搭建起一个自建的 ca 中心,管理所有证书。

在单节点部署中,rancher-server 直接可以使用官方提供的 docker run 命令启动,如下:

docker run -d --name rancher \
    --restart=unless-stopped \
    -p 8080:80 -p 8443:443   \
    rancher/rancher:latest

此命令运行了一个单节点 rancher-server。启动之后,便可在 rancher 网页上创建自定义集群。集群创建后,rancher-server 会提供不同的 docker run 命令,你可以使用这些不同的 docker run 命令在需要搭建集群的节点上,按照想要的角色运行对应的命令,即可获得一个由 rancher 自动搭建起来的 k8s 集群。

显然,自定义 k8s 集群,可以借由在多个节点以上搭建,来保证 k8s 集群的高可用。但是 rancher-server 本身仍为单节点上直接由 docker 引擎管理的容器。

因此,为了保证 rancher-server 本身的高可用,就需要先安装一个 k8s 高可用集群,再借由 k8s 的高可用性,将 rancher-server 部署至这个 k8s 集群内,从而保证 rancher-server 的高可用。

rke

rke - rancher k8s engine 是一个命令行工具,它可以傻瓜式的一键部署 k8s 集群。通过 rke 我们可以预先方便的在裸服务器上部署一套 k8s 集群。同时,rke 工具也有集群配置调整,集群扩容缩容,集群快照还原等功能。

节点准备

k8s 集群的分布式高可用,依赖 etcd 这个组件(类似 zookeeper)。3 个 etcd 节点即可容忍 1 个节点挂掉。除了 etcd 节点的角色,集群中还有“控制总线”、“工人”的角色需要分配。集群与 rancher 的性能与 etcd 节点的磁盘 io 性能息息相关。在最佳实践中,推荐为 etcd 节点分配高性能存储。

本次实践中,我们有 6 个节点可以使用。你可以在操作中先用 3 个节点搭建集群,然后再用剩下的 3 个节点为集群扩容 worker 角色。但本次实践中,我将直接一次性使用全部的 6 个节点搭建集群。

192.168.1.120   工具机
192.168.1.146   etcd、worker
192.168.1.147   controlplane、worker
192.168.1.148   etcd、worker
192.168.1.149   controlplane、worker
192.168.1.150   etcd、worker
192.168.1.151   controlplane、worker

CentOS 7 Minimal

本实践预设你的节点上挂载了一块数据盘在 /home 下。因此,文中将尽可能将所有的持久化数据保存在 /home 下的相关目录中。

本实践使用 CentOS 7 的最小化安装版。由于 CentOS 已知的一个 bug,root 账户的 ssh 无法转发某些 ssh 隧道,导致 rke 无法使用 root 账号远程配置节点。因此我们将新建一个 ubuntu 账号,在 120 工具机上生成 ubuntu 用户的 ssh 密钥,并将公钥配置在所有节点 ubuntu 用户的 ssh 信任列表中,使我们可以在 120 工具机上使用 rke 命令,对所有节点机器进行操作。

同时,你需要为所有的节点安装并启动 ntpd 服务,设置正确的时间同步服务器,使得每个节点的时钟误差不会太大。

另外,我们预设你的所有节点处于你的私有网络中,因此我们推荐关闭并禁用 firewalld 防火墙服务。如果你一定要开启防火墙,请参考 rancher 官方文档中的防火墙白名单规则表。

关闭 selinux

setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

调整内核参数

cat > /etc/sysctl.d/k8s.conf <

开启ipvs

cat > /etc/sysconfig/modules/ipvs.modules < /dev/null 2>&1
    if [ $? -eq 0 ]; then
        /sbin/modprobe \${kernel_module}
    fi
done
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep ip_vs
yum install -y ipvsadm

当然,你需要为所有的节点,安装 docker。

Docker

rancher 目前的版本是 2.3.5,最近已经支持了 Docker 19.03,不用降级装 Docker 18.09 了。

curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache
yum install docker-ce

同时要设置 ubuntu 用户可以使用 docker

usermod -aG docker ubuntu

现在,你可以开始搭建一个 docker 镜像仓库了

nexus3

你当然可以使用更企业的 harbor 作为镜像仓库。如果你的网速够快,你甚至可以直接使用互联网仓库。本实践我们使用部署更轻量,仓库种类覆盖广的 nexus3 作为 docker registry。

120 工具机上设置 docker 目录、国内镜像源、设置一个奇葩一点的 ip 段作为 docker 默认网桥。并启动 docker。

cat > /etc/docker/daemon.json <

这里用的是运营商 NAT 的网段,一般不会和私网 ip 冲突。

安装 nexus3

mkdir /home/nexus
chown -R 200:200 /home/nexus
docker run --restart=unless-stopped -d --network=host --name nexus -v /home/nexus:/nexus-data sonatype/nexus3

之所以使用 --network=host ,是因为每个 docker 仓库将使用独立的端口。如果你预先设计好了所有需要使用的端口,请去掉这个参数并使用 -p 自行映射端口。nexus3 默认使用 8081 端口作为 web 端口。如果这个端口被占用,请在启动了一次 nexus3 后去 /home/nexus/etc/nexus.properties 中修改。默认用户名 admin,初始密码在 /home/nexus/admin.password 文件中。

登录后台,进行如下配置:

  • 添加一个 docker hosted 仓库,设置 8082 端口,禁止 redeploy 覆盖部署。
  • 添加一个 docker proxy 仓库,转发 https://dockerhub.azk8s.cn。这是 dockerhub 的微软 azure 中国镜像。如果没有互联网连接,请忽略。
  • 添加一个 docker proxy 仓库,转发 https://quay.azk8s.cn。这是 quay.io 的微软 azure 中国镜像。如果没有互联网连接,请忽略。
  • 添加一个 docker group 仓库,设置 8083 端口,并将以上三个仓库依次加入 group。你也可以按你预期的镜像搜索顺序调整。
  • 依据你的需求,为四个仓库均开启匿名访问权限。
  • Security - Realms 中,打开 Docker Bearer Token Realms

现在,你可以使用 192.168.1.120:8083 作为所有节点的仓库了。将以下内容保存至所有节点的 /etc/docker/daemon.json 文件:

{
    "graph": "/home/docker",
    "registry-mirrors": [
        "http://192.168.1.120:8083"
    ],
    "insecure-registries": [
        "192.168.1.0/24"
    ],
    "bip": "100.100.0.1/16"
}

并在所有节点启用 docker

systemctl enable docker
systemctl start docker

上传离线镜像

去 这里 查看 rancher-2.3.5 版本的说明。从中可以下载:

  • rancher 镜像列表
  • 镜像下载脚本
  • 镜像加载脚本

我们可以在有网络环境的机器上,将镜像下载保存:

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

脚本会将所有镜像保存到 rancher-images.tar.gz 中。将这个文件,和 rancher-images.txtrancher-load-images.sh 传输到 120 工具机上,即可使用脚本将安装 rancher 所需要的所有镜像倒入到镜像仓库中:

chmod +x rancher-load-images.sh
./rancher-load-images.sh --image-list rancher-images.txt --registry 192.168.1.120:8082

对了,记得执行命令前,不要忘记使用 nexus3 的账号登录 docker 私库:

docker login 192.168.1.120:8082

nexus3 的账号管理不再说明。

由于本次实践中,120 工具机直接联网,因此直接使用 rancher-images.txt 拉一次镜像,所有镜像就可以缓存至仓库中:

for image in $(cat rancher-images.txt );do echo 127.0.0.1:8083/$image; docker pull 127.0.0.1:8083/$image;done

rke 部署 k8s

以下操作在 120 工具机上发生

下载 rke-1.0.4。放在 /usr/local/bin/rke

切换到 ubuntu 用户,新建 rke-workspace 目录,执行 rke config

su - ubuntu
mkdir rke-workspace
cd rke-workspace
rke config

按提示依次填写,rke 命令会生成一个 cluster.yml 文件。你可以手动编辑这个文件中的以下字段:

prefix_path: "/opt/rancher/rke"
services:
  kubelet:
    extra_args:
      max-pods: 250 # 每个 node 最大容器数量,默认 110
  kubeproxy:
    extra_args:
      proxy-mode: ipvs # svc 默认使用 iptables 实现

同时,你也可以通过 label 限制 ingress-nginx 运行的 node:

nodes:
- address: 192.168.1.146
  labels:
    app: ingress-nginx # node 打 label
ingress:
  node_selector:
    app: ingress-nginx # ingress-nginx 选择 label

不配置则默认 ingress-nginx 将运行在所有 worker 节点上。

集群中的 etcd 目录也在这个目录下。如果你的集群有 ssd,可以把这个目录指定到 ssd 中。
更详细的设置字段,请看 这里

配置完成后,输入 rke up 即可开始安装 k8s。请注意,rke 使用 ssh 连接到各个节点进行操作,如果安装过程中发生错误,可以尝试升级 openssh-server

安装完成后,可以看到目录下生成了 cluster.rkestatekube_config_cluster.yml。请妥善保存这两个文件与 cluster.yml。这三个文件会在今后多次使用。

使用 kubectl 管理集群

k8s 集群已经安装完成,如果你不想使用 rancher 来管理集群,你可以直接使用 kubectl 命令行工具即可管理集群。

安装 kubectl 命令行工具

cat < /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
yum makecache
yum install -y kubectl-1.17.2

rke 工具生成的 kube_config_cluster.yml 复制到 .kube/config 即可使用 kubectl 管理集群:

mkdir .kube
cp rke-workspace/kube_config_cluster.yml .kube/config
kubectl get all

可以观察到默认命名空间下的 service 资源:

NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.44.0.1            443/TCP   8m23s

helm

helm 是一个 k8s 的包管理工具,使用 helm 命令,你可以像使用 yum 、apt 为操作系统安装软件一样,从各种 helm 仓库中为你的 k8s 集群一键部署各种服务。rancher 也提供了 helm 源,可以在 k8s 集群中方便的安装高可用 rancher。

不过现在部署 rancher 还有点早。k8s 集群的各种证书,rke 帮你自动生成了,但是 rancher 的证书,最好自己生成。

xca 自建 ca

具体操作方法不作说明。有几点注意事项。

  • 推荐 ecc 证书,prime 或 secp 算法,密钥 256 位以上。
  • 强行上 rsa 证书,请选择 2048 位以上。
  • ca 证书选 ca 模板,时效往长了签,签 10 年 20 年都行。CN 直接填名字即可。
  • 根 ca 用自签,中间 ca 用根 ca 签,普通证书用中间 ca 签。
  • 普通证书选 https_server 模板,有效期不可超过 825 天,否则 macOS 和 iOS 不认。CN 写域名,SAN 里写其他名字,同时也要有 CN 域名。
  • 普通证书 SAN 中可以添加一个通配符域名,以便随时为 ingress-nginx 添加域名映射。本实践使用 *.rancher.foobar.com
  • 将中间 ca 证书与普通证书合并即可配置到需要配置使用证书的地方。密钥用普通证书的密钥。
  • 根 ca 安装到设备中并设置信任即可完美访问。

最后需要使用这些文件:

cacerts.pem         根 ca 证书
ca-additional.pem   根 ca 证书,和 cacerts.pem 同样
tls.crt             rancher 服务器证书,需要将裸服务器证书与中间 ca 证书合并
tls.key             服务器证书对应的密钥(也算私钥)

helm 下载 + 渲染

下载 helm,将 helm 安装至有网络连接的环境中。在本实践中,120 工具机有网络连接,因此直接在 120 工具机上操作。

本地 helm 添加 rancher 仓库:

helm repo add rancher-stable https://releases.rancher.com/server-charts/stable

将 rancher 的 helm 模板下载到本地:

helm fetch rancher-stable/rancher

可以观察到 helm 将 rancher 的部署模板下载到了本地:

-rw-r--r-- 1 ubuntu ubuntu 4.7K rancher-2.3.5.tgz

k8s 部署各种服务的核心是编写各种 yml 文件,helm 的核心原理就是将一个服务所需要的所有资源的 yml 文件整合,将变量提出,并支持条件渲染 yml 模板文件,类似 c 的编译时宏、php 的 smarty 模板。你可以解压这个压缩文件,用文本编辑器打开,观察里面的文件。

本实践是离线安装,因此需要在有网络的环境进行 helm 下载,之后使用 helm 命令将模板渲染出 kubectl 可认的各种 yml 文件,然后用 kubectl 执行。这也是所有 helm 安装包的离线安装模式。

使用以下命令渲染模板:

helm template rancher ./rancher-2.3.5.tgz \
     --namespace cattle-system --output-dir . \
     --set privateCA=true \
     --set additionalTrustedCAs=true \
     --set ingress.tls.source=secret \
     --set hostname=rancher.foobar.com \
     --set useBundledSystemChart=true

说明:

helm template rancher(名字) ./rancher-2.3.5.tgz(本地模板) \
     --namespace cattle-system \                安装的目标命名空间
     --output-dir . \                           渲染输出目录
     --set privateCA=true \                     咱们用的证书是自签的
     --set additionalTrustedCAs=true \          访问各种 tls (https) 时额外信任的 ca 证书,比如自使用签证书
                                                的镜像仓库、git仓库、s3 对象存储,亦或是类似公司出网白名单代理
                                                网关、fiddler 抓 https 包之类的需要安装 ca 证书的情况
     --set ingress.tls.source=secret \          rancher-server 在 k8s 环境中只提供 http 协议端口,tls 证书在
                                                ingress 中卸载。配置为 secret 则使用 k8s secret 中的证书
     --set hostname=rancher.foobar.com \     配置访问 rancher-server 的域名,这个域名配置在 ingress 中,如
                                                果域名没有解析到 ingress 节点,也可以绑个 host 访问
     --set useBundledSystemChart=true           因为是离线安装,所以配置 rancher 使用内置的安装源。默认为 fal-
                                                se,rancher 会去拉去安装源。如果集群可以访问互联网,可以把这个去
                                                掉。当然,安装时加上这个参数,也可以在安装完成后,在rancher 的
                                                catalogs 里手动添加。

执行后可以在 rancher 目录看到渲染好的 yml 文件们:

-rw-rw-r-- 1 ubuntu ubuntu  405 clusterRoleBinding.yaml
-rw-rw-r-- 1 ubuntu ubuntu 2517 deployment.yaml
-rw-rw-r-- 1 ubuntu ubuntu  664 ingress.yaml
-rw-rw-r-- 1 ubuntu ubuntu  206 serviceAccount.yaml
-rw-rw-r-- 1 ubuntu ubuntu  301 service.yaml

使用这些 yml 文件即可安装 rancher。但你有没有发现少了啥?

kubectl 安装配置

将上一步准备好的 yml 文件,和上上一步准备好的证书和密钥,打包上传到 kubectl 机器,使用 kubectl 对集群进行操作。

是的,刚才我们少了导入证书和密钥的步骤:

# 创建 rancher 的 namespace
kubectl create namespace cattle-system
# namespace/cattle-system created
# helm 渲染中 --set privateCA=true 用到的证书
kubectl -n cattle-system create secret generic tls-ca --from-file=cacerts.pem
# secret/tls-ca created
# helm 渲染中 --set additionalTrustedCAs=true 用到的证书
kubectl -n cattle-system create secret generic tls-ca-additional --from-file=ca-additional.pem
# secret/tls-ca-additional created
# helm 渲染中 --set ingress.tls.source=secret 用到的证书和密钥
kubectl -n cattle-system create secret tls tls-rancher-ingress --cert=tls.crt --key=tls.key
# secret/tls-rancher-ingress created

然后才能使用 kubectl 安装 rancher :

kubectl -n cattle-system apply -R -f ./rancher
# clusterrolebinding.rbac.authorization.k8s.io/rancher created
# deployment.apps/rancher created
# ingress.extensions/rancher created
# service/rancher created
# serviceaccount/rancher created

观察安装进度:

kubectl -n cattle-system get all

当观察到所有 pod/rancher-* 全部 ready 之后,即可访问 rancher 域名。本实践中使用的域名 rancher.foobar.com 已通过公网 DNS 解析到了三个 etcd 节点的 IP,而其实 dns 是需要解析到运行了 ingress-nginx 的节点的。默认情况下 ingress-nginx 会运行在所有的节点上,因此这样解析也是能访问的。

同时,也可以将 *.rancher.foobar.com 这个通配符域名添加 cname 记录,解析到 rancher.foobar.com。这样即可随意为集群中部署的应用配置 ingress-nginx 域名并启用 https。

rancher

安装完成后,即可使用 rancher.foobar.com 域名,通过 ingress 节点访问到 rancher-server。

初次访问,会提示你设置密码,以及配置 rancher-server 的域名。rancher-agent 会通过你配置的域名访问 rancher-server。这项设置之后也可以在 Global - Settings - Advanced Settings - server-url 中修改。如果你实在没有 dns 解析到这个域名,你可以在 System 项目 kube-system 命名空间的 coredns ConfigMap 中配置 dns 解析,使得集群中有 rancher-server 的 dns 解析记录,从而使 rancher-agent 可以正常工作。

Global - Settings - Advanced Settings 中,还有几个需要注意:

  • cacerts 来自 --from-file=cacerts.pem(kubectl) 导入的证书。rancher-agent 在连接 rancher-server 时,如果发现你在安装时使用了 --set privateCA=true(helm) 参数,则会首先调用 rancher-server 的接口,获取这个 cacerts 证书,并将这个证书做 hash,与安装时 rancher-agent 被导入的 hash 做对比,从而校验 rancher-server 服务器是否可信。
  • 如果安装时在 helm 没有选择 --set privateCA=true 参数,则在安装前也无需使用 kubectl 导入 cacerts.pem 证书————前提是 rancher-server 使用的证书,即 tls.crt 是公开 CA 签发的正式证书。在这种情况下,cacerts 为空。
  • system-default-registry 设置的是默认 docker 镜像仓库的地址。这里的设置作用不大,仅能影响部分 rancher 内嵌 catalogs 安装的工具使用的镜像仓库地址。设置了之后反而不方便集群备份后异地还原。因此,还是直接在集群所有节点的 /etc/docker/daemon.json 里面设置默认为好。在集群中使用镜像即可直接使用相对镜像地址,不包含域名或IP,方便异地还原。
  • server-url 如果你不知道这个代表什么,你一定没有看上面一段话。

Prometheus

rancher 集成了 Prometheus,并且在离线镜像中提供。因此,虽然没有直接安装好,我们依然可以在 local(集群名字) - Tools - Monitoring 安装。你也可以后期来这里修改参数。

Prometheus 对资内存和磁盘需求比较大,因此不推荐长期保留数据,可以在 Data Retention 设置数据保留的时间为小时。

为了避免每次修改 Prometheus 配置后,历史监控数据丢失,你可以启用持久化存储:将 Enable Persistent Storage for PrometheusGrafana Persistent Volume Size 改为 True。只不过,集群默认是没有持久化存储功能的。安装起来也相对麻烦一些。

Istio

rancher 也集成了 Istio,这是一个云原生的服务网格架构。具体玩儿法,已经超出我的知识范围了,还是交给架构师去玩吧。我只知道有一个项目线上用到了这个,当然,是关闭了 Mixer 在用。

Longhorn

这是一个 rancher 出品的分布式块存储服务,目前官方声明处于实验阶段。但依然可以用来给一些数据重要性底的服务提供持久化存储。Rancher 与 Longhorn 整合的比较好,但是 Longhorn 默认情况下需要联网安装。

你需要为所有节点安装 open-iscsi

yum install iscsi-initiator-utils

首先去 local(集群名字) - Projects/Namespaces 下,创建一个 Storage 项目。选 Storage - Apps - Launch,在 library 下搜索 longhorn 即可安装。记得要把 Default Data Path 设置为节点上的数据盘,比如 /home/rancher/longhorn/

离线安装

离线环境安装比较麻烦,以目前最新的 v0.8.1 版本例说明:

  • 手动上传 7 个镜像至私库
longhornio/longhorn-engine:v0.8.1
longhornio/longhorn-manager:v0.8.1
longhornio/longhorn-ui:v0.8.1
quay.io/k8scsi/csi-attacher:v2.0.0
quay.io/k8scsi/csi-provisioner:v1.4.0
quay.io/k8scsi/csi-node-driver-registrar:v1.2.0
quay.io/k8scsi/csi-resizer:v0.3.0
  • 下载并修改 helm 模板

去官方 release 页面下载打包。

  • 渲染 helm 模板
helm template longhorn chart \
    --namespace longhorn-system \
    --output-dir . \
    --set defaultSettings.defaultDataPath=/home/rancher/longhorn/ \
    --set csi.attacherImage=k8scsi/csi-attacher:v2.0.0 \
    --set csi.provisionerImage=k8scsi/csi-provisioner:v1.4.0 \
    --set csi.nodeDriverRegistrarImage=k8scsi/csi-node-driver-registrar:v1.2.0 \
    --set csi.resizerImage=k8scsi/csi-resizer:v0.3.0 \
#   如果不想手动配置 web ui 的 ingress,可以添加以下参数
#    --set ingress.enabled=true \
#    --set ingress.host=longhorn.rancher.foobar.com \
#   如果要设置 ingress 的 tls,可以添加以下参数,记得提前倒入 tls 的 secret 
#    --set ingress.tls=true \
#    --set ingress.tlsSecret=wildcard.rancher.foobar.com
#
# 命令输出内容:
# wrote ./longhorn/templates/default-setting.yaml
# wrote ./longhorn/templates/storageclass.yaml
# wrote ./longhorn/templates/serviceaccount.yaml
# 【 下面类似,但是最后结尾处会输出两个 yaml 】
# wrote ./longhorn/templates/deployment-driver.yaml
# wrote ./longhorn/templates/deployment-ui.yaml
# --- 【从这里开始,包含 ---】
# Source: longhorn/templates/uninstall-job.yaml
# apiVersion: batch/v1
# kind: Job
# 【 略 】
# --- 【从这里开始,包含 ---】
# Source: longhorn/templates/postupgrade-job.yaml
# apiVersion: batch/v1
# kind: Job
# 【 略 】

注意渲染命令的标准输出,在显示生成了哪些 yaml 文件之后,会直接在标准输出生成两个 yaml 文件内容。你需要将这两个 yaml 文件分别保存为 post-upgrade.yamluninstall.yamlpost-upgrade.yaml 是当你从低版本的 longhorn 升级后,需要执行的文件。uninstall.yaml 是你在需要卸载 longhorn 并跑路的时需要执行的文件。在安装过程中,你不需要这两个文件,请不要执行。

将生成的 longhorn 目录打包复制到工具机 120 上。

  • 在 rancher 中创建项目与命名空间

创建 Storage 项目,并在其中创建 longhorn-system 命名空

  • 使用 kubectl 安装
kubectl -n longhorn-system apply -R -f ./longhorn
# clusterrole.rbac.authorization.k8s.io/longhorn-role created
# clusterrolebinding.rbac.authorization.k8s.io/longhorn-bind created
# customresourcedefinition.apiextensions.k8s.io/replicas.longhorn.rancher.io created
# customresourcedefinition.apiextensions.k8s.io/nodes.longhorn.io created
# customresourcedefinition.apiextensions.k8s.io/volumes.longhorn.io created
# customresourcedefinition.apiextensions.k8s.io/instancemanagers.longhorn.rancher.io created
# customresourcedefinition.apiextensions.k8s.io/settings.longhorn.io created
# customresourcedefinition.apiextensions.k8s.io/engineimages.longhorn.rancher.io created
# customresourcedefinition.apiextensions.k8s.io/nodes.longhorn.rancher.io created
# customresourcedefinition.apiextensions.k8s.io/replicas.longhorn.io created
# customresourcedefinition.apiextensions.k8s.io/engines.longhorn.rancher.io created
# customresourcedefinition.apiextensions.k8s.io/settings.longhorn.rancher.io created
# customresourcedefinition.apiextensions.k8s.io/instancemanagers.longhorn.io created
# customresourcedefinition.apiextensions.k8s.io/volumes.longhorn.rancher.io created
# customresourcedefinition.apiextensions.k8s.io/engines.longhorn.io created
# customresourcedefinition.apiextensions.k8s.io/engineimages.longhorn.io created
# service/longhorn-backend created
# daemonset.apps/longhorn-manager created
# configmap/longhorn-default-setting created
# deployment.apps/longhorn-driver-deployer created
# service/longhorn-frontend created
# deployment.apps/longhorn-ui created
# serviceaccount/longhorn-service-account created
# storageclass.storage.k8s.io/longhorn created

这时就可以前往 rancher 页面的 Storage 项目下,观察安装进度了。

  • 后台

在线安装可以直接设置后台访问的各种方式,你可以在 Storage - Apps 的 longhorn 按钮内点击链接进入。

离线安装,通过查看 longhorn-frontend 这个 service 的 NodePort 访问:

kubectl -n longhorn-system get service/longhorn-frontend
# NAME                TYPE          PORT(S)
# longhorn-frontend   LoadBalancer  80:30059/TCP

你也可以自行为 longhorn-ui 或者 service 配置 ingress。

跑路

longhorn

卸载前,请将分配的 volume 资源回收。

  • 在线安装版,直接在 Storage - Apps 中点击卸载。

  • 离线安装版,使用你在 helm 渲染模板时得到的 uninstall.yaml 文件:

kubectl -n longhorn-system apply -f uninstall.yaml

rancher

  • 在 rancher 各个项目的 Apps 下,删除曾经部署过的 chart。

  • 下载 (system-tools)[https://github.com/rancher/system-tools/releases] 并执行:

./system-tools_linux-amd64 remove -c kube_config_cluster.yml

k8s

rke remove

节点

  • 停止 dockerd 和 containerd 并重启
systemctl stop docker containerd
systemctl disable docker containerd
reboot
  • 清理文件
rm -rf /{home,var/lib,opt}/{rancher,docker,rke,calico,containerd,iscsi,cni}

你可能感兴趣的:(rancher 高可用 + 离线部署)