18、Rancher2.6管理k8s-v1.23及以上版本高可用集群

目录

一、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博客