Kubeadm: livenessprobe๊ฐ€ ๋„ˆ๋ฌด ๊ณต๊ฒฉ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— apiserver๊ฐ€ ์‹œ์ž‘๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2017๋…„ 08์›” 25์ผ  ยท  73์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: kubernetes/kubeadm

[Lubomir] ์ฐธ๊ณ  : ๊ฐ€๋Šฅํ•œ ์ˆ˜์ • ์‚ฌํ•ญ์ด ์—ฌ๊ธฐ์— ์ œ์ถœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
https://github.com/kubernetes/kubernetes/pull/66264

๋ฒ„๊ทธ ๋ณด๊ณ ์„œ ๋˜๋Š” ๊ธฐ๋Šฅ ์š”์ฒญ์ž…๋‹ˆ๊นŒ?

๋ฒ„๊ทธ ๋ณด๊ณ ์„œ

๋ฒ„์ „

kubeadm ๋ฒ„์ „ ( kubeadm version ) :
kubeadm version : & version.Info {Major : "1", Minor : "7", GitVersion : "v1.7.3 + 2c2fe6e8278a5", GitCommit : "2c2fe6e8278a5db2d15a013987b53968c743f2a1", GitTreeState : "not a git tree", BuildDate : "1970-01 -01T00 : 00 : 00Z ", GoVersion :"go1.8 ", ์ปดํŒŒ์ผ๋Ÿฌ :"gc ", ํ”Œ๋žซํผ :"linux / arm "}

ํ™˜๊ฒฝ :

  • Kubernetes ๋ฒ„์ „ ( kubectl version ) :
    ์„œ๋ฒ„ ๋ฒ„์ „ : version.Info {Major : "1", Minor : "7", GitVersion : "v1.7.4", GitCommit : "793658f2d7ca7f064d2bdf606519f9fe1229c381", GitTreeState : "clean", BuildDate : "2017-08-17T08 : 30 : 51Z ", GoVersion :"go1.8.3 ", ์ปดํŒŒ์ผ๋Ÿฌ :"gc ", ํ”Œ๋žซํผ :"linux / arm "}
  • ํด๋ผ์šฐ๋“œ ์ œ๊ณต ์—…์ฒด ๋˜๋Š” ํ•˜๋“œ์›จ์–ด ๊ตฌ์„ฑ :
    arm32 (bananapi-๊ธฐ๋ณธ์ ์œผ๋กœ raspberrypi2)

  • OS (์˜ˆ : / etc / os-release) :
    (๋‚ด OS ์ด๋ฏธ์ง€)
    ID = "containos"
    NAME = "containos"
    VERSION = "v2017.07"
    VERSION_ID = "v2017.07"
    PRETTY_NAME = "containos v2017.07"

  • ์ปค๋„ (์˜ˆ : uname -a ) :
    Linux master2 4.9.20 # 2 SMP 8 ์›” 16 ์ผ ์ˆ˜์š”์ผ 15:36:20 AEST 2017 armv7l GNU / Linux

  • ๊ธฐํƒ€ :

์–ด๋–ป๊ฒŒ ๋œ ๊ฑฐ์˜ˆ์š”?

kubeadm init ๋Š” "์ œ์–ด ํ‰๋ฉด์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ค‘"๋‹จ๊ณ„์—์„œ ~ ์˜์›ํžˆ ์•‰์•„ ์žˆ์Šต๋‹ˆ๋‹ค. docker ps / logs ์กฐ์‚ฌ์— ๋”ฐ๋ฅด๋ฉด apiserver๊ฐ€ ์ข…๋ฃŒ๋˜๊ณ  (SIGTERM) ๊ณ„์† ๋‹ค์‹œ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ธฐ๋ฅผ ๊ธฐ๋Œ€ ํ–ˆ์Šต๋‹ˆ๊นŒ?

๋ชจ๋“  ์ž‘์—… :) ํŠนํžˆ apiserver๊ฐ€ ๋‚˜ํƒ€๋‚˜๊ณ  ๋‚˜๋จธ์ง€ ํ”„๋กœ์„ธ์Šค๋Š” ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์„ ์žฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ• (๊ฐ€๋Šฅํ•œ ํ•œ ์ตœ์†Œํ•œ์œผ๋กœ ์ •ํ™•ํ•˜๊ฒŒ)?

๋Š๋ฆฐ ๋จธ์‹ ์—์„œ kubeadm init ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์•Œ์•„์•ผ ํ•  ๋‹ค๋ฅธ ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋ฅผ ์œ„ํ•ด, ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ•œ ๋ฒˆ์— ์‹œ์ž‘๋˜๋Š” ๋™์•ˆ apiserver๋Š” ์ฒซ ๋ฒˆ์งธ ๋กœ๊ทธ ์ค„์—์„œ HTTP ์ฟผ๋ฆฌ์— ์‘๋‹ตํ•˜๋Š” ๋ฐ ์•ฝ 90 ์ดˆ (!)๊ฐ€ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ ์‹œ์ ์—์„œ ๊ทธ๊ฒƒ์ด ๋ฌด์—‡์„ํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ž์„ธํžˆ ๋ณด์ง€ ์•Š์•˜์ง€๋งŒ ๋กœ๊ทธ๋Š” etcd ๋ถ€ํŠธ ์ŠคํŠธ๋žฉ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๊ฒƒ์„ ์–ธ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ์ œ์•ˆ ๋œ ์ˆ˜์ • ์‚ฌํ•ญ์€ apiserver initialDelaySeconds ๋ฅผ 180s๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค๋ฅธ ๊ณณ์—์„œ๋„ ๋น„์Šทํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ณต๊ฒฉ์ ์ธ ์ดˆ๊ธฐ ์ง€์—ฐ์„ ๊ฐ€์งˆ ์ด์œ ๊ฐ€ ๊ฑฐ์˜ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

(์ž์ฃผ ์‹คํŒจ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜๋Š” ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ํ”„๋กœ๋•์…˜ ์†Œํ”„ํŠธ์›จ์–ด์— ๋Œ€ํ•œ ์ œ ๊ฒฝํ—˜์— ๋”ฐ๋ฅด๋ฉด ์‹œ๊ฐ„ ์ดˆ๊ณผ์— ๋Œ€ํ•œ ์˜ฌ๋ฐ”๋ฅธ ์†”๋ฃจ์…˜์€ ๊ฑฐ์˜ ํ•ญ์ƒ ๋” ์˜ค๋ž˜ ๊ธฐ๋‹ค๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค.)

areUX help wanted kinbug prioritbacklog sicluster-lifecycle

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

@pipejakob kubeadm ์‹คํ–‰์˜ ์˜ฌ๋ฐ”๋ฅธ ์ง€์ ์—์„œ ๋‹ค๋ฅธ ํ„ฐ๋ฏธ๋„์—์„œ ์ด๊ฒƒ์„ (๋‚ด bananapi์—์„œ) ์‹คํ–‰ํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

sed -i 's/initialDelaySeconds: [0-9]\+/initialDelaySeconds: 180/' /etc/kubernetes/manifests/kube-apiserver.yaml

(๋ณดํ†ต ์ˆ˜๋™์œผ๋กœ docker kill old / restart-looping apiserver ์ปจํ…Œ์ด๋„ˆ, ์ •์  ํฌ๋“œ๋กœ ์ž๋™ ์ •๋ฆฌ๋˜๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค)

๋ชจ๋“  73 ๋Œ“๊ธ€

ํ˜„์žฌ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ํฌ๋“œ์— ๋Œ€ํ•ด InitialDelaySeconds ๋ฐ TimeoutSeconds ๋ฅผ ๋ชจ๋‘ 15๋กœ ์„ค์ • ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๋Š” kube-up.sh ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ์ด๋ฏธ์ง€๋ฅผ ํ•œ๊บผ๋ฒˆ์— ๊ฐ€์ ธ ์˜ค๋Š” ์ดˆ๊ธฐ ์‹œ์ž‘์ด ๋Š๋ฆฌ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ๋ชจ๋“  ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์˜จ ํ›„ apiserver๊ฐ€ ์‹œ์ž‘๋œ ํ›„ /healthz ๊ฒ€์‚ฌ์— ์‘๋‹ตํ•˜๋Š” ๋ฐ ์–ผ๋งˆ๋‚˜ ๊ฑธ๋ฆฌ๋‚˜์š”?

์ €์ „๋ ฅ ๊ธฐ๊ณ„๋ฅผ ์ˆ˜์šฉํ•˜๊ธฐ ์œ„ํ•ด์ด ๋‘ ๊ฐ’์„ ๋ชจ๋‘ ์กฐ์ •ํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ผ๋‹จ ์‹œ์ž‘๋˜๋ฉด 15 ์ดˆ ๋ฏธ๋งŒ์˜ ์ƒํƒœ ํ™•์ธ์— ์‘๋‹ต ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ apiserver๊ฐ€ exec ()์™€ ์‹ค์ œ๋กœ afaics ์„œ๋น„์Šค๋ฅผ ์ œ๊ณต ํ•  ์ค€๋น„๊ฐ€ ๋œ ์‚ฌ์ด์— ์ˆ˜ํ–‰ํ•˜๋Š” ๋ชจ๋“  ์ถ”๊ฐ€ ์ž‘์—…์ž…๋‹ˆ๋‹ค.

์˜ค, ๊ทธ๋ฆฌ๊ณ  ๋„์ปค ํ’€ ํƒ€์ž„์€ InitialDelaySeconds afaics (์ข‹์Œ)์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ €์† ๋„คํŠธ์›Œํฌ ๋งํฌ๋ฅผ ํ†ตํ•ด ๋” ํฐ (์ผ๋ฐ˜ ์šฐ๋ถ„ํˆฌ) ์ด๋ฏธ์ง€๊ฐ€์žˆ๋Š” ๋‹ค๋ฅธ ์˜ˆ์—์„œ ๊ฐ€์ ธ ์˜ค๊ธฐ์— ๋ช‡ ๋ถ„์ด ๊ฑธ๋ฆด

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ฒช๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋Š๋ฆฐ ๊ธฐ๊ณ„๋กœ kubeadm ๋Š” ์˜์›ํžˆ ์•‰์•„ ์žˆ์Šต๋‹ˆ๋‹ค. v1.7.4 ์‚ฌ์šฉ

@anguslees ๋ฐ @koalalorenzo , ์ˆ˜๋™์œผ๋กœ ํ™œ์„ฑ ํ”„๋กœ๋ธŒ ์„ค์ •์„ ๋ณ€๊ฒฝํ•˜๋ฉด ( /etc/kubernetes/manifests/ ์—์„œ ๋งค๋‹ˆํŽ˜์ŠคํŠธ ํŒŒ์ผ์„ ํŽธ์ง‘ํ•˜์—ฌ) ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋˜ํ•œ ์ตœ๊ทผ์— Slack์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์ผํ•œ ์ฆ์ƒ์„ ๋ณด์ด์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋” ๋งŽ์€ ํ˜ธ์ŠคํŠธ ์œ ํ˜•์œผ๋กœ ์ด๋™ํ•  ๋•Œ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ์ œ์•ฝ์— ๋ถ€๋”ช ํž ๊ฐ€๋Šฅ์„ฑ์ด์žˆ๋Š” ์‚ฌ๋ก€๋ฅผ ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

์ฝ”๋”ฉ์— ์‹œ๊ฐ„์„ ํˆฌ์žํ•˜๊ธฐ ์ „์—์ด ์ ‘๊ทผ ๋ฐฉ์‹์ด ๋ฌธ์ œ๋ฅผ ์‹ค์ œ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌ!

ํ•˜๋“œ์›จ์–ด ์ง€์› ๊ฐ€์ƒํ™”์—†์ด QEMU์—์„œ kubeadm์„ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•  ๋•Œ๋„์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค (๋งค์šฐ ๋Š๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜์œ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค). InitialDelaySeconds ๋ฐ TimeoutSeconds๋ฅผ ๋Š˜๋ฆฌ๋ฉด ๋„์›€์ด๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ฒฐ๊ตญ ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

@pipejakob kubeadm ์‹คํ–‰์˜ ์˜ฌ๋ฐ”๋ฅธ ์ง€์ ์—์„œ ๋‹ค๋ฅธ ํ„ฐ๋ฏธ๋„์—์„œ ์ด๊ฒƒ์„ (๋‚ด bananapi์—์„œ) ์‹คํ–‰ํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

sed -i 's/initialDelaySeconds: [0-9]\+/initialDelaySeconds: 180/' /etc/kubernetes/manifests/kube-apiserver.yaml

(๋ณดํ†ต ์ˆ˜๋™์œผ๋กœ docker kill old / restart-looping apiserver ์ปจํ…Œ์ด๋„ˆ, ์ •์  ํฌ๋“œ๋กœ ์ž๋™ ์ •๋ฆฌ๋˜๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค)

ํŠธ์œ— ๋‹ด์•„ ๊ฐ€๊ธฐ ํ™•์ธ ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ œ ๊ฒฝ์šฐ์—๋Š” ๋ผ์ฆˆ๋ฒ ๋ฆฌ ํŒŒ์ด 3์—์„œ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 180์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์ง€๋งŒ ์ œ ๊ฒฝ์šฐ์—๋Š” ๋‹จ์ˆœํžˆ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ๋ง ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ฌธ์ œ # 106๋„ ๋ฐœ์ƒํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

9 ์›” 1 ์ผ 10:47:30 raspberrypi kubelet [6053] : W0901 10 : 47 : 30.020409 6053 kubelet.go : 1596] ๋ฏธ๋Ÿฌ ํฌ๋“œ "kube-apiserver-raspberrypi_kube-system (7c03df63-8efa-1) ์‚ญ์ œ ์ค‘
1e7-ae86-b827ebdd4b52) "๊ฐ€ ์˜ค๋ž˜ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

kubelet ํ”„๋กœ์„ธ์Šค๋ฅผ ์ˆ˜๋™์œผ๋กœ HUPํ•˜์—ฌ ๋‹ค์‹œ ์‚ด์•„์•ผํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ ์ด๊ฒƒ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ œ ์ •์‹ ์„ ๊ตฌํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” Raspberry Pi 2B๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ์ง€๋‚œ๋‹ฌ ๋™์•ˆ init ๋‹จ๊ณ„์— ๋จธ๋ฌผ ๋ €์Šต๋‹ˆ๋‹ค. ์ œ์–ด ํ”Œ๋ ˆ์ธ์„ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด ํ•œ ์ค„์งœ๋ฆฌ ๋ผ์ด๋„ˆ๋ฅผ ์‹คํ–‰ ํ•œ ํ›„ ์•ž์œผ๋กœ ๋‚˜์•„๊ฐ”์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” kubeadm v1.8.0์— ์—ฌ์ „ํžˆ ์กด์žฌํ•˜๋ฉฐ kubeadm ์ž์ฒด๊ฐ€ ์ด์ œ ๋Œ€๋ถ€๋ถ„์˜ ์ž‘์—…์— ๋Œ€ํ•ด 1 ๋ถ„ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋” ์‹ฌ๊ฐํ•ฉ๋‹ˆ๋‹ค. 1 ๋ถ„ ์ œํ•œ ์‹œ๊ฐ„์€ ์ž„์˜๋กœ ์„ ํƒํ•œ ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฉฐ, ์•ˆํƒ€๊น๊ฒŒ๋„ a) ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ๋””๋ฒ„๊ทธ / ํ•ด๊ฒฐํ•  ์ถฉ๋ถ„ํ•œ ์‹œ๊ฐ„์ด ์—†์Šต๋‹ˆ๋‹ค (์˜ˆ : sed hack), b) apiserver๊ฐ€ ์‹œ์ž‘๋  ์ถฉ๋ถ„ํ•œ ์‹œ๊ฐ„ (~ ๋‚˜๋ฅผ ์œ„ํ•ด 90s), initialDelaySeconds๊ฐ€ ํ™•์žฅ ๋œ ๊ฒฝ์šฐ ์—๋„ c) kubeadm afaics๋ฅผ ํ•ดํ‚น / ์žฌ ๊ตฌ์ถ•ํ•˜์ง€ ์•Š๊ณ ๋Š” ๋Š˜๋ฆด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์‹œ๊ฐ„ ์ดˆ๊ณผ๋Š” ํŠนํžˆ ๋ณต์žกํ•œ ์ตœ์ข… ์ผ๊ด€์„ฑ ์‹œ์Šคํ…œ์—์„œ ์˜ฌ๋ฐ”๋ฅธ ๋…ผ๋ฆฌ๋ฅผ ๊นจ๋œจ๋ฆฝ๋‹ˆ๋‹ค. "๋‹จ์ง€"๋•Œ๋ฌธ์— ์ถ”๊ฐ€ํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค. kubeadm ์€ (๋Š”) ๋” ํฐ ๋ฐฐํฌ ์‹œ์Šคํ…œ์ด ์˜์กด ํ•  ์ˆ˜์žˆ๋Š” ๋นŒ๋”ฉ ๋ธ”๋ก์ด๋ผ๋Š” ๊ฒƒ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ kubeadm ์ž์ฒด์—์„œ ๋ชจ๋“  ์‹œ๊ฐ„ ์ œํ•œ์„ ์ œ๊ฑฐ ํ•  ๊ฒƒ์„ ๋Œ€๋‹ดํ•˜๊ฒŒ ์ œ์•ˆํ•˜๊ณ  (๋‹ค์–‘ํ•œ ๋‹จ๊ณ„๋Š” ๊ณ„์†ํ•ด์„œ ๊ณ„์† ์žฌ ์‹œ๋„ํ•ด์•ผ ํ•จ) ์ƒ์œ„ ์ˆ˜์ค€์˜ ์ปจํ…์ŠคํŠธ์—์„œ ์ ์ ˆํ•œ ๊ฒฝ์šฐ ์ „์ฒด ์‹œ๊ฐ„ ์ œํ•œ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์œ„ ์ˆ˜์ค€ ํ”„๋กœ์„ธ์Šค์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ˆœ / ์ง์ ‘ ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. "์‚ฌ์šฉ์ž๊ฐ€ ํฌ๊ธฐํ•˜๊ณ  ^ c๋ฅผ ๋ˆ„๋ฅผ ๋•Œ๊นŒ์ง€ ์žฌ์‹œ๋„"๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ PR์ด ํ—ˆ์šฉ๋ฉ๋‹ˆ๊นŒ?

@anguslees ์šฐ๋ฆฌ๋Š” ์ด์ „์— "์˜์›ํžˆ ๊ธฐ๋‹ค๋ฆผ"ํ–‰๋™์„ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ์€ UX PoV์—์„œ ๋งค์šฐ ์ฐจ์„ ์ฑ… ์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด์ œ ํƒ€์ž„ ์•„์›ƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ์ œํ•œ ์‹œ๊ฐ„ ์ค‘ ์ผ๋ถ€๋ฅผ ๋Š˜๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” kubeadm์˜ ์‚ฌ์šฉ์ด ๋‘ ๋ฐฐ๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ๋‘˜ ๋‹ค ์‚ฌ์šฉ์ž๊ฐ€ kubeadm์„ ๋Œ€ํ™” ํ˜•์œผ๋กœ ์ž…๋ ฅํ•˜์—ฌ ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ๋˜๋Š” ์ƒ์œ„ ์ˆ˜์ค€์˜ ์†Œ๋น„์ž๊ฐ€ ์•„๋‹Œ์ง€ ์•Œ๊ณ  ์‹ถ์–ดํ•ฉ๋‹ˆ๋‹ค.

.. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ์—ฌ๊ธฐ์— ์–ด๋–ค ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐˆ๊นŒ์š”? ํ˜„์žฌ ์ €๋Š” 10 ๋ฐฐ ๋งŽ์€ ์‹œ๊ฐ„ ์ œํ•œ์ด์žˆ๋Š” kubeadm ํฌํฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์–ธ์  ๊ฐ€๋Š” ํ‘œ์ค€ kubeadm ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋‹ค์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋ฏฟ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค _.

@anguslees ์šฐ๋ฆฌ๋Š” ์ด์ „์— "์˜์›ํžˆ ๊ธฐ๋‹ค๋ฆผ"ํ–‰๋™์„ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ์€ UX PoV์—์„œ ๋งค์šฐ ์ฐจ์„ ์ฑ… ์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด์ œ ํƒ€์ž„ ์•„์›ƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ์ œํ•œ ์‹œ๊ฐ„ ์ค‘ ์ผ๋ถ€๋ฅผ ๋Š˜๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ๋ชจ๋‘๋ฅผ ์†Œ์œ ํ•˜๋Š” ๋‹จ์ผ ์˜ต์…˜์„ ๊ฐ–๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๊นŒ?

/ ๊ณง ์ค‘์š”

๋ชจ๋‘๋ฅผ ์†Œ์œ ํ•˜๋Š” ๋‹จ์ผ ์˜ต์…˜์„ ๊ฐ–๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๊นŒ?

์•„๋งˆ๋„, ๋˜๋Š” ๋ชจ๋“  ์‹œ๊ฐ„ ์ œํ•œ์— ๋Œ€ํ•ด ์–ด๋–ค ์ข…๋ฅ˜์˜ "๊ฐ€์ค‘์น˜"๊ฐ€ ๊ณฑํ•ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด 20 ๊ฐ€์ง€ ๋‹ค๋ฅธ ์œ ํ˜•์˜ ์‹œ๊ฐ„ ์ œํ•œ ํ”Œ๋ž˜๊ทธ๋กœ ๊ตฌ์„ฑ ์ง€์˜ฅ์— ๋“ค์–ด๊ฐˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. :)

raspberry pi 2 ํด๋Ÿฌ์Šคํ„ฐ์—์„œ kubeadm ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ณผ๋„ํ•œ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋กœ ์ธํ•ด ์—…๊ทธ๋ ˆ์ด๋“œ๊ฐ€ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ๋งค๋‹ˆํŽ˜์ŠคํŠธ์—์„œ ํ™œ์„ฑ ์ƒํƒœ ํ”„๋กœ๋ธŒ ์„ค์ •์„ ๋ณ€๊ฒฝํ•ด๋„ ๋„์›€์ด๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์•„์ด๋””์–ด?

์ €๋Š” kubeadm ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ํ•˜์œ„ ์ˆ˜์ค€์— ์ž„์˜์˜ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ์ ์šฉํ•˜๋Š” ๋Œ€์‹  kubeadm ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ํ˜ธ์ถœ ์ปจํ…์ŠคํŠธ (๋˜๋Š”๋ณด๋‹ค ์ •๊ตํ•œ ์˜ค๋ฅ˜ ๋ณต๊ตฌ ์ „๋žต์˜ ์ผ๋ถ€)์—์„œ ์ƒ์†๋˜๋Š” ํŒจํ„ด์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ํ˜•ํƒœ๋กœ ์ด๊ฒƒ์€ kubeadm์—์„œ ๋ชจ๋“  ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์ „์ฒด "xx ๋ถ„ ๋™์•ˆ ์‹คํ–‰ ํ•œ ๋‹ค์Œ ์™„๋ฃŒ๋˜์ง€ ์•Š์œผ๋ฉด ์ค‘๋‹จ"์ „์—ญ ํƒ€์ด๋จธ๋กœ ๋Œ€์ฒดํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฑฐ์˜ ๋˜‘๊ฐ™์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค (kubeadm์€ ์˜ค๋ฅ˜๋ฅผ ๋งŽ์ด ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ โ€‹โ€‹์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค). ๋” ์˜ค๋ž˜ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ ์ด์™ธ์˜ ํšŒ๋ณต).

์›๋ž˜ ๋งค๋‹ˆํŽ˜์ŠคํŠธ livenessProbe ์‹œ๊ฐ„ ์ œํ•œ์˜ ๊ฒฝ์šฐ ๋ง ๊ทธ๋Œ€๋กœ ํ•œ ์ค„์งœ๋ฆฌ ํŒจ์น˜์ž…๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ "์ •์ƒ == ์˜ค๋ฅ˜๋กœ๋ถ€ํ„ฐ์˜ ํŽธ์ฐจ"์˜ค๋ฅ˜๊ฐ€ kubeadm ์ฝ”๋“œ๋ฒ ์ด์Šค ์ „์ฒด์— ๋” ํผ ์กŒ๊ธฐ ๋•Œ๋ฌธ์— livenessProbe ๋งŒ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ๋” ์ด์ƒ ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฌธํ™”์  ์ธ์‹์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์€ ์–ด๋ ต ๊ธฐ ๋•Œ๋ฌธ์— ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋ผ์ฆˆ๋ฒ ๋ฆฌ ํŒŒ์ด์— ์„ค์น˜ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๊ทธ ๋™์•ˆ kubeadm์˜ ํฌํฌ ๋ฒ„์ „์ด ์žˆ์Šต๋‹ˆ๋‹ค . ( make cross WHAT=cmd/kubeadm KUBE_BUILD_PLATFORMS=linux/arm ๋นŒ๋“œ)

@anguslees ํŒจ์น˜ ๋œ kubeadm์˜ ์ปดํŒŒ์ผ ๋œ 1.9.4 ๋ฒ„์ „์ด ์žˆ์Šต๋‹ˆ๊นŒ? ํŒจ์น˜ ๋œ ๋ฒ„์ „์„ ์ปดํŒŒ์ผํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

kubeadm์ด ํ”Œ๋ž˜๊ทธ ๋’ค์—์ด ๋™์ž‘์ด ์—†๋‹ค๋Š” ๊ฒƒ์— ๋†€๋ž์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ PR์ด ์ˆœ์„œ๋Œ€๋กœ์ž…๋‹ˆ๊นŒ?

/ ํ• ๋‹น @liztio

๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” 1.11์—์„œ ์ด๊ฒƒ์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜์žˆ๋Š” ๋‘ ๊ฐ€์ง€ ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

  1. ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— etcd ์ด๋ฏธ์ง€๋ฅผ ์ค€๋น„ํ•˜์‹ญ์‹œ์˜ค.
  2. ์‹œ์ž‘์‹œ ๊ฒฝ์Ÿ ์กฐ๊ฑด ํ™•์ธ์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
    ...

์ด๊ฒƒ์ด rasberry pi-gear์—์„œ๋งŒ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด ์ตœ์†Œ ๊ณตํ†ต ๋ถ„๋ชจ๋ฅผ ํ•œ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ง€์›ํ•  ๊ณ„ํš ์ธ ๊ฐ€์žฅ ๋‚ฎ์€ ๋Œ€์ƒ ํ”Œ๋žซํผ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

Raspberry Pi 2๋Š” Kubernetes๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋Š” ๊ฐ€์žฅ ๋‚ฎ์€ ํ”Œ๋žซํผ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋น„ ํ•˜๋“œ์›จ์–ด ์ง€์› QEMU๋ฅผ ์‚ฌ์šฉํ•œ ํ…Œ์ŠคํŠธ ๋Š” ๊ณ ๋ คํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ์ด๊ตญ์ ์ž…๋‹ˆ๋‹ค.

Pi๊ฐ€ ๋Š๋ฆฐ I / O๋กœ ์ธํ•ด ๋งŽ์€ ์–ด๋ ค์›€์„ ๊ฒช๊ณ  ์žˆ๋‹ค๋Š” ์ ์„ ๊ณ ๋ คํ•  ๋•Œ ๋ชจ๋“  ์ด๋ฏธ์ง€๋ฅผ ๋ฏธ๋ฆฌ ํ’€๋งํ•˜๋ฉด ์ด๋ฏธ ๋งŽ์€ ๋„์›€์ด๋˜์ง€๋งŒ ์‹ค์ œ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด ์‹ค์ œ ํ…Œ์ŠคํŠธ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

imo rasberry pi2๋Š” ์ง€์›ํ•˜๊ธฐ์— ๋„ˆ๋ฌด ์˜ค๋ž˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. http://socialcompare.com/en/comparison/raspberrypi-models-comparison ์€ 2015 ๋…„์— ๋‚˜์™”์Šต๋‹ˆ๋‹ค.

>= 3 ์ด ๋” ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

๋ฏธ๋ฆฌ ์žก์•„ ๋‹น๊ธฐ๋Š” ์ด๋ฏธ์ง€๋Š” ๋„์›€์ด๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. livenessProbe ํƒ€์ด๋จธ๋Š” ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ๊นŒ์ง€ ์‹œ์ž‘๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค ( ์œ„์—์„œ ์ง€์ 

์ˆ˜์ • ์‚ฌํ•ญ์€ initialDelaySeconds ์‹œ๊ฐ„ ์ œํ•œ์„ ์—ฐ์žฅํ•˜๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค. kubeadm์˜ ํ˜„์žฌ ์‹œ๊ฐ„ ์ดˆ๊ณผ ๊ฐ’์€ ์˜ค๋ฅ˜ ๊ฐ์ง€๊ฐ€ ์•„๋‹Œ ๋น ๋ฅธ UX ๊ฒฝํ—˜์„ "๊ฐ•์ œ"ํ•˜๊ธฐ ์œ„ํ•ด ์˜ค์šฉ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘ : ๊ทธ๋ฆฌ๊ณ  ํ™•์‹คํžˆ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. apiserver intialDelaySeconds ์‹œ๊ฐ„ ์ œํ•œ (๋ฐ kubeadm ์ž์ฒด์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋‹ค๋ฅธ ์„ค์น˜ ์ „์šฉ ์‹œ๊ฐ„ ์ œํ•œ)์„ ๋Š˜๋ฆฌ๋ฉด ์ œ์–ด ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ 3xRPi2์—์„œ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์™œ ์šฐ๋ฆฌ๊ฐ€ ์ด๊ฒƒ์— ๋Œ€ํ•ด ์—ฌ์ „ํžˆ ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค : /

1.9.3์— ARM64 ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์žˆ๊ณ  1.9.7๋กœ ์„ฑ๊ณต์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์ง€๋งŒ 1.9.7์—์„œ 1.10.2๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์‹ฌ์ง€์–ด kubeadm์„ ํŽธ์ง‘ํ•˜๊ณ  ๋‹ค์‹œ ์ปดํŒŒ์ผํ•˜์—ฌ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋กœ ํƒ€์ž„ ์•„์›ƒ (๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹ https://github.com/anguslees/kubernetes/commits/kubeadm-gusfork์™€ ๊ฐ™์ด)์„ ๋Š˜๋ ค ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

$ sudo kubeadm upgrade apply  v1.10.2 --force
[preflight] Running pre-flight checks.
[upgrade] Making sure the cluster is healthy:
[upgrade/config] Making sure the configuration is correct:
[upgrade/config] Reading configuration from the cluster...
[upgrade/config] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'
[upgrade/version] You have chosen to change the cluster version to "v1.10.2"
[upgrade/versions] Cluster version: v1.9.7
[upgrade/versions] kubeadm version: v1.10.2-dirty
[upgrade/version] Found 1 potential version compatibility errors but skipping since the --force flag is set:

   - Specified version to upgrade to "v1.10.2" is higher than the kubeadm version "v1.10.2-dirty". Upgrade kubeadm first using the tool you used to install kubeadm
[upgrade/prepull] Will prepull images for components [kube-apiserver kube-controller-manager kube-scheduler]
[upgrade/apply] Upgrading your Static Pod-hosted control plane to version "v1.10.2"...
Static pod: kube-apiserver-kubemaster1 hash: ed7578d5bf9314188dca798386bcfb0e
Static pod: kube-controller-manager-kubemaster1 hash: e0c3f578f1c547dcf9996e1d3390c10c
Static pod: kube-scheduler-kubemaster1 hash: 52e767858f52ac4aba448b1a113884ee
[upgrade/etcd] Upgrading to TLS for etcd
Static pod: etcd-kubemaster1 hash: 413224efa82e36533ce93e30bd18e3a8
[etcd] Wrote Static Pod manifest for a local etcd instance to "/etc/kubernetes/tmp/kubeadm-upgraded-manifests346927148/etcd.yaml"
[certificates] Using the existing etcd/ca certificate and key.
[certificates] Using the existing etcd/server certificate and key.
[certificates] Using the existing etcd/peer certificate and key.
[certificates] Using the existing etcd/healthcheck-client certificate and key.
[upgrade/staticpods] Moved new manifest to "/etc/kubernetes/manifests/etcd.yaml" and backed up old manifest to "/etc/kubernetes/tmp/kubeadm-backup-manifests190581659/etcd.yaml"
[upgrade/staticpods] Not waiting for pod-hash change for component "etcd"
[upgrade/etcd] Waiting for etcd to become available
[util/etcd] Waiting 30s for initial delay
[util/etcd] Attempting to get etcd status 1/10
[util/etcd] Attempt failed with error: dial tcp 127.0.0.1:2379: getsockopt: connection refused
[util/etcd] Waiting 15s until next retry
[util/etcd] Attempting to get etcd status 2/10
[util/etcd] Attempt failed with error: dial tcp 127.0.0.1:2379: getsockopt: connection refused
[util/etcd] Waiting 15s until next retry
[util/etcd] Attempting to get etcd status 3/10
[util/etcd] Attempt failed with error: dial tcp 127.0.0.1:2379: getsockopt: connection refused
[util/etcd] Waiting 15s until next retry
[util/etcd] Attempting to get etcd status 4/10
[upgrade/staticpods] Writing new Static Pod manifests to "/etc/kubernetes/tmp/kubeadm-upgraded-manifests346927148"
[controlplane] Wrote Static Pod manifest for component kube-apiserver to "/etc/kubernetes/tmp/kubeadm-upgraded-manifests346927148/kube-apiserver.yaml"
[controlplane] Wrote Static Pod manifest for component kube-controller-manager to "/etc/kubernetes/tmp/kubeadm-upgraded-manifests346927148/kube-controller-manager.yaml"
[controlplane] Wrote Static Pod manifest for component kube-scheduler to "/etc/kubernetes/tmp/kubeadm-upgraded-manifests346927148/kube-scheduler.yaml"
[upgrade/staticpods] The etcd manifest will be restored if component "kube-apiserver" fails to upgrade
[certificates] Using the existing etcd/ca certificate and key.
[certificates] Using the existing apiserver-etcd-client certificate and key.
[upgrade/staticpods] Moved new manifest to "/etc/kubernetes/manifests/kube-apiserver.yaml" and backed up old manifest to "/etc/kubernetes/tmp/kubeadm-backup-manifests190581659/kube-apiserver.yaml"
[upgrade/staticpods] Waiting for the kubelet to restart the component
[upgrade/apply] FATAL: couldn't upgrade control plane. kubeadm has tried to recover everything into the earlier state. Errors faced: [timed out waiting for the condition]

kubeadm์ด ์‚ฌ์šฉ๋˜๊ณ  apiserver๊ฐ€ ์‹œ์ž‘๋œ ๊ฒฝ์šฐ ์ฒ˜์Œ ์‹œ์ž‘ํ•  ๋•Œ ํฌ์ธํŠธ ์ธก์ •์„ ์‹œ๋„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์ฒซ ๋ฒˆ์งธ ์ดˆ๊ธฐํ™”์—์„œ ์ธก์ •์— ์ ์šฉ๋˜๋Š” ์‹œ๊ฐ„ ์ œํ•œ์— ๋Œ€ํ•ด ๋‚˜์ค‘ ๋‹จ๊ณ„์—์„œ ๊ตฌ์„ฑ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋กœ๊ทธ๋ฅผ ๋ณด๋Š” healtz ๊ฒ€์‚ฌ์— ์˜ํ•ด apiserver๊ฐ€ ์ซ“๊ฒจ ๋‚œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„ ๋‚ด๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์ ์–ด๋„ ๋ฌธ์ œ๋ฅผ ์ธ์‹ํ•˜๊ธฐ ์œ„ํ•ด ๋” ๋‚˜์€ ๋กœ๊น…์„ ํ™•๋ณด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. livenessprobe๊ฐ€ ๋ฌธ์ œ๋ผ๋Š” ๊ฒƒ์„ ์•Œ์•„๋‚ด๋Š” ๋ฐ ๊ฝค ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‚ด๊ฐ€ ์ดˆ๋ณด์ž๋ผ๋Š” ๊ฒƒ์„ ์–ธ๊ธ‰ํ•ด์•ผํ•˜๋ฉฐ, ์ ์–ด๋„ kubeadm์˜ ์‹คํŒจ ์ถœ๋ ฅ์—์„œ โ€‹โ€‹์–ธ๊ธ‰ํ•˜๋Š” ๊ฒƒ์ด ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

RaspberryPi 3๋Š” ๋ฏธ๋ฆฌ ๊ฐ€์ ธ์˜จ ์ด๋ฏธ์ง€์—์„œ๋„์ด ๋ฌธ์ œ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. API ์„œ๋ฒ„๋Š” ํŽ˜์ด์ง€๋ฅผ ์ œ๊ณต ํ•  ์ˆ˜์žˆ๋Š” ์œ„์น˜์— ๋„๋‹ฌํ•˜๋Š” ๋ฐ 2-3 ๋ถ„ ์ •๋„ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.

์ง€๊ธˆ์€ kubeadm์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ YAML ํŒŒ์ผ์„ ํŒจ์น˜ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—์ด๋ฅผ ๊ตฌ์„ฑ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@carlosedp ์—…๊ทธ๋ ˆ์ด๋“œ ์ค‘์— ๋‚ด๊ฐ€ํ•˜๋Š” ์ผ์€ apiserver๊ฐ€ ๋ถ€ํŒ…๋˜๋Š” ๋™์•ˆ kubelet์„ ๋‹ค์šด์‹œํ‚ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ผ์ข…์˜ ํ•ดํ‚ค์ด์ง€๋งŒ apiserver๊ฐ€ ๊ฐ€๋™ ๋  ๋•Œ๊นŒ์ง€ ์ƒํƒœ ๊ฒ€์‚ฌ๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š๋„๋กํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์†”์งํžˆ kubeadm upgrade ์™€ ARM์€ ๋‚ด ๊ฒฝํ—˜์ƒ ๊ทธ๋ ‡๊ฒŒ ์ž˜ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@brendandburns 1.9๊นŒ์ง€ ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”ธ๊พน์งˆ์—†์ด 1.8 ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋ฐฐํฌ ํ•œ ๋‹ค์Œ 1.9๋กœ ๋‘ ๋ฒˆ ์—…๊ทธ๋ ˆ์ด๋“œํ–ˆ์Šต๋‹ˆ๋‹ค. 1.10์—์„œ์ด ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค๋Š” ์›์ธ์ด ๋ฌด์—‡์ธ์ง€ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์‹œ๊ฐ„ ์ œํ•œ์ด 1.11์—์„œ 5 ๋ถ„์œผ๋กœ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค (https://github.com/kubernetes/kubernetes/pull/64988/files#diff-2056df5f0c3a4828b3f9a2510a7533c7L45). 1.11์„ ์‚ฌ์šฉํ•ด ๋ณด์…จ์Šต๋‹ˆ๊นŒ?

ํœด๊ฐ€๋ฅผ ๋งˆ์น˜๊ณ  ๋Œ์•„์˜จ ํ›„์ด ํ•ดํ‚น์„ ์‹œ๋„ํ•ด ๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŒ ๊ณ ๋งˆ์›Œ!

ํŠธ์œ— ๋‹ด์•„ ๊ฐ€๊ธฐ
์˜ˆ, 1.11์„ ์‹œ๋„ํ•˜์—ฌ ์‹œ๊ฐ„ ์ดˆ๊ณผ ์ฆ๊ฐ€๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

/ cc @ kubernetes / sig-cluster-lifecycle-bugs

์•ผ! ์ด ๋ฌธ์ œ๋„ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
ํฅ๋ฏธ๋กญ๊ฒŒ๋„ Raspberry 3์—์„œ ํด๋Ÿฌ์Šคํ„ฐ ๋งˆ์Šคํ„ฐ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋นŒ๋“œ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ 3+์—์„œ๋Š” ์ง€์†์ ์œผ๋กœ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.
์–ด์จŒ๋“  ํ˜„์žฌ ์‚ฌ์šฉํ•˜๊ณ ์žˆ๋Š” ๋ฒ„์ „ (https://blog.hypriot.com/post/setup-kubernetes-raspberry-pi-cluster/์˜ ๋‹จ๊ณ„๋ณ„ ๋ฌธ์„œ์— ๋”ฐ๋ผ)์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
kubeadm version: &version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.0", GitCommit:"91e7b4fd31fcd3d5f436da26c980becec37ceefe", GitTreeState:"clean", BuildDate:"2018-06-27T20:14:41Z", GoVersion:"go1.10.2", Compiler:"gc", Platform:"linux/arm"}

๋‹ค๋ฅธ ๊ฒƒ๋“ค๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ apiserver ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ฒฐ๊ตญ ์ผ์–ด๋‚˜์ง€ ๋งŒ kubeadm์ด ๊ตฌ์ œ๋˜๊ธฐ ์ „์—๋Š” ์ผ์–ด๋‚˜์ง€ ์•Š์•„์„œ ์ˆ˜๋™์œผ๋กœ ํ”ฝ์—…ํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ๊ฒฝํ—˜์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜๋ฅผ ๋ฆผ๋ณด์— ๋‚จ๊ฒจ ๋‘ก๋‹ˆ๋‹ค.

๋น ๋ฅธ ์—…๋ฐ์ดํŠธ : ์‹คํ–‰ ์ค‘
watch -n 1.0 "sed -i 's/initialDelaySeconds: [0-9]\+/initialDelaySeconds: 180/' /etc/kubernetes/manifests/kube-apiserver.yaml"
๋ณ„๋„์˜ ํ„ฐ๋ฏธ๋„์—์„œ ๋‚ด ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์ผ์–ด๋‚˜๋„๋ก ํ—ˆ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”.
1.11์„ ํ…Œ์ŠคํŠธ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๊ฒƒ๋“ค๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ apiserver ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ฒฐ๊ตญ ์ผ์–ด๋‚˜์ง€ ๋งŒ kubeadm์ด ๊ตฌ์ œ๋˜๊ธฐ ์ „์—๋Š” ์ผ์–ด๋‚˜์ง€ ์•Š์•„์„œ ์ˆ˜๋™์œผ๋กœ ํ”ฝ์—…ํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ๊ฒฝํ—˜์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜๋ฅผ ๋ฆผ๋ณด์— ๋‚จ๊ฒจ ๋‘ก๋‹ˆ๋‹ค.

๊ท€ํ•˜์˜ ๊ฒฝ์šฐ apiserver๊ฐ€ ์‹œ์ž‘๋˜๋Š” ๋ฐ ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์‹œ๊ฐ„์ด ์†Œ์š”๋ฉ๋‹ˆ๊นŒ?
์ด๊ฒƒ์„ ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋งํ•˜๊ธฐ๋Š” ์–ด๋ ต์ง€๋งŒ 1 ๋ถ„ ์ •๋„๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์ œ๋Œ€๋กœ ์ธก์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์ด์ œ ๋งˆ์Šคํ„ฐ๊ฐ€ ์ž‘๋™ ์ค‘์ด๋ฏ€๋กœ ๋‹ค๋ฅธ ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋ฌธ์ œ๋กœ ๋ณด์ด๋Š” ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.
`[ํ”„๋ฆฌ ํ”Œ๋ผ์ดํŠธ] ํ”„๋ฆฌ ํ”Œ๋ผ์ดํŠธ ๊ฒ€์‚ฌ ์‹คํ–‰
[๊ฒฝ๊ณ  RequiredIPVSKernelModulesAvailable] : ๋‹ค์Œ ํ•„์ˆ˜ ์ปค๋„ ๋ชจ๋“ˆ์ด๋กœ๋“œ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— IPVS ํ”„๋ก์‹œ๊ฐ€ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. [ip_vs_rr ip_vs_wrr ip_vs_sh ip_vs] ๋˜๋Š” ๋‚ด์žฅ ์ปค๋„ ipvs ์ง€์› ์—†์Œ : map [ip_vs_rr : {} ip_vs_rr : {} ip_vs_rr : {} ip_vs_rr : nf_conntrack_ipv4 : {} ip_vs : {}]
๋‹ค์Œ ๋ฐฉ๋ฒ•์œผ๋กœ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๋ˆ„๋ฝ ๋œ ์ปค๋„ ๋ชจ๋“ˆ์„๋กœ๋“œํ•˜๋ ค๋ฉด 'modprobe-'๋ฅผ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค.

    1. ๋ˆ„๋ฝ ๋œ ๋‚ด์žฅ ์ปค๋„ ipvs ์ง€์› ์ œ๊ณต

I0708 19 : 02 : 20.256325 8667 kernel_validator.go : 81] ์ปค๋„ ๋ฒ„์ „ ํ™•์ธ ์ค‘
I0708 19 : 02 : 20.256846 8667 kernel_validator.go : 96] ์ปค๋„ ๊ตฌ์„ฑ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ
[๊ฒฝ๊ณ  SystemVerification] : docker ๋ฒ„์ „์ด ๊ฐ€์žฅ ์ตœ๊ทผ์— ๊ฒ€์ฆ ๋œ ๋ฒ„์ „๋ณด๋‹ค ๋†’์Šต๋‹ˆ๋‹ค. Docker ๋ฒ„์ „ : 18.03.1-ce. ์ตœ๋Œ€ ๊ฒ€์ฆ ๋ฒ„์ „ : 17.03
[๋ฐœ๊ฒฌ] API ์„œ๋ฒ„ "192.168.2.2:6443"์— ์—ฐ๊ฒฐ ์‹œ๋„ ์ค‘
[๊ฒ€์ƒ‰] ํด๋Ÿฌ์Šคํ„ฐ ์ •๋ณด ๊ฒ€์ƒ‰ ํด๋ผ์ด์–ธํŠธ ์ƒ์„ฑ, " https://192.168.2.2 : 6443"์—์„œ ์ •๋ณด ์š”์ฒญ
[๋ฐœ๊ฒฌ] ๊ณ ์ • ๋œ ๊ณต๊ฐœ ํ‚ค์— ๋Œ€ํ•ด TLS์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๊ธฐ ์œ„ํ•ด " https://192.168.2.2 : 6443"์—์„œ ๋‹ค์‹œ ์ •๋ณด ์š”์ฒญ
[๋ฐœ๊ฒฌ] ํด๋Ÿฌ์Šคํ„ฐ ์ •๋ณด ์„œ๋ช… ๋ฐ ์ฝ˜ํ…์ธ ๊ฐ€ ์œ ํšจํ•˜๋ฉฐ TLS ์ธ์ฆ์„œ๊ฐ€ ๊ณ ์ • ๋œ ๋ฃจํŠธ์— ๋Œ€ํ•ด ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๋ฉฐ API ์„œ๋ฒ„ "192.168.2.2:6443"์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
[๋ฐœ๊ฒฌ] API ์„œ๋ฒ„ "192.168.2.2:6443"๊ณผ ์„ฑ๊ณต์ ์œผ๋กœ ์—ฐ๊ฒฐ
[kubelet] kube-system ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค์˜ "kubelet-config-1.11"ConfigMap์—์„œ kubelet ๊ตฌ์„ฑ ๋‹ค์šด๋กœ๋“œ
[kubelet] "/var/lib/kubelet/config.yaml"ํŒŒ์ผ์— kubelet ๊ตฌ์„ฑ ์“ฐ๊ธฐ
[kubelet] "/var/lib/kubelet/kubeadm-flags.env"ํŒŒ์ผ์— ํ”Œ๋ž˜๊ทธ๊ฐ€์žˆ๋Š” kubelet ํ™˜๊ฒฝ ํŒŒ์ผ ์ž‘์„ฑ
[ํ”„๋ฆฌ ํ”Œ๋ผ์ดํŠธ] kubelet ์„œ๋น„์Šค ํ™œ์„ฑํ™”
[tlsbootstrap] kubelet์ด TLS ๋ถ€ํŠธ ์ŠคํŠธ๋žฉ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ค‘ ...
[kubelet-check] kubelet์ด ์‹คํ–‰๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ์ •์ƒ์ด ์•„๋‹Œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
[kubelet-check] kubelet์ด ์‹คํ–‰๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ์ •์ƒ์ด ์•„๋‹Œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
[kubelet-check] kubelet์ด ์‹คํ–‰๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ์ •์ƒ์ด ์•„๋‹Œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
[kubelet-check] kubelet์ด ์‹คํ–‰๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ์ •์ƒ์ด ์•„๋‹Œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
[kubelet-check] kubelet์ด ์‹คํ–‰๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ์ •์ƒ์ด ์•„๋‹Œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์•ˆํƒ€๊น๊ฒŒ๋„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
์กฐ๊ฑด์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ์ดˆ๊ณผ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ์˜ค๋ฅ˜์˜ ์›์ธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
-kubelet์ด ์‹คํ–‰๋˜๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
-์–ด๋–ค ๋ฐฉ์‹ ์œผ๋กœ๋“  ๋…ธ๋“œ์˜ ์ž˜๋ชป๋œ ๊ตฌ์„ฑ์œผ๋กœ ์ธํ•ด kubelet์ด ๋น„์ •์ƒ ์ƒํƒœ์ž…๋‹ˆ๋‹ค (ํ•„์š”ํ•œ cgroup ๋น„ํ™œ์„ฑํ™” ๋จ).

systemd-powered ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์˜ค๋ฅ˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
- 'systemctl ์ƒํƒœ kubelet'
- 'journalctl -xeu kubelet'
์กฐ๊ฑด์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ์ดˆ๊ณผ๋˜์—ˆ์Šต๋‹ˆ๋‹ค .`

์ด ์‹œ๊ฐ„ ๋™์•ˆ ๋‹จ์ผ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋‚ด ๋…ธ๋“œ์— ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

[๊ฒฝ๊ณ  ํ•„์ˆ˜ IPVSKernelModulesAvailable] :

์ฃผ์ œ์—์„œ ๋ฒ—์–ด๋‚œ ๊ฒƒ์— ๋Œ€ํ•ด ์—ฌ๊ธฐ์„œ ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
https://github.com/kubernetes/kubeadm/issues/975

๋˜ํ•œ ์ด์ œ ๋งˆ์Šคํ„ฐ๊ฐ€ ์ž‘๋™ ์ค‘์ด๋ฏ€๋กœ ๋‹ค๋ฅธ ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋ฌธ์ œ๋กœ ๋ณด์ด๋Š” ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.
[kubelet-check] 'curl -sSL http : // localhost : 10248 / healthz'์™€ ๋™์ผํ•œ HTTP ํ˜ธ์ถœ์ด ๋‹ค์Œ ์˜ค๋ฅ˜์™€ ํ•จ๊ป˜ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. Get http : // localhost : 10248 / healthz : dial tcp [:: 1] : 10248 : connect : ์—ฐ๊ฒฐ์ด ๊ฑฐ๋ถ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

kubelet์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. kubelet ๋กœ๊ทธ๋ฅผ ๋” ์ž˜ ์‚ดํŽด๋ณด์‹ญ์‹œ์˜ค.

- 'systemctl status kubelet'
- 'journalctl -xeu kubelet'

ํ™œ์„ฑ ํ”„๋กœ๋ธŒ๋Š” ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•ด์•ผํ•˜์ง€๋งŒ kubeadm ๊ตฌ์„ฑ์—์„œ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฐ’์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฏ€๋กœ kubeadm์„ ์ง์ ‘ ๋นŒ๋“œํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ์„ ์‚ฌ์šฉํ•ด๋ณด์‹ญ์‹œ์˜ค.
https://github.com/kubernetes/kubernetes/blob/master/cmd/kubeadm/app/util/staticpod/utils.go#L95 -L96
๊ทธ๋Ÿฌ๋‚˜ ์ด๋ ‡๊ฒŒํ•˜๋ฉด ๋ชจ๋“  ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•œ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

ํŽธ์ง‘ : Github์—์„œ ์ฃผ์„ ํ˜•์‹์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ง€์ •ํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ์–ด๋ฆฌ์„์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Here are the log outputs of both systemctl status kubelet and journalctl -xeu kubelet. "No cloud provider specified is the only thing that springs to eye.

`root@djg-clusterpi3:/home/djgummikuh# systemctl status kubelet
โ— kubelet.service - kubelet: The Kubernetes Node Agent
   Loaded: loaded (/lib/systemd/system/kubelet.service; enabled; vendor preset: enabled)
  Drop-In: /etc/systemd/system/kubelet.service.d
           โ””โ”€10-kubeadm.conf
   Active: active (running) since Sun 2018-07-08 19:55:15 CEST; 2min 12s ago
     Docs: http://kubernetes.io/docs/
 Main PID: 9233 (kubelet)
   Memory: 14.4M
      CPU: 17.064s
   CGroup: /system.slice/kubelet.service
           โ””โ”€9233 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/config.yaml --cgroup-driver=cgroupfs --cni-bin-dir=/opt/cni/bin --cni-conf-dir=/etc/cni/net.d --network-pl

Jul 08 19:55:15 djg-clusterpi3 systemd[1]: Started kubelet: The Kubernetes Node Agent.
Jul 08 19:55:15 djg-clusterpi3 kubelet[9233]: Flag --cgroup-driver has been deprecated, This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more inform
Jul 08 19:55:15 djg-clusterpi3 kubelet[9233]: I0708 19:55:15.665304    9233 feature_gate.go:230] feature gates: &{map[]}
Jul 08 19:55:15 djg-clusterpi3 kubelet[9233]: Flag --cgroup-driver has been deprecated, This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more inform
Jul 08 19:55:15 djg-clusterpi3 kubelet[9233]: I0708 19:55:15.675950    9233 feature_gate.go:230] feature gates: &{map[]}
Jul 08 19:55:15 djg-clusterpi3 kubelet[9233]: I0708 19:55:15.676273    9233 feature_gate.go:230] feature gates: &{map[]}
Jul 08 19:55:31 djg-clusterpi3 kubelet[9233]: I0708 19:55:31.963686    9233 server.go:408] Version: v1.11.0
Jul 08 19:55:31 djg-clusterpi3 kubelet[9233]: I0708 19:55:31.964029    9233 feature_gate.go:230] feature gates: &{map[]}
Jul 08 19:55:31 djg-clusterpi3 kubelet[9233]: I0708 19:55:31.964378    9233 feature_gate.go:230] feature gates: &{map[]}
Jul 08 19:55:31 djg-clusterpi3 kubelet[9233]: I0708 19:55:31.965040    9233 plugins.go:97] No cloud provider specified.






Jul 08 19:55:15 djg-clusterpi3 systemd[1]: Started kubelet: The Kubernetes Node Agent.
-- Subject: Unit kubelet.service has finished start-up
-- Defined-By: systemd
-- Support: https://www.debian.org/support
-- 
-- Unit kubelet.service has finished starting up.
-- 
-- The start-up result is done.
Jul 08 19:55:15 djg-clusterpi3 kubelet[9233]: Flag --cgroup-driver has been deprecated, This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more inform
Jul 08 19:55:15 djg-clusterpi3 kubelet[9233]: I0708 19:55:15.665304    9233 feature_gate.go:230] feature gates: &{map[]}
Jul 08 19:55:15 djg-clusterpi3 kubelet[9233]: Flag --cgroup-driver has been deprecated, This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more inform
Jul 08 19:55:15 djg-clusterpi3 kubelet[9233]: I0708 19:55:15.675950    9233 feature_gate.go:230] feature gates: &{map[]}
Jul 08 19:55:15 djg-clusterpi3 kubelet[9233]: I0708 19:55:15.676273    9233 feature_gate.go:230] feature gates: &{map[]}
Jul 08 19:55:31 djg-clusterpi3 kubelet[9233]: I0708 19:55:31.963686    9233 server.go:408] Version: v1.11.0
Jul 08 19:55:31 djg-clusterpi3 kubelet[9233]: I0708 19:55:31.964029    9233 feature_gate.go:230] feature gates: &{map[]}
Jul 08 19:55:31 djg-clusterpi3 kubelet[9233]: I0708 19:55:31.964378    9233 feature_gate.go:230] feature gates: &{map[]}
Jul 08 19:55:31 djg-clusterpi3 kubelet[9233]: I0708 19:55:31.965040    9233 plugins.go:97] No cloud provider specified.`

์ด ๋กœ๊ทธ์—๋Š” ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ,ํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ์ด ์ œ๊ฐ€ ๋ฏฟ๋Š” ๋ฌธ์ œ์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค. ์ฒ˜์Œ์— [ERROR]๋ผ๋Š” ๋‹จ ํ•˜๋‚˜์˜ ๊ฒฐ๋ก ์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๋‚˜๋ฅผ ๋„ˆ๋ฌด ์‹ค๋ง์‹œํ‚ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค :-)

์–ด์จŒ๋“ , ๋‚ด ์—‰๋ง์ง„์ฐฝ์„ ํฌ๋งท ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :-D

๊ทธ๋ ‡๋‹ค๋ฉด ์ข‹์€ ๋‹ค์Œ ๋‹จ๊ณ„๋Š” ๋ฌด์—‡์ผ๊นŒ์š”?

๊ทธ๋ ‡๋‹ค๋ฉด ์ข‹์€ ๋‹ค์Œ ๋‹จ๊ณ„๋Š” ๋ฌด์—‡์ผ๊นŒ์š”?

์•ž์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด :

ํ™œ์„ฑ ํ”„๋กœ๋ธŒ๋Š” ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•ด์•ผํ•˜์ง€๋งŒ kubeadm ๊ตฌ์„ฑ์—์„œ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฐ’์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฏ€๋กœ kubeadm์„ ์ง์ ‘ ๋นŒ๋“œํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ์„ ์‚ฌ์šฉํ•ด๋ณด์‹ญ์‹œ์˜ค.
https://github.com/kubernetes/kubernetes/blob/master/cmd/kubeadm/app/util/staticpod/utils.go#L95 -L96
๊ทธ๋Ÿฌ๋‚˜ ์ด๋ ‡๊ฒŒํ•˜๋ฉด ๋ชจ๋“  ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•œ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

oof ๋‚˜๋Š” kubeadm์„ ์ง์ ‘ ๋นŒ๋“œํ•˜์ง€ ์•Š๊ณ  apt.kubernetes.io์—์„œ apt๋ฅผ ํ†ตํ•ด ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ๋‚ด ์ปดํ“จํ„ฐ์—์„œ ์ด๋™ํ•˜๊ธฐ์œ„ํ•œ ๋นŒ๋“œ ํŒŒ์ดํ”„ ๋ผ์ธ๊ณผ ์›๊ฒฉ์œผ๋กœ ์œ ์‚ฌํ•œ ๊ฒƒ์€ ์—†์Šต๋‹ˆ๋‹ค (์•„์ง ๋‹ค๋ฃจ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค). ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“ค ๋•Œ์™€ ๊ฐ™์ด ํด๋Ÿฌ์Šคํ„ฐ์— ๊ฐ€์ž… ํ•  ๋•Œ ์ˆ˜์ •ํ•ด์•ผ ํ•  ์œ ์‚ฌํ•œ ํŒŒ์ผ์ด ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž์ง€๋งŒ ์ด๋Ÿฌํ•œ ๊ฐ’์ด utils.go์— ํ•˜๋“œ ์ฝ”๋”ฉ๋˜์–ด์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

์ด ์†”๋ฃจ์…˜์„ ์‹œ๋„ํ•ด ๋ณผ ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ๊นŒ๋‹ค ๋กญ์Šต๋‹ˆ๋‹ค.
https://github.com/kubernetes/kubeadm/issues/413#issuecomment -402916173

๋ฌธ์ œ๋Š” ์ด๊ฒƒ์ด ๊ตฌ์„ฑ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•˜๊ณ  1.11.X ๋ฆด๋ฆฌ์Šค์— ํฌํ•จ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค (ํ•˜์ง€๋งŒ ์‹œ๋„ํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค). ๋˜ํ•œ ๋จผ์ € ๋…ผ์˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์Šคํ„ฐ๊ฐ€ ์ž‘๋™ ์ค‘์ด๋ผ๊ณ  ๋งํ•œ ์ฃผ์„์—์„œ ์ด๋ฏธ ์ˆ˜ํ–‰ ํ•œ ์ž‘์—…์ž…๋‹ˆ๋‹ค (๋‚ด watch -n 1.0 ๋ช…๋ น์ด ์ˆ˜ํ–‰ ํ•œ ์ž‘์—…์ž…๋‹ˆ๋‹ค). ์ง€๊ธˆ ์ผ์–ด๋‚˜๊ณ ์žˆ๋Š” ๊ฒƒ์€ kubeadm join์ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ œ๊ฐ€ ๋ณผ ์ˆ˜์žˆ๋Š” ํ•œ kubeadm join์€ ์–ด๋””์—๋‚˜ ํŒจ์น˜ ํ•  yaml ํŒŒ์ผ์„ ๋ฐฐ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

์‚ฌ์šฉ ๋œ ๊ฐ’์ด๋ฏ€๋กœ kubeadm์„ ์ง์ ‘ ๋นŒ๋“œํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ์„ ์‚ฌ์šฉํ•ด๋ณด์‹ญ์‹œ์˜ค.
https://github.com/kubernetes/kubernetes/blob/master/cmd/kubeadm/app/util/staticpod/utils.go#L95 -L96

๊ทธ๋ž˜์„œ ์ €๋Š” ์—ฌ๊ธฐ์„œ InitialDelaySeconds ํƒ€์ž„ ์•„์›ƒ์ด 1 ๋…„ ํ›„ _still_ 15 ์ดˆ๋ผ๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์ด ์‹ค์ œ๋กœ ํ˜„์‹ค์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์œผ๋กœ ์ฆ๊ฐ€๋˜์ง€ ์•Š์€ ์ด์œ ๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ๊ฐ€ ์–ด๋–ค ์šฉ๋„๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๊นŒ? ๋‚˜๋Š” ์ด๋ฏธ kubeadm ๋‚ด๋ถ€ ์„œํด์—์žˆ๋Š” ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ทธ๊ฒƒ์„ ์™„๋ฃŒํ•˜๊ณ  ๋ช‡ ๋ถ„ ์•ˆ์— ํ•ฉ์น  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋Š๊ผˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜์Œ์—์ด ๋ฒˆํ˜ธ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ์œ„ํ•œ PR์„ ์ œ์•ˆํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ "PR ๋ถ€์กฑ"์ด ์žˆ๋‹ค๋ฉด ๊ทธ๋ ‡๊ฒŒํ•˜๊ฒŒ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์•ž์œผ๋กœ ๋‚˜์•„ ๊ฐ€์ง€ ์•Š์€ ์œ ์ผํ•œ ์ด์œ ์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์ด ์›๋ž˜ ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ๊ฐ€ ์œ ํšจํ•˜์ง€ ์•Š๋‹ค๊ณ  ์„ ์–ธํ•˜๋Š” ์ด์œ ๋ฅผ ์ฐพ์œผ๋ ค๊ณ ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋น ๋ฅธ ๋ถˆํˆฌ๋ช… ์‹œ๊ฐ„ ์ดˆ๊ณผ ์‹คํŒจ๋Š” ๋Š๋ฆฐ ์„ฑ๊ณต๋ณด๋‹ค ๋” ๋‚˜์€ UX์ž…๋‹ˆ๋‹ค), ๋‹จ์ง€ initialDelay ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ๋Š˜๋ ค ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ณด์—ฌ์ฃผ๋Š” ์‹ค์ œ initialDelay๋ฅผ ๋ฐ˜์˜ํ•œ โ€‹โ€‹๋‹ค์Œ ์‹ค์ œ๋กœ ๋…ผ์˜ํ• ๋งŒํ•œ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ์ด๋™ํ•˜๋Š” ๋Œ€์‹ .

๊ทธ๋ž˜์„œ ์ €๋Š” ์—ฌ๊ธฐ์„œ InitialDelaySeconds ํƒ€์ž„ ์•„์›ƒ์ด ์—ฌ์ „ํžˆ 1 ๋…„ ํ›„ 15 ์ดˆ๋ผ๋Š” ๊ฒƒ์— ์ฃผ๋ชฉํ•˜๊ณ , ์™œ ๊ทธ๊ฒƒ์ด ์‹ค์ œ๋กœ ํ˜„์‹ค์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์œผ๋กœ ์ฆ๊ฐ€๋˜์ง€ ์•Š์•˜๋Š”์ง€ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ๊ฐ€ ์–ด๋–ค ์šฉ๋„๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๊นŒ? ๋‚˜๋Š” ์ด๋ฏธ kubeadm ๋‚ด๋ถ€ ์„œํด์—์žˆ๋Š” ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ทธ๊ฒƒ์„ ์™„๋ฃŒํ•˜๊ณ  ๋ช‡ ๋ถ„ ์•ˆ์— ํ•ฉ์น  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋Š๊ผˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜์Œ์—์ด ๋ฒˆํ˜ธ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ์œ„ํ•œ PR์„ ์ œ์•ˆํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ "PR ๋ถ€์กฑ"์ด ์žˆ๋‹ค๋ฉด ๊ทธ๋ ‡๊ฒŒํ•˜๊ฒŒ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์•ž์œผ๋กœ ๋‚˜์•„ ๊ฐ€์ง€ ์•Š์€ ์œ ์ผํ•œ ์ด์œ ์ž…๋‹ˆ๋‹ค.

์ „์ฒด ๋ฌธ์ œ๊ฐ€ ์ƒˆ๋กญ๊ธฐ ๋•Œ๋ฌธ์— ๊ท€ํ•˜์˜ ์งˆ๋ฌธ์— ๋‹ตํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ ์ด๋ฒˆ ์ฃผ์— ์ด์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. kubeadm ๋’ค์—์žˆ๋Š” ํŒ€์€ ํฐ ๋ชฉํ‘œ๋ฅผ ๊ฐ€์ง„ ์†Œ๊ทœ๋ชจ ํŒ€์ด๋ฉฐ ์ข…์ข… ์ด์™€ ๊ฐ™์€ ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ•  ์‚ฌ๋žŒ์ด ์—†์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์ด ์›๋ž˜ ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ๊ฐ€ ์œ ํšจํ•˜์ง€ ์•Š๋‹ค๊ณ  ์„ ์–ธํ•˜๋Š” ์ด์œ ๋ฅผ ์ฐพ์œผ๋ ค๊ณ ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋น ๋ฅธ ๋ถˆํˆฌ๋ช… ์‹œ๊ฐ„ ์ดˆ๊ณผ ์‹คํŒจ๋Š” ๋Š๋ฆฐ ์„ฑ๊ณต๋ณด๋‹ค ๋” ๋‚˜์€ UX์ž…๋‹ˆ๋‹ค), ๋‹จ์ง€ initialDelay ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ๋Š˜๋ ค ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ณด์—ฌ์ฃผ๋Š” ์‹ค์ œ initialDelay๋ฅผ ๋ฐ˜์˜ํ•œ โ€‹โ€‹๋‹ค์Œ ์‹ค์ œ๋กœ ๋…ผ์˜ํ• ๋งŒํ•œ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ์ด๋™ํ•˜๋Š” ๋Œ€์‹ .

์˜ˆ, ์˜ต์…˜์€ ์ด๋ฏธ์ด ์Šค๋ ˆ๋“œ์—์„œ ๋…ผ์˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ์˜ต์…˜์„ ์„ ํƒํ•˜๊ณ  ๊ตฌํ˜„ํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ์ „์ฒด ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ์‹œ๊ฐ„ ์ œํ•œ์„ ์„ค์ •ํ•˜๋Š” ์˜ต์…˜๊ณผ ํ•จ๊ป˜ "์‹œ๊ฐ„ ์ œํ•œ ์—†์Œ"์œผ๋กœ ๊ธฐ๋ณธ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค (์ด ๋ฌธ์ œ์˜ ์•ž๋ถ€๋ถ„์—์„œ ์ œ์•ˆํ•œ๋Œ€๋กœ).

์ด์œ ๋Š” ๋‚ด๊ฐ€ ์ƒ๊ฐํ•  ์ˆ˜์žˆ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ํŠน์ • ๋‹จ๊ณ„๊ฐ€ X ์ดˆ ๋‚ด์— ์‹คํ–‰๋˜๋Š”์ง€ ์—ฌ๋ถ€์— ์ƒ๊ด€ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ ์ฒ˜๋ฆฌ๋˜๋Š” ๋ชจ๋“  ๊ฒƒ์ด ์ตœ์ข… ์ผ๊ด€์„ฑ (๊ฒฝ์šฐ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๋…ธ๋“œ๋ฅผ ์Šคํ’€๋งํ•˜๋Š” ๊ฒƒ์ด ๋” ์ €๋ ดํ•˜๊ธฐ ๋•Œ๋ฌธ)์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์„ค์ •์„ ์กฐ์ž‘ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค).

๊ทธ๋Ÿฌ๋‚˜ ์ž„์‹œ ์†”๋ฃจ์…˜์œผ๋กœ์„œ kubeadm init ํ•ญ๋ชฉ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ตฌ์„ฑ ํŒŒ์ผ์—์„œ kubeadm join์— ๋Œ€ํ•œ ์ œํ•œ ์‹œ๊ฐ„ ์„ค์ •์„ ์‹ค์ œ๋กœ ์ฝ๋Š” ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•˜๋ฏ€๋กœ ๊ธฐ๋‚ด ์ œํ•œ ์‹œ๊ฐ„ ๋Œ€์ฒด๋ฅผ ์‚ฌ์šฉํ•œ ํ•ดํ‚น์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ํ•ดํ‚น์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅด๊ฒŒ ์ƒ๊ฐํ•˜์ง€ ๋งˆ์„ธ์š”.ํ•˜์ง€๋งŒ ๋”์ฐํ•œ ํ•ดํ‚น์ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด์—†๋Š” ๊ฒƒ๋ณด๋‹ค ๋‚ซ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ถ”์ธก์ด ํ•ญ์ƒ ์ž˜๋ชป ๋  ์ˆ˜ ์žˆ๊ณ ,์ด ๊ฒฝ์šฐ์—๋Š” ์‹ค์ œ๋กœ ๋ชฉ์ ์— ๋ถ€ํ•ฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ (์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ์œ„ํ•œ ๋Œ€์ฒ˜ ์ „๋žต์ด ๋‹จ์ˆœํžˆ ๊ตฌ์ œ๋˜๊ธฐ ๋•Œ๋ฌธ์—) ํ•ฉ๋ฆฌ์ ์ธ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ "์ถ”์ธก"ํ•˜๋ ค๋Š” ์‹œ๋„์— ๋ฐ˜๋Œ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฐœ์˜ ๋™์ผํ•œ ์‹œ์Šคํ…œ์ด ๋ฌด์ˆ˜ํžˆ ๋งŽ์€ ์ด์œ ๋กœ ์„œ๋กœ ๋‹ค๋ฅด๊ฒŒ ์ž‘๋™ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

@anguslees @DJGummikuh ์šฐ๋ฆฌ๋Š” ์ตœ๊ทผ SIG ํšŒ์˜์—์„œ ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๊นŒ๋‹ค๋กœ์šด ๋ฌธ์ œ์ด์ง€๋งŒ ๋‹ค์Œ์€ ๋ฌด์ž‘์œ„ ๋ฉ”๋ชจ์ž…๋‹ˆ๋‹ค.

๋ฉ”๋ชจ:

  • ์šฐ๋ฆฌ ์‚ฌ๋žŒ๋“ค ์ค‘ ์ผ๋ถ€๋Š” ๋งŽ์€ ๊ฒฝํ—˜์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ์ด๊ฒƒ์ด apiserver ์‹œ์ž‘์„ ์ง€์—ฐ์‹œํ‚ค๋Š” ๊ฒฝ์Ÿ ์กฐ๊ฑด์ฒ˜๋Ÿผ ๋ƒ„์ƒˆ๊ฐ€ ๋‚œ๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ARM ๋Œ€ GOLANG ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • SIG API ๊ธฐ๊ณ„์— ์š”์ฒญํ–ˆ์ง€๋งŒ ์ œ์•ˆ ๋œ ํ™œ์„ฑ ํ”„๋กœ๋ธŒ ๊ฐ’ ๋ฐ ์—ฌ๊ธฐ์—์„œ ๋‹ค๋ฅธ ์œ ํ˜•์˜ ๋ฌธ์ œ๊ฐ€ ์˜์‹ฌ๋˜๋Š” ๊ฒฝ์šฐ ์‘๋‹ต์ด ์—†์Šต๋‹ˆ๋‹ค.
  • ์šฐ๋ฆฌ๋Š” ๊ตฌ์„ฑ ์˜ต์…˜, ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋˜๋Š” ๋ช…๋ น ์ค„ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ๋…ธ์ถœํ•˜๋Š” ๊ฒƒ์ด kubeadm์— ๋Œ€ํ•ด ๋‚˜์œ ์ƒ๊ฐ์ด๋ผ๋Š” ๋ฐ ๋™์˜ํ–ˆ์Šต๋‹ˆ๋‹ค . ๊ทธ ์ด์œ ๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ์™„์ „ํžˆ ์ž„์˜์˜ ์˜๋ฏธ๋ฅผ ๊ฐ€์งˆ ์ˆ˜์žˆ๋Š” ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ๋…ธ์ถœํ•˜๊ณ  ์‹ถ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
  • ํŒ€์› ์ค‘ ๋ˆ„๊ตฌ๋„ ๋Š๋ฆฐ ๋จธ์‹  (์˜ˆ : ๋Š๋ฆฐ VM)์—์„œ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ๋ณธ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Š” RPi์™€ ๊ด€๋ จ์ด์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๊ฒƒ์ด "๋Š๋ฆฐ"ํ•˜๋“œ์›จ์–ด ๋•Œ๋ฌธ์ด๋ผ๋Š” ์ „์ฒด ์ฃผ์žฅ์ด ์œ ํšจํ•˜์ง€ ์•Š์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๊ฒƒ์„๋ณด์„ธ์š” : https://github.com/kubernetes/kubernetes/issues/64357 ์‚ฌ์šฉ์ž๊ฐ€ ํ™œ์„ฑ ํ”„๋กœ๋ธŒ ๋ฌธ์ œ๋ฅผ ์ „ํ˜€๋ณด๊ณ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์™œ ๊ทธ๋Ÿฐ์ง€ ์•„์„ธ์š”?
  • ์ด ์Šค๋ ˆ๋“œ์˜ ์ด๋ก ์— ๋”ฐ๋ฅด๋ฉด https://www.scaleway.com/ ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๋ณธ ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?
  • ๊ฒฐ๋ก ์ ์œผ๋กœ , ์šฐ๋ฆฌ๋Š” ๋” ํฐ ์‹œ๊ฐ„ ์ดˆ๊ณผ / ์ง€์—ฐ ๊ฐ’์„ ํ•˜๋“œ ์ฝ”๋”ฉํ•˜๋Š” ๊ฒƒ์ด kubeadm์— ๋Œ€ํ•ด ๊ทธ๋‹ค์ง€ ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค๊ณ  ๋…ผ์˜ ํ–ˆ์œผ๋ฏ€๋กœ ๋ˆ„๊ตฐ๊ฐ€ PR์„ ์ œ์ถœํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๊ณ„์† ์ง„ํ–‰ํ•˜์‹ญ์‹œ์˜ค. ( @anguslees )

์ด๊ฒƒ์„๋ณด์„ธ์š” : kubernetes / kubernetes # 64357 ์‚ฌ์šฉ์ž๊ฐ€ ํ™œ์„ฑ ํ”„๋กœ๋ธŒ ๋ฌธ์ œ๋ฅผ ์ „ํ˜€๋ณด๊ณ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์™œ ๊ทธ๋Ÿฐ์ง€ ์•„์„ธ์š”?

์•„๋‹ˆ์š”, ์ง€๊ธˆ์€ ์ œ ํ•˜๋“œ์›จ์–ด์—์„œ ์‹ค์ œ๋กœ ์žฌํ˜„ ํ•  ์ˆ˜์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋…ธ๋“œ ๊ฒฐํ•ฉ์„์œ„ํ•œ ํ† ํฐ์ด ๊ฒฝ๊ณผํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— "๋„๋Œ€์ฒด"๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ  kubeadm์ด ํด๋Ÿฌ์Šคํ„ฐ ๋งˆ์Šคํ„ฐ๋ฅผ ์žฌ์„ค์ •ํ•˜๊ณ  ๋‹ค์‹œ ์ดˆ๊ธฐํ™”ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด Raspberry Pi 3+์˜ ๋งˆ์Šคํ„ฐ. ๊ตฌ์„ฑ ์‹œ๊ฐ„ ์ œํ•œ์„ 180 ์ดˆ์—์„œ 300 ์ดˆ๋กœ ์ฐจ์ด์—†์ด ๋Š˜ ๋ ธ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ €๋Š” ์ด๊ฒƒ์ด ๊ฒฝ์Ÿ ์กฐ๊ฑด์ด๋ผ๋Š” ์ƒ๊ฐ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.
์—ฌ์ „ํžˆ ๋” ๋†’์€ ์‹œ๊ฐ„ ์ œํ•œ์„ ์š”์ฒญํ•˜๋ผ๋Š” ๊ท€ํ•˜์˜ ์ œ์•ˆ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๋งŽ์ด ์•„ํ”„์ง€ ์•Š๊ณ  ํŒŒ์ด (๋Š๋ฆฐ ํ•˜๋“œ์›จ์–ด, ์šฐ๋ฆฌ ๋ชจ๋‘ ๋™์˜ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค :-)) ์กฐ๊ธˆ ๋” ๋งŽ์€ ํ˜ธํก ๊ณต๊ฐ„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

apiserver์˜ ARM64 ๊ด€๋ จ ๋ฌธ์ œ :
https://github.com/kubernetes/kubernetes/issues/64649

์ฃผ๋ง ๋™์•ˆ ๋‚ด (์—ฌ์ „ํžˆ ์‹คํŒจ :-() Pi Cluster๋กœ ๋” ๋งŽ์€ ์—ฐ๊ตฌ๋ฅผ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

OS๋ฅผ ๋‹ค์‹œ ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ  Pi 2์—์„œ Pi 3+๋กœ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋…ธ๋“œ ์ค‘ ํ•˜๋‚˜๋ฅผ ๋‹ค์‹œ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์‚ฌ์‹ค์ด ์•„๋‹ˆ๋ฉฐ ๋ฌธ์ œ๋Š” ์ƒˆ๋กœ์šด OS์—์„œ๋„ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.
๋˜ํ•œ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋Š˜์–ด๋‚œ kubernetes๋ฅผ ์ปดํŒŒ์ผํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด๊ฒƒ์€ ์‹ค์ œ๋กœ ์–ด๋–ค ๊ฒฐ๊ณผ๋„ ์‚ฐ์ถœํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.
๋งˆ์Šคํ„ฐ๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ (๊ตฌ์„ฑ ํŒŒ์ผ์„ ํŒจ์น˜ํ•˜๊ธฐ์œ„ํ•œ ์‹œ๊ณ„ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ) ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋‘ ๋ฒˆ์งธ ๋…ธ๋“œ์™€ ๊ฒฐํ•ฉํ•˜๋Š” ๊ฒƒ์€ ์„ฑ๊ณตํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€ ์œ ์šฉํ•œ ๋กœ๊ทธ ์ถœ๋ ฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ •๋ง ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ kubernetes ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์ƒํ˜ธ ์ž‘์šฉํ•˜์—ฌ ์ค„์„ ์ถ”๊ฐ€ ํ•  ์œ„์น˜๋ฅผ ์•Œ๊ธฐ์— ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋„์ „ ํ•  ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ^^

์ด๊ฒƒ์€ kubeadm ์™ธ๋ถ€์˜ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค ...

API ๊ธฐ๊ณ„ ์‚ฌ๋žŒ๋“ค์€ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์˜๊ฒฌ์— ๋Œ€ํ•œ ๋‚ด ์š”์ฒญ์„ ๋ณด์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ํ‹ฐ์ผ“์ด ์ด๋ฏธ ๊ธฐ๋ก๋˜์ง€ ์•Š์€ ํ•œ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ kubernetes/kubernetes ์ €์žฅ์†Œ์— ๋กœ๊ทธ์ธํ•˜๊ณ  /sig api-machinery ํƒœ๊ทธ๋ฅผ ์ง€์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€ ์œ ์šฉํ•œ ๋กœ๊ทธ ์ถœ๋ ฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ •๋ง ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ kubernetes ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์ƒํ˜ธ ์ž‘์šฉํ•˜์—ฌ ์ค„์„ ์ถ”๊ฐ€ ํ•  ์œ„์น˜๋ฅผ ์•Œ๊ธฐ์— ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์‹œ์ž‘์œผ๋กœ systemd drop-in ํŒŒ์ผ์—์„œ kubelet์— ๋Œ€ํ•ด --v 4 ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ฉด GLOG ๋กœ๊ฑฐ์— ๋†’์€ ์ƒ์„ธ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‹ค์Œ๊ณผ ๊ฐ™์ด kubeadm ๊ตฌ์„ฑ์˜ ์ œ์–ด ํ”Œ๋ ˆ์ธ ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•ด ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
https://kubernetes.io/docs/setup/independent/control-plane-flags/

์ด๊ฒƒ์€ ๋‚ด Raspberry Pi 3 ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค : https://github.com/kubernetes/kubernetes/pull/66264

@joejulian ์ข‹์€ ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ํŒจ์น˜ ํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ  ์ด์ œ ๋‚ด ํด๋Ÿฌ์Šคํ„ฐ๋„ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. ๋งˆ์นจ๋‚ด ๋ช‡ ์ฃผ ๋™์•ˆ์˜ ๊ณ ๋‡Œ ๋์—! ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :-)

@joejulian ์กฐ์‚ฌํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!
์ž ์žฌ์  ์ธ ์ˆ˜์ • ์‚ฌํ•ญ์€ https://github.com/kubernetes/kubernetes/pull/66264 ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถ”ํ›„ ๊ณต์ง€๊ฐ€์žˆ์„ ๋•Œ๊นŒ์ง€ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

/๋‹ซ๊ธฐ

kubeadm init ํŒŒ์ผ์— ์ด๋Ÿฌํ•œ ์„ค์ •์„ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ? apiServerExtraArgs ์ผ๊นŒ์š”? ํŒŒ์ผ์„ ํŒจ์น˜ํ•˜๊ธฐ ์œ„ํ•ด ํŒŒ์ผ์„ ๊ฐ์‹œํ•˜๋Š” ๊ฒƒ์€ ๊ณ ํ†ต์Šค๋Ÿฝ๊ณ  ์ž๋™ํ™”ํ•˜๊ธฐ๊ฐ€ ๋‹ค์†Œ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

์—†๊ธฐ. ์•„๋งˆ๋„ ๊ทธ๊ฒƒ์€ ์ถ”๊ฐ€ํ•˜๊ธฐ ์ข‹์€ ๊ธฐ๋Šฅ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜์ค‘์— ์—…๋ฐ์ดํŠธ๋ฅผ ํ†ตํ•ด ํ™•์ธํ•ด์•ผ ํ•  ์‚ฌํ•ญ์ด ๋” ๋งŽ์ด ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉฐ PR์ด ์ œ๊ณต ํ•œ ์—ฐ์žฅ ๋œ ํƒ€์ž„ ์•„์›ƒ์ด ๋” ์ด์ƒ ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ํƒ€์ž„ ์•„์›ƒ ๊ด€๋ฆฌ๋ฅผ ํฌ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋ฅผ์œ„ํ•œ ํ•ด๊ฒฐ์ฑ…์€ ecdsa ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์—ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ etcd๋ฅผ ํฌํ•จํ•œ ์ปจํŠธ๋กค๋Ÿฌ ์„œ๋น„์Šค๋Š” ์ด์ œ Raspberry Pi๊ฐ€ ์ œ์–ด ํ”Œ๋ ˆ์ธ์„ ํ˜ธ์ŠคํŒ…ํ•˜๋Š” ๋…ธ๋“œ ์ˆ˜๋ฅผ ๋‘ ๋ฐฐ๋กœํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ ๋žจ์„ ์ฐจ์ง€ํ•˜๋ฏ€๋กœ Rock64s๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ง์žฅ๋‚œ์€ ์‹ค๋ก€ํ•˜์ง€๋งŒ ๋‚ด ์กฐ์ข…๊ธฐ๋Š” ๊ทธ ์ดํ›„๋กœ ๊ฒฌ๊ณ  ํ•ด์กŒ์Šต๋‹ˆ๋‹ค.

๋ฐฉ๊ธˆ Raspberry Pi 3+์— ์„ค์น˜ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์œผ๋ฉฐ ์„ค์น˜๊ฐ€ ์‹ค์ œ๋กœ ์‹คํŒจํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์— ๋‚˜์—ด๋œ kube-apiserver.yaml์—์„œ 'watch'ํŠธ๋ฆญ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ผ๊ด€๋˜๊ฒŒ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋„ˆ๋ฌด ์‰ฌ์›Œ์ง€๋Š” ์ˆœ๊ฐ„, kubeadm์€ ์ด์ œ Docker (18.09) ๋ฒ„์ „์ด ์ง€์›๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๋ถˆํ‰ํ•ฉ๋‹ˆ๋‹ค. 18.06์œผ๋กœ ๋น ๋ฅด๊ฒŒ ๋˜ ๋Œ๋ฆฌ๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

kubeadm 1.13์—์„œ๋Š” api ์„œ๋ฒ„ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ์ œ์–ด ํ•  ์ˆ˜์žˆ๋Š” ClusterConfig-> ApiServer ์•„๋ž˜์— ๊ตฌ์„ฑ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta1
timeoutForControlPlane

API ์„œ๋ฒ„ ์‹œ๊ฐ„ ์ œํ•œ์„ ์ œ์–ด ํ•  ์ˆ˜์žˆ๋Š” ClusterConfig-> ApiServer ์•„๋ž˜์˜ ๊ตฌ์„ฑ ํ”Œ๋ž˜๊ทธ์ž…๋‹ˆ๋‹ค.

์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ TimeoutForControlPlane ํ•˜๋ฉด ๊ธฐ๋ณธ๊ฐ’์ด 4 ๋ถ„์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉฐ kubeadm ์ž์ฒด๊ฐ€ apiserver๊ฐ€ ์ •์ƒ์ด ๋  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ง€์—ฐ์—๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ํŠนํžˆ kubelet ์ž์ฒด์—์„œ ์‚ฌ์šฉํ•˜๋Š” apiserver livenessprobe๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ _ ์•Š์Šต๋‹ˆ๋‹ค _. ๊ทธ ๋งž์Šต๋‹ˆ๊นŒ?

์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋…ผ์˜์—์„œ ๋ฐ˜๋ก ์ด ์ œ๊ธฐ ๋œ ๊ฒƒ์„ ๋ณธ ์ ์ด ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. livenessProbe initialDelaySeconds๋ฅผ ๋Š˜๋ฆฌ๊ณ  ๋‹ค๋ฅธ ๋ฌธ์ œ๋กœ ์ด๋™ํ•˜์ง€ _ ์•Š๋Š” _ ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์ฐธ๊ณ  : ๋น ๋ฅธ ์ฝ๊ธฐ์—์„œ ๋ณผ ์ˆ˜์žˆ๋Š” ํ•œ TimeoutForControlPlane ์€ (๋Š”) ์—ฌ๋Ÿฌ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ ์˜ค๋Š” ๋™์•ˆ ์ •์ฒด ๋˜๋Š” ์ถ”๊ฐ€ ์‹œ๊ฐ„ ์ดˆ๊ณผ + ์žฌ์‹œ๋„ ๋ฃจํ”„์™€ ๊ฐ™์€ ์ฆ๊ฐ€ ๋œ apiserver ์‹œ์ž‘ ์ง€์—ฐ์— ๋Œ€ํ•œ ๋‹ค๋ฅธ ๋น„ ์‹คํŒจ ์›์ธ๋„ ๊ณ ๋ คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ์ดˆ๊ธฐ ์„ค์น˜ ์‹œ๊ฐ„์— ์ˆ˜๋ ด๋˜๋Š” ๋™์•ˆ ๋ฐ˜๋ณต๋ฉ๋‹ˆ๋‹ค (์‹œ๊ฐ„ ์ดˆ๊ณผ + ์žฌ ์‹œ๋„๋Š” ๋ฐ˜๋ณต์ ์œผ๋กœ k8s ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค ... ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์€๋กœ๋“œ ๋œ ์‹œ์Šคํ…œ์—์„œ ๊ฐ€๋” ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์ƒํ•˜๊ณ  ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค). ๊ฐœ์ธ์ ์œผ๋กœ 4 ๋ถ„์€ ๋น ๋ฅธ ์‹คํŒจ๋ฅผ ๊ธฐ๋Œ€ํ•˜๋Š” ์„ฑ๊ธ‰ํ•œ ๋Œ€ํ™” ํ˜• ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ๋„ˆ๋ฌด ๊ธธ๊ณ  ์˜ˆ์ƒ๋˜๋Š” ์„ฑ๊ณต์„ ๋” ์˜ค๋ž˜ ๊ธฐ๋‹ค๋ฆด ์ค€๋น„๊ฐ€ ๋œ๋กœ๋“œ / ๋Š๋ฆฐ / ์ž๋™ ์‹œ์Šคํ…œ์˜ ์„ค์น˜ ํ”„๋กœ์„ธ์Šค์—๋Š” ๋„ˆ๋ฌด ์งง๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ๋„์ฐฉํ–ˆ๋Š”์ง€, ๊ธฐ๋ณธ์ ์œผ๋กœ 5 ๋ถ„์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? SIGINT๊นŒ์ง€ ๊ณ„์† ์žฌ ์‹œ๋„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ํ˜ธ์ถœ ํ™˜๊ฒฝ์—์„œ ์ƒ์†ํ•˜์ง€ ์•Š๊ณ  ๋‚ด๋ถ€์ ์œผ๋กœ ์ธ์œ„์ ์ธ ๋ฒฝ์‹œ๊ณ„ ๋งˆ๊ฐ์ผ์„ ๋ถ€๊ณผํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

Afaics TimeoutForControlPlane ๋Š” ๋‹จ์ง€ ์˜๋„ ๋œ ์œ ์ผํ•œ UX๊ฐ€ ๋งˆ๊ฐ์ผ์— ๋„๋‹ฌํ•˜์ง€ ์•Š์„ ๋•Œ๊นŒ์ง€ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ๊ฒƒ ๋ฟ์ธ ์ž„์˜์˜ ์น˜๋ช…์ ์ธ ๋‚ด๋ถ€ ๋งˆ๊ฐ์ผ์„ ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ๋…ธ์ถœํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜๋Š”, ์šฐ๋ฆฌ๋Š” ์• ์ดˆ์— ์ž„์˜์˜ ์น˜๋ช…์ ์ธ ๋‚ด๋ถ€ ๊ธฐํ•œ์„ ๋ถ€๊ณผํ•˜์ง€ _ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค _...

๊ทธ๊ฒƒ์€ ํ›Œ๋ฅญํ•œ ์ ์ด๋ฉฐ ์ „์ ์œผ๋กœ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

ํŠนํžˆ kubelet ์ž์ฒด์—์„œ ์‚ฌ์šฉํ•˜๋Š” apiserver livenessprobe๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ ๋งž์Šต๋‹ˆ๊นŒ?

์˜ˆ, ์•„์ง kubeadm์—์„œ ํ™œ์„ฑ ์ƒํƒœ ํ”„๋กœ๋ธŒ๋ฅผ ์ˆ˜์ •ํ•  ๊ณ„ํš์ด ์—†์Šต๋‹ˆ๋‹ค.

์ด rpi ๋ฌธ์ œ๋Š” sig-cluster-lifecyle ํšŒ์˜์—์„œ "๋ฐœ์ƒํ•ด์„œ๋Š” ์•ˆ๋˜๋Š” ์ผ", "๊ฑฐ์˜ kubelet์˜ ๊ฒฝ์Ÿ ์กฐ๊ฑด๊ณผ ๋น„์Šทํ•ด ๋ณด์ž„", "์™œ rpi์—์„œ๋งŒ ๋ฐœ์ƒํ•˜๊ณ  ๋‹ค๋ฅธ ๋Š๋ฆฐ ์žฅ์น˜์—์„œ๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”์ง€"๋กœ ๊ฒ€์ฆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋Š๋ฆฐ ์žฅ์น˜๋ฅผ ์ง์ ‘ ํ…Œ์ŠคํŠธํ•˜์ง€ ์•Š์•˜ ์Œ์„ ์ธ์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰,์ด ๊ฐ’์„ ๋†’์ด๋Š” ๋ฐ ๋™์˜ํ–ˆ์Šต๋‹ˆ๋‹ค.
https://github.com/kubernetes/kubernetes/blob/master/cmd/kubeadm/app/util/staticpod/utils.go#L97
์ข‹์€ ์ˆ˜์ •์ด ์•„๋‹ˆ๋ฉฐ ๋‹ค๋ฅธ ๋ฒ„๊ทธ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์–ด๋–ป๊ฒŒ ๋„์ฐฉํ–ˆ๋Š”์ง€, ๊ธฐ๋ณธ์ ์œผ๋กœ 5 ๋ถ„์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

1.11 ์ด์ „์—๋Š” ์ด๋ฏธ์ง€ ๊ฐ€์ ธ ์˜ค๊ธฐ๋ฅผ ๊ณ ๋ คํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„ ์ œํ•œ์€ 4 ๋ถ„์ด๋˜๊ธฐ ์ „์— 30 ๋ถ„์ด์—ˆ์Šต๋‹ˆ๋‹ค.
4 ๋ถ„ ๋Œ€ 5 ๋ถ„์— ๋Œ€ํ•œ ์˜๊ฒฌ์ด ์žˆ๋‹ค๋ฉด ์ฃผ์ œ์— ๋Œ€ํ•œ ๊ฐ•์ ์„ ๊ฐ€์ง„ ์ž˜ ์š”์•ฝ ๋œ PR์ด 1.14์—์„œ ์„ฑ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด rpi ๋ฌธ์ œ๋Š” sig-cluster-lifecyle ํšŒ์˜์—์„œ "๋ฐœ์ƒํ•ด์„œ๋Š” ์•ˆ๋˜๋Š” ์ผ", "๊ฑฐ์˜ kubelet์˜ ๊ฒฝ์Ÿ ์กฐ๊ฑด๊ณผ ๋น„์Šทํ•ด ๋ณด์ž„", "์™œ rpi์—์„œ๋งŒ ๋ฐœ์ƒํ•˜๊ณ  ๋‹ค๋ฅธ ๋Š๋ฆฐ ์žฅ์น˜์—์„œ๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”์ง€"๋กœ ๊ฒ€์ฆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ๋“ค์€ ๋ชจ๋‘ ๋‹ค๋ฅธ ๊ณณ์—์„œ ๋‹ค๋ฅธ ๋ฒ„๊ทธ๋ฅผ ๊ณ„์† ์ฐพ์•„์•ผํ•˜๋Š” ์ด์œ ์ด์ง€๋งŒ, ๊ทธ๊ฒƒ๋“ค ์ค‘ ์–ด๋Š ๊ฒƒ๋„ initialDelaySeconds๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ์ด์œ ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ initialDelaySeconds๋ฅผ ๋Š˜๋ฆฌ๋Š” ๋ฐ ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋‹ค๋ฅธ ๋ฐฉํ–ฅ์—์„œ ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด kubeadm์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด์žˆ๋Š” kubernetes์˜ ๋‹ค๋ฅธ ๊ณณ์—์„œ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ์ˆœ๋„์— ๋Œ€ํ•œ "์„ ์„ ์œ ์ง€"ํ•˜๊ณ  ์•Œ๋ ค์ง„ ํŒŒ์† ๋œ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด kubeadm์˜ ์—ญํ• ์ž…๋‹ˆ๊นŒ? ๊ทธ๊ฒƒ์€ ์‚ฌ๋žŒ๋“ค์ด ์‹ค์ œ ๋ฐฐํฌ์— ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•˜๋Š” ๋„๊ตฌ๊ฐ€๋˜๋Š” ๋ชฉํ‘œ์™€ ์ƒ์ถฉ๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ํด๋Ÿฌ์Šคํ„ฐ์— ํŒจ์น˜๋ฅผ ์ ์šฉํ•˜์ง€ ์•Š๊ณ  kubeadm์„ ์‚ฌ์šฉํ•˜์—ฌ ์ œํ•œ ์‹œ๊ฐ„์„ ๋Š˜๋ฆด ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค (1 ๋…„ ์ด์ƒ ์ „์— ํŒจ์น˜๋กœ๋ณด๊ณ  ํ–ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ ).

(์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋ถˆ๋งŒ์ด ์ œ ๋งํˆฌ๋กœ ์ƒˆ์–ด ๋‚˜์™€์„œ ์‚ฌ๊ณผ๋“œ๋ฆฝ๋‹ˆ๋‹ค)

4 ๋ถ„ ๋Œ€ 5 ๋ถ„์— ๋Œ€ํ•œ ์˜๊ฒฌ์ด ์žˆ๋‹ค๋ฉด

ํ•œ์ˆจ. kubeadm์—์„œ _no_ timeout์— ๋Œ€ํ•œ ์‚ฌ๋ก€๋ฅผ ๋งŒ๋“ค๋ ค๊ณ ํ–ˆ์ง€๋งŒ ์•„์ง ๊ทธ ์ œ์•ˆ์„ ์„ค๋“๋ ฅ์žˆ๊ฒŒ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค (์˜ˆ๋ฅผ ๋“ค์–ด์ด ๋ฌธ์ œ์™€ ๋‹ค๋ฅธ ์‹คํŒจํ•œ ์‹œ๋„ ์ฐธ์กฐ).

์ด๊ฒƒ๋“ค์€ ๋ชจ๋‘ ๋‹ค๋ฅธ ๊ณณ์—์„œ๋„ ๋‹ค๋ฅธ ๋ฒ„๊ทธ๋ฅผ ๊ณ„์† ์ฐพ์•„์•ผํ•˜๋Š” ์ด์œ ์ด์ง€๋งŒ, ๊ทธ๊ฒƒ๋“ค ์ค‘ ์–ด๋Š ๊ฒƒ๋„ initialDelaySeconds๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค์ง€ ์•Š๋Š” ์ด์œ ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ initialDelaySeconds๋ฅผ ๋Š˜๋ฆฌ๋Š” ๋ฐ ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์•ฝ๊ฐ„์˜ ๋ณ€ํ™”์ด์ง€๋งŒ, ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค์ง€ ์•Š๋Š” ์‹œ์Šคํ…œ์—๋„ ์ ์šฉ๋  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—์ด ์ฆ๊ฐ€๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ธฐ๋กœ ๋™์˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๋ฐฉํ–ฅ์—์„œ ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด kubeadm์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด์žˆ๋Š” kubernetes์˜ ๋‹ค๋ฅธ ๊ณณ์—์„œ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ์ˆœ๋„์— ๋Œ€ํ•œ "์„ ์„ ์œ ์ง€"ํ•˜๊ณ  ์•Œ๋ ค์ง„ ํŒŒ์† ๋œ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด kubeadm์˜ ์—ญํ• ์ž…๋‹ˆ๊นŒ? ๊ทธ๊ฒƒ์€ ์‚ฌ๋žŒ๋“ค์ด ์‹ค์ œ ๋ฐฐํฌ์— ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•˜๋Š” ๋„๊ตฌ๊ฐ€๋˜๋Š” ๋ชฉํ‘œ์™€ ์ƒ์ถฉ๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ตœ์ข… ์‚ฌ์šฉ์ž๋ฅผ ํ–ฅํ•˜๋Š” ๊ฒƒ์ด kubeadm์˜ ๋ชฉํ‘œ์ž…๋‹ˆ๋‹ค. ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ rpis์— ๋Œ€ํ•œ ๋ณด๊ณ ์„œ ์ผ ๋ฟ์ด๋ฉฐ ์‹ค์ œ ๋ฒ„๊ทธ๋Š” sig-api-machinery (api ์„œ๋ฒ„) ๋ฐ sig-node (kubelet)๋กœ ์—์Šค์ปฌ๋ ˆ์ด์…˜๋˜์–ด์•ผํ•˜๋ฉฐ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ kubeadm ์™ธ๋ถ€์—์„œ ์žฌํ˜„๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ง€๊ธˆ๊นŒ์ง€ ํด๋Ÿฌ์Šคํ„ฐ์— ํŒจ์น˜๋ฅผ ์ ์šฉํ•˜์ง€ ์•Š๊ณ  kubeadm์„ ์‚ฌ์šฉํ•˜์—ฌ ์ œํ•œ ์‹œ๊ฐ„์„ ๋Š˜๋ฆด ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค (1 ๋…„ ์ด์ƒ ์ „์— ํŒจ์น˜๋กœ๋ณด๊ณ  ํ–ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ ).

kubeadm์„ ํŒจ์น˜ ํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ ๋Œ€์‹  ๋งค๋‹ˆํŽ˜์ŠคํŠธ ํŒŒ์ผ์„ ํŒจ์น˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
kubeadm 1.13์€ ์ดˆ๊ธฐ ๋‹จ๊ณ„๋ฅผ ์ตœ์ƒ์œ„ ๋ช…๋ น์œผ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ : kubeadm init phase [phase-name]
๋‹จ๊ณ„๋Š” ์ฃผ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์ œ์–ด ํ‰๋ฉด ๋…ธ๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž ์ง€์ • ์ œ์–ด๋ฅผ ์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

kubeadm init --help ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋‹จ๊ณ„๊ฐ€ ์‹คํ–‰๋˜๋Š” ์ˆœ์„œ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

kubeadm init ๋ช…๋ น์„ ์ ์ ˆํ•œ ๋‹จ๊ณ„๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋„๋ก ์ œ์–ด ํ”Œ๋ ˆ์ธ ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•ด ์‚ฌ์šฉ์ž ์ง€์ • ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  control-plane ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ ๋œ๋‹ˆ๋‹ค. ํ˜„์žฌ --skip-phases ์žˆ์Šต๋‹ˆ๋‹ค.

1.11๊ณผ 1.12์—์„œ ์ด๋ฏธ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋œ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค์ง€ ์•Š๋Š” ์‹œ์Šคํ…œ์—๋„ ์ ์šฉ๋  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ .. ๊ทธ๊ฒŒ ๋ญ๊ฐ€ ์ž˜๋ชป๋œ๊ฑฐ์•ผ? ์šฐ๋ฆฌ๋Š” ์ผ๋ถ€ ์‹œ์Šคํ…œ์—์„œ๋งŒ ํŠธ๋ฆฌ๊ฑฐ๋˜๋Š” ๋ฒ„๊ทธ๋ฅผ ํ•ญ์ƒ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ํƒ€์ž„ ์•„์›ƒ์ด์žˆ๋Š” ๊ณณ์ด๋ฉด ์–ด๋””์—์„œ๋‚˜ ํ™˜๊ฒฝ์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹Œ ๊ฐ€์žฅ ๋Š๋ฆฐ ์‹œ์Šคํ…œ์— ๋งž๊ฒŒ ์กฐ์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์— ๋Œ€ํ•œ ๋˜ ๋‹ค๋ฅธ ๊ฐ๋„๋Š” ์ž‘์ „ ๋‹ด๋‹น์ž๋กœ์„œ ์˜ค๋ฒ„๋กœ๋“œ ์ƒํ™ฉ, ํŠนํžˆ apiserver ์ž์ฒด์—์„œ ๊ณ„๋‹จ์‹ ์˜ค๋ฅ˜๊ฐ€ ๋‘๋ ต๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Afaics, livenessprobe ํƒ€์ž„ ์•„์›ƒ ์€ ๋ˆ„๊ตฐ๊ฐ€์˜ "์ •์ƒ"์•„์ด๋””์–ด์—์„œ ๋ฒ—์–ด๋‚  ๋•Œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ž‘์€ initialDelaySeconds๋Š” ์žฅ์ ์ด ์—†์Šต๋‹ˆ๋‹ค . kubeadm์˜ ๊ธฐ๋ณธ livenessprobe๋Š” ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๊ณต๊ฒฉ์ ์ž…๋‹ˆ๋‹ค.

๋™์ผํ•œ ์š”์ ์„ ๊ณ„์† ๋ฐ˜๋ณตํ•ด์„œ ๋ฏธ์•ˆํ•˜์ง€๋งŒ initialDelaySeconds๋ฅผ ํ™•์žฅํ•˜๋Š” ๋ฐ์—๋Š” ์‹ค์šฉ์ ์ด๊ณ  ์ด๋ก ์  ์ธ ์ด์œ ๊ฐ€ ๊ฐ•๋ ฅํ•˜๊ณ , ์ž‘๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๋ฐ˜๋Œ€ ์ฃผ์žฅ์„ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์‹œ์ ์—์„œ kubeadm ๊ตฌ์„ฑ ์˜ต์…˜์„ ์ถ”๊ฐ€ ํ•  ๊ฐ€๋Šฅ์„ฑ์€ ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด ์ด๋ฏธ 1.13์—์„œ 3 ๊ฐœ์˜ ๋ช…๋ น์œผ๋กœ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์„ค๋ช…ํ•˜๋ ค๊ณ  ํ•ด์š” :

sudo kubeadm reset -f
sudo kubeadm init phase control-plane all --config=testkubeadm.yaml
sudo sed -i 's/initialDelaySeconds: 15/initialDelaySeconds: 20/g' /etc/kubernetes/manifests/kube-apiserver.yaml
sudo kubeadm init --skip-phases=control-plane --ignore-preflight-errors=all --config=testkubeadm.yaml

์˜ต์…˜์„ ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๊ณ ์ • ๊ฐ’ (15)์„ ๋‹ค๋ฅธ ๊ณ ์ • ๊ฐ’ (์œ„์— 360์ด ์ œ ์•ˆ๋จ)์œผ๋กœ ๋ณ€๊ฒฝํ•ด์•ผํ•œ๋‹ค๊ณ  ๋งํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค.

..ํ•˜์ง€๋งŒ ๋” ์ด์ƒ ๋Œ์–ด ๋‚ด๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๊ฐ€์น˜๋ฅผ ๊ณ ์ˆ˜ํ•˜๋Š” ๊ฒƒ์ด ๋ถ„๋ช…ํ•œ ๊ฒฐ์ •์ด๋ฏ€๋กœ ํŒจ๋ฐฐ๋ฅผ ์ฒ ํšŒํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์–‘ํ•ด ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. :)

@ neolit123 ๊ทธ ์กฐํ•ฉ์€ ํ›Œ๋ฅญํ•ด ๋ณด์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ฌธ์„œํ™” ํ•œ ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ์‰ฌ์› ์Šต๋‹ˆ๋‹ค. ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ์„ธํŠธ๋ฅผ ๊ธฐ๋‹ค๋ฆฐ ๋‹ค์Œ ๋‹ค๋ฅธ ํ„ฐ๋ฏธ๋„์—์„œ sed๋ฅผ ๋น ๋ฅด๊ฒŒ ์‹คํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. https://github.com/alexellis/k8s-on-raspbian/blob/master/GUIDE.md

์ง€์นจ์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ๊ฐ€์ด๋“œ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@ neolit123 ์ด๊ฒƒ์€ RPi3 B +์—์„œ ์œ„์˜ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์–ป์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

[certs] apiserver serving cert is signed for DNS names [rnode-1 kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 192.168.0.110 192.168.0.26 192.168.0.26]
[certs] Generating "sa" key and public key
[kubeconfig] Using kubeconfig folder "/etc/kubernetes"
[kubeconfig] Writing "admin.conf" kubeconfig file
[kubeconfig] Writing "kubelet.conf" kubeconfig file
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x8 pc=0xaa7204]

goroutine 1 [running]:
k8s.io/kubernetes/cmd/kubeadm/app/phases/kubeconfig.validateKubeConfig(0xfa93f2, 0xf, 0xfb3d32, 0x17, 0x4032210, 0x68f, 0x7bc)
    /workspace/anago-v1.13.1-beta.0.57+eec55b9ba98609/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/cmd/kubeadm/app/phases/kubeconfig/kubeconfig.go:236 +0x120
k8s.io/kubernetes/cmd/kubeadm/app/phases/kubeconfig.createKubeConfigFileIfNotExists(0xfa93f2, 0xf, 0xfb3d32, 0x17, 0x4032210, 0x0, 0xf7978)
    /workspace/anago-v1.13.1-beta.0.57+eec55b9ba98609/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/cmd/kubeadm/app/phases/kubeconfig/kubeconfig.go:257 +0x90
k8s.io/kubernetes/cmd/kubeadm/app/phases/kubeconfig.createKubeConfigFiles(0xfa93f2, 0xf, 0x3ec65a0, 0x3f71c60, 0x1, 0x1, 0x0, 0x0)
    /workspace/anago-v1.13.1-beta.0.57+eec55b9ba98609/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/cmd/kubeadm/app/phases/kubeconfig/kubeconfig.go:120 +0xf4
k8s.io/kubernetes/cmd/kubeadm/app/phases/kubeconfig.CreateKubeConfigFile(0xfb3d32, 0x17, 0xfa93f2, 0xf, 0x3ec65a0, 0x1f7a701, 0xb9772c)
    /workspace/anago-v1.13.1-beta.0.57+eec55b9ba98609/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/cmd/kubeadm/app/phases/kubeconfig/kubeconfig.go:93 +0xe8
k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases.runKubeConfigFile.func1(0xf66a80, 0x4208280, 0x0, 0x0)
    /workspace/anago-v1.13.1-beta.0.57+eec55b9ba98609/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases/kubeconfig.go:155 +0x168
k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases/workflow.(*Runner).Run.func1(0x3cc2d80, 0x0, 0x0)
    /workspace/anago-v1.13.1-beta.0.57+eec55b9ba98609/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases/workflow/runner.go:235 +0x160
k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases/workflow.(*Runner).visitAll(0x3ec9270, 0x3f71d68, 0x4208280, 0x0)
    /workspace/anago-v1.13.1-beta.0.57+eec55b9ba98609/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases/workflow/runner.go:416 +0x5c
k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases/workflow.(*Runner).Run(0x3ec9270, 0x24, 0x416bdb4)
    /workspace/anago-v1.13.1-beta.0.57+eec55b9ba98609/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases/workflow/runner.go:208 +0xc8
k8s.io/kubernetes/cmd/kubeadm/app/cmd.NewCmdInit.func1(0x3e97b80, 0x3e900e0, 0x0, 0x3)
    /workspace/anago-v1.13.1-beta.0.57+eec55b9ba98609/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/cmd/kubeadm/app/cmd/init.go:141 +0xfc
k8s.io/kubernetes/vendor/github.com/spf13/cobra.(*Command).execute(0x3e97b80, 0x3e3ff80, 0x3, 0x4, 0x3e97b80, 0x3e3ff80)
    /workspace/anago-v1.13.1-beta.0.57+eec55b9ba98609/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/spf13/cobra/command.go:760 +0x20c
k8s.io/kubernetes/vendor/github.com/spf13/cobra.(*Command).ExecuteC(0x3e96140, 0x3e97b80, 0x3e96780, 0x3d82100)
    /workspace/anago-v1.13.1-beta.0.57+eec55b9ba98609/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/spf13/cobra/command.go:846 +0x210
k8s.io/kubernetes/vendor/github.com/spf13/cobra.(*Command).Execute(0x3e96140, 0x3c8c0c8, 0x116d958)
    /workspace/anago-v1.13.1-beta.0.57+eec55b9ba98609/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/spf13/cobra/command.go:794 +0x1c
k8s.io/kubernetes/cmd/kubeadm/app.Run(0x3c9c030, 0x0)
    /workspace/anago-v1.13.1-beta.0.57+eec55b9ba98609/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/cmd/kubeadm/app/kubeadm.go:48 +0x1b0
main.main()
    _output/dockerized/go/src/k8s.io/kubernetes/cmd/kubeadm/kubeadm.go:29 +0x20
kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.1", GitCommit:"eec55b9ba98609a46fee712359c7b5b365bdd920", GitTreeState:"clean", BuildDate:"2018-12-13T10:36:44Z", GoVersion:"go1.11.2", Compiler:"gc", Platform:"linux/arm"}

kubeadm-config.yaml์—์„œ-192.168.0.26์€ 192.168.0.110์„ ๊ฐ€๋ฆฌํ‚ค๋Š” LB์ž…๋‹ˆ๋‹ค.

apiVersion: kubeadm.k8s.io/v1beta1
kind: ClusterConfiguration
kubernetesVersion: stable
apiServer:
  certSANs:
  - "192.168.0.26"
controlPlaneEndpoint: "192.168.0.26:6443"

์™ธ๋ถ€ config / lb IP ์—†์ด๋„ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค.

์•Œ๋ ‰์Šค

๋‚˜๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ํ•œ๋™์•ˆ kubeadm์„ ์‚ฌ์šฉํ•˜๋„๋ก ์ด‰๊ตฌํ–ˆ์œผ๋ฉฐ ์‹ฌ์ง€์–ด ํ•™๊ต๋„ ํŒŒ์ด ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์‹คํ–‰ํ•˜๊ธฐ๋ฅผ ์›ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ ๊ธฐ๋ฐ˜์„ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•˜์ง€๋งŒ, ์‚ฌ์šฉ์ž ๊ธฐ๋ฐ˜์ด ์ด๋Ÿฌํ•œ ์ž‘์€ ์žฅ์น˜์—์„œ ์‹คํ–‰์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€ ์ผ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์ Š์€ ์‚ฌ๋žŒ๋“ค์ด ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๊ทธ๋ ‡์ง€ ์•Š์„ ์ˆ˜๋„์žˆ๋Š” ์น˜ํ”„ ํ•˜๋“œ์›จ์–ด์— ์ฟ  ๋ฒ„๋„ค ํ‹ฐ์Šค ํƒ€์ด์–ด๋ฅผ ์ฐจ๊ฒŒ ํ•ด์ค€๋‹ค. ์œ„์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ์œ ํšจํ•˜์ง€๋งŒ์ด ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ๋Š” ํ›จ์”ฌ ๋” ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

ํƒ€ํ˜‘์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๋Œ€์‹  x86_64๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ๊ธฐ๋ณธ ์‹œ๊ฐ„ ์ œํ•œ์„ ๋” ๋†’๊ฒŒ ์„ค์ •ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ํœด๋ฆฌ์Šคํ‹ฑ์„ ์ถ”๊ฐ€ ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

[kubeconfig] "admin.conf"kubeconfig ํŒŒ์ผ ์ž‘์„ฑ
[kubeconfig] "kubelet.conf"kubeconfig ํŒŒ์ผ ์ž‘์„ฑ
ํŒจ๋‹‰ : ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜ : ์œ ํšจํ•˜์ง€ ์•Š์€ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ๋˜๋Š” nil ํฌ์ธํ„ฐ ์—ญ ์ฐธ์กฐ
[์‹ ํ˜ธ SIGSEGV : ๋ถ„ํ•  ์œ„๋ฐ˜ ์ฝ”๋“œ = 0x1 addr = 0x8 pc = 0xaa7204]

์ด์ƒํ•˜๊ฒŒ๋„ admin.conf ์€ (๋Š”) ๋จธ์‹  ์ƒ์„ฑ์ด๋ฉฐ ์ปจํ…์ŠคํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” current-context ํŒŒ์ผ์ด์žˆ๋Š” ์œ ํšจํ•œ Config ์œ ํ˜•์„ ํฌํ•จํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๊ณตํ™ฉ์€ ๋‹ค์Œ ์ค„์—์„œ ๋น„๋กฏ๋ฉ๋‹ˆ๋‹ค.
https://github.com/kubernetes/kubernetes/blob/master/cmd/kubeadm/app/phases/kubeconfig/kubeconfig.go#L236

์œ„์˜ : point_up :๊ณผ ๋˜‘๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

modify_kube_apiserver_config(){
  sed -i 's/failureThreshold: [0-9]/failureThreshold: 15/g' /etc/kubernetes/manifests/kube-apiserver.yaml && \
  sed -i 's/timeoutSeconds: [0-9][0-9]/timeoutSeconds: 20/g' /etc/kubernetes/manifests/kube-apiserver.yaml && \
  sed -i 's/initialDelaySeconds: [0-9][0-9]/initialDelaySeconds: 120/g' /etc/kubernetes/manifests/kube-apiserver.yaml
}
kubeadm init phase control-plane all --config=$${KUBEADM_CONFIG_FILE} && \
modify_kube_apiserver_config && \
kubeadm init \
--skip-phases=control-plane \
--ignore-preflight-errors=all \
--config=$${KUBEADM_CONFIG_FILE} \
--v 4

๋‹ค์Œ ์Šคํฌ๋ฆฝํŠธ๋Š” kubeadm ๋ฒ„์ „ 1.12, 1.13 ( ๋Œ€๋ถ€๋ถ„ ์˜ ๊ฒฝ์šฐ)์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

modify_kube_apiserver_config(){
  while [[ ! -e /etc/kubernetes/manifests/kube-apiserver.yaml ]]; do
    sleep 0.5s;
  done && \
  sed -i 's/failureThreshold: [0-9]/failureThreshold: 18/g' /etc/kubernetes/manifests/kube-apiserver.yaml && \
  sed -i 's/timeoutSeconds: [0-9][0-9]/timeoutSeconds: 20/g' /etc/kubernetes/manifests/kube-apiserver.yaml && \
  sed -i 's/initialDelaySeconds: [0-9][0-9]/initialDelaySeconds: 240/g' /etc/kubernetes/manifests/kube-apiserver.yaml
}

# ref https://github.com/kubernetes/kubeadm/issues/413 (initialDelaySeconds is too eager)
if [[ ${var.arch} == "arm" ]]; then modify_kube_apiserver_config & fi

kubeadm init \
  --config=$${KUBEADM_CONFIG_FILE} \
  --v ${var.kubeadm_verbosity}

๋‚˜๋Š” ๊ฐ™์€ ์ƒํ™ฉ์— ์žˆ์—ˆ๊ณ  @ neolit123์ด ์ œ์•ˆํ•œ ์ ‘๊ทผ ๋ฐฉ์‹๊ณผ ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ
@stephenmoloney๋กœ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. bash ์Šคํฌ๋ฆฝํŒ…์— ์ต์ˆ™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์ œ ์ž˜๋ชป ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋ˆ„๊ตฌ๋‚˜ ๊ด€์‹ฌ์ด์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ ์Šคํฌ๋ฆฝํŠธ๋ฅผ python (Raspbian์— ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ค์น˜๋˜๋ฏ€๋กœ ์ถ”๊ฐ€ ์ข…์†์„ฑ์ด ํ•„์š” ์—†์Œ)์œผ๋กœ ์ด์‹ํ–ˆ์Šต๋‹ˆ๋‹ค.

import os
import time
import threading

filepath = '/etc/kubernetes/manifests/kube-apiserver.yaml'

def replace_defaults():
    print('Thread start looking for the file')
    while not os.path.isfile(filepath):
        time.sleep(1) #wait one second
    print('\033[94m -----------> FILE FOUND: replacing defaults \033[0m')
    os.system("""sed -i 's/failureThreshold: [0-9]/failureThreshold: 18/g' /etc/kubernetes/manifests/kube-apiserver.yaml""")
    os.system("""sed -i 's/timeoutSeconds: [0-9][0-9]/timeoutSeconds: 20/g' /etc/kubernetes/manifests/kube-apiserver.yaml""")
    os.system("""sed -i 's/initialDelaySeconds: [0-9][0-9]/initialDelaySeconds: 240/g' /etc/kubernetes/manifests/kube-apiserver.yaml""")

t = threading.Thread(target=replace_defaults)
t.start()
os.system("kubeadm init")

์‹คํ–‰ํ•˜๊ธฐ : sudo python however_you_name_the_file.py
@stephenmoloney ๋ฐ @ neolit123 ์†”๋ฃจ์…˜์„ ์•Œ๋ ค ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์•ˆ๋…•ํ•˜์„ธ์š”! ์ด ๋ฌธ์ œ๋Š” ๋งŽ์€ ๋„์›€์ด๋˜์—ˆ์Šต๋‹ˆ๋‹ค

kustomize๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฉ‹์ง„ ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

mkdir /tmp/kustom

cat > /tmp/kustom/kustomization.yaml <<EOF
patchesJson6902:
- target:
    version: v1
    kind: Pod
    name: kube-apiserver
    namespace: kube-system
  path: patch.yaml
EOF

cat > /tmp/kustom/patch.yaml <<EOF
- op: replace
  path: /spec/containers/0/livenessProbe/initialDelaySeconds
  value: 30
- op: replace
  path: /spec/containers/0/livenessProbe/timeoutSeconds
  value: 30
EOF

sudo kubeadm init --config config.yaml -k /tmp/kustom
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰