Rancher是一个开源的全栈化企业级容器管理平台,经过极简的操做体验和强大完善的功能,让企业用户在生产环境中轻松落地容器技术。html
首先安装 docker, 而且启动docker。node
yum -y install docker
service docker start
复制代码
安装rancher。(注意检查端口是否被占用)nginx
sudo docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher
复制代码
启动后打开 https://SERVER_IP SERVER_IP 为你的ip地址,能够看到:docker
输入密码而且确认好你的ip地址就能够进入控制台了。json
至此,rancher安装成功。api
在控制台中咱们新建一个集群。bash
这里选择k8s的集群而且填写咱们须要的名称,点击下一步。服务器
这里须要把etcd和control都钩上,公网地址须要填写另外的一台服务器ip来充当这三种角色,内网名称也同样,节点名称就填你须要的。app
最后按照提示把下面的命令复制到你刚刚填写的公网地址的服务器来执行。负载均衡
点击完成再回到控制台,等待比较长的一段时间后能够看到集群已经被建立起来了。
能够看到具体节点的cpu和内存的使用。
点击菜单上的主机,就能够看到主机的基本状况了。
点击编辑集群,再为此添加一个节点(抢占式服务器)
这一个节点只须要充当worker角色,主机地址和内网地址一样填写,下面的步骤和第一次添加节点一致。
添加完毕后能够在控制台看到两个节点已经被添加到集群上了。
为了后面镜像的更新方便,必须弄一套本身的私有docker仓库,rancher就有现成的配置和插件。
点击集群上的system,而后点击应用商店。
开启应用商店而且找到docker-reistry安装。
商店还有不少能够用的插件(自行了解)。
安装完毕后能够点击详情看到咱们的仓库被创建在某个节点上。
至此咱们只须要往这地址推送咱们的镜像便可。(若是没有负载域名的记得开启docker的daemon.json里的insecure-registrie配置)。
讲述一下pod,deployment,service,pvc和storageClass的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就是经过标签来识别的,其余的参数比较简单就很少阐述了。
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的名称和持久卷要挂载的路径。
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。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs-storageclass
provisioner: nfs-provisioner
复制代码
StorageClass 为管理员提供了描述存储 "class(类)" 的方法。 不一样的 class 可能会映射到不一样的服务质量等级或备份策略,或由群集管理员肯定的任意策略。 Kubernetes 自己不清楚各类 class 表明的什么。这个概念在其余存储系统中有时被称为“配置文件”。简单来讲就是为了建立pv而使用的一个类。
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。
在rancher控制台中,点击部署而且倒入yml进行添加deployment
导入写好的yml能够看到部署成功后deployment
能够看到下面有不少调度规则和缩放策略等,能够自行配置。
在集群下能够添加存储类和持久卷。
以建立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里面的文件夹,能够看到挂载成功。
经过控制台添加负载均衡入口
建立成功
访问既可展现pod中的项目。
根据页面提示添加完代码库后,能够看到:
启动须要构建的代码库,编辑配置,构建须要的流程。
第一步是默认的拉取代码。第二步就是拉取所需的镜像和推送镜像的仓库地址。第三步就是部署须要的pod。
在最后一步我并无实现,由于我是单机测试,而这里的仓库是须要https访问的~若是有好的解决方法欢迎下面留言。