2 minutes read
— 323 words
ข้อดีของการใช้ Distroless base
- ทำให้ image มีขนาดเล็กมาก สามารถนำไปใช้ได้รวดเร็ว ทั้งตอน pull และ สร้าง container
- เพิ่มความปลอดภัยในการใช้งาน เพราะไม่มี shell ทำให้ลดช่องทางที่จะถูกโจมตี จากภายนอกได้
- ความเสถียรของ container ที่ค่อนข้างดี ไม่มี library ที่ไม่จำเป็นอยู่ภายใน
การเข้า debug container ภายใน pod ที่ทำงานบน kubernetes โดยใช้ผ่าน shell เราจะใช้
kubectl exec -it ชื่อ pod -c ชื่อ container -- /bin/bash หรือ /bin/sh ขึ้นอยู่กับ base image
แต่เมื่อเราใช้ base เป็น distroless หรือ from scratch จะไม่สามารถใช้วิธี exec shell เพื่อเข้าไปในภายใน container แบบนี้ได้
kubectl debug
เป็น feature ที่เพิ่มเข้ามาใน kubernetes 1.23+ ทำให้เราสามารถ debug โดยใช้ ephemeral container เป็น sidecar เพื่อใช้ เชื่อมต่อกับ container เป้าหมายของเราได้
kubectl run server --image nginx
kubectl debug server -c debugger -it --image=busybox --target=server
/#
เราลองใช้ top เพื่อดู process ภายใน container ว่าทำงานถูกต้องหรือเปล่า
/#top
Mem: 7482596K used, 8907768K free, 37104K shrd, 456252K buff, 3180508K cached
CPU: 2.5% usr 0.7% sys 0.0% nic 96.4% idle 0.2% io 0.0% irq 0.0% sirq
Load average: 0.30 0.20 0.16 2/796 40
PID PPID USER STAT VSZ %VSZ CPU %CPU COMMAND
29 1 101 S 11868 0.0 0 0.0 nginx: worker process
30 1 101 S 11868 0.0 1 0.0 nginx: worker process
31 1 101 S 11868 0.0 2 0.0 nginx: worker process
32 1 101 S 11868 0.0 3 0.0 nginx: worker process
1 0 root S 11404 0.0 3 0.0 nginx: master process nginx -g daemon off;
33 0 root S 4404 0.0 0 0.0 sh
40 33 root R 4404 0.0 1 0.0 top
เราลอง describe pod ที่ชื่อ server จะเห็นว่ามีสร้าง ephemeral debug container ขึ้นมาภายใน pod
> kubectl describe pod server
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 2m33s default-scheduler Successfully assigned default/server
Normal Pulling 2m32s kubelet Pulling image "nginx"
Normal Pulled 2m32s kubelet Successfully pulled image "nginx" in 150.12709ms
Normal Created 2m32s kubelet Created container server
Normal Started 2m32s kubelet Started container server
Normal Pulling 2m26s kubelet Pulling image "busybox"
Normal Pulled 2m26s kubelet Successfully pulled image "busybox" in 163.194621ms
Normal Created 2m26s kubelet Created container debugger
Normal Started 2m26s kubelet Started container debugger