涅槃を目指す in はてな

人生に迷う様を書きます

Kubernetes The Hard Way On VirtualBox 13日目

Kubernetesを雰囲気で使わないための修行Kubernetes The Hard Way On VirtualBoxの13日目。

Smoke Test

スモークテストとは、プログラムの必須機能が正常動作することを確認するためのテストです。

今回は作成したk8sクラスタの機能が正常動作することを確認します。

Data Encryption

ここでは、etcdに書き込むデータを暗号化する機能の確認をします。

まずsecretを作成します。

kubectl create secret generic kubernetes-the-hard-way \
>   --from-literal="mykey=mydata"

etcdに保存されているkubernetes-the-hard-wayシークレットの16進ダンプを出力します。

sudo ETCDCTL_API=3 etcdctl get \
>   --endpoints=https://127.0.0.1:2379 \
>   --cacert=/etc/etcd/ca.crt \
>   --cert=/etc/etcd/etcd-server.crt \
>   --key=/etc/etcd/etcd-server.key\

結果

00000000  2f 72 65 67 69 73 74 72  79 2f 73 65 63 72 65 74  |/registry/secret|
00000010  73 2f 64 65 66 61 75 6c  74 2f 6b 75 62 65 72 6e  |s/default/kubern|
00000020  65 74 65 73 2d 74 68 65  2d 68 61 72 64 2d 77 61  |etes-the-hard-wa|
00000030  79 0a 6b 38 73 3a 65 6e  63 3a 61 65 73 63 62 63  |y.k8s:enc:aescbc|
00000040  3a 76 31 3a 6b 65 79 31  3a ac 17 6e c5 3f 70 3b  |:v1:key1:..n.?p;|
00000050  0f b6 c8 07 87 3d d3 09  ef 54 18 7c ad 88 fd 15  |.....=...T.|....|
00000060  f2 9b 50 6c fa 6f 41 1c  a9 38 bc 6c 97 3b 0c 1d  |..Pl.oA..8.l.;..|
00000070  00 9a b0 f9 bc 93 7b dd  df fe fd 1b 09 88 f8 9e  |......{.........|
00000080  7a 1c 28 5b 0d 66 e9 a1  3d 31 cd 98 15 d4 94 49  |z.([.f..=1.....I|
00000090  8a 8e ea 33 c2 84 73 80  fb b1 87 e4 65 3e 16 83  |...3..s.....e>..|
000000a0  ec 69 6f 21 39 bd 69 13  86 82 1a 09 8f 1d df 09  |.io!9.i.........|
000000b0  34 c7 ba cf 7b 60 69 16  a8 85 07 e3 51 38 02 f3  |4...{`i.....Q8..|
000000c0  da cb fd d3 4c 79 30 70  d2 e2 61 96 24 96 f9 f1  |....Ly0p..a.$...|
000000d0  56 6b 46 ee 75 13 26 53  2b fa 2d c1 b9 65 15 3e  |VkF.u.&S+.-..e.>|
000000e0  b1 9c e5 48 8c 4d fc 7e  03 63 63 10 ac f9 0a 25  |...H.M.~.cc....%|
000000f0  4e 06 3d 32 10 b8 f2 49  80 9b fe 39 f9 c9 67 a5  |N.=2...I...9..g.|
00000100  a2 88 30 1d 8d 0b d6 b9  50 99 4d b6 74 c9 9f 89  |..0.....P.M.t...|
00000110  be 0c eb a1 bc d7 e5 67  70 5d f7 cc 62 4b 0d 00  |.......gp]..bK..|
00000120  9f ea 67 00 fc a2 29 ea  f3 95 d0 aa ed c1 f2 b3  |..g...).........|
00000130  e3 30 15 37 de df 77 3b  db bc 10 1a 8c 0d 27 af  |.0.7..w;......'.|
00000140  36 34 32 b4 c9 f2 a8 ad  8a 83 cb 44 39 c1 72 47  |642........D9.rG|
00000150  ce 81 6f 09 8a 8d 15 51  2d 0a                    |..o....Q-.|
0000015a

etcdキーの前にk8s:enc:aescbc:v1:key1を付ける必要があります。これは、aescbcプロバイダーがkey1暗号化キーでデータを暗号化するために使用されたことを示します。

確認が終わったら掃除しましょう。

kubectl delete secret kubernetes-the-hard-way

Deployments

ここではDeploymentの作成、管理機能を確認します。

nginxのDeploymentを作成します。

kubectl create deployment nginx --image=nginx

nginx Deploymentが作成したPodを確認します。

kubectl get pods -l app=nginx

以下のように出力されればOKです。

NAME                     READY   STATUS    RESTARTS   AGE
nginx-6799fc88d8-5z585   1/1     Running   0          43s

Services

ここではServiceの作成、管理機能を確認します。

nodeのPortを公開するnginxのサービスを作成します。

kubectl expose deploy nginx --type=NodePort --port 80
PORT_NUMBER=$(kubectl get svc -l app=nginx -o jsonpath="{.items[0].spec.ports[0].nodePort}")

curlで確認してみましょう

curl http://worker-1:$PORT_NUMBER
curl http://worker-2:$PORT_NUMBER

以下のように出力されればOKです。

<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

Logs

ここでは、コンテナのログを取得する機能を確認します。

まずnginxPodのフルネームを取得します。

POD_NAME=$(kubectl get pods -l app=nginx -o jsonpath="{.items[0].metadata.name}")

logを取得します。

kubectl logs $POD_NAME

以下のように出力されます

vagrant@master-1:~$ kubectl logs $POD_NAME
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2021/12/27 23:59:44 [notice] 1#1: using the "epoll" event method
2021/12/27 23:59:44 [notice] 1#1: nginx/1.21.4
2021/12/27 23:59:44 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6) 
2021/12/27 23:59:44 [notice] 1#1: OS: Linux 4.15.0-163-generic
2021/12/27 23:59:44 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2021/12/27 23:59:44 [notice] 1#1: start worker processes
2021/12/27 23:59:44 [notice] 1#1: start worker process 31

Exec

ここではコンテナ内でコマンドを実行できるか確認します。

nginx コンテナでnginx -vコマンド実行し、バージョンを出力させてみます。

kubectl exec -ti $POD_NAME -- nginx -v

以下のように出力されます

vagrant@master-1:~$ kubectl exec -ti $POD_NAME -- nginx -v
nginx version: nginx/1.21.4

今回はここまで!

お読み頂き有難うございました。