2020/11/13
今回できたこと
現状での理解で、用語説明を試みた。
VM上のminikube Linux環境の調査を行った。
minikubeの初期の動作を確認した。
お約束
定例作業
用語のまとめ
いくつかのキーワードに関して、武藤の現段階での理解をまとめる。
Docker
Linuxのコンテナ技術。
FreeBSD jailに比べて、利用の敷居が低い。
dockerhubなどで作成済みのイメージを共有することができる。
Dockerfileの定義に基づいて、取得したイメージなどから、自分の用途にあったイメージを作ることができる。
Kubernetes
一般的にコンテナを利用する場合は、複数のコンテナ間の結合が必要となる。
例:ロードバランサー、(複数の)Webサーバ、データベースサーバなど
Dockerを下回りとして、以下のようなオーケストレーション(指揮)を行う環境である。
デプロイ(サービスの配置)
スケーリング
停止時の回復
DevOps
システムのライフサイクルにおいては、大きく開発(Development)と運用(Operation)のフェーズがある。
このサイクルをストレスなく回す方法論。
CI/CD
CI (Continous Integration): 継続的インテグレーション
コード修正->ビルド->テストまで。
CD (Continous Delivery): 継続的デリバリー
テスト終了後->(承認)->デプロイ(コンテナイメージをK8sなどで展開)まで。
GitOps
DevOpsをGitベースで行う方法論。
gitなので、履歴管理やバージョンの巻き戻しも簡単。
システムのソースなどはgitで管理されることが多い。
gitのpull requestのアクションで、CDの承認部分を行う。
VirtualBox上のminikube Linux環境の調査
minikubeでインストールされるVirtualBox上のminikube環境の内部に関して調査を行う。
以下のように、minikube環境の初期設定を行う。
code:shell
% useradd mutoh
% passwd mutoh
% ifconfig eth1
eth1 Link encap:Ethernet HWaddr 08:00:27:66:DA:96
inet addr:192.168.99.100 Bcast:192.168.99.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2360 errors:0 dropped:0 overruns:0 frame:0
TX packets:569 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:405655 (396.1 KiB) TX bytes:91771 (89.6 KiB)
code:/etc/group
wheel:x:10:root,docker,mutoh
code:/etc/sudoers
root ALL=(ALL) ALL
%wheel ALL=(ALL) NOPASSWD: ALL
OSのバージョンとディストリビューションを確認するが、普通のディストリビューションではなく、特別なもののようだ。
code:shell
% ssh mutoh@192.168.99.100
mutoh@192.168.99.100's password:
_ _
_ _ ( ) ( )
___ ___ (_) ___ (_)| |/') _ _ | |_ __
/' _ _ \| |/' _ \| || , < ( ) ( )| '_\ /'__`\
| ( ) ( ) || || ( ) || || |\`\ | (_) || |_) )( ___/
(_) (_) (_)(_)(_) (_)(_)(_) (_)\___/'(_,__/'\____)
$ uname -a
Linux minikube 4.19.114 #1 SMP Mon Oct 12 16:32:58 PDT 2020 x86_64 GNU/Linux $ ls /etc/*release*
/etc/lfs-release /etc/os-release
$ cat /etc/os-release
NAME=Buildroot
VERSION=2020.02.6
ID=buildroot
VERSION_ID=2020.02.6
PRETTY_NAME="Buildroot 2020.02.6"
$ cat /etc/lfs-release
NAME=Buildroot
VERSION=2020.02.6
ID=buildroot
VERSION_ID=2020.02.6
PRETTY_NAME="Buildroot 2020.02.6"
$ cat /etc/issue
Welcome to minikube
$ cat /proc/version
Linux version 4.19.114 (jenkins@jenkins) (gcc version 8.4.0 (Buildroot 2020.02.6)) #1 SMP Mon Oct 12 16:32:58 PDT 2020 ソフトウエアの追加のために、めぼしいパッケージマネージャが動作するか確認するが、動くものは無かった。
code:shell
$ yum
-bash: yum: command not found
$ apt
-bash: apt: command not found
$ rpm
-bash: rpm: command not found
$ deb
-bash: deb: command not found
$ dnf
-bash: dnf: command not found
minikubeの動作確認
VirtualBox上のminikube環境を事前に動作している場合、minikubeは起動に失敗する。
code:shell
% minikube start --driver=virtualbox
* Darwin 10.13.6 上の minikube v1.14.2
* プロフィールを元に、 virtualbox ドライバを使用します
* コントロールプレーンのノード minikube を minikube 上で起動しています
* Updating the running virtualbox "minikube" VM ...
* Docker 19.03.12 で Kubernetes v1.19.2 を準備しています...
* Kubernetes コンポーネントを検証しています...
* 有効なアドオン: storage-provisioner, default-storageclass, dashboard
* Done! kubectl is now configured to use "minikube" by default
% minikube status
{"kind":"Status","apiVersion":"v1","metadata":{},"status":"Failure","message":"forbidden: User \"system:anonymous\" cannot get path \"/healthz\"","reason":"Forbidden","details":{},"code":403}
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Error
kubeconfig: Configured
改めてVMを停止して、以下のようにminikube環境を実行し、ダッシュボードも実行する。
code:shell
% minikube start --driver=virtualbox
* Darwin 10.13.6 上の minikube v1.14.2
* プロフィールを元に、 virtualbox ドライバを使用します
* コントロールプレーンのノード minikube を minikube 上で起動しています
* 既存の virtualbox VM を "minikube" のために再起動しています...
* Docker 19.03.12 で Kubernetes v1.19.2 を準備しています...
* Kubernetes コンポーネントを検証しています...
* 有効なアドオン: default-storageclass, storage-provisioner, dashboard
* Done! kubectl is now configured to use "minikube" by default
% minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
% minikube dashboard
* ダッシュボードの状態を確認しています...
* プロキシを起動しています...
* プロキシの状態を確認しています...
サービスのURLを確認し、テスト環境の動作を確認した。
code:shell
% minikube service hello-minikube --url
% telnet 192.168.99.100 31081
Trying 192.168.99.100...
Connected to 192.168.99.100.
Escape character is '^]'.
GET /index.html
Hostname: hello-minikube-5d9b964bfb-z4pwh
Pod Information:
-no pod information available-
Server values:
server_version=nginx: 1.13.3 - lua: 10008
Request Information:
client_address=172.17.0.1
method=GET
real path=/index.html
query=
request_version=0.9
request_scheme=http
Request Headers:
Request Body:
-no body in request-
Connection closed by foreign host.
ロードバランサーが機能していることを、以下のように確認した。
アクセスする度に、接続されるホスト名が変わっている。
code:shell
% telnet 192.168.99.100 31081 > 1st.txt
GET /index.html
% telnet 192.168.99.100 31081 > 2nd.txt
GET /index.html
code:balance.diff
% diff -u 1st.txt 2nd.txt
--- 1st.txt 2020-11-13 11:18:54.000000000 +0900
+++ 2nd.txt 2020-11-13 11:19:07.000000000 +0900
@@ -3,7 +3,7 @@
Escape character is '^]'.
-Hostname: hello-minikube-5d9b964bfb-w8r7t
+Hostname: hello-minikube-5d9b964bfb-z4pwh
Pod Information:
-no pod information available-