いますぐ実践! Linuxシステム管理

  • ¥0

    無料

システム管理者で初心者の方を対象に、実際に試せるシステム管理のノウハウを、お知らせします。Vine,Fedora,Ubuntu,DebianなどLinuxの他に、OpenBSD,FreeBSDなども対象とします。バックナンバーは発行者サイトにて。

著者サイト
 

メールマガジンを登録(無料)

もしくは

※ 各サービスのリンクをクリックすると認証画面に移動します。
※ 各サービスで登録しているメールアドレス宛に届きます。

メールマガジンを解除

もしくは

※ 各サービスのリンクをクリックすると認証画面に移動します。

  • このエントリーをはてなブックマークに追加
 
 
 
メルマガ名
いますぐ実践! Linuxシステム管理
発行周期
月2回
最終発行日
2018年06月04日
 
発行部数
2,821部
メルマガID
0000149633
形式
PC・携帯向け/テキスト形式
カテゴリ
インターネット・パソコン > OS > UNIX系OS

まぐまぐ!メールマガジンの用語集です。
下記の用語以外の不明な点はこちらをご覧ください。

 
発行周期
週1回、月1回などの発行頻度です。
部数
メルマガの配信数を記しています。
カテゴリ
まぐまぐ!に登録されているカテゴリです。
形式
メルマガには以下の配信形式があります。下部「メルマガ形式」をご参照下さい。
 
最終発行日
最後にメルマガが配信された日付です。
メルマガID
メルマガを特定するIDです。
RSSフィード
RSSを登録すると、更新情報を受け取ることができます。

― メルマガ形式 ―

  • PC向け
    パソコンでの閲覧に最適化したメルマガ
  • 携帯向け
    スマートフォンやフィーチャーフォンでの
  • PC・携帯向け
    PC・携帯どちらでも快適にご購読いただけます。
  • テキスト形式
    文書だけで構成された、一般的なメールです。
  • HTML形式
    ホームページのように文字や画像が装飾されたメールです。
  • テキスト・HTML形式
    号によって形式が変更する場合があります。

閉じる

メールマガジン最新号

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ いますぐ実践! Linux システム管理 / Vol.276 / 読者数:2825名
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

こんばんは、うすだです。

耳鳴りというか難聴のため、短期間ですがステロイドを点滴で投与したり
服用したりしています。
(最初のお医者さんでは点滴、その後再発してからは服用です。)

1日に数ミリグラムだけなので、少量のはずですが、ステロイドの副作用
と思われる症状がすぐ顕著に出て、我ながら面白いと感じています。

主な症状としては、不眠、ムーンフェイス(満月様顔貌)、肥満、顔面紅斑
(というほど大げさではなく、顔が紅潮+熱を帯びているくらい)です。

ムーンフェイスに関しては、お医者さんからは、もっと摂取しないと普通
は出ないと言われました。調べると、中等度以上の摂取で1〜2ヶ月経過で
症状が現れるとのことです。ですが、自分自身と家族が気づく程度には、
輪郭が膨らんでおります。うーん、不思議です。

肥満に関しては、体重計曰く、内臓脂肪の値がここ何年も変わらなかった
のですが、突如悪くなりました。(体重は、ほぼ不変です。)

まあ、耳の方は徐々に回復していますので、そのうち服用しなくてもよく
なると思います。服用をやめた後、これらの症状がどうなるのか、今から
楽しみにしています。

なお、ステロイドの副作用には、増毛・脱毛というのもあります。しかし
残念ながら、点滴の後、抜け毛が増えているように感じています。

抜け毛が増えたのはきっとそういう季節だからで、増毛の副作用が現れる
のはこれからだ、と自らに言い聞かせています。

ステロイドをやめたら毛が増えたらいいのにとか、毛のことばかり考えて
いますが、一瞬考えないようにして、今回もはりきってまいりましょう。


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ 今回のお題 - Kubernetesを気軽に体験する (レベル:初級)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

次から次へと出てくる新しいOSやディストリビューションに対応すべく、
VirtualBox や Docker などでお試し環境を作り吟味されている貴兄が、
それなりにいらっしゃるのではないかと思います。

ゲストOSやコンテナをちょっと動かしてみるだけなら、標準で使えるGUI
やコマンドで操作すれば、大抵は事足ります。

ですが、複数のゲストOSやコンテナを、複数のマシンで分散して動かして
管理しようとすると、手順がかなり複雑になってしまいます。

そういった問題を解決するため、複数のマシンを使ってコンテナの作成や
起動など管理する、「オーケストレーションツール」というものが、世の
中にはいくつかあるようです。

その中でも、最近は「Kubernetes」というものが注目を浴びています。

そこで今回は、Kubernetes を使って、Dockerのコンテナを動作させたり
止めたりなどしてみたいと思います。

そして、今回は、すみません、Ubuntu 16.04 でのみ動作確認しました。
が、他のディストリビューションでも、手順は概ね同じと思います。


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
□ Kubernetesとは? Minikubeとは?

Kubernetes(「クーベネティス」「クーベルネイテス」「クベルネテス」
「クーバネティス」などいろんな読み方があるようです)とは、コンテナ
の運用を自動化するためのオープンソースのシステムです。

‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
Production-Grade Container Orchestration - Kubernetes
https://kubernetes.io/
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥

複数サーバをクラスタとしてまとめて管理し、ネットワークやストレージ
の管理、負荷分散や監視も行うことができます。

クラスタは、クラスタの管理を行う「マスター」と、コンテナを実行する
「ノード」から構成されます。

それから、実際には、複数のコンテナをまとめた「Pod」という単位で、
作成や起動、停止などの操作を行います。

一般的には、「Google Cloud Platform」や「Microsoft Azure」といった
クラウドプラットフォームで動かすようですが、ローカルのマシンで動作
させることも可能です。

今回は、Kubernetes を単体のマシンで動かすための「Minikube」という
ものを使って、Kubernetes を体験してみたいと思います。

‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
GitHub - kubernetes/minikube: Run Kubernetes locally
https://github.com/kubernetes/minikube
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥

なお、Minikubeは、VirtualBoxか「KVM(Kernel-based VM)」上で動作する
ため、いずれかを必要とします。今回は VirtualBox を使います。
(厳密には、Dockerでも動作するようです。詳細は上記ページにあります
ので、必要な貴兄はぜひトライしてみてください。)

もし VirtualBox のインストールなど行われていない場合は、下記のURL
を開いて、お使いのプラットフォーム用のパッケージなどをダウンロード
し、インストールしてください。パッケージをインストールするだけで、
基本的な機能は使用できる…はずです。

‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
Oracle VM VirtualBox - Downloads
http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
□ Minikubeとkubectlのインストール

Minikube で Kubernetes を体験するには、Minikubeのインストールと、
「kubectl」という管理コマンドをインストールする必要があります。

‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
Overview of kubectl - Kubernetes
https://kubernetes.io/docs/reference/kubectl/overview/
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥

Minikubeのインストール手順は、前述のMinikubeのGitHubのページの記載
(README.md)の通りです。が、念のため、手順を以下に示します。

……………………………………………………………………………………
$ curl -Lo minikube \
https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 \
&& chmod +x minikube && sudo mv minikube /usr/local/bin/
……………………………………………………………………………………

以下を実行すると、Minikubeのバージョンを出力します。
Minikubeが最低限動作するかどうかの確認にもなると思います。

……………………………………………………………………………………
$ minikube version
minikube version: v0.27.0
……………………………………………………………………………………

次に、kubectlをインストールします。手順は、以下の記載の通りです。

‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
Install and Set Up kubectl - Kubernetes
https://kubernetes.io/docs/tasks/tools/install-kubectl/
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥

…が、念のため、一連の手順を以下に示します。

……………………………………………………………………………………
$ sudo apt-get update
$ sudo apt-get install apt-transport-https
$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | \
sudo apt-key add -
$ sudo sh -c "echo deb http://apt.kubernetes.io/ kubernetes-xenial main \
> /etc/apt/sources.list.d/kubernetes.list"
$ sudo apt-get update
$ sudo apt-get install kubectl
……………………………………………………………………………………

Bashの補完機能の設定をしておくと、コマンドラインでTABによる補完が
効くようになり、便利です。「~/.bashrc」に以下を追加しましょう。

……………………………………………………………………………………
[ -x "$(which kubectl)" ] && source <(kubectl completion bash)
……………………………………………………………………………………


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
□ Minikubeの起動

Minikube自体の操作には、「minikube」コマンドを使います。
まず、「minikube start」を実行すると、Minikube が起動します。

……………………………………………………………………………………
$ minikube start
Starting local Kubernetes v1.10.0 cluster...
Starting VM...
Downloading Minikube ISO
150.53 MB / 150.53 MB [============================] 100.00% 0s
Getting VM IP address...
Moving files into cluster...
Downloading kubeadm v1.10.0
Downloading kubelet v1.10.0
Finished Downloading kubelet v1.10.0
Finished Downloading kubeadm v1.10.0
Setting up certs...
Connecting to cluster...
Setting up kubeconfig...
Starting cluster components...
Kubectl is now configured to use the cluster.
Loading cached images from config file.
……………………………………………………………………………………

出力されているメッセージから想像がつくと思いますが、初回はいろいろ
なダウンロードや初期設定が行われるため、時間がかかります。
ちなみに、2回目以降実行した際の出力メッセージは、以下の通りです。

……………………………………………………………………………………
$ minikube start
Starting local Kubernetes v1.10.0 cluster...
Starting VM...
Getting VM IP address...
Moving files into cluster...
Setting up certs...
Connecting to cluster...
Setting up kubeconfig...
Starting cluster components...
Kubectl is now configured to use the cluster.
Loading cached images from config file.
……………………………………………………………………………………

「minikube status」を実行すると、Minikube の状況がわかります。

……………………………………………………………………………………
$ minikube status
minikube: Running
cluster: Running
kubectl: Correctly Configured: pointing to minikube-vm at 192.168.99.100
……………………………………………………………………………………

VirtualBox の管理コマンド「vboxmanage」を以下のように実行すると、
MinikubeがVirtualBoxのゲストOSであることがわかります。

……………………………………………………………………………………
$ vboxmanage list runningvms
"minikube" {a2106a9a-a087-4872-aa1e-715f00361f55}
……………………………………………………………………………………


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
□ Podの起動と公開

ここからは、主にkubectlコマンドを使います。
まず、コンテナのもとのイメージを入手して、そのイメージからコンテナ
(Pod)を作成して起動するには、「kubectl run」を実行します。
以下に例を示します。

……………………………………………………………………………………
$ kubectl run hello-world --image=gcr.io/google-samples/node-hello:1.0 \
--port=8080
deployment.apps "hello-world" created
……………………………………………………………………………………

「gcrl.io/google-samples/node-hello」のバージョン「1.0」のイメージ
をダウンロードし、これを基に「hello-world」という名の「Deployment」
を作成します。
そして、Deploymentからコンテナ(Pod)を生成し、起動します。
node-hello自体は、TCPのポート8080を介して、超単純なWebのサービスを
提供する(というかページを返す)サンプルイメージのようです。

「kubectl get deployment」を実行すると、Deploymentを確認できます。

……………………………………………………………………………………
$ kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
hello-world 1 1 1 1 5m
……………………………………………………………………………………

「kubectl get pod」を実行すると、動作しているPodを確認できます。

……………………………………………………………………………………
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
hello-world-6d86b54b4f-9847l 1/1 Running 0 5m
……………………………………………………………………………………

「kubectl describe pod Pod名」を実行すると、Podに関する詳細な情報
を知ることができます。以下に例を示します。
また、「kubectl describe deployment Deployment名」だと、Deployment
に関する詳細な情報が得られます。

……………………………………………………………………………………
$ kubectl describe pod hello-world
Name: hello-world-6d86b54b4f-9847l
Namespace: default
Node: minikube/10.0.2.15
Start Time: Sun, 03 Jun 2018 18:40:24 +0900
Labels: pod-template-hash=2842610609
run=hello-world
Annotations: <none>
Status: Running
IP: 172.17.0.4
Controlled By: ReplicaSet/hello-world-6d86b54b4f
Containers:
hello-world:
Container ID: docker://00776844d287a1f8d58183ebc56...略
Image: gcr.io/google-samples/node-hello:1.0
Image ID: docker-pullable://gcr.io/google-samples/node-hello...略
Port: 8080/TCP
Host Port: 0/TCP
State: Running
...後略
……………………………………………………………………………………

ただ、このままでは、8080/tcpのポートにアクセスできません。
そこで、以下のように「kubectl expose」を実行します。「Service」と
いうものが作成され、アクセスできるようになります。

……………………………………………………………………………………
$ kubectl expose deployment hello-world --type=NodePort
service "hello-world" exposed
……………………………………………………………………………………

「deployment Deployment名」で、対象のDeploymentを指定しています。
「--type=NodePort」で、kubectl run時に指定した「--port」のポートを
外部からアクセスできるようにします。

アクセスするためのURLを知るには、以下のように「minikube service」
を実行します。

……………………………………………………………………………………
$ minikube service hello-world --url
http://192.168.99.100:31373
……………………………………………………………………………………

Minikube を実行しているマシンでWebブラウザを起動し、上記で得られた
URLにアクセスすると、「Hello Kubernetes!」の画面が表示されます。

なお、「kubectl get service」を実行すると、Serviceを確認できます。

……………………………………………………………………………………
$ kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-world NodePort 10.106.102.1 <none> 8080:31373/TCP 1m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 12h
……………………………………………………………………………………


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
□ ServiceやPod、Deploymentの削除

Serviceを削除するには、「kubectl delete service Service名」を実行
します。以下に例を示します。

……………………………………………………………………………………
$ kubectl delete service hello-world
service "hello-world" deleted
……………………………………………………………………………………

Deploymentを削除するには「kubectl delete deployment Deployment名」
を実行します。生成したPodも合わせて削除されます。

……………………………………………………………………………………
$ kubectl delete deployment hello-world
deployment.extensions "hello-world" deleted
……………………………………………………………………………………

Podだけを削除するには、「kubectl delete pod Pod名」を実行します。

……………………………………………………………………………………
$ kubectl delete pod hello-world-6d86b54b4f-9847l
pod "hello-world-6d86b54b4f-98471" deleted
……………………………………………………………………………………

ただ、Deploymentを削除せずにPodだけを削除すると、自動的にPodを生成
し直してくれます。

……………………………………………………………………………………
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
hello-world-6d86b54b4f-6g6bz 1/1 Running 0 10s
hello-world-6d86b54b4f-98471 1/1 Terminating 0 1h
……………………………………………………………………………………

2行目が再生成されたPodで、3行目が削除した(終了中の)Podです。
(もう少し経ってから再度実行すると、3行目が消えます。)

もし、Serviceを削除していなければ、前述と同じURLにアクセスすると、
新たに生成されたPodへとつながり、「Hello Kubernetes!」の画面が表示
されます。

つまり、Podはひとつのアプリケーションの実行単位であり、Deployment
はそれを永続的に実行し続けるためのもの、ということだと思います。

ただ、kubectl exposeは、podに対して行うこともできます。
「kubectl expose pod Pod名」を実行して作成したServiceは、そのPodが
なくなると、有効でなくなります。よって、新たにPodが生成されたら、
Serviceも再作成する(kubectl exposeする)必要があります。


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
□ Minikubeの停止

Minikubeを停止するには、「minikube stop」を実行します。

……………………………………………………………………………………
$ minikube stop
Stopping local Kubernetes cluster...
Machine stopped.
……………………………………………………………………………………

Minikubeが停止すると、「minikube status」も以下のようになります。

……………………………………………………………………………………
$ minikube status
minikube: Stopped
cluster:
kubectl:
……………………………………………………………………………………

VirtualBoxで動作中のゲストOSもなくなります。

……………………………………………………………………………………
$ vboxmanage list runningvms
$
……………………………………………………………………………………


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
□ おわりに

以上、Minikubeを使って気軽にKubernetesを動かす方法を紹介しました。

わかりにくいところが多々あるかもしれませんが、まずは書いてある通り
に実行してみてください。その後、いろいろアレンジしながら試している
と、それなりに見えてくるようになる…と思います。

などと偉そうに書いていますが、私がKubernetes(Minikube)を使い始めた
のは、つい最近です。みなさまと一緒に成長していきたいと思います。

なお、「minikube dashboard」を実行すると、Webブラウザが起動し、Web
で操作できるようになります。

……………………………………………………………………………………
$ minikube dashboard
Opening kubernetes dashboard in default browser...
……………………………………………………………………………………

ですが、個人的には、コマンドラインで操作した方が早く覚えられるよう
に思います。


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ 宿題の答え
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

前回の宿題は、

/var/www/html/shareを別のディレクトリに変更し、かつブラウザから
は「http://Webサーバ/share/...」のままでアクセスできるようにして
みましょう。

でした。

それには、「Alias」ディレクティブを使います。Aliasディレクティブを
使うと、URLとパスをマップしてくれます。たとえば、先頭が「/share」
で始まるURLのパスを、ファイルシステムの「/work/share」にマップする
(結びつける)には、以下の設定を追加します。
(前回と同様でよければ、「/etc/apache2/sites-enabled/share.conf」に
以下の設定を追加してください。)

……………………………………………………………………………………
Alias /share /work/share
……………………………………………………………………………………

これにより、たとえば「/share/foo/bar」にアクセスした場合、ファイル
システムの「/work/share/foo/bar」を参照するようになります。
(つまり、DocumentRootと関係ないパスに結びつけることができます。)

ただ、このままだと「/share」へのアクセスが許可されておらず、いつも
のForbiddenなページが表示されてしまいます。ですので、上記に加え、
以下のように「Require」ディレクティブを使って、許可する設定を追加
します。(2行目のOptionsの設定は、前回のままです。)

……………………………………………………………………………………
<Location /share/>
Options -Indexes
Require all granted
</Location>
……………………………………………………………………………………

Apacheをリロードすれば、上記設定が有効になります。

……………………………………………………………………………………
$ sudo systemctl reload apache2
……………………………………………………………………………………


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ 今回の宿題
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

今回の宿題は、

MinikubeやPodがどこでどのように動作しているか、確認しましょう。

です。

Minikube がVirtualBoxのゲストOSとして動作していますが、どんな設定
で動いているのでしょうか。
また、Pod はDockerのコンテナとして動作しているはずですが、どちらで
どんなふうに動いているのでしょうか。

コマンドを使ったり、ファイルを眺めたりなど、できる範囲内でいろいろ
探っていただければと思います。
(つまり、書いている私自身が、まだわかっていないということです…。)


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ あとがき
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

あちこちに点在しているデータやバックアップを集約して整理したい! と
思い、6TBのHDDと、SATAをUSB3.0に変換するドックみたいなものを、ふと
衝動買いしました。

まずは、大量のデータをかき集めて6TBのHDDへ移動させたところ、外付け
のSSDがほぼ空になり、メインPCの空き容量も、数GBから150GB程度にまで
広げることができました。

ただ、会社で最近、2TBのHDD 2台を、LVMを使ってミラーリングしました
が、早速片方のHDDが壊れてミラーできなくなってしまいました。

HDDがいつ壊れてもおかしくないというのを目の当たりにして、HDDが1台
だけでは、その1台が壊れてしまったらデータがすべて消えてしまう、と
いうことに今更ながらに気づき、やや途方に暮れています。

もう1台、6TBのHDDを買ってミラーリングなどするか、マシンごとに役割
を決め、分散してデータのバックアップをとっておくか…。

前者の方がきれいですが、さらに1万円ちょいの出費が必要というのは、
なんだかなーという気がします。しかし、後者の場合、集約して管理! と
いうそもそもの目的が達成されないということになってしまいます。

というわけで、前者を選ぶべきということは、わかっております。
ただ、最近話題の「Oculus Go」が気になっており、万が一うっかり衝動
買いしてしまったら、HDDが買えなくなってしまうかもしれません。

その場合、現構成(1台のHDDのまま)で恐る恐る使い続ける、という第三の
ダメな選択肢を選んでしまいそうです…。


今回も、ここまで読んでいただき、誠にありがとうございました。
次回は、7月1日の発行をめざします。(まだ歯切れが悪くて恐縮です…)


「いますぐ実践! Linux システム管理」はこちらです。
メルマガの解除、バックナンバーなども、以下からどうぞ。
http://www.usupi.org/sysad/ (まぐまぐ ID:149633)

その他、作者に関するページは、概ね以下にございます。
http://www.usupi.org/kuri/ (main)
http://usupi.seesaa.net/ (blog)
http://twitter.com/kuriking/ (twitter)
http://facebook.com/kuriking3 (facebook)
https://jp.pinterest.com/kuriking/ (pinterest)
https://www.instagram.com/kuri_king_/ (instagram)
メルマガ全文を読む
 

▲ページトップへ

▲ページトップへ