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
ここでは、コンテナのログを取得する機能を確認します。
まずnginx
Podのフルネームを取得します。
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
今回はここまで!
お読み頂き有難うございました。