【Docker】RancherOSで本格的な自宅サーバーを構築しよう(2) ~ rancher-serverをインストール ~


rancher-serverをインストールしよう

関連記事

rancherOSインストール

isoの場合

  • https://releases.rancher.com/os/latest/rancheros.iso をCDに焼く
  • CD起動 (ID:rancher,Pass:rancher)
  • touch cloud-donfig.yml
  • cloud-config.yml の編集

        #cloud-config
        ssh_authorized_keys:
          - ssh-rsa AAA...ZZZ example1@rancher
          - ssh-rsa BBB...ZZZ example2@rancher
    
        メモ
        基本的な設定はauthorized_keysを書くだけで良い。
        tlsの設定をしようとして、公式docにあるようなsystem-dockerに変数をわたすやつをするとfileシステムが壊れてしまった(バグ?)ので注意
        その時は、サーバーに1度centosを入れ直してパーティションを削除してからまた、rancherOSのインストールをしないと治らない現象がおきた
    
        rancher:
            docker:
                tls_args: [--tlsverify, --tlscacert=ca.pem, --tlscert=server-cert.pem, --tlskey=server-key.pem,
                  '-H=0.0.0.0:2376']
                args: [daemon, --log-opt, max-size=25m, --log-opt, max-file=2, -s, overlay, -G, docker, -H, 'unix:///var/run/docker.sock', --userland-proxy=false, (--insecue-registry docker.oooo.com:5000) これを書こうとして壊れた、なくてもこわれた。]
    
  • sshの設定

        基本的には何もさわってない
        RancherOSをインストールすればデフォルトの設定でpassログインが禁止されるから、上の鍵登録は絶対せんといかんばい。
    
  • インストール

        $ mkfs.ext4 -L RANCHER_STATE /dev/sda
        $ sudo ros install -c cloud-config.yml -d /dev/sda
    

awsの場合

  • ES2/ECSで作成
    • VPCを作成してその中で新しいインスタンスを立てる
    • rancheros-v0.4.3-0-amazon-ecs-optimized
    • セキュリティグループ
            80 - 80
            22 - 22
            8080 - 8080
            5000 - 5000(private registry用)
  • ECSで作成 ECSで作成してもいいが、private registryのときに少しハマったが、 ECS環境では、ECSクラスタに参加するためインスタンスの起動時にamazon/amazon-ecs-agentコンテナが実行されるので、その後でdockerサービスのみを再起動することが難しい場合があります。インスタンスの再起動も検討しましょう。 って、(http://dev.classmethod.jp/cloud/docker-registry-recipes/) 正直ec2のほうが作りやすかった。rancherにするならなおさら。

vagrantの場合

    -- 8行目$number_of_nodes = 1
    ++ 8行目$number_of_nodes = 3
    # ノードの数に合わせて変えればよろし

    #vm間で通信できるようにする
        #ここは環境に合わせてブリッジにするならpublicで
    -- web.vm.network :private_network, ip: ip
    ++ web.vm.network :public_network, ip: ip, virtualbox__intnet: "intnet"


    $ vagrant up

メモ
    upしたらvagrantのエラーで1個しか立ち上がらんけんノードの回数
    vagrant upせんといかんっぽい

    $ vagrant ssh {rancher-01<ここはvagrantfileで定義されてる名前01..03>}

管理画面を走らせる

  • docker run

    • runには1GBの空き容量が必要らしい

      $ docker run -d --restart=always -p 8080:8080 rancher/server
      
          メモ
              --restart=alwaysをつけて起動すると、
              dockerデーモンの再起動
              マシンの再起動
              どちらでも、コンテナが自動再起動してくれる
      

      --restart=alwaysについての考察

    • 数分後rancher-serverの8080にアクセスすると管理画面が現れる

HAProxy

        rancher-serverにしか80と443ポートを開けてないので
        agent01とagent02にリクエストを振り分ける必要がある。

        さらに、httpをhttpsでリダイレクトをかけるようにしている。

        なお、ロードバランシング方法はroundrobinを採用
  • 作業フォルダをつくる

    $ cd
    $ mkdir haproxy
    $ cd haproxy
    $ touch Dockerfile
    $ touch proxy.cfg
    
  • haproxy.cfg

    
    global
        maxconn     4192
    
    defaults
        mode                    http
        log                     global
        option                  httplog
        option                  dontlognull
        option                  http-server-close
        option                  forwardfor
        option                  redispatch
        retries                 3
        timeout http-request    10s
        timeout queue           1m
        timeout connect         10s
        timeout client          1m
        timeout server          1m
        timeout http-keep-alive 10s
        timeout check           10s
        maxconn                 3000
    
    frontend  http *:80
        #redirect scheme https code 301 if !{ ssl_fc }
        # ssl を使うならリダイレクトをかける
    
        default_backend agent
    
    #オレオレ証明書などで代用もしくは書かない
    #frontend  https
    #    bind *:443 ssl crt ~/ssl/okamu.ro.pem
    #    default_backend agent
    
    frontend registry *:5000
        default_backend registry
    
    backend agent
        balance     roundrobin
        server      agent01 192.168.3.101:80
        server      agent02 192.168.3.102:80
    
    backend registry
        balance roundrobin
        server  agent01 192.168.3.101:5000
        server  agent02 192.168.3.102:5000
    
    
  • Dockerfile

    FROM haproxy:1.5
    ADD haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg
    #証明書があればコメントアウトを外す
    #RUN mkdir -p ~/ssl
    #ADD ssl/okamu.ro.pem ~/ssl/okamu.ro.pem
    EXPOSE 80
    #EXPOSE 443
    EXPOSE 5000
    
    
  • proxy run

    docker build -t proxy .
    docker run -d --restart=always -p 80:80 -p 443:443 -p 5000:5000 proxy
    

rancherOS(サーバー)のアップデートや管理

rancher/serverのアップデート

  1. rancher/serverの停止

    $ docker stop <container_id_of_original_server>
    
  2. 一時的にvolumeに退避

    $ docker create --volumes-from <container_name_of_original_server> --name rancher-data rancher/server:<tag_of_previous_rancher_server>
    
  3. 新しいバージョンのrancher/serverをpull

    $ docker pull rancher/server:latest
    
  4. 退避しておいたvolumeからrancher/serverをrunする

    $ docker run -d --volumes-from rancher-data --restart=always -p 8080:8080 rancher/server:latest
    

その他

rancherサーバーが落ちてしまったら

  • rancherOSのアップデートの手順を踏めばよろし