2020/12/09
今回できたこと
未解決
再起動時の/run/flannel/subnet.envの消失への対応。
kubectl top利用のための設定。
K8sクラスタによるload-balancer-exampleデモのトラブルシューティング
今後の作業
お約束
文章化作業
箇条書きの文章化
例題部分の新規書き起こし
K8sに関してざっと説明
仮想化部分の記述
一部、図やロゴなどの引用
定例作業
Raspberry Pi K8sクラスタworkerの作成
Docker利用例の作成
未解決:再起動時の/run/flannel/subnet.envの消失への対応
2020/12/08で、/run/flannel/subnet.envを手動で作成したが、今回の(再)起動後に、これが消えていた。 /runファイルシステム自体は、以下のようにtmpfs上に構築されているため、この動作は正常だとは思うが、再起動毎にこのファイルを作成する必要があることになる。
code:shell
pi@master-rpi4$ df
ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置
/dev/root 27877244 14092632 12345484 54% /
devtmpfs 1827796 0 1827796 0% /dev
tmpfs 1959892 0 1959892 0% /dev/shm
tmpfs 1959892 189384 1770508 10% /run
tmpfs 5120 4 5116 1% /run/lock
tmpfs 1959892 0 1959892 0% /sys/fs/cgroup
tmpfs 16384 0 16384 0% /var/tmp
tmpfs 32768 32768 0 100% /var/log
tmpfs 1048576 0 1048576 0% /tmp
/dev/sda1 30017184 3616 30013568 1% /mnt
/dev/mmcblk0p6 258094 55175 202920 22% /boot
tmpfs 391976 0 391976 0% /run/user/1000
ただ、今回設定を行ったworker-rpi4では起動時に正常に/run/flannel/subnet.envが生成されていた。
以下のように起動時に作成するように設定したつもりだが、これでも/run/flannel/subnet.envは作成されなかった。
code:/etc/rc.local.diff
--- /etc/rc.local.20201209 2020-12-09 14:02:33.350641521 +0900
+++ /etc/rc.local 2020-12-09 14:03:54.940471861 +0900
@@ -65,4 +65,13 @@
chown root:utmp /var/log/lastlog
chown root:utmp /var/log/wtmp
+# for K8s flannel
+mkdir -p /run/flannel
+cat <<EOF > /run/flannel/subnet.env
+FLANNEL_NETWORK=10.244.0.0/16
+FLANNEL_SUBNET=10.244.1.1/24
+FLANNEL_MTU=1450
+FLANNEL_IPMASQ=true
+EOF
+
exit 0
systemdの設定にも無いようである。
code:shell
pi@master-rpi4$ grep run /etc/systemd/**/* 2> /dev/null
/etc/systemd/system/dbus-fi.w1.wpa_supplicant1.service:ExecStart=/sbin/wpa_supplicant -u -s -O /run/wpa_supplicant
/etc/systemd/system/dhcpcd5.service:PIDFile=/run/dhcpcd.pid
/etc/systemd/system/sshd.service:ConditionPathExists=!/etc/ssh/sshd_not_to_be_run
未解決:kubectl top利用のための設定
code:shell
serviceaccount/metrics-server created
clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created
clusterrole.rbac.authorization.k8s.io/system:metrics-server created
rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created
clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created
clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created
service/metrics-server created
deployment.apps/metrics-server created
apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created
metric用のデプロイメントが作成されていることを確認したが、metrics-serverが動作していない。
code:shell
pi@master-rpi4$ kubectl get deployment --all-namespaces
NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE
default hello-world 0/5 5 0 5h37m
kube-system coredns 2/2 2 2 2d5h
kube-system metrics-server 0/1 1 0 149m
kubernetes-dashboard dashboard-metrics-scraper 1/1 1 1 29h
kubernetes-dashboard kubernetes-dashboard 1/1 1 1 29h
podを確認するが、metrics-serverは、CrashLoopBackOffとRunning状態を繰り返し遷移している。
code:shell
pi@master-rpi4$ kubectl get pod --all-namespaces|grep -e metric -e NAME
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system metrics-server-5d5c49f488-vzgjz 0/1 CrashLoopBackOff 61 166m
kubernetes-dashboard dashboard-metrics-scraper-79c5968bdc-zhmgk 1/1 Running 2 30h
podの詳細情報を表示するが、イベントログにも決定的な情報はなかった。
code:shell
pi@master-rpi4$ kubectl describe pod -A|less
(snip)
Name: metrics-server-5d5c49f488-vzgjz
Namespace: kube-system
Priority: 2000000000
Priority Class Name: system-cluster-critical
Node: worker-rpi4/192.168.3.102
Start Time: Wed, 09 Dec 2020 12:08:51 +0900
Labels: k8s-app=metrics-server
pod-template-hash=5d5c49f488
Annotations: <none>
Status: Running
(snip)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Pulled 130m (x13 over 159m) kubelet Container image "k8s.gcr.io/metrics-server/metrics-server:v0.4.1" already present on machine
Warning Unhealthy 105m (x56 over 159m) kubelet Readiness probe failed: HTTP probe failed with statuscode: 500
Warning BackOff 100m (x236 over 157m) kubelet Back-off restarting failed container
(snip:/run/flannel/subnet.envに関するエラー)
Normal SandboxChanged 97m (x4 over 97m) kubelet Pod sandbox changed, it will be killed and re-created.
Normal Killing 96m kubelet Container metrics-server failed liveness probe, will be restarted
Normal Created 96m (x2 over 97m) kubelet Created container metrics-server
Normal Started 96m (x2 over 97m) kubelet Started container metrics-server
Warning Unhealthy 96m (x6 over 97m) kubelet Liveness probe failed: HTTP probe failed with statuscode: 500
Warning Unhealthy 12m (x78 over 97m) kubelet Readiness probe failed: HTTP probe failed with statuscode: 500
Normal Pulled 7m26s (x33 over 97m) kubelet Container image "k8s.gcr.io/metrics-server/metrics-server:v0.4.1" already present on machine
Warning BackOff 2m34s (x384 over 95m) kubelet Back-off restarting failed container
(snip)
未解決:K8sクラスタによるload-balancer-exampleデモのトラブルシューティング
以下のように、load-balancer-exampleをデプロイする。
code:shell
deployment.apps/hello-world created
起動後、getコマンドで、デプロイメントとpodの情報が得られる。
ここでは、podはworker-rpi3pに1つとworker-rpi4に4つ割り当てられていることがわかる。
code:shell
pi@master-rpi4$ kubectl get deployment,pod -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
deployment.apps/hello-world 0/5 5 0 6m hello-world gcr.io/google-samples/node-hello:1.0 app.kubernetes.io/name=load-balancer-example
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/hello-world-6df5659cb7-dkr9t 0/1 CrashLoopBackOff 5 5m6s 10.244.1.10 worker-rpi4 <none> <none>
pod/hello-world-6df5659cb7-jnxd4 0/1 ContainerCreating 0 5m6s <none> worker-rpi3p <none> <none>
pod/hello-world-6df5659cb7-rt6j4 0/1 CrashLoopBackOff 5 5m6s 10.244.1.7 worker-rpi4 <none> <none>
pod/hello-world-6df5659cb7-sjsm2 0/1 CrashLoopBackOff 5 5m6s 10.244.1.8 worker-rpi4 <none> <none>
pod/hello-world-6df5659cb7-xlv8m 0/1 CrashLoopBackOff 5 5m6s 10.244.1.9 worker-rpi4 <none> <none>
podの詳細情報は、以下のようにdescribe podで得られる。
ここには、イベントログも含まれているが、有用な情報が得られない状態である。
code:shell
pi@master-rpi4$ kubectl describe pod hello-world-6df5659cb7-dkr9t
Name: hello-world-6df5659cb7-dkr9t
Namespace: default
Priority: 0
Node: worker-rpi4/192.168.3.102
Start Time: Wed, 09 Dec 2020 09:01:53 +0900
Labels: app.kubernetes.io/name=load-balancer-example
pod-template-hash=6df5659cb7
Annotations: <none>
Status: Running
IP: 10.244.1.10
IPs:
IP: 10.244.1.10
Controlled By: ReplicaSet/hello-world-6df5659cb7
Containers:
hello-world:
Container ID: docker://5fb78755d2e907b09bd833b36a21ce4c4a4cd9ce03f54beb4c8
69e3833d67691
Image: gcr.io/google-samples/node-hello:1.0
Image ID: docker-pullable://gcr.io/google-samples/node-hello@sha256:d2
38d0ab54efb76ec0f7b1da666cefa9b40be59ef34346a761b8adc2dd45459b
Port: 8080/TCP
Host Port: 0/TCP
State: Waiting
Reason: CrashLoopBackOff
Last State: Terminated
Reason: Error
Exit Code: 1
Started: Wed, 09 Dec 2020 09:07:31 +0900
Finished: Wed, 09 Dec 2020 09:07:31 +0900
Ready: False
Restart Count: 6
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-qqknn (ro)
Conditions:
Type Status
Initialized True
Ready False
ContainersReady False
PodScheduled True
Volumes:
default-token-qqknn:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-qqknn
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 9m10s default-scheduler Successfully assigned default/hello-world-6df5659cb7-dkr9t to worker-rpi4
Normal Pulled 7m39s (x5 over 9m7s) kubelet Container image "gcr.io/google-samples/node-hello:1.0" already present on machine
Normal Created 7m39s (x5 over 9m7s) kubelet Created container hello-world
Normal Started 7m39s (x5 over 9m6s) kubelet Started container hello-world
Warning BackOff 3m57s (x26 over 9m3s) kubelet Back-off restarting failed container
今後、さらに原因を調べていく。