目录
一、Rancher 介绍
1、 1Rancher简介;
1、 2Rancher和k8s的区别;
1、 3Rancher企业使用案例;
二、安装 Rancher
2、 1初始化环境;
2、 2安装Rancher;
2、 3登录Rancher平台;
三、通过 Rancher 管理已存在的 k8s 集群
3、 1配置rancher;
3、 2导入k8s;
四、通过 Rancher 仪表盘管理 k8s 集群:部署 tomcat 服务
4、 1创建名称空间;
4、 2创建deployment;
4、 3创建service资源;
4、 4创建ingress资源;
4、 5本地hosts解析;
一、Rancher 介绍
1.1Rancher简介
Rancher 是一个开源的企业级多集群 Kubernetes 管理平台,实现了 Kubernetes 集群在混合云+本地数据中心的集中部署与管理,以确保集群的安全性,加速企业数字化转型。
超过40,000 家企业每天使用 Rancher 快速创新。
Rancher 官方文档:Rancher文档 | K8S文档 | Rancher | Rancher文档
1.2 Rancher 和 k8s 的区别
Rancher 和 k8s 都是用来作为容器的调度与编排系统。但是 rancher 不仅能够管理应用容器,更重要的一点是能够管理 k8s 集群。Rancher2.x 底层基于 k8s 调度引擎,通过 Rancher 的封装,用户可以在不熟悉 k8s 概念的情况下轻松的通过 Rancher 来部署容器到 k8s 集群当中。
1.3 Rancher 企业使用案例
1、 中保银行;
在使用Rancher 平台之前,中银保险也尝试过使用原生的一些 Kubernetes 平台,但是这些平台学习使用成本高昂、运行维护特别复杂。尤其是当我公司使用多种混合云环境的时候,一个个 Kubernetes 集群就变成了一个个技术孤岛,反而加重了公司信息化转型的压力。Rancher 平台的采用有效地解决了之前平台使用中所存在的问题,提升我公司测试业务平台的运行维护效率。
——付春涛 中银保险有限公司 信息科技部 技术负责人
2、 蔚来汽车数字运营中国;
Rancher 友好的图形化管理界面和资源创建的易用性、多集群管理能力、AD 认证和权限管理集成、应用商店功能等各种能力,帮助我们简化了容器化应用的部署,得以方便地进行多云Kubernetes 管理和权限控制,提高了应用交付的效率。感谢 Rancher 团队,期待 Rancher 中国团队进一步优化功能,推进 Rancher 在国内的大量落地。
——赵鹏飞 蔚来汽车数字运营中国 运维开发工程师
3、 上汽集团;
Rancher 2.x 是数据中心级别的管理平台,拥有多云管理的能力,符合未来企业上云的架构规划演进;Rancher 的开源产品模式降低了技术人员的使用成本,在兼顾原生 Kubernetes 的同时,为开发人员提供了丰富的 API 与系统功能,提高了开发生产效率。同时,Rancher 专业的容器产品团队,架起了开源产品与生产业务的桥梁,在微服务、应用容器化、DevOps、业务上云等技术领域为上汽集团提供了可靠的支持。
——龚瀚申 上汽集团 PaaS 平台总监
二、安装 Rancher
2.1 初始化环境
机器规划(其中 k8s-v1.23 集群已存在):
主机名称 | IP | 最低配置 |
rancher | 192.168.78.156 | 2vcpu / 3Gi 内存 |
k8s-master1 | 192.168.78.143 | 3vcpu / 3Gi 内存 |
k8s-node1 | 192.168.78.144 | 3vcpu / 3Gi 内存 |
k8s-node2 | 192.168.78.145 | 3vcpu / 3Gi 内存 |
先进行初步的环境初始化,按照这篇文章的步骤进行操作:CentOS 7 初始化系统_centos7 初始化_Stars.Sky的博客-CSDN博客
# 配置 hosts 文件(所以机器都要执行)
vim /etc/hosts
192.168.78.143 k8s-master1
192.168.78.144 k8s-node1
192.168.78.145 k8s-node2
192.168.78.156 rancher
# 关闭交换分区 swap,提升性能
[root@rancher ~]# swapoff -a # 临时关闭
[root@rancher ~]# sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久关闭:注释swap挂载,给swap这行开头加一下注释
# 转发 IPv4 并让 iptables 看到桥接流量
[root@rancher ~]# cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
[root@rancher ~]# sudo modprobe overlay
[root@rancher ~]# sudo modprobe br_netfilter
# 设置所需的 sysctl 参数,参数在重新启动后保持不变
[root@rancher ~]# cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
# 应用 sysctl 参数而不重新启动
[root@rancher ~]# sudo sysctl --system
# 配置国内阿里云 docker 的 repo 源
[root@rancher ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装 docker-ce
[root@rancher ~]# yum install docker-ce docker-ce-cli containerd.io -y
[root@rancher ~]# systemctl enable docker --now
# 配置 docker 镜像加速器
[root@rancher ~]# mkdir -p /etc/docker
[root@rancher ~]# vim /etc/docker/daemon.json
# 写入如下内容:
{
"registry-mirrors":["https://vh3bm52y.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com"]
}
[root@rancher ~]# systemctl restart docker
2.2 安装 Rancher
Rancher 版本支持的 Kubernetes 版本:Support matrix | SUSE
Docker 安装 Rancher 官方文档:使用 Docker 将 Rancher 安装到单个节点中 | Rancher Manager
[root@rancher ~]# docker pull rancher/rancher:v2.6.4
[root@rancher ~]# mkdir -p /opt/data/rancher_data
[root@rancher ~]# docker run -d --restart=unless-stopped -p 80:80 -p 443:443 --privileged -v /opt/data/rancher_data:/var/lib/rancher --name rancher rancher/rancher:v2.6.4
[root@rancher ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f20bff32a2cb rancher/rancher:v2.6.4 "entrypoint.sh" 4 seconds ago Up 3 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp rancher
# unless-stopped:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
# privileged:使用该参数,container 内的 root 拥有真正的 root 权限。否则,container 内的 root 只是外部的一个普通用户权限。privileged 启动的容器,可以看到很多 host 上的设备,并且可以执行 mount。甚至允许你在 docker 容器中启动 docker 容器。
2.3 登录 Rancher 平台
在浏览器访问 rancher 的 ip 地址:192.168.78.156
# 获取登录密码
[root@rancher ~]# docker logs f20bff32a2cb 2>&1 | grep "Bootstrap Password:"
2023/02/23 05:31:29 [INFO] Bootstrap Password: x4n56jjh92bzjmnhdz5f6d9jlhwvglr6xw9ldqrnch96t7zmctbplh
把获取到的密码 x4n56jjh92bzjmnhdz5f6d9jlhwvglr6xw9ldqrnch96t7zmctbplh 复制到 password 位置:
设置密码(我设置的密码为 Qwe123456789):至少 12 个字符长度
设置语言:
三、通过 Rancher 管理已存在的 k8s 集群
3.1 配置 rancher
选择通用:
编辑集群名称:
3.2 导入 k8s
在k8s 控制节点复制下图红色箭头标注的一串命令:
# 提前拉取 rancher/rancher-agent:v2.6.4 镜像
[root@k8s-master1 ~]# docker pull rancher/rancher-agent:v2.6.4
[root@k8s-node1 ~]# docker pull rancher/rancher-agent:v2.6.4
[root@k8s-node2 ~]# docker pull rancher/rancher-agent:v2.6.4
[root@k8s-master1 ~]# curl --insecure -sfL https://192.168.78.156/v3/import/ndlfvzjfzpgscxt8b9tdrqdtt89mnwh7rfks9rrksqwk54qfp4rjh2_c-m-62m8lbqs.yaml | kubectl apply -f -
# 验证 rancher-agent 是否部署成功:
[root@k8s-master1 ~]# kubectl get pods -n cattle-system -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
cattle-cluster-agent-57d5d69df4-m8rdq 1/1 Running 0 11s 10.244.36.73 k8s-node1 <none> <none>
cattle-cluster-agent-57d5d69df4-mgtjn 1/1 Running 0 5m28s 10.244.169.131 k8s-node2 <none> <none>
导入成功:
四、通过 Rancher 仪表盘管理 k8s 集群:部署 tomcat 服务
4.1 创建名称空间
4.2 创建 deployment
编辑deployment 名称:
容器配置(镜像名称:tomcat:8.5.34-jre8-alpine):
添加标签:
配置完成最基本的 deployment 资源,点击创建:
查看资源是否创建成功:
[root@k8s-master1 ~]# kubectl get pods -n rancher-tomcat -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
tomcat-8f48bcbc7-rqtxp 1/1 Running 0 3m3s 10.244.169.134 k8s-node2 <none> <none>
tomcat-8f48bcbc7-vd8pt 1/1 Running 0 3m3s 10.244.36.74 k8s-node1 <none> <none>
4.3 创建 service 资源
把k8s 集群的 tomcat 这个 pod 映射出来。
选择左侧看到的服务,点击创建:
添加端口:
定义选择器后选择创建:
通过上面图片可以看到 tomcat-svc 已经创建好了,访问 k8s 任何一个节点+端口 30080,可以访问内部的 tomcat 了:访问 192.168.78.143:30080
4.4 创建 ingress 资源
需要安装 ingress-controller:https://kubernetes.github.io/ingress-nginx/deploy/
[root@k8s-master1 ~]# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.6.4/deploy/static/provider/cloud/deploy.yaml
# 修改 deploy.yaml 文件。因为源文件里的镜像都是国外的地址,基本拉取不下来,所以手动修改国内镜像。按顺序修改为先三个镜像:
image: registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.1.1
image: registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.1.1
image: registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.1.1
[root@k8s-master1 ~]# kubectl apply -f deploy.yaml
[root@k8s-master1 ~]# kubectl create clusterrolebinding clusterrolebinding-user-3 --clusterrole=cluster-admin --user=system:serviceaccount:ingress-nginx:ingress-nginx
[root@k8s-master1 ~]# kubectl get pods -n ingress-nginx
NAME READY STATUS RESTARTS AGE
ingress-nginx-admission-create-gn5rc 0/1 Completed 0 3m15s
ingress-nginx-admission-patch-csmq8 0/1 Completed 0 3m14s
ingress-nginx-controller-74475868bb-2q8c5 1/1 Running 0 3m15s
创建ingress 规则
添加注释:
4.5 本地 hosts 解析
# 先查看 ingress pod 分配到哪个节点
[root@k8s-master1 ~]# kubectl get ingress -A -o wide
NAMESPACE NAME CLASS HOSTS ADDRESS PORTS AGE
rancher-tomcat tomcat <none> sky.lucky.com 192.168.78.144 80 1h
# 添加一行内容(ip 为被分配到的节点 ip)
192.168.78.144 sky.lucky.com
注意:不要挂梯子,不然域名访问不了!因为你挂梯子,域名直接代理到外网了,找不到!!!
在浏览器用域名访问:sky.lucky.com
上一篇文章:【Kubernetes 企业项目实战】08、简化 K8s 应用部署工具 Helm V3 入门到企业实战_Stars.Sky的博客-CSDN博客