Rancher安装手册

这几天在搭建 Rancher 环境。

Rancher 是以在生产环境中运行容器为目标而构建的开源软件平台。随着 Docker 容器这种类型的应用工作负载的逐渐流行,它催生了很多与之相应的基础架构服务,如网络服务、存储服务、负载均衡,安全,服务发现和资源管理。

官方网站: https://rancher.com/

官方文档在此: http://rancher.com/docs/rancher/latest/en/

dockerinfo对其中的部分章节做了翻译http://www.dockerinfo.net/rancher/page/5

今天这篇就是dockerinfo其中的一篇翻译,我做了点无关痛痒的增删。需要学习的朋友可以两边都对照着看,又达到比较快的速度,也可以达到深入理解的层次。

准备 Linux 主机

先安装一个64位的 Ubuntu 14.04 Linux 主机,其内核必须高于 3.10 。或者其它同等的 Linux 发行版。你可以使用一台笔记本、一个虚拟机或者一台物理的服务器。请确保目标安装 Linux 主机的内存至少1GB。

然后安装 Docker 在这个 Linux 主机上, 可以参考 Docker安装说明。

启动 Rancher 服务器

启动 Rancher 服务器所需要做的动作就只有一条命令。在启动了这个容器之后,我们将能查看到这个运行中的服务器的日志。

$ sudo docker run -d --restart=always -p 8080:8080 rancher/server
# 显示 Rancher 服务器的容器 ID,替换containerid
$ sudo docker ps
# 显示并查看 Rancher 服务器的日志
$ sudo docker logs -f containerid

修改语言

启动 Rancher 服务器可能需要花几分钟时间。这取决于您下载 Rancher Server镜像的速度。当日志中显示 “…. Startup Succeeded, Listening on port…” 以后,Rancher UI 图形界面现在就能正常访问了。


一个简单的局域网服务器互联案例(3.5) —— 使用说明

接上篇。这是一篇使用手册。

经过前三篇文章的操作后,已经可以将环境交付给开发人员使用了。这是一篇简单的使用说明。分为管理员篇和开发人员篇。

管理员

所有的操作统一在100机器上进行。

添加用户

例如我们需要添加以为名叫keluTest的用户,使用

./addUser.sh keluTest

即可在4台机器上生成该用户,初始密码是Qweewq,密钥所在位置为 /home/keluTest/.ssh/keluTest

删除用户

./delUser.sh keluTest

即可在四台机器上同步删除用户。

开发人员

使用管理员提供的密钥和密码进行登陆,例如开发人员为keluTest,登陆方式为

ssh keluTest@10.37.231.228:10100
ssh keluTest@10.37.231.228:10101
ssh keluTest@10.37.231.228:10102
ssh keluTest@10.37.231.228:10103

在开发机上简单使用

ssh 100
ssh 101
ssh 102
ssh 103

即可访问。

本地Windows上使用putty或其它工具登陆。其它工具可以直接使用密钥登陆,putty需要生成自用密钥,生成方式参照这篇文章:《一个简单的局域网服务器互联案例 1》putty大概如下图配置即可:


一个简单的局域网服务器互联案例(3) —— 一键生成新用户

接上篇。

背景

在前面的系列里我完成了服务器安装、访问配置、局域网组建和普通网段下对开发网段的访问。一个可用的雏形已经成型。

不过里面还缺少一些东西,其中一个就是开发用户的管理。共用root账号进行服务器操作,虽说可行,也简单粗暴了一些。基本的用户管理也是应该有的。

所以这一篇主要完成在4台机器中创建新用户,并快捷生成密钥的脚本。系统环境为CentOS 7.

过程

脚本的逻辑

  1. 生成一个带有默认密码的用户
  2. 将用户加入wheel组,使之拥有sudo权限(centos下wheel用户组有sudo权限)
  3. 生成密钥
  4. 生成config文件并修改文件属性
  5. 在其它服务器上生成同名账号
  6. 将生成的密钥和配置文件同步到其他服务器上去
  7. 在其他机器上修改文件用户组
  8. 修改本机文件用户组

脚本已经放到github上了:https://github.com/kelvinblood/gist/blob/master/addUser.sh

#!/bin/bash

. /etc/profile


VERSION=' Version 0.0.1, 2017年10月12日, Copyright (c) 2017 kelvinblood';

usage () {
    echo '没有帮助';
}



if [ "$#" -eq 0 ]; then
    usage
    exit 0
fi

case $1 in
    -h|h|help )
        usage
        exit 0;
        ;;
    -v|v|version )
        echo $VERSION;
        exit 0;
        ;;
esac

if [ "$EUID" -ne 0 ]; then
    echo "必需以root身份运行,请使用sudo等命令"
    exit 1;
fi

USERNAME=$1
PASSWDCH="$USERNAME:Qweewq"


if [ -e "/home/$USERNAME" ]; then
    echo '该账户home目录已存在'
    exit 0
fi

useradd $USERNAME -d /home/$USERNAME -G wheel;
echo $PASSWDCH | chpasswd

if [ -e "/home/$USERNAME/.ssh" ]; then
    rm -rf "/home/$USERNAME/.ssh"
fi


mkdir /home/$USERNAME/.ssh
cd /home/$USERNAME/.ssh

sudo ssh-keygen -b 1024 -t rsa -C $USERNAME -f "/home/$USERNAME/.ssh/$USERNAME"
touch authorized_keys
touch config

cat $USERNAME.pub >> authorized_keys
chmod 400 authorized_keys

cat >> config << EOF
# add by weikelu
Host    100
  HostName        172.10.1.100
  Port            22
  User            $USERNAME
  IdentityFile    /home/$USERNAME/.ssh/$USERNAME
Host    101
  HostName        172.10.1.101
  Port            22
  User            $USERNAME
  IdentityFile    /home/$USERNAME/.ssh/$USERNAME
Host    102
  HostName        172.10.1.102
  Port            22
  User            $USERNAME
  IdentityFile    /home/$USERNAME/.ssh/$USERNAME
Host    103
  HostName        172.10.1.103
  Port            22
  User            $USERNAME
  IdentityFile    /home/$USERNAME/.ssh/$USERNAME
EOF

###########################################################

ssh 101 "useradd $USERNAME -d /home/$USERNAME -G wheel"
ssh 101 "echo $PASSWDCH | chpasswd"

cd /home/$USERNAME/.ssh

ssh 101 "mkdir /home/$USERNAME/.ssh"
scp config 101:"/home/$USERNAME/.ssh/config"
scp $USERNAME 101:"/home/$USERNAME/.ssh/$USERNAME"
scp authorized_keys 101:"/home/$USERNAME/.ssh/authorized_keys"
ssh 101 "chown -R $USERNAME:$USERNAME /home/$USERNAME/.ssh"

###########################################################

ssh 102 "useradd $USERNAME -d /home/$USERNAME -G wheel"
ssh 102 "echo $PASSWDCH | chpasswd"

cd /home/$USERNAME/.ssh

ssh 102 "mkdir /home/$USERNAME/.ssh"
scp config 102:"/home/$USERNAME/.ssh/config"
scp $USERNAME 102:"/home/$USERNAME/.ssh/$USERNAME"
scp authorized_keys 102:"/home/$USERNAME/.ssh/authorized_keys"
ssh 102 "chown -R $USERNAME:$USERNAME /home/$USERNAME/.ssh"

###########################################################

ssh 103 "useradd $USERNAME -d /home/$USERNAME -G wheel"
ssh 103 "echo $PASSWDCH | chpasswd"

cd /home/$USERNAME/.ssh

ssh 103 "mkdir /home/$USERNAME/.ssh"
scp config 103:"/home/$USERNAME/.ssh/config"
scp $USERNAME 103:"/home/$USERNAME/.ssh/$USERNAME"
scp authorized_keys 103:"/home/$USERNAME/.ssh/authorized_keys"
ssh 103 "chown -R $USERNAME:$USERNAME /home/$USERNAME/.ssh"

###########################################################

chown -R $USERNAME:$USERNAME /home/$USERNAME/.ssh

测试过程中顺手写了一个删除用户的脚本,也一并放上来,delUser.sh

#!/bin/bash

. /etc/profile


VERSION=' Version 0.0.1, 2017年10月12日, Copyright (c) 2017 kelvinblood';

usage () {
    echo '没有帮助';
}



if [ "$#" -eq 0 ]; then
    usage
    exit 0
fi

case $1 in
    -h|h|help )
        usage
        exit 0;
        ;;
    -v|v|version )
        echo $VERSION;
        exit 0;
        ;;
esac

if [ "$EUID" -ne 0 ]; then
    echo "必需以root身份运行,请使用sudo等命令"
    exit 1;
fi

USERNAME=$1

userdel $USERNAME
rm -rf /home/$USERNAME

ssh 101 "userdel $USERNAME"
ssh 101 "rm -rf /home/$USERNAME"

ssh 102 "userdel $USERNAME"
ssh 102 "rm -rf /home/$USERNAME"

ssh 103 "userdel $USERNAME"
ssh 103 "rm -rf /home/$USERNAME"

一个简单的局域网服务器互联案例(2) —— 不同网段下的访问

接上篇。

背景

在上一篇我组建一个由4台服务器组成的局域网。然而这个局域网是有一个限制——必须要接入WiFi才能进行访问和开发。

由于这个局域网和开发人员不处在同一个网段内,每次访问都需要切换到WiFi所在的网络才能访问,非常繁琐,而且如果是在不同楼层,甚至不同地区的开发人员,基本就不能访问了。

所以这一篇的目标是在公司内网环境下可以自由接入该局域网开发环境。

搭建

组网示意图

过程

解决这样的需求有两种方式,一种是类似于花生壳的内网穿透技术,请求发送到外部服务器,外部再转发到内网里来。然而这并不是这次开发中需要的。二是在路由器上做端口映射,像aws一样配置路由即可。

端口映射

如上图配好映射后,同网段内的电脑访问开发机的方式变为:

ssh root@xx.xx.xx.39:10100
ssh root@xx.xx.xx.39:10101
ssh root@xx.xx.xx.39:10102
ssh root@xx.xx.xx.39:10103

今后每当服务器启动某些对外的服务时,通过路由器的这个设置,打开对应的端口映射即可。


一个简单的局域网服务器互联案例(1)

用了一天时间安装服务器和组建局域网,记录一下过程。

背景

组建一个由4台服务器组成的局域网,提供给开发人员使用,要求安装CentOS 7系统,部署好docker环境。

搭建

组网示意图

安装CentOS

最简便的方法是,在官网下载好CentOS镜像,写入U盘,从U盘启动的方式,将系统安装到目标的服务器中。

配置路由器

  1. 配置LAN地址

    为了不和上一级路由器冲突,局域网内最好避免选择诸如192.168.1.1这样的IP地址段。

    想了一下最后用了“172.10.1.1”的IP段。


linux硬盘分区、格式化与挂载

给手上的一台 Windows 安装 CentOS 后,发现 1T 的硬盘没有利用上。所以这一篇介绍怎么将它配置好。

主要用到一下知识点:

  1. 对磁盘进行分区,以创建可用的分区;
  2. 对分区进行格式化 (format);
  3. 创建挂载点 ,将磁盘挂载上来;

分区

查看磁盘列表lsblk

lsblk 是 “list block device ” 的缩写,就是列出所有储存设备的意思

lsblk [-dfimpt] [device]
选项与参数:
-d  :仅列出磁盘本身,并不会列出该磁盘的分区数据
-f  :同时列出该磁盘内的文件系统名称
-i  :使用 ASCII 的线段输出,不要使用复杂的编码 (再某些环境下很有用)
-m  :同时输出该设备在 /dev 下面的权限数据 (rwx 的数据)
-p  :列出该设备的完整文件名!而不是仅列出最后的名字而已。
-t  :列出该磁盘设备的详细数据,包括磁盘伫列机制、预读写的数据量大小等

lsblk

从图片中可以目标磁盘是sdb,并且没有挂载进来。