文章目录
- 系统环境
- 准备工作
- master
- master,node1,node2
- RKE入门使用
- 集群配置文件(master)
- 运行RKE(master)
- k8s使用实例
- 以web应用为例
- k8s 配置文件
- backend.yaml
- postgres.yaml
- redis.yaml
- django后端配置
- 部署(master)
- 总结
安装Kubernetes是公认的对运维和DevOps而言最棘手的问题之一。因为Kubernetes可以在各种平台和操作系统上运行,所以在安装过程中需要考虑很多因素。
在这篇文章中,我将介绍一种新的、用于在裸机、虚拟机、公私有云上安装Kubernetes的轻量级工具——Rancher Kubernetes Engine(RKE)。RKE是一个用Golang编写的Kubernetes安装程序,极为简单易用,用户不再需要做大量的准备工作,即可拥有闪电般快速的Kubernetes安装部署体验。你可以从官方的GitHub仓库安装RKE。 RKE可以在Linux和MacOS机器上运行
系统环境
vultr的vps 主机
os: ubuntu 16.04 x86_64
节点 | ip | 内存 |
master | 140.xx.xx.181 | 1G |
node1 | 140.xx.xx.164 | 512M |
node2 | 140.xx.xx.96 | 512M |
准备工作
master
- 1 在master上生成ssh key,并加入authorized_keys
RKE的工作方式是通过SSH连接到每个服务器,并在此服务器上建立到Docker socket的隧道,这意味着SSH用户必须能够访问此服务器上的Docker引擎。
将master的公钥id_dsa.pub分别加入到master,node1,node2节点的 ~/.ssh/authorized_keys,确保master能ssh连接自己和node1,node2
- 2 下载kubelet和kubectl
- 3 下载rke
查看rke是否安装成功
master,node1,node2
RKE是一个基于容器的安装程序,这意味着它需要在远程服务器上安装Docker,目前需要在服务器上安装Docker 1.12版本。
分别在三个节点上安装docker
官网的curl -sSL https://get.docker.com/ | sh
脚本安装的docker是最新版本,不确定是否支持
RKE入门使用
集群配置文件(master)
默认情况下,RKE将查找名为cluster.yml的文件,该文件中包含有关将在服务器上运行的远程服务器和服务的信息。
cluster.yml
集群配置文件包含一个节点列表。每个节点至少应包含以下值:
- 地址 – 服务器的SSH IP / FQDN
- 用户 – 连接到服务器的SSH用户
- 角色 – 主机角色列表:worker,controlplane或etcd
有三种类型的角色可以使用:
- etcd – 这些主机可以用来保存集群的数据。
- controlplane – 这些主机可以用来存放运行K8s所需的Kubernetes API服务器和其他组件。
- worker – 这些是您的应用程序可以部署的主机。
另一节是“服务”,其中包含有关将在远程服务器上部署的Kubernetes组件的信息
服务的镜像有
运行RKE(master)
要运行RKE,首先要确保cluster.yml文件在同一个目录下,然后运行如下命令:
若想指向另一个配置文件,运行如下命令:
输出情况将如下所示:
检查是否部署成功
k8s使用实例
以web应用为例
django后端 + postgresql + redis
使用k8s需要搭建私有的镜像仓库,一些基础的应用镜像可以从docker hub
上直接拉取,但是自己的包含代码的项目镜像需要提前打包好上传到自己的镜像仓库,k8s不能像docker-compose那样通过Dockerfile直接生成镜像
应确保master,node1,node2三个节点都能从你的私有仓库拉取镜像
项目结果
项目镜像打包Dockerfile实例:
打包镜像
build.sh
k8s 配置文件
backend.yaml
postgres.yaml
redis.yaml
django后端配置
django的settings.py中关于postgres和redis配置
注意: 基于dns的服务发现需要k8s-dns支持(rke默认已安装)
部署(master)
查看结果
访问 140.xx.xx.181/admin/
总结
k8s更适合那种无状态的微服务类型应用, 浮动的pod,服务的动态伸缩在容器化应用方面有着巨大的优势
对于以数据为中心且没有集群概念的应用比如mysql等数据库,数据的持久化比较麻烦