【实践记录】体验Rancher2.0部署K8s集群

博客介绍了Rancher 2.0和K8s集群的安装与配置。先按要求安装特定版本docker,接着用默认SSL证书安装Rancher 2.0并调整端口。然后用RKE拉起K8s集群,最后介绍了配置命令行直接访问k8s apiserver的方法,以绕过Rancher server。

Rancher2.0官方发布以Kubernetes为主要容器编排引擎,公司之前项目中用到的Cattle引擎暂时不能方便升级。所以,一切得重头开始学习了。

安装docker

根据官网要求,docker的版本要求比较严格:

Supported Versions:

1.12.6
1.13.1
17.03.2

我们选择 17.03.2,使用rancher的在线脚本安装:
curl http://releases.rancher.com/install-docker/17.03.2.sh | sh

安装Rancher 2.0

使用默认的SSL证书安装rancher2.0,为防止端口冲突,默认暴露的端口改为8000和8443. Rancher2.0单节点安装时使用容器内嵌的etcd,存储路径为 /var/lib/rancher,可将其暴露到主机目录上或者共享存储中。

docker run -d --restart=unless-stopped \
  -p 8000:80 -p 8443:443 \
  -v /mnt/rancherdata:/var/lib/rancher \
  rancher/rancher:latest

docker ps可以看到容器已运行起来。

root@rancher2-01:/mnt# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4e8c61a428d4 rancher/rancher:latest “entrypoint.sh” 2 minutes ago Up 2 minutes 0.0.0.0:8000->80/tcp, 0.0.0.0:8443->443/tcp focused_lumiere

RKE拉起K8s集群

进入页面,设置admin的初始密码。设置Rancher的访问url,所有结点的agent将通过这个url连接主rancher.

  • 在Cluster页,点击Add Cluster
  • 类型选择Custom
  • 选择合适的Cluster Options,点击next
  • 在下一个页面,勾选合适的结点类别,把命令拷贝到各个结点中运行即可。

可以看到,rancher使用RKE容器进行部署:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a4fc5cf13a47 rancher/rke-tools:v0.1.13 “cert-deployer” 1 second ago Up Less than a second 80/tcp cert-deployer

主节点使用flennel网络,部署完成后有这些容器和镜像。
k8s_rancher

配置命令行直接访问k8s apiserver

Rancher2.0 UI提供的config文件是让kubectl连接Rancher server,而Rancher server作为api-server的代理提供服务。但是,如果Rancher server和集群之间的通信出现问题,此时可能会导致集群无法被控制。所以需要一个能直接访问api-server的方法绕过Rancher server。

  1. 执行以下命令:kubectl get secret c-<YOUR_CLUSTER_ID> -n cattle-system -o yaml
  2. 以上命令的输出内容中,截取cluster字段的值。该值是以Base64编码格式:base64 --decode ... > decoded_output.txt
  3. 执行:cat decoded_output.txt | jq .metadata.state
  4. 输出的结果作为config配置文件。

参考
[1] https://rancher.com/docs/rancher/v2.x/en/installation/
[2] https://github.com/rancher/rancher/issues/13698
[3] https://blog.youkuaiyun.com/u011142688/article/details/80372527
https://blog.youkuaiyun.com/u011142688/article/details/80372542
https://blog.youkuaiyun.com/u011142688/article/details/80372546
https://blog.youkuaiyun.com/u011142688/article/details/80372552
https://blog.youkuaiyun.com/u011142688/article/details/80372560
https://blog.youkuaiyun.com/u011142688/article/details/80372573
https://blog.youkuaiyun.com/u011142688/article/details/80372581

<think> 嗯,用户这次问的是Rancher离线部署Kubernetes集群的具体步骤,看来是在无网环境下搭建生产级集群的需求。从引用内容看,用户应该是个运维工程师或DevOps,正在处理企业内网的容器平台部署,而且环境限制很严格——既没外网又可能只有单台测试机。 用户引用的三篇资料其实已经覆盖了关键点:引用1说明场景是单机all-in-one部署,引用2强调主机预处理,引用3涉及节点删除的脏活。但用户显然需要系统化的实操指南,而不是零散注意事项。尤其要注意的是,用户上次问过类似问题,这次更聚焦“详细步骤”,说明可能卡在某个环节了。 技术上需要拆解几个层面:首先是离线资源的完整获取(包括Rancher镜像、K8s组件、系统依赖),然后是主机环境的严格隔离处理(防火墙/SELinux/磁盘清理),最后才是Rancher的特殊配置。引用3里那段暴力清理脚本特别危险,必须强调操作风险——有些命令会直接清空docker卷和iptables。 用户可能遇到的隐藏痛点:1)air gap模式下的证书问题 2)私有镜像仓库的证书信任链 3)RKE版本与K8s版本的匹配。这些在步骤里需要用⚠️明确标出。另外他提到“1台机器安装”,需要提醒单节点集群的生产环境风险。 响应策略上,把三篇引用的精华整合成标准化流程:从准备阶段(资源下载清单)到安装后验证(kubectl补全技巧),最后补充弹性部署选项。尤其要突出引用2的主机预处理要求,这是很多部署失败的根本原因。相关问题的设计则引导用户进阶思考,比如高可用方案——毕竟单机部署只是起点。 </think> 以下是基于引用资料的Rancher离线部署Kubernetes集群的详细步骤,结合关键注意事项: --- ### **一、离线环境准备** 1. **资源离线下载** - 从有网络环境下载: - Rancher Server Docker镜像 (`rancher/rancher:v2.4.x`) - Kubernetes组件镜像 (通过`rancher/rke-tools`自动打包) - Helm Charts (用于部署Rancher) - 系统依赖包 (如`conntrack`, `socat`, `nfs-utils`等) [^2] - **存储路径**:将所有资源存放到本地文件服务器或私有镜像仓库。 2. **节点主机预处理** ```bash # 关闭防火墙和SELinux(所有节点) systemctl stop firewalld && systemctl disable firewalld setenforce 0 sed -i 's/^SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config # 配置内核参数 echo "net.bridge.bridge-nf-call-iptables=1" >> /etc/sysctl.conf sysctl -p ``` --- ### **二、部署私有镜像仓库** > ⚠️ 若无现成仓库,需在离线环境搭建 1. 安装Docker Registry: ```bash docker run -d -p 5000:5000 --restart=always --name registry \ -v /data/registry:/var/lib/registry registry:2 ``` 2. 导入镜像到私有仓库: ```bash # 加载离线镜像包 docker load -i rancher-images.tar # 重新打标签并推送 docker tag rancher/rancher:v2.4.8 localhost:5000/rancher/rancher:v2.4.8 docker push localhost:5000/rancher/rancher:v2.4.8 ``` --- ### **三、安装Rancher Server(单节点)** 1. 启动Rancher容器: ```bash docker run -d --privileged --restart=unless-stopped \ -p 80:80 -p 443:443 \ -v /opt/rancher:/var/lib/rancher \ -e CATTLE_SYSTEM_DEFAULT_REGISTRY=localhost:5000 \ # 指定私有仓库 localhost:5000/rancher/rancher:v2.4.8 ``` 2. 访问Web UI: `https://<服务器IP>` ,按提示设置管理员密码。 --- ### **四、创建离线K8S集群** 1. **添加集群** - 在Rancher UI选择 **添加集群 > 自定义** - 配置集群名称和Kubernetes版本(选择支持离线环境的版本) 2. **节点配置** - 复制生成的`docker run`命令到**每个工作节点**执行: ```bash docker run -d --privileged --restart=unless-stopped \ --net=host -v /etc/kubernetes:/etc/kubernetes \ -v /var/run:/var/run localhost:5000/rancher/rancher-agent:v2.4.8 \ --server https://<RANCHER_SERVER_IP> --token <TOKEN> --ca-checksum <CA_CHECKSUM> \ --worker # 根据节点角色选择 --etcd, --controlplane, --worker ``` - **关键参数**: `--server`:Rancher Server地址 `--ca-checksum`:Rancher Server证书校验值(通过`openssl x509 -fingerprint -sha256 -in /path/to/cert.pem`获取)[^2] 3. **节点清理(若需重置)**[^3] ```bash # 在问题节点执行(危险操作!确认节点无重要数据) docker rm -f -v $(docker ps -aq) docker volume rm $(docker volume ls -q) rm -rf /var/lib/rancher /etc/kubernetes /var/lib/kubelet /var/lib/etcd iptables -F && iptables -t nat -F ip link del flannel.1 2>/dev/null ``` --- ### **五、验证集群状态** 1. **Rancher UI检查**: - 所有节点状态显示 **Active** - 核心组件(Ingress, Pod监控)无报错 2. **命令行验证**: ```bash kubectl get nodes # 确认所有节点Ready kubectl get pods -A # 检查CoreDNS等系统Pod运行状态 ``` --- ### **六、部署应用测试** 1. 通过Rancher应用商店部署离线Chart(需提前导入Chart包) 2. 或手动部署示例应用: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-test spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: localhost:5000/nginx:1.18 # 使用私有仓库镜像 ports: - containerPort: 80 ``` --- ### **关键注意事项** 1. **版本兼容性** - Rancher v2.4.x 最高支持 K8s v1.18 - 需确认Docker版本匹配(推荐 Docker 19.03.x)[^2] 2. **证书信任** - 所有节点必须信任私有镜像仓库的证书(将仓库证书放入`/etc/docker/certs.d/<仓库域名>`) 3. **磁盘空间** - `/var/lib/rancher` 至少预留50GB空间(ETCD数据增长快) --- ### **弹性部署选项** | **模式** | 适用场景 | 配置要点 | |----------------|-------------------------|----------------------------| | **单节点All-in-One** | 测试环境 | Rancher/K8s共享同一节点 | | **高可用Rancher** | 生产环境 | 需额外部署RDS和S3存储[^1] | | **分离式ETCD** | 大规模集群 | 专用高性能ETCD节点[^3] | > 引用来源: > [^1]: 单节点离线部署Rancher+K8S流程 > [^2]: 节点防火墙/SELinux关闭及版本兼容性要求 > [^3]: 节点故障清理操作指南 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值