基于Rancher2的k8s快速部署

Rancher是什么?

先贴一下Rancher官网说明:什么是Rancher

简单来说Rancher就是一个k8s管理的工具,类似于kubectl这样的命令行工具。用Rancher,我们能用GUI更简洁直观地操作和管理k8s集群,在k8s集群上管理k8s的各种资源。

Rancher的安装

由于是在学习环境下安装Rancher,因此选择使用Docker来安装Rancher,这样的好处是可以用Docker来隔离系统环境和Rancher的环境,假如不再想用Rancher或者怕Rancher把宿主环境搞坏了,也可以直接rm掉Rancher在Docker上的容器来直接删除Rancher的环境。

按照Rancher官网的说法,Rancher的安装只需要一行Docker容器创建命令,这里由于80和443端口还要留给nginx用,因此在docker端口映射时,将Rancher的80和443映射到8090和8091端口
docker run -d --privileged -p 8090:80 -p 8091:443 --name rancher rancher/rancher:latest
这样就在docker中运行起了Rancher,同时Rancher还自带有k3s,因此用浏览器打开https://localhost:8091 在做完注册用户和登录后,会看到有一个local的k3s集群

用Rancher导入已有k8s集群

在上一篇文章# 将自己的应用程序部署到k8s上step by step中已经用minikube创建了一个multinode的三个node的集群,而Rancher是支持多集群管理的,因此可以用Rancher将之前创建好的集群导入进来。

修改server-url

首先在浏览器中进入到Rancher的全局设置-高级设置,在这里找到server-url这一项,默认的值是https://localhost:8091 这是因为docker运行起来的Rancher使用端口映射后,使用的ip是宿主机的,而在创建容器时端口映射时将Rancher的443端口映射到宿主机的8091端口。这一步修改主要是为了在k8s集群中能够访问到这个server-url,如果是默认值的话,用localhost,访问的是集群node自己的ip,因此在这里需要将localhost改成宿主机的ip(可以用ifconfig来查看,如果宿主机报错找不到ifconfig命令,可以使用sudo apt install net-tools来安装)

导入已有集群

在Rancher中进入到管理群集并点击"导入已有集群"按钮,再选择"导入已有集群",填写集群名称,点击创建按钮。此时会进入到已经创建的集群状态界面,此时的集群状态显示为"Pending"状态,表示Rancher还未连接到真正的k8s集群。按照Rancher的注册提示,在命令行输入命令

kubectl create clusterrolebinding cluster-admin-binding --clusterrole cluster-admin --user <your username from your kubeconfig>

curl --insecure -sfL https://192.168.210.128:8091/v3/import/zn8kt5n9mxv7rqx587jzmzxwsgkvwsk9s26w89w2bklcjvl2jqkjls_c-m-l6dsxlbq.yaml | kubectl apply -f -
复制代码

这里需要将命令中的""替换成minikube,因此minikube创建集群用的用户名默认是minikube,这个可以在~/.kube/config文件中找到。

用kubectl加-all-namespaces参数查看pod和service,可以发现多了个"cattle-system"的namespace,当这个namespace下的pod和service都正常run起来后,再回到Rancher上会发现导入的集群已经变成"Active"状态了,点击导入的集群,也能看到上一篇文章# 将自己的应用程序部署到k8s上step by step中的三个node以及创建的show_pod_name的Deployment和Service。

使用Rancher进行部署

在之前使用kubectl用命令行部署show_pod_name时,虽然命令不算多,或者用yaml进行部署时,可以直接套用模板,但还是不够直观,Rancher提供了UI界面,也能直接进行部署

再部署一下show_pod_name

在Rancher的浏览集群中选择我们导入的multinode集群,在工作负载中选择Deployment中已经有之前部署的"show_deployment"了,那我们再创建一个Deployment。点击创建按钮,输入名称"show-pod-name",在容器镜像中输入"192.168.210.128:5000/show_pod_name:latest",再在端口映射中选择节点端口,在容器端口中填8080,在监听端口中填个大于32000的数字,最后点击最下面的创建按钮,即可创建一个叫show-pod-name的Deployment,并且在服务发现的Services中也能发现多了一个"show-pod-name-nodeport"。这是因为在添加端口映射时选择了节点端口,如果选择不创建服务,则不会多这一个Service,需要在Demployment创建时添加一个pod标签,并且手动创建一个Service,在选择器填入这个pod标签。

再回到命令行,用minikube service list可以发现多了一个"show-pod-name-nodeport",并且访问端口就是之前在监听端口中填写的数字,用浏览器访问url,可以得到和之前用命令行创建的部署一样的结果。用kubectl查看pod、service和deployment,也能看到show-pod-name的对应结果,这说明Rancher成功地帮我们实现了命令行的部署操作。

猜你喜欢

转载自juejin.im/post/7219885609078439995