rancher简介
Rancher是一个开源的全栈化企业级容器管理平台,通过极简的操作体验和强大完善的功能,让企业用户在生产环境中轻松落地容器技术。
rancher搭建
主机搭建
首先安装 docker, 并且启动docker。
yum -y install docker
service docker start
安装rancher。(注意检查端口是否被占用)
sudo docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher
启动后打开 https://SERVER_IP SERVER_IP 为你的ip地址,可以看到:

输入密码并且确认好你的ip地址就可以进入控制台了。

至此,rancher安装成功。
集群搭建
在控制台中我们新建一个集群。

这里选择k8s的集群并且填写我们需要的名称,点击下一步。

这里需要把etcd和control都钩上,公网地址需要填写另外的一台服务器ip来充当这三种角色,内网名称也一样,节点名称就填你需要的。
最后按照提示把下面的命令复制到你刚刚填写的公网地址的服务器来执行。
点击完成再回到控制台,等待比较长的一段时间后可以看到集群已经被创建起来了。

可以看到具体节点的cpu和内存的使用。

点击菜单上的主机,就可以看到主机的基本情况了。

点击编辑集群,再为此添加一个节点(抢占式服务器)
这一个节点只需要充当worker角色,主机地址和内网地址同样填写,下面的步骤和第一次添加节点一致。
添加完毕后可以在控制台看到两个节点已经被添加到集群上了。

docker私有仓库
为了后面镜像的更新方便,必须弄一套自己的私有docker仓库,rancher就有现成的配置和插件。
点击集群上的system,然后点击应用商店。

开启应用商店并且找到docker-reistry安装。

商店还有很多可以用的插件(自行了解)。
安装完毕后可以点击详情看到我们的仓库被建立在某个节点上。

至此我们只需要往这地址推送我们的镜像即可。(如果没有负载域名的记得开启docker的daemon.json里的insecure-registrie配置)。
k8s中的组件配置
讲述一下pod,deployment,service,pvc和storageClass的yml的简单编写,详情
pod的yml
apiVersion: v1 #必选,版本号,例如v1
kind: Pod #必选,Pod
metadata: #必选,元数据
name: helloworld #必选,Pod名称
namespace: string #必选,Pod所属的命名空间
labels: #自定义标签
- name: helloworld #自定义标签名字
spec: #必选,Pod中容器的详细定义
containers: #必选,Pod中容器列表
- name: helloworld #必选,容器名称
image: 10.101.171.110:5000/test/nginx:v1 #必选,容器的镜像名称
imagePullPolicy: IfNotPresent #获取镜像的策略 Alawys表示下载镜像 IfnotPresent表示优先使用本地镜像,否则下载镜像,Nerver表示仅使用本地镜像
ports: #需要暴露的端口库号列表
- name: string #端口号名称
containerPort: 80 #容器需要监听的端口号
env: #容器运行前需设置的环境变量列表
- name: string #环境变量名称
value: string #环境变量的值
resources: #资源限制和请求的设置
limits: #资源限制的设置
cpu: 25m #Cpu的限制,单位为core数,将用于docker run --cpu-shares参数
memory: 128Mi #内存限制,单位可以为Mib/Gib,将用于docker run --memory参数
requests: #资源请求的设置
cpu: 5m #Cpu请求,容器启动的初始可用数量
memory: 64Mi #内存清楚,容器启动的初始可用数量
比较重要的是metadata下的名称和标签,因为后面说到的service就是通过标签来识别的,其他的参数比较简单就不多阐述了。
deployment的yml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: helloworld
spec:
replicas: 2 #容器数量
template:
metadata:
labels:
app: helloworld #标签
spec:
# volumes:
# - name: content-storage
# persistentVolumeClaim:
# claimName: nfs-pvc
containers:
- name: helloword-pod
image: 47.103.120.54:31418/test/nginx
imagePullPolicy: Always #总是拉取镜像
ports:
- containerPort: 80
# volumeMounts:
# - mountPath: "/usr/share/nginx/html"
# name: content-storage
resources: #资源限制和请求的设置
limits: #资源限制的设置
cpu: 25m #Cpu的限制,单位为core数,将用于docker run --cpu-shares参数
memory: 128Mi #内存限制,单位可以为Mib/Gib,将用于docker run --memory参数
requests: #资源请求的设置
cpu: 5m #Cpu请求,容器启动的初始可用数量
memory: 64Mi #内存清楚,容器启动的初始可用数量
平常只需要添加deployment就可以了,因为负载都是已部署为单位的,参数里面有一个volumeMounts是指pvc的名称和持久卷要挂载的路径。
sercice的yml
apiVersion: v1
kind: Service
metadata:
name: helloworld-service
labels:
name: helloworld-service
spec:
type: NodePort #这里代表是NodePort类型的
ports:
- port: 80 #这里的端口和clusterIP(10.97.114.36)对应,即10.97.114.36:80,供内部访问。
targetPort: 80 #端口一定要和container暴露出来的端口对应,nginx暴露出来的端口是80,所以这里也应是80
protocol: TCP
nodePort: 32143 # 所有的节点都会开放此端口,此端口供外部调用。
selector:
app: helloworld #这里选择器一定要选择容器的标签
service是提供外部访问的,所有必须提供外部端口,在后面增加了负载以后会自动创建sercice。
storageClass的yml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs-storageclass
provisioner: nfs-provisioner
StorageClass 为管理员提供了描述存储 "class(类)" 的方法。 不同的 class 可能会映射到不同的服务质量等级或备份策略,或由群集管理员确定的任意策略。 Kubernetes 本身不清楚各种 class 代表的什么。这个概念在其他存储系统中有时被称为“配置文件”。简单来说就是为了创建pv而使用的一个类。
pvc的yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-pvc
spec:
accessModes:
- ReadWriteMany
storageClassName: nfs-storageclass
resources:
requests:
storage: 1Mi
PersistentVolumeClaim(PVC)是用户存储的请求。它与 Pod 相似。Pod 消耗节点资源,PVC 消耗 PV 资源。Pod 可以请求特定级别的资源(CPU 和内存)。声明可以请求特定的大小和访问模式(例如,可以以读/写一次或 只读多次模式挂载)。必须注意的是accessModes 和 storageClassName,一个是模式一个是刚刚注册的storageClass。
主体搭建
添加deployment
在rancher控制台中,点击部署并且倒入yml进行添加deployment

导入写好的yml可以看到部署成功后deployment

可以看到下面有很多调度规则和缩放策略等,可以自行配置。
添加storageClass和pvc
在集群下可以添加存储类和持久卷。

以创建nfs存储类为例子,首先可以先看上一篇文章为你的服务器搭建nfs服务。
重写storeageClass.yml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: grafana-nfs
namespace: default
provisioner: fuseim.pri/ifs
reclaimPolicy: Retain
重写pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test-claim
namespace: default
# annotations:
# volume.beta.kubernetes.io/storage-class: "grafana-nfs"
spec:
storageClassName: grafana-nfs
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Mi
重写deployment.yml
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: helloworld
spec:
replicas: 2 #容器数量
template:
metadata:
labels:
app: helloworld #标签
spec:
volumes:
- name: nfs-client-root
persistentVolumeClaim:
claimName: test-claim
# nfs:
# server: 47.102.40.125
# path: /home/pvc
containers:
- name: helloword-pod
image: 47.102.40.125:30009/test/nginx
imagePullPolicy: Always #总是拉取镜像
ports:
- containerPort: 80
volumeMounts:
- name: nfs-client-root
mountPath: /persistentvolumes
env:
- name: PROVISIONER_NAME
value: fuseim.pri/ifs
- name: NFS_SERVER
value: 47.102.40.125 # nfs服务的监听地址
- name: NFS_PATH
value: /home/pvc
resources: #资源限制和请求的设置
limits: #资源限制的设置
cpu: 25m #Cpu的限制,单位为core数,将用于docker run --cpu-shares参数
memory: 128Mi #内存限制,单位可以为Mib/Gib,将用于docker run --memory参数
requests: #资源请求的设置
cpu: 5m #Cpu请求,容器启动的初始可用数量
memory: 64Mi #内存清楚,容器启动的初始可用数量
注意 47.102.40.125 为你的nfs服务地址,mountPath为你pod挂载的目录。
重新倒入这三个文件,在控制台中再创建适应的pv

绑定成功后,查看pod里面的文件夹,可以看到挂载成功。

添加ingress
通过控制台添加负载均衡入口

创建成功

访问既可展示pod中的项目。
添加流水线
根据页面提示添加完代码库后,可以看到:

启动需要构建的代码库,编辑配置,构建需要的流程。

第一步是默认的拉取代码。第二步就是拉取所需的镜像和推送镜像的仓库地址。第三步就是部署需要的pod。
结语
在最后一步我并没有实现,因为我是单机测试,而这里的仓库是需要https访问的~如果有好的解决方法欢迎下面留言。