pikesaku’s blog

個人的な勉強メモです。記載内容について一切の責任は持ちません。

Google Photoメモ

参考

appllio.com
 
 

  • アップロードサイズは以下2つを選択可能
    • 高品質:1600万画素の写真と1080p動画を無料かつ容量無制限で保存可能
    • 元のサイズ:元の解像度で保存(Googleドライブなどと共用の保存容量を消費/15GB超は有料)
  • スマホ連携利用に最適
  • アシスタント機能が便利
    • ストーリー:旅行時などに撮影した写真・動画を紙芝居のように場所と時系列で整理
    • アニメーション:アニメーションGIF画像作成
    • コラージュ:複数枚の写真を組み合わせコラージュ画像作成
    • ムービー:写真・動画を組み合わせBGM付きムービー作成
    • パノラマ:別々の写真をつなぎ合わせパノラマ写真作成
    • その他の加工:自動補正してクリエイティブ画像作成
  • フォルダの概念なし。アルバムを作成し分類可能
  • AIによる検索機能が便利
    • 認識した結果のキーワードで検索可能
    • 精度向上・機能追加も期待できる
  • 注意点は以下
    • Googleフォトで削除すると端末からも削除される
    • 基本圧縮して保存される(画質を求める場合は別途保存する必要あり)

Google Cloud Platformメモ

GCP概要

www.topgate.co.jp 

www.topgate.co.jp 

  • 利用するにはアカウント作成が必要
  • プロジェクト単位で課金やユーザー管理を行う
  • コンソールでプロジェクトの管理をする
  • IAM は Identity Access Management
  • プロジェクトにアクセスできるユーザーの定義と、ロールの設定を行うことができる
  • ロールはデフォルトで用意されているもののみが利用可能でありカスタマイズ不可
  • Repositoriesは無料で利用できるGCP内で利用可能なプライベートGitレポジトリ
  • Google Cloud Shellは無料で利用できるGoogle Cloud SDKGoogle App Engine SDK がビルトインで用意された Linux 環境
  • 無料トライアルあり
  • 有料アカウントに手動でアップグレードしない限り、課金されることはない
  • 課金を有効にしても制限設定可能

 
 

Google Compute Engine(GCE)概要

www.topgate.co.jp

  • AWS の EC2 に相当するサービス
  • 特徴はGoogle が実際に運用環境で使用している強力なインフラの上で動く点
  • 高いネットワーク性能が期待でき物理的にセキュアな環境に置かれる
  • 長く稼働するインスタンスには自動的に値引きを適用する、ストレージや CPU の性能が高いため、他社に比べ性能あたりの単価は割安となる
  • ブラウザから操作できるコンソールがシンプルでわかりやすく、インスタンスの立ち上げや削除といった操作は非常に直感的に行える。
  • Google Cloud SDKを使えば、コンソールと同様の操作をコマンドラインからも実行可能
  • SSHでログインするにはCloud SDK の機能である ”gcloud compute ssh” が便利
  • Cloud SDK のサイトからCloud SDKをローカルPCにインストールする必要あり
  • gcloud compute ssh コマンドを使うとインスタンス名で ssh アクセスすることができ、IP アドレスを調べることなくログイン可能

www.topgate.co.jp

 
 

Google App Engine(GAE)概要

www.topgate.co.jp

  • Google が提供するPaaS
  • 2008年4月にサービス開始した古株のPaaS
  • 現在はPythonだけでなくJava, PHP, Go をサポート
  • セールスポイントは自分のアプリケーションを Googleインフラストラクチャー上で動かすことができる点
  • トラフィック増大と共に勝手にスケールする
  • Web アプリケーション運用する場合、第一選択肢に入れるべき

 
 

Cloud Datastore概要

www.topgate.co.jp

  • MongoDB や RethinkDB のようなドキュメント志向NoSQL データベース
  • アトミックなトランザクションをサポートしドキュメント数のスケールや高可用性を備える
  • データは暗号化され保存されるため、運用側のグーグルも、内容がわからないセキュア設計
  • 公式ドキュメントは以下
  • Entityは保存されるドキュメントのこと。リレーショナルデータベースの行に相当。
  • KindとはObject に付与するカテゴリー。リレーショナルデータベースの Table に相当
  • Google App Engine と Cloud Datastore を使えば、簡単にデータベースを利用したアプリケーションを開発可能

 
 

Google Container Engine (GKE)概要

www.topgate.co.jp

  • Google が開発したオープンソースKubernetes をベースとしたコンテナ環境
  • GUIで管理可能
  • Kubernetes は1つ以上のコンテナから構成されるクラスターの自動的な管理やスケールを行うオーケストレーションツール
  • 類似システムはMarathon やDocker Swarm
  • サービス構成や各役割を持ったクラスターを定義し自動的に管理することでマイクロサービス環境を実現
  • コンテナとしてDocker利用
  • サービスがどのようなコンテナで構成されるか定義すれば、コンテナの立ち上げ、モニタリング、ロードバランシング、サービス自己修復などが可能
  • Podは最小管理単位。
    • 1つ以上のコンテナを含む。
    • 例)nginx が動作する Pod。単一の役割を担う。
  • ReplicaSet は複数の Pod を組み合わせてアプリケーション機能を実現したもの
  • Deployment はReplicaSet を管理する。
    • サービス無停止でアプリケーションのアップデートを実現。
  • ServiceはDeployment に外部からアクセス可能な IP アドレスを付与しアクセス可能にしたもの
  • クラスタはServiceが複数動く環境
    • 1つの Master と複数の Node から構成
    • Node はコンテナを動かすサーバー
    • Master はNode を管理しスケジューリングやオートスケールをする
  • Kubernetes詳細は以下URL参照
  • 概念は以下(?)
    • Kubernetes > クラスタ > Service > Deployment > ReplicaSet > Pod

www.topgate.co.jp

  • Container Registry はGCP のサービスとして提供するプライベートDocker registry
  • プロジェクト外からはアクセス不可
  • Jenkins や CircleCI, drone.io といったCI サービスとの統合をサポート
  • CI サーバーでビルドが通ったら自動的にコンテナイメージをデプロイする継続的デリバリーに使用可能

 
 

Cloud Shell概要

www.topgate.co.jp

  • どんな PC でもブラウザさえあれば GCP の操作や開発を可能にする。ローカルに開発環境の立ち上げ不要。
  • 実体は f1.microタイプ の Google Compute Engine インスタンス
  • デフォルトで必要なツールがプリインストール済み(エディタ、言語ランタイム、バージョン管理システムGoogle Cloud SDKGoogle App Engine SDK等)。詳細は以下URL参照。
  • Cloud Shell のセッションを閉じるまで、もしくは1時間以上何もしなかった場合に terminate される。terminateされてもホームディレクトリのデータは残る。
  • ホームディレクトリにツールや、シェル、エディタなどの設定ファイルを置いておけば、ブラウザでCloud Shell を起動するだけで、いつもと変わらない開発環境が利用可能。
  • gcloud コマンドの設定不要で使用可能。立ち上げ時に現在のプロジェクトで gcloud コマンドが利用できるよう設定されておりCompute Engine インスタンスの立ち上げも即座に行える
  • gcloud コマンドを使う時はローカルからではなく Cloud Shell からと決めておくのも良い。
  • Web Preview は Cloud Shell のインスタンスのポートにブラウザから接続する機能
    • Cloud Shell起動ユーザーにのみブラウザ経由でポート(デフォルト8080番)を解放
  • Code Editor は ブラウザ上で動作するOrionをベースにしたエディタ
    • Cloud Shell 上のファイル編集、ローカルのファイルをアップロードし編集が可能

 
 

Bigtable概要

www.topgate.co.jp

  • Bigtable はデータサイズが巨大になっても高スループットで動作可能なスケーラビリティをデータベース
  • NoSQLに分類される
  • NoSQLはスケーラブルな実装を持つ、スキーマレス非リレーショナルDB
    • スケーラブルでありリレーショナルDBのパフォーマンス上限問題を解消する技術(大量データ利用を前提)
  • Google File System(GFS)とMapReduceによる分散処理がベース
  • HBaseはBigtableを元にしたOSS NoSQLデータベース
  • HBaseはHadoopによる分散処理がベース
  • HadoopGoogle File System(GFS)とMapReduceを元にしたOSS
  • 関係性をまとめると以下
Google技術 Google技術を元にしたOSS
Bigtable HBase
Google File System Hadoop File System
MapReduce Hadoop
Chubby Zookeeper

f:id:pikesaku:20180505083802p:plain

 
 

Google Cloud Dataproc概要

www.topgate.co.jp

  • HadoopとSpark環境を提供するサービス(構築の手間不要。Managed Spark & Hadoop)
  • SparkはHadoopサブプロジェクト。
    • HDFSでなくデータをオンメモリに配置 & 分散処理によりHadoopの100倍高速な解析実現
    • オンメモリのため扱うデータサイズはHadoopよりも小
    • 少量データはSpark、大容量データはHadoopの使い分けで利用される

 
 

Bigquery概要

www.topgate.co.jp

cloud.google.com

  • Bigtableはデータ更新可能、Bigqueryは不可。Bigqueryは読んで字の如くDBMS(データ管理)というよりはクエリ専門ソフトウェア(解析)???
  • データをインポートするだけで検索できる使いやすいサービス。(環境構築不要)
  • データのインポート元としてGoogle Cloud Storage 、ファイルのアップロード、Google ドライブをサポート
  • SQLでクエリ可能

 
 

Cloud Datalab概要

www.topgate.co.jp

  • データ解析可視化ツール
  • Python Jupiter Note Bookを元に作成
  • BigQueryなどのデータ解析結果を可視化可能
  • DockerイメージをローカルPCで、またはGCE上で利用可能

  
 

Cloud Functions概要

www.topgate.co.jp

 
 

Google Stackdriver概要

www.topgate.co.jp
www.topgate.co.jp
www.topgate.co.jp

  • Zabbixみたいな監視ツール。環境構築不要で利用できるのがセールスポイント
  • GCPサービスであれば無設定でも基本監視可能。詳細監視する場合、Agentをインストールして可能
  • ネットワークやサーバーなどのインフラ、アプリケーションなど様々なレイヤーの監視を一括で提供
  • AWS監視も可能(GCPAWS監視ツールとして開発されたものをGoogleが買収)
  • AWSGCP混在環境の一括監視が可能
  • 主な機能はMonitoring 、 Logging 、 Error Reporting 、 Debugger 、 Trace
  • Monitoring
  • Logging
    • リソースの出力するログをダッシュボードで閲覧可能
    • テラバイト/秒のログを管理でき大規模で利用可能
    • Monitoringと連携しログ監視設定可能
    • BigQueryと組み合わせ高速解析可能
  • Error Reporting
    • アプリケーションのクラッシュ、エラー発生・原因を素早く把握するサービス
    • JavaPythonC#RubyJavascript 、 Go のスタックトレースのパーサーを実装しておりエラーの検知・通知が可能
    • App Engineであれば設定不要で利用可能
    • エラーの時系列表示、類似エラーの発生頻度、新しく発生したエラーをメールやスマートフォンで通知するなど、異常検知・通知の機能が多くあり
  • Debugger
    • デバッグ作業支援ツール
    • 本番環境にデバッガーを仕込み、リクエストの処理中の変数の状態や、どのような関数が呼ばれているのか等を調査可能
    • ユーザー影響なし
    • アプリケーション状態のスナップショットを取得し、その状態をソースコードと紐付けデバッグを可能にする
    • PythonJava、Node.js、Go に対応
  • Trace
    • アプリケーションのパフォーマンス解析・監視サービス(New relic的なもの)
    • SDKがありアプリケーションに組み込み詳細な監視可能
    • GAEは設定不要で利用可能

KVMメモ

参考

Amazon CAPTCHA
 
 

メモ

CPU仮想化支援機能の有無確認

/proc/cpuinfo
Intel-VTの場合、vmx
AMD-Vの場合、svm
 

KVMバイス

/dev/kvm
KVM実行ユーザーはKVMグループに属する必要あり
 

virt-install対話式実行

virt-install --prompt
 

QCOWの意味

QEMUのイメージフォーマット 
QEMU Copy On Writeの略
 

virshコマンド

コマンド 動作
virsh list --all 仮想マシン一覧出力
virsh dominfo VM 仮想マシン情報出力
viersh start VM 仮想マシン起動
virsh suspend VM 仮想マシン一時停止
virsh resume VM 仮想マシン再開
virsh shutdown VM 仮想マシン停止(シャットダウン)
virsh reboot VM 仮想マシン再起動
virsh destroy VM 仮想マシン停止(パワーオフ)
virsh undefine VM 仮想マシン削除
virsh pool-list ストレージプール一覧出力
virsh vol-list POOL ボリューム一覧出力
virsh vol-delete IMAGE_FILE ボリューム削除
virsh edit VM 仮想マシン設定変更
virsh vcpuinfo VM 仮想マシンCPU詳細
virsh iface-list IF一覧
virsh iface-mac IF MACアドレス確認

※undefineでは仮想マシンディスクイメージファイル(上記のボリューム)は削除されない。
 
実行例

# virsh dominfo  VM
Id:             7
Name:           VM
UUID:           d08824fb-37ad-4ac5-b091-b07df7918a14
OS Type:        hvm
State:          running
CPU(s):         2
CPU time:       7255.5s
Max memory:     6291456 KiB
Used memory:    6291456 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: none
Security DOI:   0

 

# virsh vol-list default
 Name                 Path                                    
------------------------------------------------------------------------------
 CentOS-7-x86_64-Minimal-1611.iso /var/lib/libvirt/images/CentOS-7-x86_64-Minimal-1611.iso
 CentOS-7-x86_64-Minimal-1708.iso /var/lib/libvirt/images/CentOS-7-x86_64-Minimal-1708.iso
 centos7-minimal-tmplt.qcow2 /var/lib/libvirt/images/centos7-minimal-tmplt.qcow2

 

設定ファイル

 

設定ファイル 内容
/etc/livbirt/libvirtd.conf libvirtdへの外部からの接続について等
/etc/livbirt/qemu/networks配下ファイル 仮想ネットワーク
/etc/livbirt/qemu,conf VNC設定
/etc/livbirt/storage配下ファイル 仮想ネットワーク

VCPUはqemu-kvmプロセスのスレッドに対応

ps -Le | egrep qemu-kvm
 2558  2558 ?        00:38:39 qemu-kvm
 2558  2563 ?        00:08:06 qemu-kvm
 2558  2564 ?        00:20:25 qemu-kvm
 2558  2565 ?        00:00:02 qemu-kvm
19114 19114 ?        01:11:24 qemu-kvm
19114 19122 ?        00:13:30 qemu-kvm
19114 19123 ?        00:36:12 qemu-kvm
19114 19124 ?        00:00:01 qemu-kvm

 

VCPU実行は各スレッドが呼び出すioctlシステムコール中で実行され、CPU時間はsystemでカウントされる

 

Hugmeメモリ利用設定

基本ページサイズは4KB。
メモリを多く使うプロセスの場合、ページサイズを大きくした方がメモリページ管理コストが減り性能よくなる。
DBなどで実施される。KVMも利用される。
ただ、スワップアウトできない点に注意
使う場合、ホストでhugeetlbfsマウントし、その領域をqemu-kvmコマンドの-mem-pathオプションで指定する必要あり。(詳細は書籍124P参照)
 

ストレージの考え方

ホストOS側のブロックデバイスやファイルを仮想マシンにストレージデバイスとして見せる。
ゲストOS IO要求→KVMがフック→QEMUエミュレータ処理→ファイルorブロックデバイスへのIO処理
ゲストOSはIDE/SCSI/virtioなどのデバイスとして認識
virtioはゼロコピーIOを実現するIFでもっとも最適化されてもの
 

ストレージバックエンド

バックエンドはおおきく3種類あり
ファイルシステム上のファイル(ext4 or NFS) or ブロックデバイス(Local or FS-SAN or ISCSI) or LVM
ファイルとLVMの場合、libvirtで作成・削除可能。
ファイルの場合、フラグメントをケアする必要あり。
ファイルの場合、形式が多くあり。代表的なものは、RawとQcow2
サポートされる形式は"qemu-img | grep Supported"を実行すればわかる。

形式 説明
raw 変換・メタ情報なし。ディスクイメージをddで書き出したものと同じ
qcow2 ファイル中にメタデータ保有。仮想ディスクをクラスタと呼ぶ固定長ブロックで管理し、各クラスタがqcow2ファイルのどこに格納されているかが、メタ情報に記録されてる。

※QCOW2のファイルサイズは実利用サイズに応じて変わる。
クラスタサイズは大きいほど性能向上する。デフォルト64KB?著者は2MB推奨

# qemu-img info /var/lib/libvirt/images/cnt1.qcow2
image: /var/lib/libvirt/images/cnt1.qcow2
file format: qcow2
virtual size: 100G (107374182400 bytes)
disk size: 3.8G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: true

 

QCOW2スナップショット

QCOW2はスナップショットが可能。作成時の処理フローは以下。
・スナップショットを作成、その時点のクラスタの対応表のコピーを保存
・スナップショットに含まれるクラスタへの参照数を+1し、「copied」フラグを外す
・スナップショット後、スナップショットに含まれるクラスタへの変更は、新たにクラスタを確保して行う。新たに確保するクラスタでは、「copied」フラグを有効にする。
QCOW2スナップショット特性
・スナップショット間に親子・前後関係なし。そのため、削除・作成に制限はなし
・QCOW2は単調にファイルサイズが増加する。最適化は仮想マシンを停止し、以下コマンドを実行されば可能

# qemu-img convert -f qcow2 -O qcow2 old.img new.img

 

Base Image機能

元になるディスクイメージからの差分イメージだけを持ったディスクイメージを作成・利用する機能。
スナップショットとは異なる。別のファイルで差分を持ち、差分イメージを複数作成し、複数仮想マシンで利用が可能。
 
QCOW2だけでなく、rawでも利用可能
QEMUでサポートされるファイル形式であればOK
Base Image設定方法

qemu-img create -F qcow2 -b BASE.img -f qcow2 NEW.img

 
Boot Image設定確認方法

qemu-img info NEW.img
〜出力〜
backing file: ★ベースディスク情報が表示される★

 

JUJUデプロイメモ

環境

MAASサーバ冗長化構成で2台セットアップ済み
MAASサーバでKVM稼働中。このKVMをPODに登録しJUJUコントローラをデプロイする。
 
 

作業の流れ

POD登録

f:id:pikesaku:20180212154621p:plain
 
f:id:pikesaku:20180212154433p:plain
Virsh Addressは以下
qemu+ssh://pike@192.168.0.102/system
※pikeはUbuntu Sudoユーザー
 

JUJUコントローラデプロイ

KVM仮想マシン作成
PXEブートを指定。
BootオプションはMAASでDHCP有効にしているNWに接続するNICPXEブートを有効にする
f:id:pikesaku:20180212154940p:plain
f:id:pikesaku:20180212153806p:plain
※作成時に起動するとMAASからPXEブートするがパワーオフで停止する。
 
 
②MAAS Web画面上でPODリフレッシュ & タグ付け
上記操作でコミッションが行われ、完了後仮想マシンは停止する。
以下画面より仮想マシンにタグ付けする。
f:id:pikesaku:20180212183656p:plain
f:id:pikesaku:20180212183734p:plain
 
 
③MAASサーバにJUJUクライアントインストール

sudo add-apt-repository -u ppa:juju/stable
sudo apt install juju

 

juju add-cloud mymaas

以下を指定
"maas"
"http://MAAS_IPアドレス:5240/MAAS/"
 

juju add-credential mymaas

"MAASエンドポイントキー"
f:id:pikesaku:20180212162112p:plain
 
 
④JUJUコントローラデプロイ

juju bootstrap --constraints --congfig bootstrap-timeout=6000 tags=juju mymaas maas-controller

 
 

補足1 MAASサーバ2台のIF設定(仮想ブリッジ設定例)

source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
auto br1
iface br1 inet static
   bridge_ports ens3
   bridge_stp off
   bridge_fd 0.0
   address 192.168.0.101
   netmask 255.255.255.0
   gateway 192.168.0.1
   dns-nameservers 192.168.0.251
   dns-search example.com


auto br5
iface br5 inet static
   bridge_ports ens10
   bridge_stp off
   bridge_fd 0.0
   address 192.168.4.101
   netmask 255.255.255.0

DRBD片系ノードを再構築する場合

シーン

ノードA,BがありDRBDでディスク同期している状態でノードAが復旧不能になり、再構築する場合
 

手順

  1. ノードBをDRBD Primaryにする
  2. ノードAを再セットアップしDRBDインストールし設定ファイルを復旧する。
  3. 以下コマンドでミラーデバイスセットアップ
drbdadm create-md リソース名

上記コマンド実行するとノードB→Aへの初期同期が始まる。
完了すると同期は正常な状態になる。(結果)

version: 8.4.5 (api:1/proto:86-101)
srcversion: 4B3E2E2CD48CAE5280B5205 
 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
    ns:10630584 nr:7624 dw:170116 dr:10494969 al:34 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0