大佬原文章,下面拿大佬的文章做的实验测试
Rancher 是为使用容器的公司打造的容器管理平台,通过 Rancher,企业不再需要使用一系列开源软件从零开始构建一个容器服务平台。同时 Rancher 还提供了一个全栈容器部署和管理平台,用于管理 Docker 和 Kubernetes。Rancher 官方
https://so.csdn.net/so/search?q=%E5%85%A8%E6%A0%88&spm=1001.2101.3001.7020
http://docs.rancher.cn/
Rancher API Server 是基于嵌入式 Kubernetes API Server 和 ETCD 数据库建立的,它提供了以下功能
**用户管理:** Rancher API Server 除了管理用户在公司内部使用的认证信息之外,还可以管理用户访问外部服务所需的认证信息。
**授权:** Rancher API Serrver 可以管理权限控制策略和安全策略。
1-运行 Kubernetes 集群: Rancher API Server 不仅可以在已经存在的节点上运行 K8s 集群,还可以对 K8s 集群进行版本升级。
2-应用商店管理: Rancher 可以使用 Helm Charts 应用商店重复部署应用。
3-项目管理: 项目是由一个 K8s 集群内的多个命名空间和多个访问控制策略组成,允许用户以组为单位,管理多个命名空间。
4-流水线: Rancher 支持对每一个项目单独配置流水线。
1-日志: Rancher 可以和多种主流日志工具集成(如:ELK)
2-监控: 使用 Rancher,我们可以通过 Prometheus 监控集群节点、Kubernetes 组件、软件部署的状态和进度。
3-告警信息: 当我们 K8s 集群内出现问题时,Rancher 会在界面上进行提示。
1-支持 K8s 集群的身份验证和基于角色的访问控制(RBAC),使管理员可以全方面的控制所有集群的访问。
2-支持 K8s 资源监控,并在需要时发送告警,同时可以将容器内的日志发送给外部日志系统,还可以通过应用商店与 Helm 集成。
3-支持与外部的 CI/CD 流水线系统进行对接,同时 Rancher 本身也提供了简单易用的流水线来帮忙我们自动部署和升级工作负载。
我们这里安装是在 Kubernetes 的基础上,你们可以看我之前博客
Rancher 的部署可以有三种架构:
高可用 Kubernetes 安装: 建议使用 Kubernetes 程序包管理器 Helm 在专用的 Kubernetes 集群上安装 Rancher。在 RKE 集群中,需要使用三个节点以实现高可用性。在 K3s 集群(轻量级kubernetes)中,仅需要两个节点即可。
单节点 Kubernetes 安装: 另一个选择是在 Kubernetes 集群上使用 Helm 安装 Rancher,仅在集群中使用单个节点。虽然在这种情况下的 Rancher Server 不具有高可用性,但是这种架构既节省了资源,又保留了可扩展性。如果您想在短期内通过使用单个节点来节省资源,同时又保留高可用性迁移路径,最合适的架构就是单节点 Kubernetes 安装。
单节点 Docker 安装: 将 Rancher 与 Docker 一起安装在单个节点上。这种安装方式的优点是开箱即用,建议在测试和演示环境中使用这种架构。它的缺点也非常明显,单节点 Docker 安装和 Kubernetes 安装之间无法迁移。如果您已经决定了要在生产环境中使用 Rancher,我们推荐您在上述的两种 Kubernetes 安装中选择一种,在生产环境中使用。
[root@k8s-master01 ~]# docker run --privileged -d --name rancher --restart=unless-stopped -p 80:80 -p 443:443 -v /opt/rancher:/var/lib/rancher rancher/rancher:v2.5.11
[root@k8s-master01 ~]# docker ps | grep rancher
--privileged:可以使我们启动的容器用 root 的方式启动(在 Rancher 2.5 版本以上需要加)
--restart:重启策略,我们配置的是 unless-stopped,表示当容器退出时,便会重新启动容器(除非容器之前就处于停止)
上面docker启动我这边产生了报错,访问不到
更换第二种方式
docker run -d --restart=always --privileged=true -v /opt/rancher/data:/var/lib/rancher -v /opt/rancher/auditlog:/var/log/auditlog -p 8081:80 -p 8443:443 --name rancher-v2.5.3 rancher/rancher:v2.5.3
部署Rancher v2.27环境
单节点Docker安装
1.这里我将Rancher部署到k8s集群的其中一个node节点172.16.60.234上。
需要提前下载rancher镜像,这里选择 "rancher/rancher:stable"版本镜像
# 下载rancher服务镜像
[root@k8s-node01 ~]# docker pull rancher/rancher:stable
2.以容器方式启动Rancher服务
# 启动rancher容器
[root@k8s-node01 ~]# docker run -d --restart=always --privileged=true -v /tmp/rancher:/tmp/rancher --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher:stable
# 查看rancher容器
[root@k8s-node01 ~]# docker ps|grep rancher
2c2b36cb138b rancher/rancher:stable "entrypoint.sh" 3 hours ago Up 3 hours 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp lucid_robinson
访问地址是:https://172.16.60.234,首次访问会提示设置admin管理员密码。比如这里设置管理员密码为:admin@123456
访问:https://196.196.196.11:8443
如果在创建某些资源时出现权限错误,则用户可能没有群集管理员角色。使用以下命令应用它:
kubectl create clusterrolebinding cluster-admin-binding --clusterrole cluster-admin --user [USER_ACCOUNT]
上面的用户是 default-auth,通过以下命令得出,在node上执行
root@k8s-node1:/var/data# ps -ef|grep kubelet|grep kubeconfig
root 539 1 1 7月27 ? 01:54:03 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/config.yaml --network-plugin=cni --pod-infra-container-image=k8s.gcr.io/pause:3.6
root@k8s-node1:/var/data# cat /etc/kubernetes/kubelet.conf | grep user
user: default-auth
在运行受支持的Kubernetes版本的现有Kubernetes群集上运行下面的kubectl命令,将其导入Rancher:
kubectl apply -f https://196.196.196.11:8443/v3/import/6clzsdfnvxf7dn6g2fc7pzhjnsj9rtkwnt9rj4bqwhwj9nkj2bllpq.yaml
出现报错,不要着急
如果您收到“由未知机构签署的证书”错误,则Rancher安装具有自签名或不受信任的SSL证书。请运行以下命令以绕过证书验证:
curl --insecure -sfL https://196.196.196.11:8443/v3/import/zg8sqp4x87tjplzvg8rpb6t9wbrvgs4x72vs89pxtxq8tp5wqnncw2.yaml | kubectl apply -f -
[root@k8s-master01 ~]# kubectl get pod -n cattle-system # 查看 Rancher 状态
kubectl describe pod -n cattle-system pod名字 #查看详细信息
到k8s集群的master节点上查看信息。检查会发现k8s中多了一个cattle-system的命名空间:
[root@k8s-master01 work]# kubectl get ns
NAME STATUS AGE
cattle-system Active 18m
default Active 3d19h
kube-node-lease Active 3d19h
kube-public Active 3d19h
kube-system Active 3d19h
cattle-system的命名空间下创建了cattle-cluster-agent和cattle-node-agent的pod
[root@k8s-master01 work]# kubectl get pods -n cattle-system
NAME READY STATUS RESTARTS AGE
cattle-cluster-agent-87944bb89-9l8vn 1/1 Running 0 18m
cattle-node-agent-24vnp 1/1 Running 0 18m
cattle-node-agent-86hdx 1/1 Running 0 18m
cattle-node-agent-qz59v 1/1 Running 0 18m
[root@k8s-master01 work]# kubectl get deployment -n cattle-system
NAME READY UP-TO-DATE AVAILABLE AGE
cattle-cluster-agent 1/1 1 1 19m
[root@k8s-master01 work]# kubectl get daemonset -n cattle-system
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
cattle-node-agent 3 3 3 3 3 <none> 19m
root@k8s-master:~# kubectl get namespace
NAME STATUS AGE
cattle-fleet-system Active 6h56m
cattle-impersonation-system Active 7h
cattle-system Active 7h2m
default Active 15d
elk Active 3d1h
elk1 Active 3d
kube-node-lease Active 15d
kube-public Active 15d
kube-system Active 15d
local Active 6h56m
monitoring Terminating 3d21h
root@k8s-master:~# kubectl get pods -n default
NAME READY STATUS RESTARTS AGE
nginx-5fc57795c6-74gcw 1/1 Terminating 0 23m
nginx-7ccd58f54-tvzv8 1/1 Running 0 3m34s
root@k8s-master:~# kubectl get pods -n default -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-5fc57795c6-74gcw 1/1 Terminating 0 23m 10.244.1.55 k8s-node2 <none> <none>
nginx-7ccd58f54-tvzv8 1/1 Running 0 3m45s 10.244.1.58 k8s-node2 <none> <none>
Rancher还有很多管理k8s集群的其他操作功能,在这里就不一一介绍了。
# 删除上面截图中第一步骤中添加的权限(在k8s集群的master节点操作)
[root@k8s-master01 work]# kubectl delete clusterrolebinding cluster-admin-binding
# 删除上面截图中第三步骤中添加的cattle-cluster-agent和cattle-node-agent的pod
[root@k8s-master01 work]# kubectl delete deployment cattle-cluster-agent -n cattle-system
[root@k8s-master01 work]# kubectl delete daemonset cattle-node-agent -n cattle-system
# 或者将上面截图中第三步骤的yaml文件地址里的内容粘贴到k8s的master节点的一个yaml文件,比如 rancher_imoprt.yml,
# 直接针对这个yml文件执行 kubectl delete -f rancher_imoprt.yml 操作即可删除
[root@k8s-master01 work]# kubectl delete -f rancher_imoprt.yml
oot@k8s-master01 work]# kubectl delete deployment cattle-cluster-agent -n cattle-system
[root@k8s-master01 work]# kubectl delete daemonset cattle-node-agent -n cattle-system
[root@k8s-master01 work]# kubectl delete -f rancher_imoprt.yml