Kubernetes: (1.17) Kubelet์€ NIC ์˜ค๋ฅ˜ ํ›„ Apiserver์— ๋‹ค์‹œ ์—ฐ๊ฒฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(๋‹ซํžŒ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ์‚ฌ์šฉ)

์— ๋งŒ๋“  2020๋…„ 01์›” 28์ผ  ยท  123์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: kubernetes/kubernetes

ํ”„๋กœ๋•์…˜ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ 1.17.2๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ† ์š”์ผ ์—…๋ฐ์ดํŠธ ์ดํ›„ ์ด์ƒํ•œ ์ค‘๋‹จ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. Kubelet์€ NIC ์—ฐ๊ฒฐ์ด ์‹คํŒจํ•œ ํ›„(์˜ค๋ž˜ ์ง€๋‚˜์ง€ ์•Š์•„ ๋ณต๊ตฌ๋จ) ๋ชจ๋“  ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง€๊ณ  ์ˆ˜๋™์œผ๋กœ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์ง€ ์•Š๋Š” ํ•œ ๋‹ค์‹œ ์„ค์ •์„ ์‹œ๋„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ฐœ์ƒํ•œ ํƒ€์ž„๋ผ์ธ์ž…๋‹ˆ๋‹ค.

01:31:16: ์ปค๋„์ด ๋ณธ๋“œ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์‹คํŒจ๋ฅผ ์ธ์‹ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์ž ์‹œ ๋™์•ˆ ๊ฐ„๋‹ค. ๊ฒฐ๊ตญ ํšŒ๋ณต๋ฉ๋‹ˆ๋‹ค.

Jan 28 01:31:16 baremetal044 kernel: bond-mngmt: link status definitely down for interface eno1, disabling it
...
Jan 28 01:31:37 baremetal044  systemd-networkd[1702]: bond-mngmt: Lost carrier
Jan 28 01:31:37 baremetal044  systemd-networkd[1702]: bond-mngmt: Gained carrier
Jan 28 01:31:37 baremetal044  systemd-networkd[1702]: bond-mngmt: Configured

์˜ˆ์ƒ๋Œ€๋กœ ๋ชจ๋“  ์‹œ๊ณ„๊ฐ€ ๋‹ซํ˜€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€๋Š” ๋ชจ๋‘ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

...
Jan 28 01:31:44 baremetal044 kubelet-wrapper[2039]: W0128 04:31:44.352736    2039 reflector.go:326] object-"namespace"/"default-token-fjzcz": watch of *v1.Secret ended with: very short watch: object-"namespace"/"default-token-fjzcz": Unexpected watch close - watch lasted less than a second and no items received
...

๋”ฐ๋ผ์„œ ๋‹ค์Œ ๋ฉ”์‹œ์ง€๊ฐ€ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

`Jan 28 01:31:44 baremetal44 kubelet-wrapper[2039]: E0128 04:31:44.361582 2039 desired_state_of_world_populator.go:320] Error processing volume "disco-arquivo" for pod "pod-bb8854ddb-xkwm9_namespace(8151bfdc-ec91-48d4-9170-383f5070933f)": error processing PVC namespace/disco-arquivo: failed to fetch PVC from API server: Get https://apiserver:443/api/v1/namespaces/namespace/persistentvolumeclaims/disco-arquivo: write tcp baremetal44.ip:42518->10.79.32.131:443: use of closed network connection`

๋‹น๋ถ„๊ฐ„์€ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ฒฐ์ฝ” ํšŒ๋ณต๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ์ด๋ฒคํŠธ๋Š” ์˜ค์ „ 1์‹œ 31๋ถ„์— ๋ฐœ์ƒํ–ˆ์œผ๋ฉฐ ์ •์ƒํ™”ํ•˜๋ ค๋ฉด 9์‹œ๊ฐ„๊ฒฝ์— Kubelet์„ ์ˆ˜๋™์œผ๋กœ ๋‹ค์‹œ ์‹œ์ž‘ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

# journalctl --since '2020-01-28 01:31'   | fgrep 'use of closed' | cut -f3 -d' ' | cut -f1 -d1 -d':' | sort | uniq -dc
   9757 01
  20663 02
  20622 03
  20651 04
  20664 05
  20666 06
  20664 07
  20661 08
  16655 09
      3 10

Apiservers๋Š” ๊ฐ€๋™๋˜์–ด ์‹คํ–‰ ์ค‘์ด์—ˆ๊ณ , ๋‹ค๋ฅธ ๋ชจ๋“  ๋…ธ๋“œ๋Š” ๊ฐ€๋™๋˜์–ด ์‹คํ–‰ ์ค‘์ด์—ˆ๊ณ , ๊ทธ ์™ธ์˜ ๋ชจ๋“  ๊ฒƒ์€ ๋ณ„ ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ (์˜ค๋Š˜) ์ด ๋ฌธ์ œ์˜ ์˜ํ–ฅ์„ ๋ฐ›์€ ์œ ์ผํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ์ด๋ฒคํŠธ๋ฅผ ์™„ํ™”ํ•  ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ด๊ฒƒ์ด ๋ฒ„๊ทธ๊ฐ€ ๋ ๊นŒ์š”?

kinsupport siapi-machinery sinode

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

5๋ถ„๋งˆ๋‹ค ์ด bash ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

#!/bin/bash
output=$(journalctl -u kubelet -n 1 | grep "use of closed network connection")
if [[ $? != 0 ]]; then
  echo "Error not found in logs"
elif [[ $output ]]; then
  echo "Restart kubelet"
  systemctl restart kubelet
fi

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

/sig ๋…ธ๋“œ
/sig API ๊ธฐ๊ณ„

์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ์—ฌ๊ธฐ ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ

์ฝ”๋“œ์— ๋Œ€ํ•œ ์„ค๋ช…์€ ์•„๋งˆ๋„ EOF(IsProbableEOF)๋ฅผ ๊ฐ€์ •ํ•˜์ง€๋งŒ ์ด ๊ฒฝ์šฐ์—๋Š” ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

/assign @caesarxuchao

@rikatz ๋ถ™์—ฌ๋„ฃ์€ ์ฝ”๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ถ”์ ํ–ˆ๋Š”์ง€ ์ž์„ธํžˆ ์„ค๋ช…ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๋‚ด ์ƒ๊ฐ์— ๋ฆฌํ”Œ๋ ‰ํ„ฐ๋Š” ์˜ค๋ฅ˜( ์ฝ”๋“œ )๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๊ด€๊ณ„์—†์ด ์‹œ๊ณ„๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฏ€๋กœ ๋ณต๊ตฌ ์‹คํŒจ๋ฅผ ์„ค๋ช…ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ •ํ™•ํžˆ @caesarxuchao ๊ทธ๋ž˜์„œ ์ด๊ฒƒ์ด ์šฐ๋ฆฌ์˜ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์˜ค๋ฅ˜๋ฅผ ์ถ”์ ํ•˜๊ณ  kubelet์ด ํ•ด๋‹น ๋ถ€๋ถ„์— ๋“ค์–ด๊ฐ€๊ธฐ ์œ„ํ•ด ๊ทธ ์‹œ๊ฐ„(๋น„๋ฐ€ ๊ด€์ฐฐ)์„ ์ˆ˜ํ–‰ํ•œ ๊ฒƒ๊ณผ ๊ต์ฐจํ•˜๋Š” ์˜ค๋ฅ˜๋ฅผ ์ถ”์ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ณ ๊ธ‰ ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ๋ผ ์ด๋ฅผ ํ†ตํ•ด ์˜ค๋ฅ˜ ์ฝ”๋“œ์˜ ์ •ํ™•ํ•œ ํฌ์ธํŠธ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” ์—ฐ๊ฒฐ์ด ๋‹ซํ˜€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์ด ์˜ค๋ฅ˜์ž„์„ ์ดํ•ดํ•˜๋Š” ๋Œ€์‹  ์‹œ๊ณ„ EOF์ž„์„ ํ‘œ์‹œํ•˜๋Š” ์–ด๋”˜๊ฐ€๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๋…ธ๋“œ๊ฐ€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์‹คํŒจํ•˜์—ฌ ๋ฐœ์ƒ ํšŸ์ˆ˜๋ฅผ ์ง€๋‚œ 4์ผ์—์„œ 4์ผ๋กœ ๋Š˜๋ฆฌ๋Š” ๊ฒƒ ์™ธ์—๋Š” ๋” ๋˜‘๋˜‘ํ•˜๊ฒŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค.

๋ณธ๋“œ ์—ฐ๊ฒฐ ํ•ด์ œ ์ด๋ฒคํŠธ๊ฐ€ ๋‹ค๋ฅธ ๋…ธ๋“œ์—์„œ ๋ฐœ์ƒํ•˜๊ณ  kubelet์ด ๋ณต๊ตฌ ์ค‘์ด๋ฉด ๋งคํ•‘์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ๋ณต๊ตฌ์—์„œ๋Š” ์šด์ด ์ข‹์ง€ ์•Š์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ 100% ์ด๋ฒคํŠธ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋„ ์ด๊ฒƒ์„ ๋ณด๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ๋ณธ๋“œ๊ฐ€ ์—†์œผ๋ฉฐ Calico cali* ์ธํ„ฐํŽ˜์ด์Šค์— ๋Œ€ํ•ด ๋„คํŠธ์›Œํฌ๋กœ ์—ฐ๊ฒฐ๋œ "์บ๋ฆฌ์–ด ์†์‹ค" ๋ฉ”์‹œ์ง€๋งŒ ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋กœ์ปฌ veth ์žฅ์น˜์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ด€๋ จ ๋œ ์ฑ„๊ถŒ ์—†์ด๋„ ์ด๊ฒƒ์„ ๊ฒฝํ—˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋…ธ๋“œ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€๋งŒ Kubelet ์„œ๋น„์Šค๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(๋ชจ๋“  API ํ˜ธ์ถœ์ด "Unauthorized"๋กœ ์‹คํŒจํ•จ).

๋‚˜๋Š” ๊ด€๋ จ ๋œ ์ฑ„๊ถŒ ์—†์ด๋„ ์ด๊ฒƒ์„ ๊ฒฝํ—˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋…ธ๋“œ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€๋งŒ Kubelet ์„œ๋น„์Šค๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(๋ชจ๋“  API ํ˜ธ์ถœ์ด "Unauthorized"๋กœ ์‹คํŒจํ•จ).

์—…๋ฐ์ดํŠธ: ์ถฉ๋ถ„ํ•œ ์‹œ๊ฐ„(1์‹œ๊ฐ„?)์ด ์ง€๋‚œ ํ›„ Kubelet์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š”์ด ๊ฐ™์€ ํ–‰๋™์„๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Ubuntu 18.04.3 LTS ์ƒˆ๋กœ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. rancher๋กœ ๊ตฌ์ถ•๋œ ํด๋Ÿฌ์Šคํ„ฐ 2.3.4. ์ตœ๊ทผ์— ์ฃผ๊ธฐ์ ์œผ๋กœ ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ๋ณด์•˜๊ณ  kubelet์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด์ ฏ๋ฐค ๋‚ด ์ž‘์—…์ž ๋…ธ๋“œ 3๊ฐœ ๋ชจ๋‘์—์„œ ์ด์™€ ๋™์ผํ•œ ๋™์ž‘์ด ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ๋‚ด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋„๋ก 2๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์„ธ ๋ฒˆ์งธ๋Š” ๋ฉ”์‹ ์ €๋ฅผ ํŒŒํ—ค์น˜๋Š” ๋™์•ˆ ์—ฌ์ „ํžˆ ์ด ์ƒํƒœ์— ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋žœ์ฒ˜(1.17.2)๋กœ ์ƒˆ๋กœ ๊ตฌ์ถ•๋œ ํด๋Ÿฌ์Šคํ„ฐ์ธ CentOS 7์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ง๋ฌผ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. 3๊ฐœ์˜ ์ž‘์—…์ž ๋…ธ๋“œ ๋ชจ๋‘์—์„œ ์ด ๋ฌธ์ œ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. kubelet์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•ด๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ „์ฒด ๋…ธ๋“œ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

/sig ๋…ธ๋“œ
/sig API ๊ธฐ๊ณ„

์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ์—ฌ๊ธฐ ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ

์ฝ”๋“œ์— ๋Œ€ํ•œ ์„ค๋ช…์€ ์•„๋งˆ๋„ EOF(IsProbableEOF)๋ฅผ ๊ฐ€์ •ํ•˜์ง€๋งŒ ์ด ๊ฒฝ์šฐ์—๋Š” ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋˜ํ•œ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ๊ทธ์—์„œ ์šฐ๋ฆฌ๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ํ›„ ๋ชจ๋“  ํ›„์† ์š”์ฒญ์ด ์—ฌ์ „ํžˆ ๋™์ผํ•œ ์—ฐ๊ฒฐ์—์„œ ์ „์†ก๋˜์—ˆ์Œ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ apiserver์— ์š”์ฒญ์„ ๋‹ค์‹œ ๋ณด๋‚ด์ง€๋งŒ ์–ธ๋”๋ ˆ์ด http2 ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์—ฌ์ „ํžˆ ์ด์ „ ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜๋ฏ€๋กœ ๋ชจ๋“  ํ›„์† ์š”์ฒญ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์ด ์—ฐ๊ฒฐ์—์„œ ์ „์†ก๋˜๊ณ  ๋™์ผํ•œ ์˜ค๋ฅ˜ use of closed connection ์ˆ˜์‹ ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์งˆ๋ฌธ์€ ์™œ http2๊ฐ€ ์ด๋ฏธ ๋‹ซํžŒ ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๊นŒ? ์œ ์ง€ ๊ด€๋ฆฌํ•œ ์—ฐ๊ฒฐ์ด ์‹ค์ œ๋กœ ์‚ด์•„ ์žˆ์ง€๋งŒ ์ผ๋ถ€ ์ค‘๊ฐ„ ์—ฐ๊ฒฐ์ด ์˜ˆ๊ธฐ์น˜ ์•Š๊ฒŒ ๋‹ซํž ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

k8s 1.17.3์ด ์žˆ๋Š” Raspberry Pi ํด๋Ÿฌ์Šคํ„ฐ์™€ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์ž์ฃผ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ์˜ค๋ž˜๋œ ๋ฌธ์ œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ kube API ์„œ๋ฒ„ http ์—ฐ๊ฒฐ ์ œํ•œ์„ 1000 "- --http2-max-streams-per-connection=1000"์œผ๋กœ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ํ›„ 2์ฃผ ์ด์ƒ ๋™์•ˆ ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋‹ค์‹œ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

kube-apiserver https://github.com/kubernetes/apiserver/blob/b214a49983bcd70ced138bd2717f78c0cff351b2/pkg/server/secure_serving.go#L50 ์„ ๋‹ค์‹œ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
๊ธฐ๋ณธ์ ์œผ๋กœ s.DisableHTTP2 ๋ฅผ true ๋กœ ์„ค์ •ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?
๊ณต์‹ ์ด๋ฏธ์ง€( k8s.gcr.io/kube-apiserver:v1.17.3 )์šฉ dockerfile์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์—ฌ๊ธฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.(์šฐ๋ถ„ํˆฌ 18.04, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค 1.17.3)

์šฐ๋ฆฌ๋Š” ๋˜ํ•œ ๋‘ ๊ฐœ์˜ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ด๊ฒƒ์„ ๊ด€์ฐฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทผ๋ณธ ์›์ธ์— ๋Œ€ํ•ด ์™„์ „ํžˆ ํ™•์‹ ํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ ์ ์–ด๋„ ์šฐ๋ฆฌ๋Š” ๊ฐ์‹œ ์ˆ˜๊ฐ€ ๋งค์šฐ ๋งŽ์€ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ด๋Ÿฌํ•œ ์ผ์ด ๋ฐœ์ƒํ–ˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ kubelet๋‹น ๋งŽ์€ ์ˆ˜์˜ ์‹œ๊ณ„๋ฅผ ๊ฐ•์ œ๋กœ ์žฌ์ƒ์‚ฐํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค(ํฌ๋“œ๋‹น 300๊ฐœ์˜ ๋น„๋ฐ€๋กœ ํฌ๋“œ๋ฅผ ์‹œ์ž‘ํ–ˆ์œผ๋ฉฐ Prometheus ๋ฉ”ํŠธ๋ฆญ์—์„œ ํฌ๋“œ๋‹น 300๊ฐœ์˜ ์‹œ๊ณ„๊ฐ€ ์ƒ์„ฑ๋จ). ๋˜ํ•œ ๋งค์šฐ ๋‚ฎ์€ http2-max-streams-per-connection ๊ฐ’์„ ์„ค์ •ํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ์ตœ์†Œํ•œ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์Šค์ผ€์ค„๋Ÿฌ ๋ฐ ์ปจํŠธ๋กค๋Ÿฌ ๊ด€๋ฆฌ์ž ๋™์ž‘์„ ๊ด€์ฐฐํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค(๋์—†๋Š” ๋‹ค์‹œ ๋ณด๊ธฐ ๋ฃจํ”„ ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ํ›„์— ๊ณผ๋ถ€ํ•˜๊ฐ€ ๊ฑธ๋ ธ์„ ์ˆ˜ ์žˆ์Œ). ๊ทธ๋ ‡์ง€๋งŒ).

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ชจ๋“  ๋…ธ๋“œ๋Š” ๋กœ์ปฌ cronjob์„ ํ†ตํ•ด ๋งค์ผ ๋ฐค kublet์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. 10์ผ์ด ์ง€๋‚œ ์ง€๊ธˆ, ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋‚˜์—๊ฒŒ ํšจ๊ณผ๊ฐ€ ์žˆ๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ ๋…ธ๋“œ์—์„œ ๋” ์ด์ƒ "ํ์‡„ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ์‚ฌ์šฉ"์ด ์—†์Šต๋‹ˆ๋‹ค.

@sbiermann
๊ฒŒ์‹œํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. cronjob์— ์–ด๋–ค ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ?

24 ์‹œ๊ฐ„

๋‚˜๋Š” ๋˜ํ•œ ์ด ๋ฌธ์ œ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์•„์ง 1.17.3์ด ์•„๋‹ˆ๋ฉฐ ํ˜„์žฌ Ubuntu 19.10์„ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Linux <STRIPPED>-kube-node02 5.3.0-29-generic #31-Ubuntu SMP Fri Jan 17 17:27:26 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

NAME                  STATUS   ROLES    AGE   VERSION       INTERNAL-IP   EXTERNAL-IP   OS-IMAGE       KERNEL-VERSION     CONTAINER-RUNTIME
STRIPPED-kube-node02   Ready    <none>   43d   v1.16.6   10.6.0.12     <none>        Ubuntu 19.10   5.3.0-29-generic   docker://19.3.3

RancherOS 1.5.5 ๋…ธ๋“œ์—์„œ Rancher 2.3.5๋ฅผ ํ†ตํ•ด ๋ฐฐํฌ๋œ Kubernetes 1.17.4์—์„œ๋„ ์ด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. kubelet์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ํšจ๊ณผ๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์œผ๋ฉฐ ์ „์ฒด ๋…ธ๋“œ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋‚ด ๊ทผ๋ณธ์ ์ธ ์›์ธ์€ ๋‚ด Kubernetes ๋…ธ๋“œ์— ๋Œ€ํ•ด swappiness๋ฅผ 0์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์„ ์žŠ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— RAM์ด ๊ฑฐ์˜ ์†Œ๋ชจ๋˜๊ณ  kswapd0์ด ์ตœ๋Œ€ 100% CPU ์‚ฌ์šฉ๋Ÿ‰์„ ์–ป๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. swappiness๋ฅผ 0์œผ๋กœ ์„ค์ •ํ•˜๊ณ  ์ผ๋ถ€ RAM์„ ์ปดํ“จํ„ฐ์— ์ถ”๊ฐ€ํ•œ ํ›„์—๋„ ๋ฌธ์ œ๊ฐ€ ์•„์ง ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ๊ฐ€ "์ฃฝ์€ ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉํ•˜๋Š” http2"์ธ ๊ฒฝ์šฐ kubelet์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค. https://github.com/kubernetes/kubernetes/pull/48670 ์ œ์•ˆ TCP_USER_TIMEOUT์„ ์ค„์ด๋ฉด ๋ฌธ์ œ๋ฅผ ์™„ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. http2 ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ํด๋ผ์ด์–ธํŠธ ์ธก ์—ฐ๊ฒฐ ์ƒํƒœ ํ™•์ธ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด https://github.com/golang/net/pull/55 ๋ฅผ ์—ด์—ˆ์ง€๋งŒ ์ฐฉ๋ฅ™ํ•˜๋Š” ๋ฐ ๋” ๋งŽ์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค.

kubelet์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์œผ๋ฉด ๋‹ค๋ฅธ ๊ทผ๋ณธ ์›์ธ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋„คํŠธ์›Œํฌ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•  ๋•Œ v1.17.2์™€ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์ง€๋งŒ ๋…ธ๋“œ ์ค‘ ํ•˜๋‚˜์—๋งŒ ์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค(๋‚ด ํด๋Ÿฌ์Šคํ„ฐ์—๋Š” 5๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ์žˆ์Œ). ์žฌํ˜„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. kubelet์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด ์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ตœ์‹  ๋ฒ„์ „์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

5๋ถ„๋งˆ๋‹ค ์ด bash ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

#!/bin/bash
output=$(journalctl -u kubelet -n 1 | grep "use of closed network connection")
if [[ $? != 0 ]]; then
  echo "Error not found in logs"
elif [[ $output ]]; then
  echo "Restart kubelet"
  systemctl restart kubelet
fi

kubelet์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์ง€ ์•Š๊ณ  ํŒจ์น˜๋ฅผ ์ƒ์„ฑํ–ˆ๋Š”๋ฐ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๋งˆ๊ฐ ํŒจ์น˜

diff --git a/staging/src/k8s.io/client-go/transport/cache.go b/staging/src/k8s.io/client-go/transport/cache.go
index 7c40848c79f..bd61b39551a 100644
--- a/staging/src/k8s.io/client-go/transport/cache.go
+++ b/staging/src/k8s.io/client-go/transport/cache.go
@@ -38,6 +38,8 @@ const idleConnsPerHost = 25

 var tlsCache = &tlsTransportCache{transports: make(map[tlsCacheKey]*http.Transport)}

+type dialFunc func(network, addr string) (net.Conn, error)
+
 type tlsCacheKey struct {
        insecure   bool
        caData     string
@@ -92,7 +94,7 @@ func (c *tlsTransportCache) get(config *Config) (http.RoundTripper, error) {
                TLSHandshakeTimeout: 10 * time.Second,
                TLSClientConfig:     tlsConfig,
                MaxIdleConnsPerHost: idleConnsPerHost,
-               Dial:                dial,
+               Dial:                setReadDeadlineAfterDial(dial, 30*time.Second),
        })
        return c.transports[key], nil
 }
@@ -111,3 +113,18 @@ func tlsConfigKey(c *Config) (tlsCacheKey, error) {
                serverName: c.TLS.ServerName,
        }, nil
 }
+
+func setReadDeadlineAfterDial(dialer dialFunc, timeout time.Duration) dialFunc {
+       return func(network, addr string) (net.Conn, error) {
+               c, err := dialer(network, addr)
+               if err != nil {
+                       return nil, err
+               }
+
+               if err := c.SetReadDeadline(time.Now().Add(timeout)); err != nil {
+                       return nil, err
+               }
+
+               return c, nil
+       }
+}

@mYmNeo client-go๋ฅผ ์žฌ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

@mYmNeo client-go๋ฅผ ์žฌ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

@ik9999 ์ด ํŒจ์น˜๋ฅผ ์ ์šฉํ•œ ๋‹ค์Œ kubelet์„ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๊ณ  ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๊ต์ฒดํ•˜์‹ญ์‹œ์˜ค.

@mYmNeo ์ด ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•˜๊ณ  ํ…Œ์ŠคํŠธ

5๋ถ„๋งˆ๋‹ค ์ด bash ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

@ik9999 ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

cc @liggitt

SetReadDeadline์„ ์„ค์ •ํ•˜๋ฉด ๋ชจ๋“  ์‹œ๊ณ„๊ฐ€ 30์ดˆ๋งˆ๋‹ค ๋‹ซํž™๋‹ˆ๋‹ค.

SetReadDeadline์„ ์„ค์ •ํ•˜๋ฉด ๋ชจ๋“  ์‹œ๊ณ„๊ฐ€ 30์ดˆ๋งˆ๋‹ค ๋‹ซํž™๋‹ˆ๋‹ค.

์˜ˆ. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์ถ”์•…ํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค(์—ฐ๊ฒฐ ๊ฐ•์ œ ์ข…๋ฃŒ).

๋˜ ๋‹ค๋ฅธ ๊ฒฝ์šฐ:

์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ Kube 1.16.8 ํด๋Ÿฌ์Šคํ„ฐ์—์„œ๋„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. VM์„ ์žฌ๋ถ€ํŒ…ํ•˜๋ฉด ๋…ธ๋“œ๋ฅผ ์–‘ํ˜ธํ•œ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(kubelet ์žฌ์‹œ์ž‘๋„ ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ์„ ๊ฒƒ์œผ๋กœ ์ƒ๊ฐ๋ฉ๋‹ˆ๋‹ค).

์„ค์ • kubelet์€ ์—ฌ๋Ÿฌ ๋ฐฑ์—”๋“œ ๋งˆ์Šคํ„ฐ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ tcp ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ์—ญํ• ์„ ํ•˜๋Š” localhost๋ฅผ ํ†ตํ•ด ๋กœ์ปฌ haproxy ์ธ์Šคํ„ด์Šค์™€ ํ†ต์‹ ํ•ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ์—ฌ๋ถ€๋ฅผ ์กฐ์‚ฌํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

option clitcpka    # enables keep-alive only on client side
option srvtcpka    # enables keep-alive only on server side

๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ์ธ์Šคํ„ด์Šค๋Š” ๋ช…์‹œ์  ์žฌ๋ถ€ํŒ…์˜ ํ•„์š”์„ฑ์„ ์™„ํ™”ํ•˜๊ณ  ์ „์ฒด ๋ณต๊ตฌ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ณต๋˜๋Š” ๋กœ๊ทธ์˜ ์˜ˆ

Apr  8 00:04:25 kube-bnkjtdvd03sqjar31uhg-cgliksp01-cgliksp-00001442 kubelet.service[6175]: E0408 00:04:25.472682    6175 reflector.go:123] object-"ibm-observe"/"sysdig-agent": Failed to list *v1.ConfigMap: Get https://172.20.0.1:2040/api/v1/namespaces/ibm-observe/configmaps?fieldSelector=metadata.name%3Dsysdig-agent&limit=500&resourceVersion=0: write tcp 172.20.0.1:22501->172.20.0.1:2040: use of closed network connection
Apr  8 00:04:25 kube-bnkjtdvd03sqjar31uhg-cgliksp01-cgliksp-00001442 kubelet.service[6175]: E0408 00:04:25.472886    6175 reflector.go:123] object-"default"/"default-token-gvbk5": Failed to list *v1.Secret: Get https://172.20.0.1:2040/api/v1/namespaces/default/secrets?fieldSelector=metadata.name%3Ddefault-token-gvbk5&limit=500&resourceVersion=0: write tcp 172.20.0.1:22501->172.20.0.1:2040: use of closed network connection

์ค‘๊ฐ„์— ์—ฌ๊ธฐ ๋ˆ„๊ตฐ๊ฐ€๋ฅผ ๋„์šธ ๊ฒฝ์šฐ์— ๋Œ€๋น„ํ•˜์—ฌ ํŠน์ • ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๋ฉด ์—…๋ฐ์ดํŠธ๋ฅผ ๊ฒŒ์‹œํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‹œ์ฒญ ์‹œ๊ฐ„์˜ ์ ˆ๋Œ€ ์ƒํ•œ์„ ์„ค์ •ํ•˜๋Š” ๊ตฌ์„ฑ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•˜์‹ญ๋‹ˆ๊นŒ? --streaming-idle-connection-timeout ์„ ์ฐพ์•˜์ง€๋งŒ ์‹œ๊ณ„์— ํŠน์ •ํ•œ ๊ฒƒ์€ ์—†์Šต๋‹ˆ๋‹ค.

kube 1.17.4์—์„œ "etcd failed: ์ด์œ  ๋ณด๋ฅ˜"๋กœ ์ธํ•ด API ์„œ๋ฒ„๊ฐ€ ๋น„์ •์ƒ ์ƒํƒœ์ธ ๊ฒƒ์„ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•, ์–˜๋“ค์•„. golang 1.14๋กœ kubernetes ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋‹ค์‹œ ์ปดํŒŒ์ผํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ์‚ฌ๋ผ์ง„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค

@mYmNeo golang 1.14 + kubernetes v1.17?

@mYmNeo golang 1.14 + kubernetes v1.17 ?

@pytimer ์šฐ๋ฆฌ๋Š” ๋‹ค์‹œ ์ปดํŒŒ์ผํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  1.16.6์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทผ๋ณธ ์›์ธ์€ golang์ผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด๋ด! ์—ฌ๊ธฐ์— ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. k8s 1.17.4 ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๋ฉด go 1.14๋กœ 1.17.5๋ฅผ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๊นŒ?

๋ถˆํ–‰ํžˆ๋„ go1.14๋กœ ์—…๋ฐ์ดํŠธํ•˜๋ ค๋ฉด ๋ช‡ ๊ฐ€์ง€ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ Kube 1.17๋กœ ๋˜๋Œ๋ฆด ๊ฐ€๋Šฅ์„ฑ์€ ๋‚ฎ์Šต๋‹ˆ๋‹ค. https://github.com/kubernetes/kubernetes/pull/88638 ์—์„œ ๋ฌธ์ œ์™€ ์ง„ํ–‰ ์ƒํ™ฉ์„ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ข‹์€ ์ •๋ณด, thx

@callicles go 1.14๋กœ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๋Š” ๊ฒƒ์œผ๋กœ ํ™•์ธ๋˜์—ˆ์Šต๋‹ˆ๊นŒ?

1.16.8์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. Kubelet์ด ๋…ธ๋“œ ์ƒํƒœ ๊ฒŒ์‹œ๋ฅผ ์ค‘๋‹จํ•˜๊ณ  "๋‹ซํžŒ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ์‚ฌ์šฉ"์œผ๋กœ ์ธํ•ด ๋…ธ๋“œ๊ฐ€ NotReady๊ฐ€ ๋˜์–ด ๋งค์šฐ ์ž์ฃผ(๋•Œ๋กœ๋Š” ๋ฉฐ์น ์— ํ•œ ๋ฒˆ, ๋•Œ๋กœ๋Š” ๋ช‡ ์ฃผ์— ํ•œ ๋ฒˆ) ๋…ธ๋“œ๊ฐ€ NotReady๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๋กœ๊ทธ ์ฑ„์šฐ๊ธฐ

go๋Š” h2 ์—…๊ทธ๋ ˆ์ด๋“œ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
golang.org/x/net/http2/transport.go

    upgradeFn := func(authority string, c *tls.Conn) http.RoundTripper {
        addr := authorityAddr("https", authority)
        if used, err := connPool.addConnIfNeeded(addr, t2, c); err != nil {
            go c.Close()
            return erringRoundTripper{err}    <--- "use of closed network connection"  rised
        }

์•ˆ๋…•, ์–˜๋“ค์•„. golang 1.14๋กœ kubernetes ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋‹ค์‹œ ์ปดํŒŒ์ผํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ์‚ฌ๋ผ์ง„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค

@mYmNeo go 1.14๋กœ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•œ ํ›„ ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•œ ์ ์ด

์•ˆ๋…•, ์–˜๋“ค์•„. golang 1.14๋กœ kubernetes ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋‹ค์‹œ ์ปดํŒŒ์ผํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ์‚ฌ๋ผ์ง„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค

@mYmNeo go 1.14๋กœ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•œ ํ›„ ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•œ ์ ์ด

AFAIN, ๋ฌธ์ œ๋Š” ๋” ์ด์ƒ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ถˆํ–‰ํžˆ๋„ go1.14๋กœ ์—…๋ฐ์ดํŠธํ•˜๋ ค๋ฉด ๋ช‡ ๊ฐ€์ง€ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ Kube 1.17๋กœ ๋˜๋Œ๋ฆด ๊ฐ€๋Šฅ์„ฑ์€ ๋‚ฎ์Šต๋‹ˆ๋‹ค. #88638์—์„œ ๋ฌธ์ œ ๋ฐ ์ง„ํ–‰ ์ƒํ™ฉ์„ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

go1.14๊ฐ€ 1.18๋กœ ๋ฐฑํฌํŠธ๋  ๊ฒƒ์ธ์ง€ ์ด๋ฏธ ์•Œ๊ณ  ๊ณ„์‹ญ๋‹ˆ๊นŒ?

go1.14๊ฐ€ 1.18๋กœ ๋ฐฑํฌํŠธ๋  ๊ฒƒ์ธ์ง€ ์ด๋ฏธ ์•Œ๊ณ  ๊ณ„์‹ญ๋‹ˆ๊นŒ?

๋‚˜๋Š” ๊ทธ๋ ‡๊ฒŒ ๊ธฐ๋Œ€ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค. etcd ๋ฐ bbolt์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ go1.14๋ฅผ ์ง€์›ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฆด๋ฆฌ์Šค ๋ถ„๊ธฐ์—์„œ ์ˆ˜ํ–‰๋˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ํฐ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.

@liggitt ์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. (์ ์–ด๋„ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ฒฝ์šฐ) ๊ทธ ๋™์•ˆ ์™„ํ™” ์ „๋žต์ด ํ•„์š”ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. :)

์ด ๋ฌธ์ œ๋Š” NIC ์˜ค๋ฅ˜ ํ›„์—๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๊นŒ? v1.16.8 ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๋™์ผํ•œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜์ง€๋งŒ ์—ฐ๊ฒฐ๋œ NIC ์˜ค๋ฅ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.

SAN์— ์—ฐ๊ฒฐํ•  ๋•Œ ๊ธฐ๋ณธ VM์— SCSI ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. SCSI ๋ฌธ์ œ๋Š” ์ž์ฒด์ ์œผ๋กœ ํ•ด๊ฒฐ๋˜์—ˆ์ง€๋งŒ kubelet ๋Š” ๋ณต๊ตฌ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

--goaway-chance ์˜ต์…˜์ด 1.18(#88567)์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด ๋ฌธ์ œ๊ฐ€ ์™„ํ™”๋ฉ๋‹ˆ๊นŒ?

์•„๋‹ˆ์š”. kubelet์ด ์‹ค์ œ๋กœ API ์„œ๋ฒ„์— ๋„๋‹ฌํ•˜๊ณ  ์‘๋‹ต์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ํšจ๊ณผ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์–ด๋–ค ๋ณธ๋“œ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ์•Œ๋ ค์ฃผ์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ํ™œ์„ฑ ๋ฐฑ์—… ๋ณธ๋“œ๊ฐ€ ์žˆ๋Š” ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ด๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

Kubernetes 1.16์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•œ ํ›„ use of closed network connection ์˜ค๋ฅ˜์™€ kubelet์ด apiserver์— ๋‹ค์‹œ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์•„ ๋…ธ๋“œ๊ฐ€ NotReady ์ƒํƒœ๋กœ ์œ ์ง€๋˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. NIC๋ฅผ ๋‹ค์šด/๋‹ค์šด ์„ค์ •ํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์—†์—ˆ์ง€๋งŒ ์ด ๋™์ž‘์€ ๋” ๋งŽ์ด ๋กœ๋“œ๋œ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ๋งŒ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋” ํŒŒ๊ณ  ๋“ค์—ˆ๊ณ  golang ์˜ ์„œ๋ฒ„์ธก ํด๋ผ์ด์–ธํŠธ์ธก ๊ธฐ๋ณธ๊ฐ’์€ 1000 ์ด๋ผ๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. --http2-max-streams-per-connection=1000 ์„ค์ •ํ•œ ํ›„ ๋…ธ๋“œ๊ฐ€ NotReady์—์„œ ๋ฉˆ์ถ”๋Š” ๋ฌธ์ œ๊ฐ€ ํ…Œ์ŠคํŠธ ์ค‘์— ์ฒ˜์Œ ๋ฐœ๊ฒฌ๋œ ๊ฒƒ๋งŒํผ ๋ณด์ด์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ kubelet์ด ๋‹ค์‹œ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ–ˆ์ง€๋งŒ ์šฐ๋ฆฌ๊ฐ€ ๋ณด๊ณ  ์žˆ๋˜ ๋ฌธ์ œ๋ฅผ ์™„ํ™”ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Kubernetes 1.16์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•œ ํ›„ use of closed network connection ์˜ค๋ฅ˜์™€ kubelet์ด apiserver์— ๋‹ค์‹œ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์•„ ๋…ธ๋“œ๊ฐ€ NotReady ์ƒํƒœ๋กœ ์œ ์ง€๋˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. NIC๋ฅผ ๋‹ค์šด/๋‹ค์šด ์„ค์ •ํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์—†์—ˆ์ง€๋งŒ ์ด ๋™์ž‘์€ ๋” ๋งŽ์ด ๋กœ๋“œ๋œ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ๋งŒ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋” ํŒŒ๊ณ  ๋“ค์—ˆ๊ณ  golang ์˜ ์„œ๋ฒ„์ธก ํด๋ผ์ด์–ธํŠธ์ธก ๊ธฐ๋ณธ๊ฐ’์€ 1000 ์ด๋ผ๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. --http2-max-streams-per-connection=1000 ์„ค์ •ํ•œ ํ›„ ๋…ธ๋“œ๊ฐ€ NotReady์—์„œ ๋ฉˆ์ถ”๋Š” ๋ฌธ์ œ๊ฐ€ ํ…Œ์ŠคํŠธ ์ค‘์— ์ฒ˜์Œ ๋ฐœ๊ฒฌ๋œ ๊ฒƒ๋งŒํผ ๋ณด์ด์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ kubelet์ด ๋‹ค์‹œ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ–ˆ์ง€๋งŒ ์šฐ๋ฆฌ๊ฐ€ ๋ณด๊ณ  ์žˆ๋˜ ๋ฌธ์ œ๋ฅผ ์™„ํ™”ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”, ๊ธฐ๋ณธ ์„œ๋ฒ„ ์ธก https ์ŠคํŠธ๋ฆผ์€ kube-apiserver์—์„œ 1000์ด๋ฉฐ ์ด๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ๊ฐ’๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
https://github.com/kubernetes/kubernetes/blob/ae1103726f9aea1f9bbad1b215edfa47e0747dce/staging/src/k8s.io/apiserver/pkg/server/options/recommended.go#L62

@warmchang ๋‚˜๋Š” ์ด๊ฒƒ์ด apiextensions apiservers ๋ฐ ์ƒ˜ํ”Œ apiserver์— ์ ์šฉ
https://github.com/kubernetes/kubernetes/blob/ae1103726f9aea1f9bbad1b215edfa47e0747dce/staging/src/k8s.io/apiserver/pkg/server/options/recommended.go#L62

--http2-max-streams-per-connection ๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š๊ณ  curl ํ…Œ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ…Œ์ŠคํŠธ์—๋Š” apiserver ๋กœ๊ทธ์— ๋‹ค์Œ์ด ์žˆ์Šต๋‹ˆ๋‹ค(v1.16 ์‚ฌ์šฉ).
I0603 10:18:08.038531 1 flags.go:33] FLAG: --http2-max-streams-per-connection="0"

๊ทธ๋ฆฌ๊ณ  ์ปฌ ์š”์ฒญ์€ ์‘๋‹ต์—์„œ ์ด๊ฒƒ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค:
* Connection state changed (MAX_CONCURRENT_STREAMS == 250)!

--http2-max-streams-per-connection=1000 ํ•˜๋ฉด curl ์š”์ฒญ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
* Connection state changed (MAX_CONCURRENT_STREAMS == 1000)!

@jmcmeek @treytabner , ๋งž์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ์ž˜๋ชป ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค. :+1:

kubernetes 1.17.6์„ ์‚ฌ์šฉํ•˜๊ณ  ์—ฌ๊ธฐ์—์„œ๋„ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. kubelet์ด ์ฃฝ์€ http2 ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
kube-apiserver์™€ kubelet ๊ฐ„์— ์ผ๊ด€์„ฑ ์—†๋Š” ๊ธฐ๋ณธ๊ฐ’ MAX_CONCURRENT_STREAMS ์ด ์žˆ์Œ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

์„œ๋ฒ„ ์ธก ๊ฐ’์„ 1000์œผ๋กœ ์„ค์ •ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค.

๋ชฉ์žฅ์ฃผ/RKE

ํด๋Ÿฌ์Šคํ„ฐ ์ •์˜์— ์ถ”๊ฐ€:

 kube-api:
      extra_args:
        http2-max-streams-per-connection: '1000'

๋งˆ์Šคํ„ฐ ๋…ธ๋“œ ํ™•์ธ:

docker exec -it kubelet bash
apt update && apt-get install -y nghttp2
nghttp -nsv https://127.0.0.1:6443
#Look for SETTINGS_MAX_CONCURRENT_STREAMS

APIserver์—์„œ MAX_CONCURRENT_STREAMS ๋ฅผ 1000 ๋กœ ์„ค์ •ํ•ด๋„ ์ด ๋ฌธ์ œ์—๋Š” ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋‚˜๋Š” ์ด๊ฒƒ์ด golang http2 Transport ์˜ ๊ฒฐํ•จ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ๋ฏฟ์—ˆ์Šต๋‹ˆ๋‹ค. ์œ„ ์ฐธ์กฐ

์ด ๋ฌธ์ œ๊ฐ€ ์˜ค๋Š˜ ๋ฐค์— ๋‹ค์‹œ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
'MAX_CONCURRENT_STREAMS' ์„ค์ •์ด ๋„์›€์ด ๋˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹คโ˜น๏ธ

์•ˆ๋…• ์–˜๋“ค์•„. ๋‚˜๋Š” ๋งˆ์นจ๋‚ด ์ด ๋ฌธ์ œ๋ฅผ ์ถ”์ ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ์–ด์ œ ๋ฐค์—๋„ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ˆ˜์ •๋œ โ€‹โ€‹kubelet์œผ๋กœ ์„ฑ๊ณต์ ์œผ๋กœ ๋ณต๊ตฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฒ„๊ทธ๊ฐ€ ์•„๋‹ˆ๋ผ client-go ์ด(๊ฐ€) ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” golang์˜ ํ‘œ์ค€ net/http ํŒจํ‚ค์ง€์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
golang.org/x/net/http2/transport.go ๊ฒฐํ•จ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฏธ golang ๊ด€๊ณ„์ž์—๊ฒŒ ๋ณด๊ณ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ† ๋ก ์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
https://github.com/golang/go/issues/39750

์ง€๊ธˆ์€ https://github.com/golang/net/commit/0ba52f642ac2f9371a88bfdde41f4b4e195a37c0์— ์˜ํ•ด ๋„์ž…๋œ http2: perform connection health check ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋˜๋„๋ก ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
์ด ๋ฌธ์ œ์— ์•ฝ๊ฐ„์˜ ๋„์›€์ด ๋˜๋Š” ๊ฒƒ์œผ๋กœ ํŒ๋ช…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฐ˜์‘์ด ์กฐ๊ธˆ ๋Š๋ฆฌ๋‹ค.

kubelet v1.17.6 ๋กœ๊ทธ (์ž์ฒด ์ˆ˜์ • golang.org/x/net ํŒจํ‚ค์ง€ ์ค€์ˆ˜)

๊ทธ๊ฒƒ์€ ์ฃฝ์€ ์—ฐ๊ฒฐ ๋ฌธ์ œ๋ฅผ ์ž‘์„ฑ์—์„œ ๋ณต๊ตฌํ–ˆ์ง€๋งŒ ์˜ˆ์ƒ๋ณด๋‹ค ์‹œ๊ฐ„์ด ์กฐ๊ธˆ ๋” ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.

performing http2 healthCheck ๋Š” healthCheck func๊ฐ€ readIdleTimer ์˜ํ•ด ํ˜ธ์ถœ๋˜์—ˆ์Œ์„ ์ฆ๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ๊ฑฐ๊ธฐ์— ๋‚จ๊ฒจ๋‘๋ ค๋Š” ๋กœ๊ทธ ๋ฉ”์‹œ์ง€์ž…๋‹ˆ๋‹ค.

 Jun 23 03:14:45 vm10.company.com kubelet[22255]: E0623 03:14:45.912484 22255 kubelet_node_status.go:402] ๋…ธ๋“œ ์ƒํƒœ ์—…๋ฐ์ดํŠธ ์˜ค๋ฅ˜, ๋‹ค์‹œ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค: "vm10" ๋…ธ๋“œ ๊ฐ€์ ธ์˜ค๊ธฐ ์˜ค๋ฅ˜ "https://vm10.company.com:8443/api/v1/nodes/vm10.company.com?timeout=10s": write tcp 16.155.199.4:39668->16.155.199.4:8443: ํ์‡„ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ์‚ฌ์šฉ
 Jun 23 03:14:45 vm10.company.com kubelet[22255]: E0623 03:14:45.912604 22255 kubelet_node_status.go:402] ๋…ธ๋“œ ์ƒํƒœ ์—…๋ฐ์ดํŠธ ์˜ค๋ฅ˜, ์žฌ์‹œ๋„ ์˜ˆ์ •: "vm10" ๋…ธ๋“œ ๊ฐ€์ ธ์˜ค๊ธฐ ์˜ค๋ฅ˜: "https://vm10.company.com:8443/api/v1/nodes/vm10.company.com?timeout=10s": write tcp 16.155.199.4:39668->16.155.199.4:8443: ํ์‡„ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ์‚ฌ์šฉ
 Jun 23 03:14:45 vm10.company.com kubelet[22255]: E0623 03:14:45.912741 22255 kubelet_node_status.go:402] ๋…ธ๋“œ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋™์•ˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์žฌ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค: "vm10" ๋…ธ๋“œ ๊ฐ€์ ธ์˜ค๊ธฐ ์˜ค๋ฅ˜ "https://vm10.company.com:8443/api/v1/nodes/vm10.company.com?timeout=10s": write tcp 16.155.199.4:39668->16.155.199.4:8443: ํ์‡„ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ์‚ฌ์šฉ
 Jun 23 03:14:46 vm10.company.com kubelet[22255]: E0623 03:14:46.367046 22255 controller.go:135] ๋…ธ๋“œ ์ž„๋Œ€๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. 400ms ํ›„์— ๋‹ค์‹œ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅ˜: "https:// ๊ฐ€์ ธ์˜ค๊ธฐ" vm10.company.com:8443/apis/coordination.k8s.io/v1/namespaces/kube-node-lease/leases/vm10.company.com?timeout=10s": TCP 16.155.199.45:39668-.16.15 ์“ฐ๊ธฐ 199.4:8443: ํ์‡„ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ์‚ฌ์šฉ
 Jun 23 03:14:48 vm10.company.com kubelet[22255]: E0623 03:14:47.737579 22255 controller.go:135] ๋…ธ๋“œ ์ž„๋Œ€๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. 800ms ํ›„์— ๋‹ค์‹œ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅ˜: "https:// vm10.company.com:8443/apis/coordination.k8s.io/v1/namespaces/kube-node-lease/leases/vm10.company.com?timeout=10s": TCP 16.155.199.4:39668-.16.15 ์“ฐ๊ธฐ 199.4:8443: ํ์‡„ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ์‚ฌ์šฉ
 6์›” 23์ผ 03:14:49 vm10.company.com kubelet[22255]: E0623 03:14:49.113920 22255 reflector.go:153] k8s.io/kubernetes/pkg/kubelet/kubelet.go:list์— ์‹คํŒจ *45 v1.Node: "https://vm10.company.com:8443/api/v1/nodes?fieldSelector=metadata.name%3Dvm10.company.com&limit=500&resourceVersion=0" ๊ฐ€์ ธ์˜ค๊ธฐ: TCP 16.155.199.4:39668-> ์“ฐ๊ธฐ 16.155.199.4:8443: ํ์‡„ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ์‚ฌ์šฉ
 Jun 23 03:14:49 vm10.company.com kubelet[22255]: E0623 03:14:48.744770 22255 reflector.go:153] object-"kube-system"/"flannel-token-zvfwn": ์‹คํŒจ v1.Secret: "https://vm10.company.com:8443/api/v1/namespaces/kube-system/secrets?fieldSelector=metadata.name%3Dflannel-token-zvfwn&limit=500&resourceVersion=0" ๊ฐ€์ ธ์˜ค๊ธฐ: tcp 16.15 ์“ฐ๊ธฐ .199.4:39668->16.155.199.4:8443: ํ์‡„ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ์‚ฌ์šฉ
 Jun 23 03:14:49 vm10.company.com kubelet[22255]: E0623 03:14:49.599631 22255 reflector.go:153] object-"kube-system"/"coredns": *v1.ConfigMap ๋‚˜์—ด ์‹คํŒจ: "https://vm10.company.com:8443/api/v1/namespaces/kube-system/configmaps?fieldSelector=metadata.name%3Dcoredns&limit=500&resourceVersion=0" ๊ฐ€์ ธ์˜ค๊ธฐ: tcp 16.155.199.4:39668-.16 ์“ฐ๊ธฐ 199.4:8443: ํ์‡„ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ์‚ฌ์šฉ
 Jun 23 03:14:49 vm10.company.com kubelet[22255]: E0623 03:14:49.599992 22255 controller.go:135] ๋…ธ๋“œ ์ž„๋Œ€๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. 1.6์ดˆ ํ›„์— ๋‹ค์‹œ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅ˜: "https:// /vm10.company.com:8443/apis/coordination.k8s.io/v1/namespaces/kube-node-lease/leases/vm10.company.com?timeout=10s": TCP 16.155.199.4:39668->16.1 ์“ฐ๊ธฐ .199.4:8443: ํ์‡„ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ์‚ฌ์šฉ
 6์›” 23์ผ 03:14:49 vm10.company.com kubelet[22255]: E0623 03:14:49.600182 22255 reflector.go:153] k8s.io/kubernetes/pkg/kubelet/kubelet.go:list์— ์‹คํŒจ *44 v1.Service: "https://vm10.company.com:8443/api/v1/services?limit=500&resourceVersion=0" ๊ฐ€์ ธ์˜ค๊ธฐ: write tcp 16.155.199.4:39668->16.155.199.4:8443: ํ์‡„ ๋„คํŠธ์›Œํฌ ์‚ฌ์šฉ ์—ฐ๊ฒฐ
 Jun 23 03:14:49 vm10.company.com kubelet[22255]: E0623 03:14:49.600323 22255 reflector.go:153] object-"kube-system"/"kube-flannel-cfg": ๋‚˜์—ดํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค * v1.ConfigMap: "https://vm10.company.com:8443/api/v1/namespaces/kube-system/configmaps?fieldSelector=metadata.name%3Dkube-flannel-cfg&limit=500&resourceVersion=0" ๊ฐ€์ ธ์˜ค๊ธฐ: TCP 16.155 ์“ฐ๊ธฐ .199.4:39668->16.155.199.4:8443: ํ์‡„ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ์‚ฌ์šฉ
 Jun 23 03:14:49 vm10.company.com kubelet[22255]: E0623 03:14:49.600463 22255 reflector.go:153] object-"core"/"registrypullsecret": *v1.Sec์„ ๋‚˜์—ดํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. https://vm10.company.com:8443/api/v1/namespaces/core/secrets?fieldSelector=metadata.name%3Dregistrypullsecret&limit=500&resourceVersion=0": TCP 16.155.199.4:396955->.16 ์“ฐ๊ธฐ ํ์‡„ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ์‚ฌ์šฉ
 6์›” 23์ผ 03:14:49 vm10.company.com kubelet[22255]: E0623 03:14:49.369097 22255 reflector.go:153] object-"kube-system"/"registrypullsecret": ๋น„๋ฐ€ ๋‚˜์—ด ์‹คํŒจ *v1 "https://vm10.company.com:8443/api/v1/namespaces/kube-system/secrets?fieldSelector=metadata.name%3Dregistrypullsecret&limit=500&resourceVersion=0" ๊ฐ€์ ธ์˜ค๊ธฐ: tcp 16.155.199.5->.3966 ์“ฐ๊ธฐ 199.4:8443: ํ์‡„ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ์‚ฌ์šฉ
 Jun 23 03:25:39 vm10.company.com kubelet[22255]: E0623 03:25:39.543880 22255 desired_state_of_world_populator.go:320] ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋ณผ๋ฅจ "deployment-log-dir" -4fea-bd7f-99ac1cc6ae7a)": PVC core/itom-vol-claim ์ฒ˜๋ฆฌ ์˜ค๋ฅ˜: API ์„œ๋ฒ„์—์„œ PVC๋ฅผ ๊ฐ€์ ธ์˜ค์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค: "https://vm10.company.com:8443/api/v1/namespaces/core/ ๊ฐ€์ ธ์˜ค๊ธฐ Persistentvolumeclaims/itom-vol-claim": ์ฝ๊ธฐ tcp 16.155.199.4:41512->16.155.199.4:8443: ๋‹ซํžŒ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ์‚ฌ์šฉ
 Jun 23 03:25:39 vm10.company.com kubelet[22255]: E0623 03:25:39.666303 22255 kubelet_node_status.go:402] ๋…ธ๋“œ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋™์•ˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. "{\" ์ƒํƒœ๋ฅผ ํŒจ์น˜ํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. {\"$setElementOrder/conditions\":[{\"type\":\"MemoryPressure\"},{\"type\":\"DiskPressure\"},{\"type\":\"PIDPressure\ "},{\"์œ ํ˜•\":\"์ค€๋น„\"}],\"์กฐ๊ฑด\":[{\"lastHeartbeatTime\":\"2020-06-22T19:25:29Z\",\"์œ ํ˜•\ ":\"MemoryPressure\"},{\"lastHeartbeatTime\":\"2020-06-22T19:25:29Z\",\"type\":\"DiskPressure\"},{\"lastHeartbeatTime\": \"2020-06-22T19:25:29Z\",\"์œ ํ˜•\":\"PIDPressure\"},{\"lastHeartbeatTime\":\"2020-06-22T19:25:29Z\",\" "vm10.company.com" ๋…ธ๋“œ์— ๋Œ€ํ•œ type\":\"Ready\"}]}}: ํŒจ์น˜ "https://vm10.company.com:8443/api/v1/nodes/vm10.company.com/ status?timeout=10s": ์ฝ๊ธฐ tcp 16.155.199.4:41512->16.155.199.4:8443: ๋‹ซํžŒ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ์‚ฌ์šฉ
 Jun 23 03:25:49 vm10.company.com kubelet[22255]: E0623 03:25:49.553078 22255 kubelet_node_status.go:402] ๋…ธ๋“œ ์ƒํƒœ ์—…๋ฐ์ดํŠธ ์˜ค๋ฅ˜, ์žฌ์‹œ๋„: "vm10" ๋…ธ๋“œ ๊ฐ€์ ธ์˜ค๊ธฐ ์˜ค๋ฅ˜ "https://vm10.company.com:8443/api/v1/nodes/vm10.company.com?timeout=10s": ์ฝ๊ธฐ tcp 16.155.199.4:41718->16.155.199.4:8443: ํ์‡„ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ์‚ฌ์šฉ
 Jun 23 03:25:49 vm10.company.com kubelet[22255]: E0623 03:25:49.560723 22255 desired_state_of_world_populator.go:320] pod "fluentd_92040-feca0320"์— ๋Œ€ํ•œ "log-location" ์ฒ˜๋ฆฌ ์˜ค๋ฅ˜ -bd7f-99ac1cc6ae7a)": PVC core/itom-logging-vol ์ฒ˜๋ฆฌ ์˜ค๋ฅ˜: API ์„œ๋ฒ„์—์„œ PVC ๊ฐ€์ ธ์˜ค๊ธฐ ์‹คํŒจ: "https://vm10.company.com:8443/api/v1/namespaces/core/persistentvolumeclaims/ ๊ฐ€์ ธ์˜ค๊ธฐ itom-logging-vol": ์ฝ๊ธฐ tcp 16.155.199.4:41718->16.155.199.4:8443: ๋‹ซํžŒ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ์‚ฌ์šฉ
 Jun 23 03:27:29 vm10.company.com kubelet[22255]: I0623 03:27:29.961600 22255 log.go:181] http2 healthCheck ์ˆ˜ํ–‰ ์ค‘
 Jun 23 03:31:32 vm10.company.com kubelet[22255]: I0623 03:31:31.829860 22255 log.go:181] http2 healthCheck ์ˆ˜ํ–‰ ์ค‘
 Jun 23 03:31:44 vm10.company.com kubelet[22255]: I0623 03:31:44.570224 22255 log.go:181] http2 healthCheck ์ˆ˜ํ–‰ ์ค‘
 Jun 23 03:32:13 vm10.company.com kubelet[22255]: I0623 03:32:12.961728 22255 log.go:181] http2 healthCheck ์ˆ˜ํ–‰ ์ค‘
 Jun 23 03:33:16 vm10.company.com kubelet[22255]: I0623 03:33:15.441808 22255 log.go:181] http2 healthCheck ์ˆ˜ํ–‰ ์ค‘
 Jun 23 03:33:28 vm10.company.com kubelet[22255]: I0623 03:33:28.233121 22255 log.go:181] http2 healthCheck ์ˆ˜ํ–‰ ์ค‘

๋” ์ด์ƒ use of closed network connection ๋ณด๊ณ ๋˜์ง€ ์•Š๊ณ  kubelet์ด ์ค€๋น„ ์ƒํƒœ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.

์Šคํƒ์˜ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ƒˆ๋กœ์šด ์ž ์žฌ์  ํ†ต์ฐฐ๋ ฅ์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. ํŠน์ • ์ƒํ™ฉ์—์„œ ์—ฐ๊ฒฐ ๋ฒˆํ˜ธ์— ๋Œ€ํ•œ ๋†’์€ ๋ถ€ํ•˜๋กœ ์ธํ•ด ๋„คํŠธ์›Œํ‚น/์ธํ”„๋ผ ์ˆ˜์ค€์—์„œ ๋“œ๋ฌผ๊ฒŒ ์—ฐ๊ฒฐ์ด ์ค‘๋‹จ๋œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฏ€๋กœ ์ด ๊ฒฝ์šฐ ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋’ค์ง‘ํžŒ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ํŠนํžˆ Prometheus ํŽ˜๋”๋ ˆ์ด์…˜์ด ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ http2๋กœ ์ „ํ™˜๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ์‹ฌ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค . ์„ค์ •ํ•˜์—ฌ http2 ๊ฑด๊ฐ• ๋ชจ๋‹ˆํ„ฐ๋ฅผ ์‚ฌ์šฉ http2.Transport.ReadIdleTimeout ๋กœ ๊ตฌํ˜„ ๋œ golang/net#55 ์™„์ „ํžˆ ์šฐ๋ฆฌ๋ฅผ ์œ„ํ•ด ํŽ˜๋”๋ ˆ์ด์…˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

๊ฐ’์€ ํ˜„์žฌ apimachinery/pkg/util/net/http.go http.Transport apimachinery/pkg/util/net/http.go ์ธ์Šคํ„ด์Šคํ™”ํ•˜๊ณ  ์ด๋ฅผ ๋‚ด๋ถ€์ ์œผ๋กœ http2๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋ฏ€๋กœ ๊ฐ’์ด ๋…ธ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Š” golang/net#74๊ฐ€ ๋ณ‘ํ•ฉ๋  ๋•Œ๊นŒ์ง€ ์˜ต์…˜์„ ๋…ธ์ถœํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

kubelet restart cron ์ž‘์—… ์™ธ์— ๋‹ค๋ฅธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์šฐ๋ฆฌ๋Š” ์ผ์ฃผ์ผ ๋™์•ˆ cron ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์œผ๋ฉฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ๋ฉˆ์ถ”์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

v1.17.3์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ฐพ์€ ๊ฒƒ์€ ํŠน์ • golang.org/x/net ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋Š” k8s ๋ฒ„์ „์— ๋ฌธ์ œ๊ฐ€ ์žˆ๊ณ  ์ด ํŒจํ‚ค์ง€๊ฐ€ ์ˆ˜์ •๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
https://go-review.googlesource.com/c/net/+/198040

์ด ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๋ฒ„์ „(v1.16.5 ~ ์ตœ์‹  ๋ฆด๋ฆฌ์Šค)
golang.org/x/net v0.0.0-20191004110552-13f9640d40b9

์ˆ˜์ • ๋ฒ„์ „(๋งˆ์Šคํ„ฐ ๋ถ„๊ธฐ)
golang.org/x/net v0.0.0-20200707034311-ab3426394381

golang.org/x/net ํŒจํ‚ค์ง€๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๊นŒ?

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์œ ์ง€ ๊ด€๋ฆฌ๋˜๋Š” k8s ๋ฒ„์ „(v1,16, 1.17, v1,18..)์— ๋Œ€ํ•œ ๋ฆด๋ฆฌ์Šค๊ฐ€ ๊ณ„ํš๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚ด๊ฐ€ ์ฐพ์€ ๊ฒƒ์€ ํŠน์ • golang.org/x/net ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋Š” k8s ๋ฒ„์ „์— ๋ฌธ์ œ๊ฐ€ ์žˆ๊ณ  ์ด ํŒจํ‚ค์ง€๊ฐ€ ์ˆ˜์ •๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
https://go-review.googlesource.com/c/net/+/198040

์–ธ๊ธ‰๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ HTTP2 ์ƒํƒœ ๋ชจ๋‹ˆํ„ฐ๋ฅผ ํ™œ์„ฑํ™”ํ•  ๊ฐ€๋Šฅ์„ฑ๋งŒ _์ œ๊ณต_ํ•˜์ง€๋งŒ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(๊ธฐ๋ณธ๊ฐ’์€ ๊บผ์ง). ๋˜ํ•œ ์‹ค์ œ๋กœ ์„ค์ •ํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ƒํƒœ ๋ชจ๋‹ˆํ„ฐ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๊ธฐ ์œ„ํ•œ ํ’€ ์š”์ฒญ์ด ์žˆ์Šต๋‹ˆ๋‹ค .

์ €๋Š” ํ˜„์žฌ ์ž์ฒด Kubernetes ๋ฐฐํฌ์— ๋Œ€ํ•œ ์ƒํƒœ ๋ชจ๋‹ˆํ„ฐ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ฐ˜์‚ฌ ๊ธฐ๋ฐ˜ ํ•ซํ”ฝ์Šค๋ฅผ ํ†ตํ•ฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฌธ์ œ ํ•ด๊ฒฐ์— ๋„์›€์ด ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

--
์˜Œ์Šค ์—๋ผํŠธ \ ๋‚ ์ธ

@JensErat ๋‹ต๋ณ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ ‡๋‹ค๋ฉด ์ด์ „ ๋ฒ„์ „์˜ k8s(1.13, 1.15, ..)์—์„œ๋„ ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

ํ•œ ๋‹ฌ ์ „์— RancherOS(์ปค๋„ 4.14.138)์—์„œ Ubuntu 18.04(์ปค๋„ 5.3.0)๋กœ ๋…ธ๋“œ ๋ฐฐํฌํŒ์„ ๋ณ€๊ฒฝํ–ˆ๋Š”๋ฐ ๊ทธ ์ดํ›„๋กœ ๋ฌธ์ œ๊ฐ€ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
RancherOS์— ๋‚จ๊ฒจ์ง„ ํด๋Ÿฌ์Šคํ„ฐ ์ค‘ ํ•˜๋‚˜๋Š” ์ด ๋ฌธ์ œ๊ฐ€ ์ด๋ฏธ 3๋ฒˆ ์žฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

100% shure๋Š” ์•„๋‹ˆ์ง€๋งŒ ์•„๋งˆ๋„ ์ปค๋„ ๋ฒ„์ „์ด ์ค‘์š”ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋งํ•˜๊ธฐ ์–ด๋ ต๋‹ค. ์šฐ๋ฆฌ๋Š” 1.16์—์„œ 1.18๊นŒ์ง€์˜ ๋ฌธ์ œ๋ฅผ ํ™•์‹คํžˆ ๊ด€์ฐฐ(d)ํ–ˆ์ง€๋งŒ ์ด์ „์—๋Š” ๋“œ๋ฌธ ์ด์ƒํ•œ "kubelet ์ค‘๋‹จ ๋ฐœ์ƒ"์ด ๋ชจ์ž์˜€์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ์ ์–ด๋„ 1๋…„ ์ดํ›„๋กœ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํŒŒํ—ค์ณค์ง€๋งŒ ์•„๋ฌด ์ƒ๊ด€ ๊ด€๊ณ„๋„ ์—†์—ˆ์Šต๋‹ˆ๋‹ค(๋ช‡ ์ฃผ ๋™์•ˆ ๋‹จ์ผ ์‚ฌ๊ฑด์ด ๋ฐœ์ƒํ–ˆ๊ณ  4์ž๋ฆฌ ์ˆ˜์˜ kubelet์ด ์‹คํ–‰ ์ค‘์ž„). ์šฐ๋ฆฌ๊ฐ€ 1.16์„ ์„ค์น˜ํ•œ ์ดํ›„๋กœ ํ›จ์”ฌ ๋” ๋‚˜๋น ์กŒ์ง€๋งŒ, ํ˜„์žฌ ์šฐ๋ฆฌ๋Š” ๊ทผ๋ณธ์ ์ธ(๋˜ํ•œ ๋งค์šฐ ๋“œ๋ฌผ๊ณ  ์ถ”์ ํ•˜๊ธฐ ์–ด๋ ค์šด...) ๋„คํŠธ์›Œํ‚น ๋ฌธ์ œ๊ฐ€ ๋” ์ž์ฃผ ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” Kernel 5.3.0-46-generic์œผ๋กœ Ubuntu 19.10์„ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์ง€๋งŒ ์˜ํ–ฅ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค(์‹ค์ œ๋กœ ๋” ์ƒˆ๋กœ์šด ํŒจ์น˜ ์ˆ˜์ค€์„ ์–ป์„ ์ˆ˜ ์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Œ). ์‹คํ–‰ ์ค‘์ธ ์ •ํ™•ํ•œ ์ปค๋„ ๋ฒ„์ „/ํŒจ์น˜ ์ˆ˜์ค€์— ๋Œ€ํ•œ ํžŒํŠธ๋ฅผ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

--
์˜Œ์Šค ์—๋ผํŠธ \ ๋‚ ์ธ

5.3.0-59-generic ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ์—๊ฒŒ๋Š” ~ 40๊ฐœ์˜ kubletes๋งŒ ์žˆ์œผ๋ฏ€๋กœ ์—ฌ์ „ํžˆ ์šฐ์—ฐ์˜ ์ผ์น˜์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์—์„œ ๋งํ–ˆ๋“ฏ์ด. ์ด ๋ฌธ์ œ๋Š” ๋กœ๋“œ๊ฐ€ ๋งŽ์€ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๋” ์ž์ฃผ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” h2 Transport healthCheck๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์ „์— ๊ฑฐ์˜ ๋งค์ผ ๋ฐค ๋™์ผํ•œ ๋ฌธ์ œ๋ฅผ ๊ด€์ฐฐํ–ˆ์Šต๋‹ˆ๋‹ค.
golang ๊ด€๊ณ„์ž ์—๊ฒŒ ๋ณด๊ณ ๋œ ๋ฌธ์ œ ์— ๋”ฐ๋ฅด๋ฉด . ๋‹ซํžŒ ์†Œ์ผ“์„ ์ฝ์„ ๋•Œ ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•˜์ง€๋งŒ ์ ˆ๋Œ€ ๊ทธ๋ ‡์ง€ ์•Š์€ ์†Œ์ผ“ ์ฝ๊ธฐ ๋ฃจํ”„์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์—ฐ๊ฒฐ ๋ฌธ์ œ๋ฅผ ๋Šฅ๋™์ ์œผ๋กœ ๊ฐ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์†Œ์ผ“์„ ์ž‘์„ฑํ•  ๋•Œ ์˜ค๋ฅ˜ ํ•ธ๋“ค ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฉฐ์น ์ด ์ง€๋‚œ ํ›„ ๊ทธ๋“ค์€ ๊ทธ๋Ÿฐ ๋“œ๋ฌธ ๋ฌธ์ œ์— ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” ์ปค๋„์— ๋งค์šฐ ๊ทผ์ ‘ํ•œ ๋„คํŠธ์›Œํฌ ์†Œ์ผ“์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์ œ์™€๋Š” ์กฐ๊ธˆ ๊ฑฐ๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปค๋„ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋„์›€์ด ๋  ์ˆ˜๋„ ์žˆ๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. (์ถ”์‹ : ์šฐ๋ฆฌ๋Š” ์ปค๋„ 3.10๊ณผ ํ•จ๊ป˜ centos 7์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” healthCheck๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์ „์— ๊ฑฐ์˜ ๋งค์ผ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค)
๋‚ด๊ฐ€ ๋ณธ ๋ฐ”๋กœ๋Š” net/http์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ฝ๋Š” ๋ฐ ์•ฝ 3์ผ์„ ๋ณด๋ƒˆ๊ณ  h2 transport healthCheck๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ฉด ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ๋ณต๊ตฌํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜์—ˆ๊ณ  ๊ทธ๋ ‡๊ฒŒ ํ•จ์œผ๋กœ์จ ์ด ์ด์ƒํ•œ ์ƒํ™ฉ์—์„œ ์ •๋ง ๋ฒ—์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค.
@JensErat ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” healthCheck ํ™œ์„ฑํ™”์— ๋Œ€ํ•œ ๊ตฌ์ฒด์ ์ธ ์ฆ๊ฑฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

@JensErat ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” healthCheck ํ™œ์„ฑํ™”์— ๋Œ€ํ•œ ๊ตฌ์ฒด์ ์ธ ์ฆ๊ฑฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ฐ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•ด Prometheus ํŽ˜๋”๋ ˆ์ด์…˜์„ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Prometheus 2.19.0์€ http2๋ฅผ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค(๋ณ€๊ฒฝ ๋กœ๊ทธ์— ์ด๊ฒƒ์„ ์–ธ๊ธ‰ํ•˜๋Š” ๊ฒƒ์„ ์žŠ์–ด๋ฒ„๋ ธ๊ณ  ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์— ์ž˜ ์ˆจ๊ฒจ์ ธ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” git bisect, ๋ฐฐํฌ ๋ฐ ๊ฐ ์‹คํ–‰์— ๋Œ€ํ•ด ๋ช‡ ์‹œ๊ฐ„ ๊ธฐ๋‹ค๋ ค์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค...) ํ•˜๋ฃจ์— ํŽ˜๋”๋ ˆ์ด์…˜์ด ์ค‘๋‹จ๋œ 12๊ฐœ์˜ ์‚ฌ๊ฑด. ๋‚˜๋Š” ๋จผ์ € http2 ์ง€์›์„ ๋‹ค์‹œ ํŒจ์น˜ํ–ˆ๊ณ (๋ฌธ์ œ๋Š” ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค), golang/net/x/http2์—์„œ ์ง์ ‘ ์ฝ๊ธฐ ์ œํ•œ ์‹œ๊ฐ„์„ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ดํ›„๋กœ ๋” ์ด์ƒ ๋‹จ์ผ ํŽ˜๋”๋ ˆ์ด์…˜ ๋‹ค์šด ์‚ฌ๊ณ ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ €๋Š” ํ˜„์žฌ ์ผ๋ถ€ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ํŒจ์น˜๋œ Kubernetes ๋ฆด๋ฆฌ์Šค๋ฅผ ์ถœ์‹œํ•  ์ค€๋น„๋ฅผ ํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๋ฉฐ์น  ์•ˆ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ œ๊ณต๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ ์ ˆํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ํ™•๋ณด๋˜๋Š” ์ฆ‰์‹œ ๊ฒฐ๊ณผ๋ฅผ ๊ณต์œ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

--
์˜Œ์Šค ์—๋ผํŠธ \ ๋‚ ์ธ

์ €๋Š” ํ˜„์žฌ ์ผ๋ถ€ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ํŒจ์น˜๋œ Kubernetes ๋ฆด๋ฆฌ์Šค๋ฅผ ์ถœ์‹œํ•  ์ค€๋น„๋ฅผ ํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๋ฉฐ์น  ์•ˆ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ œ๊ณต๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ ์ ˆํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ํ™•๋ณด๋˜๋Š” ์ฆ‰์‹œ ๊ฒฐ๊ณผ๋ฅผ ๊ณต์œ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์˜๊ฒฌ์„ ๋ณด๋‚ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์•„์ฃผ ๋ฐ˜๊ฐ€์šด ๋ฉ”์‹œ์ง€์ž…๋‹ˆ๋‹ค.
๊ทผ๋ณธ ์›์ธ์€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์ง€๋งŒ ์ตœ์†Œํ•œ ์žฌํ•ด์—์„œ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์Šต๋‹ˆ๋‹ค. :NS

k8s v1.14.3์—์„œ๋„ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉฐ kubelet์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด ์–ด๋ฆฌ์„๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์ž„์‹œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

yaml ํ™•์žฅ

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: kubelet-face-slapper
  namespace: kube-system
spec:
  selector:
    matchLabels:
      app: kubelet-face-slapper
  template:
    metadata:
      labels:
        app: kubelet-face-slapper
    spec:
      # this toleration is to have the daemonset runnable on master nodes
      # remove it if your masters can't run pods    
      tolerations:
      - effect: NoSchedule
        key: node-role.kubernetes.io/controlplane
        operator: Equal
        value: "true"
      - effect: NoExecute
        key: node-role.kubernetes.io/etcd
        operator: Equal
        value: "true"
      containers:
      - command:
        - /bin/sh
        - -c
        - while true; do sleep 40; docker logs kubelet --since 1m 2>&1 | grep -q "use
          of closed network connection" && (docker restart kubelet ; echo "kubelet
          has been restarted due to connection error") || echo "kubelet connection
          is ok" ;done
        image: docker:stable
        name: kubelet-face-slapper
        volumeMounts:
        - mountPath: /var/run/docker.sock
          name: docker-sock
      volumes:
      - hostPath:
          path: /var/run/docker.sock
          type: File
        name: docker-sock


(์ด๊ฒƒ์€ ๋ชฉ์žฅ์ฃผ๋งˆ๋‹ค ๋‹ค๋ฅด์ง€๋งŒ ๊ถŒํ•œ์ด ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ ๋ฐ journalctl/systemctl์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ๋ฐฐํฌํŒ์— ์‰ฝ๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)

sleep ๋ฐ --since ์€ ํด๋Ÿฌ์Šคํ„ฐ์˜ pod-eviction-timeout (๊ธฐ๋ณธ์ ์œผ๋กœ 5

BTW - rancher ์ž‘์—…์ž ๋…ธ๋“œ์˜ docker pause nginx-proxy ๋Š” kubelet์ด ๋™์ผํ•œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ƒ์„ฑํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

VMWare vSphere์—์„œ K8S๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•œ ์ž„์‹œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• - K8S VM์— ๋Œ€ํ•ด DRS ๋ฅผ

์ƒˆ๋กœ์šด golang http2 ์ƒํƒœ ํ™•์ธ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ์™„ํ™”ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จํ•˜์—ฌ ์•„์ฃผ ์ข‹์€ ์†Œ์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋” ์ด์ƒ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ์šฐ๋ฆฌ๋Š” Prometheus, ์ „์ฒด Kubernetes ๋ฐ ์—ฌ๋Ÿฌ ๋‚ด๋ถ€ ๊ตฌ์„ฑ ์š”์†Œ์—์„œ "์ˆ˜์ •"(๊ณต๊ธ‰๋œ x/net ์ฝ”๋“œ์˜ ๊ฐ’ ํ•˜๋“œ์ฝ”๋”ฉ ์„ค์ •)์„ ๊ตฌํ˜„ํ•˜์—ฌ ๋‹ค์Œ์„ ๊ด€์ฐฐํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ๋” ์ด์ƒ Prometheus ์—ฐํ•ฉ ๋ฌธ์ œ ์—†์Œ
  • kubelet์€ ๋•Œ๋•Œ๋กœ ๋‹จ์ผ "๋‹ซํžŒ ์—ฐ๊ฒฐ ์‚ฌ์šฉ" ์ด๋ฒคํŠธ๋ฅผ ๋ณด๊ณ ํ•˜์ง€๋งŒ ๋ช‡ ์ดˆ ์ด๋‚ด์— ๋ณต๊ตฌ๋ฉ๋‹ˆ๋‹ค(~30์ดˆ http2 ์ƒํƒœ ํ™•์ธ ์ฐฝ ์„ค์ •).
  • ๋•Œ๋•Œ๋กœ kubectl ์‹œ๊ณ„์— ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํŒจ์น˜๋œ kubectl์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค.
  • ์šฐ๋ฆฌ๋Š” ์ •๊ธฐ์ ์œผ๋กœ ํ†ตํ•ฉ์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ํ™•์žฅ๋œ E2E ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๊ฐ„ํ—์ ์ธ ํ…Œ์ŠคํŠธ ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋ฐ ๋ถˆ์•ˆ์ •์„ฑ์„ ๊ด€์ฐฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ญ”์ง€ ๋งž์ถฐ๋ด? ์ง€๊ธˆ ๊ฐ”๋‹ค.

๋˜ํ•œ ๋ฌธ์ œ๋ฅผ ์œ ๋ฐœํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ํ†ต์ฐฐ๋ ฅ์„ ์–ป์„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์— ๋Œ€ํ•œ @vi7 ์˜ ๊ด€์ฐฐ์€ ์ž์‹  ์žˆ๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ(์ถ”์ ํ•  ์ˆ˜ ์žˆ์Œ) ์ตœ์†Œํ•œ ์šฐ๋ฆฌ๊ฐ€ ์‹คํ–‰ํ•˜๋Š” NSX ๋ฒ„์ „์—์„œ๋Š” ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ๋ณ€๊ฒฝ์ด ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(VMware์™€ ํ•จ๊ป˜ ๊ทธ๋“ค์ด ๋ฏธ๋ž˜์— ์žฌ์„ค์ • ํŒจํ‚ท์„ ๋ณด๋‚ด๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค). ๊ทธ๋ฆฌ๊ณ  ์—ฐ๊ฒฐ ํ…Œ์ด๋ธ” ์˜ค๋ฒ„ํ”Œ๋กœ์™€ ๊ฐ™์ด ์—ฐ๊ฒฐ์„ ๋Š๋Š” ๋‹ค๋ฅธ ๋งŽ์€ ์ด์œ ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ผ๋ถ€ Kubernetes ์‚ฌ์šฉ์ž์—๊ฒŒ ๋งค์šฐ ์„ฑ๊ฐ€์‹œ๊ณ  ๋‹ค์†Œ ๋ฐฉ๋Œ€ํ•œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค(IaaS ๊ณ„์ธต/๋„คํŠธ์›Œํ‚น์˜ ์ผ์ข…์˜ "์†์ƒ"์— ๋”ฐ๋ผ ๋‹ค๋ฆ„). ๊ฐ’์„ ์ ์ ˆํ•˜๊ฒŒ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋…ธ์ถœํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ golang ํ† ๋ก ์ด ์žˆ์ง€๋งŒ -- ๋ฆฌํ”Œ๋ ‰์…˜์„ ํ†ตํ•ด ํ•ด๋‹น ๊ฐ’์„ ์„ค์ •ํ•˜๋Š” PR ๋ณ‘ํ•ฉ ์—…์ŠคํŠธ๋ฆผ์„ ์–ป์„ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ? ? ์šฐ๋ฆฌ๋Š” ์ฝ”๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค(๊ทธ๋ฆฌ๊ณ  ์ˆ˜์ • ์‚ฌํ•ญ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๋ฉด ์‹ค์ œ๋กœ ์žฌํ˜„ํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ ์ˆ˜์ • ์‚ฌํ•ญ์ด ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์„ ๋งŒํผ ์ถฉ๋ถ„ํžˆ ์ž์ฃผ ๊ด€์ฐฐ).

cc @liggitt

์žฅ๊ธฐ ๋ฌธ์ œ(์ž์‹ ์— ๋Œ€ํ•œ ๋ฉ”๋ชจ)

@JensErat ๋‹ต๋ณ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ ‡๋‹ค๋ฉด ์ด์ „ ๋ฒ„์ „์˜ k8s(1.13, 1.15, ..)์—์„œ๋„ ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

Kubernetes v1.16.13์˜ ๋ฌธ์ œ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Kubernetes v1.15.9์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ etcd ์Šค๋ƒ…์ƒท ๋ฐฑ์—…์—์„œ kubenetes ํด๋Ÿฌ์Šคํ„ฐ v1.16.14 ๋ฅผ ๋ณต๊ตฌํ•  ๋•Œ . ์ด ์˜ค๋ฅ˜๋Š” kubelet ๋กœ๊ทธ์— ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.
@ik9999๋‹˜ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. kubelet์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

[root@dev-k8s-master ~]# journalctl -u kubelet -n 1 | grep "use of closed network connection"
Aug 22 11:31:10 dev-k8s-master kubelet[95075]: E0822 11:31:10.565237   95075 reflector.go:123] k8s.io/client-go/informers/factory.go:134: Failed to list *v1beta1.CSIDriver: Get https://apiserver.cluster.local:6443/apis/storage.k8s.io/v1beta1/csidrivers?limit=500&resourceVersion=0: write tcp 192.168.160.243:58374->192.168.160.243:6443: use of closed network connection
[root@dev-k8s-master ~]# systemctl restart kubelet
[root@dev-k8s-master ssh]# journalctl -u kubelet -n 1 | grep "use of closed network connection"

1.17.3์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๋ฅผ ๋งŒ๋‚ฌ๊ณ  kubelet์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ์•ˆ์ •์ ์ธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด๋‚˜ ์ด ๋ฌธ์ œ๊ฐ€ ์–ธ์ œ ์ˆ˜์ •๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

v1.18.6 ๋™์ผ

@rxwang662001
์ด๊ฒƒ์€ ์—…์ŠคํŠธ๋ฆผ golang ๋ฌธ์ œ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ํ•œ ๊ฐ€์ง€ ํ™•์‹คํ•œ ๊ฒƒ์€ ์ด๊ฒƒ์ด go 1.15์—์„œ ์ˆ˜์ •๋˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
ํ•œํŽธ Kubernetes ์ปค๋ฎค๋‹ˆํ‹ฐ๋Š” ์—ฌ์ „ํžˆ 1.14 LOL๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ๊ตฐ๋ถ„ํˆฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ go๋Š” 6๊ฐœ์›”๋งˆ๋‹ค ๋ฆด๋ฆฌ์Šค๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ์ž˜ ์ž‘๋™ํ•œ๋‹ค๋ฉด ์ด ๋ฌธ์ œ๊ฐ€ ๋‚ด๋…„์— ์—…์ŠคํŠธ๋ฆผ์—์„œ ํ•ด๊ฒฐ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๊ณ  kubernetes๊ฐ€ ์ˆ˜์ • ์‚ฌํ•ญ์„ ์ ์šฉํ•  ๋•Œ๊นŒ์ง€ 1๋…„ ๋” ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ๐Ÿฅ‡ !
(๋†๋‹ด์ž…๋‹ˆ๋‹ค. ์ง€๊ธˆ ์Šคํƒ์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด h2Transport๋ฅผ ํ•ดํ‚นํ•˜์—ฌ healthCheck๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ํŒ๋ช…๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•œํŽธ Kubernetes ์ปค๋ฎค๋‹ˆํ‹ฐ๋Š” ์—ฌ์ „ํžˆ 1.14 LOL๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ๊ตฐ๋ถ„ํˆฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ go1.15 ํ”„๋ฆฌ๋ฆด๋ฆฌ์ฆˆ์—์„œ ์ž๊ฒฉ์„ ์–ป๊ธฐ ์œ„ํ•œ sig-scalability ๋ฐ sig-release์˜ ํ›Œ๋ฅญํ•œ ์ž‘์—…์œผ๋กœ ์ธํ•ด Kubernetes 1.19๋Š” go1.15์—์„œ ๋ฐฉ๊ธˆ ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. go1.16์—์„œ http/2 ์˜ต์…˜์„ ๋…ธ์ถœํ•˜๊ธฐ ์œ„ํ•œ ์ž‘์—…์ด ์ง„ํ–‰ ์ค‘์ธ ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฉฐ ๊ฐ€๋Šฅํ•œ ํ•œ ๋นจ๋ฆฌ ์ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ go1.15 ํ”„๋ฆฌ๋ฆด๋ฆฌ์ฆˆ์—์„œ ์ž๊ฒฉ์„ ์–ป๊ธฐ ์œ„ํ•œ sig-scalability ๋ฐ sig-release์˜ ํ›Œ๋ฅญํ•œ ์ž‘์—…์œผ๋กœ ์ธํ•ด Kubernetes 1.19๋Š” go1.15์—์„œ ๋ฐฉ๊ธˆ ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์˜ต์Šค. ์–ด์ƒ‰ํ•œ ๋†๋‹ด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. v1.19 ๋ฆด๋ฆฌ์Šค์— ๋งŽ์€ ๊ด€์‹ฌ์„ ๊ธฐ์šธ์ด์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
K8S์—์„œ go1.14๋ฅผ ์™„์ „ํžˆ ๊ฑด๋„ˆ๋›ด ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๊นŒ? ์šฐ์™€. ํฐ ๋„์•ฝ์ž…๋‹ˆ๋‹ค๐Ÿ‘

@povsister

์†”๋ฃจ์…˜์„ ๊ณต์œ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๊ฒŒ ํ–ˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ง€๊ธˆ์€ golang/ net@0ba52f6์— ์˜ํ•ด ๋„์ž…๋œ http2: perform connection health check ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋˜๋„๋ก ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
์ด ๋ฌธ์ œ์— ์•ฝ๊ฐ„์˜ ๋„์›€์ด ๋˜๋Š” ๊ฒƒ์œผ๋กœ ํŒ๋ช…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฐ˜์‘์ด ์กฐ๊ธˆ ๋Š๋ฆฌ๋‹ค.

์–ด๋–ค ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ–ˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ฆฌ๊ณ  ์–ด๋””, ์–ด๋–ค ํŒŒ์ผ์—์„œ?

@KarthikRangaraju
h2Transport๋ฅผ ์ดˆ๊ธฐํ™”ํ•  ๋•Œ healthCheck๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด ์ด PR ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.
๋˜๋Š” ๋Ÿฐํƒ€์ž„์— ๋‚ด๋ณด๋‚ด์ง€ ์•Š์€ ํ•„๋“œ์— ์•ก์„ธ์Šคํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ˜์‚ฌ/์•ˆ์ „ํ•˜์ง€ ์•Š์€ ์˜คํ”„์…‹ ํ•ดํ‚น์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿฌํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ „์— golang/x/net์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

์šฐ๋ฆฌ๋Š” ๋•Œ๋•Œ๋กœ ์ด ๋ฌธ์ œ์— ์ง๋ฉดํ•˜์ง€๋งŒ ์ด ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

์ฆ์ƒ์˜ ๊ทผ๋ณธ ์›์ธ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๊ด€์—†์ด ์ฆ์ƒ์„ ์ˆ˜์ •ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์˜ ์†”๋ฃจ์…˜:

  • ๋‹ค์Œ ์Šคํฌ๋ฆฝํŠธ๋Š” 1์‹œ๊ฐ„๋งˆ๋‹ค ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. kube ๊ตฌ์„ฑ ํŒŒ์ผ์„ ํ†ตํ•ด kubectl์„ ํ†ตํ•ด kube-api ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•ฉ๋‹ˆ๋‹ค.
    kubelet ์‚ฌ์šฉ(์ด ๋ฐฉ๋ฒ•์œผ๋กœ ๊ถŒํ•œ ์—์Šค์ปฌ๋ ˆ์ด์…˜์ด ์—†์Œ).
  • ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ thinks ์ž์‹ ์˜ ๋…ธ๋“œ๊ฐ€ NotReady์ธ์ง€ ๋ฌป์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ํŒŒ์ผ์—์„œ touch ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ kubelet ์žฌ์‹œ์ž‘์„ ํŠธ๋ฆฌ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
    ์ด๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ kubelet-watcher.service์˜ watched ์ด๋ฉฐ ๊ทธ์— ๋”ฐ๋ผ kubelet์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
#!/bin/bash

while true; do
  node_status=$(KUBECONFIG=/etc/kubernetes/kubelet.conf kubectl get nodes | grep $HOSTNAME | awk '{print $2}')
  date=$(date)
  echo "${date} Node status for ${HOSTNAME}: ${node_status}"
  if [ ${node_status} == "NotReady" ]; then
    echo "${date} Triggering kubelet restart ..."
    # Running touch command on /var/lib/kubelet/config.yaml. This will trigger a kubelet restart.
    # /usr/lib/systemd/system/kubelet-watcher.path & /usr/lib/systemd/system/kubelet-watcher.service
    # are responsible for watching changes in this file
    # and will restart the kubelet process managed by systemd accordingly.
    touch /var/lib/kubelet/config.yaml
  fi

  # Runs ever 1 hour
  sleep 3600
done
# cat  /usr/lib/systemd/system/kubelet-watcher.path
[Path]
PathModified=/var/lib/kubelet/config.yaml

[Install]
WantedBy=multi-user.target

# cat /usr/lib/systemd/system/kubelet-watcher.service
[Unit]
Description=kubelet restarter

[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl restart kubelet.service

[Install]
WantedBy=multi-user.target[root@den-iac-opstest-kube-node02 karthik]#

Kubernetes 1.19.0์—์„œ๋„ ๋ฌธ์ œ๊ฐ€ ์—ฌ์ „ํžˆ ์กด์žฌํ•˜์ง€๋งŒ ๋ฉ”์‹œ์ง€๊ฐ€ ์•ฝ๊ฐ„ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.
Sep 11 18:19:39 k8s-node3 kubelet[17382]: E0911 18:19:38.745482 17382 event.go:273] Unable to write event: 'Patch "https://192.168.1.150:6443/api/v1/namespaces/fhem/events/fhem-7c99f5f947-z48zk.1633c689ec861314": read tcp 192.168.1.153:34758->192.168.1.150:6443: use of closed network connection' (may retry after sleeping)
์ด์ œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์— "(์ˆ˜๋ฉด ํ›„ ๋‹ค์‹œ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Œ)"์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

golang ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  kubernetes์—์„œ ์ด๋ฅผ ์™„์ „ํžˆ ์™„ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์˜ˆ๋ฅผ ๋“ค์–ด "๋‹ซํžŒ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ์‚ฌ์šฉ"์— ๋„๋‹ฌํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ ์ด๋™์ด ์ „์†ก์„ ๊ต์ฒดํ•˜๋„๋ก ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋˜๋Š” HTTP 1.1์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ์ด ๋ฌธ์ œ๊ฐ€ ๊ณ„์† ๋ฐœ์ƒํ•ฉ๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ์ˆœ์ˆ˜ํ•˜๊ฒŒ HTTP 2์™€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๊นŒ? HTTP 1.1์ด ๋ฉด์—ญ์ด๊ณ  ํฐ ๋‹จ์ ์ด ์—†๋‹ค๋ฉด kubelet, kube-proxy ๋ฐ ๋‹ค์–‘ํ•œ ์ œ์–ด ํ‰๋ฉด ํ”„๋กœ์„ธ์Šค์— GODEBUG=http2client=0 ๋ฅผ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ GODEBUG=http2server=0 ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ณดํŽธ์ ์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด apiserver ํ”„๋กœ์„ธ์Šค์—

์ด๊ฒƒ์ด ์‹ค์ œ๋กœ ์ด ๋ฌธ์ œ๋ฅผ ์™„ํ™”ํ•˜๊ณ  HTTP2๋ฅผ ํ†ตํ•ด ๋ฉ€ํ‹ฐํ”Œ๋ ‰์‹ฑํ•˜์ง€ ์•Š์„ ๋•Œ ์—ฐ๊ฒฐ ์ˆ˜์˜ ์ฆ๊ฐ€๋กœ ์ธํ•œ ์ผ๋ถ€ ์„ฑ๋Šฅ ๋ฌธ์ œ ์ด์™ธ์˜ ๋‹ค๋ฅธ ์ฃผ์š” ํ•จ์ •์„ ์ผ์œผํ‚ค์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๊นŒ?

client-go๊ฐ€ "๋‹ซํžŒ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ์‚ฌ์šฉ"์— ๋„๋‹ฌํ•˜๋ฉด ์ „์†ก์„ ๊ต์ฒดํ•˜๋„๋ก ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ทธ๋‹ค์ง€ ์™ธ๊ณผ์ ์œผ๋กœ๋Š” ์•„๋‹™๋‹ˆ๋‹ค... ์ƒˆ๋กœ์šด ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ๊ตฌ์„ฑํ•˜๋Š” ํ˜ธ์ถœ์ž์— ์ง๋ฉดํ•˜์—ฌ ์ž„์‹œ ํฌํŠธ ๊ณ ๊ฐˆ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ํ˜„์žฌ ์ „์†ก์ด ๊ณต์œ ๋ฉ๋‹ˆ๋‹ค.

HTTP 1.1์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ด ๋ฌธ์ œ๊ฐ€ ๊ณ„์† ๋ฐœ์ƒํ•ฉ๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ์ˆœ์ˆ˜ํ•˜๊ฒŒ HTTP 2์™€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚ด๊ฐ€ ์•„๋Š” ํ•œ, HTTP 1.1์€ ์œ ํœด ์—ฐ๊ฒฐ์ด ์—ฐ๊ฒฐ ์œ ์ง€ ํ’€๋กœ ๋Œ์•„๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(ํ•‘ ์ƒํƒœ ํ™•์ธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ง€/์™„ํ™” ์˜ต์…˜์ด ๋” ์ ์Œ)

ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ์ข‹์€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ? ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ฃฝ์—ˆ์„ ๋•Œ๋ฅผ ์–ด๋–ป๊ฒŒ ์‹๋ณ„ํ•˜๊ณ  ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ•ด์•ผ ํ•  ์ตœ์†Œํ•œ์˜ ์ผ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ(ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ์œ ์ผํ•œ ์˜ต์…˜์ผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆผ)?

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ฃฝ์—ˆ์„ ๋•Œ ์–ด๋–ป๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋™์ผํ•œ URL์— ๋Œ€ํ•ด ๋ฐ˜๋ณต์ ์œผ๋กœ write tcp xxx use of closed network connection ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ. ์ด๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ๋งํ–ˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. Transport ๋‚ด๋ถ€์˜ ์—ฐ๊ฒฐ ํ’€์€ ์š”์ฒญ๋œ host:port ์— ๋Œ€ํ•ด ๋ฐ๋“œ tcp ์—ฐ๊ฒฐ์„ ์บ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ์ข‹์€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚ด๊ฐ€ ์•„๋Š” ํ•œ http.Client ์žฌ๊ตฌ์„ฑํ•˜๋ฉด ์ „์ฒด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์ง€ ์•Š๊ณ ๋„ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์„ ๊ณ ์น˜๊ธฐ ์œ„ํ•ด ์šฐ๋ฆฌ๊ฐ€ ํ•ด์•ผ ํ•  ์ตœ์†Œํ•œ์˜ ์ผ์€ ๋ฌด์—‡์ธ๊ฐ€

ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ์†Œ์Šค ์ฝ”๋“œ ์ˆ˜์ค€ ์•ก์„ธ์Šค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฃฝ์€ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ํ•„์š”ํ•  ๋•Œ ์ƒˆ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋‹ค์‹œ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ฌด๋„ ์ด์ „ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๋ฉ๋‹ˆ๋‹ค.

๋‚ด ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ์†Œ์Šค ์ฝ”๋“œ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์žˆ์ง€๋งŒ kubernetes ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๊ฐ์‹œํ•  ๋•Œ TCP ์—ฐ๊ฒฐ์ด ์ด์™€ ๊ฐ™์ด ๋Š์–ด์กŒ๋Š”์ง€ ๊ฐ์ง€ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค(์‹œ๊ณ„๊ฐ€ HTTP ํŠธ๋žœ์žญ์…˜์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜๋ฆฌํ•  ์ฝ”๋“œ๊นŒ์ง€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค).

์‘. ๋‹น์‹ ์ด ์˜ณ์Šต๋‹ˆ๋‹ค. http.Client ๋Š” kubernetes ํด๋ผ์ด์–ธํŠธ์— ์˜ํ•ด ๋…ธ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
ํ˜„์žฌ๋กœ์„œ๋Š” ์ตœ์ƒ์œ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ ์€ ๋น„์šฉ์œผ๋กœ ์ด๋Ÿฌํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์€ ํฌ๋ง์ด ์—†์Šต๋‹ˆ๋‹ค.
kubernetes ํด๋ผ์ด์–ธํŠธ๊ฐ€ http.DefaultClient ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ „์ฒด kubernetes ํด๋ผ์ด์–ธํŠธ๋ฅผ ์žฌ๊ตฌ์„ฑํ•˜์—ฌ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์‹œ ์š”์ฒญ์˜ ๊ฒฝ์šฐ ์•…ํ™”๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. kubernetes ํด๋ผ์ด์–ธํŠธ๋Š” ์š”์ฒญ์„ ๊ณ„์† ์žฌ์‹œ๋„ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฉฐ ์ƒ์œ„ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ง€๊ธˆ ์ƒํ™ฉ์— ๋Œ€ํ•ด ์ข‹์€ ์ƒ๊ฐ์ด ์—†์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ์ œ์•ˆ๋œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋ช‡ ์ฃผ ๋™์•ˆ ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๋ฐ๋ชฌ์…‹์œผ๋กœ ์‹คํ–‰๋˜๋Š” ํŒŒ์ด์ฌ ์Šคํฌ๋ฆฝํŠธ๋กœ ์ „ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ผ์ฃผ์ผ์— ํ•œ๋‘ ๋ฒˆ(kubelet์„ ์ž๋™์œผ๋กœ ๋‹ค์‹œ ์‹œ์ž‘) ์กฐ์น˜๋ฅผ ์ทจํ•˜๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ํด๋Ÿฌ์Šคํ„ฐ ์šด์˜์— ๋ถ€์ •์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. 5๋ถ„ ๋™์•ˆ 2๊ฐœ ์ด์ƒ์˜ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋Š” ๊ฒฝ์šฐ์—๋งŒ kubelet์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋„๋ก ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋•Œ๋•Œ๋กœ ํ•˜๋‚˜์˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Œ์„ ๋ณด์•˜๊ณ  ๊ทธ๊ฒƒ์€ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด kubelet ๋กœ๊ทธ์— ์ง€์†์ ์œผ๋กœ use of closed network connection ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

pullrequest๋ฅผ ์ƒ์„ฑํ•ด ์ฃผ์‹œ๋ฉด ์ด ์ฃผ์ œ๋ฅผ ์กฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‹จ์ผ ๋ฒ ์–ด๋ฉ”ํƒˆ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ 24์‹œ๊ฐ„๋งˆ๋‹ค ์•ฝ 2-4๋ฒˆ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. 1.17.12

๋‹จ์ผ ๋…ธ๋“œ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ๋„ api-server ํฌ๋“œ๊ฐ€ ๋‹ค์‹œ ์‹œ์ž‘๋  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. apiserver์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ์ด ๋Š์–ด์ ธ ์˜ค๋ฅ˜ ๋ฒˆํ˜ธ ์ตœ์†Œํ™” ๋ฐฉ๋ฒ•์œผ๋กœ apiserver๊ฐ€ ๋‹ค์‹œ ์‹œ์ž‘๋˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ ์•ž์—์„œ haproxy๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด์จŒ๋“  ์ผ๋ถ€ LB ๊ตฌ์„ฑ์œผ๋กœ ์ด๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?

@shubb30 ์†”๋ฃจ์…˜์„ ๊ณต์œ ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋‚ด apiserver๊ฐ€ ๋‹ค์‹œ ์‹œ์ž‘ ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ๊ทธ ํ•ญ๋ชฉ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•œ ๋‹ค์Œ kubelet์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด daemonset ๋ฐ ์…ธ ํŠธ๋ฆญ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ฝค ์ž˜ ์ž‘๋™ํ–ˆ์ง€๋งŒ ์ž„์‹œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ์€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ์ž˜ ์ž‘๋™ํ•˜๋Š” ์ˆ˜์ •๋œ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค.

์ด๋ด ์—ฌ๋Ÿฌ๋ถ„!

์ด ๋ฐฑํฌํŠธ๊ฐ€ ์ž ์žฌ์ ์œผ๋กœ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๊นŒ?
https://github.com/golang/go/issues/40423

์ข‹์€ ์†Œ์‹: golang/net master๋Š” http2 ์ „์†ก ๊ตฌ์„ฑ์„ ์ง€์›ํ•˜๋ฏ€๋กœ ์ด์ œ ์‹œ๊ฐ„ ์ œํ•œ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! https://github.com/golang/net/commit/08b38378de702b893ee869b94b32f833e2933bd2

์™„๋ฃŒ.
๊ฒ€ํ† ๋ฅผ ์œ„ํ•ด PR์ด ์—ด๋ ธ์Šต๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ์ข‹์€ ์†Œ์‹: Kubernetes๋Š” ํ‘œ์ค€ net/http ํŒจํ‚ค์ง€์— ๋ฒˆ๋“ค๋œ http2๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋‹ค์Œ Go ๋ฆด๋ฆฌ์Šค๋ฅผ ๊ธฐ๋‹ค๋ฆด ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. https://github.com/golang/net/commit/08b38378de702b893ee869b94b32f833e2933bd2 ๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ์ˆ˜์ • ์‚ฌํ•ญ์„ ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค. https://github.com/kubernetes/kubernetes/pull/95898
ํ•„์ˆ˜ ๋ฒ„์ „์— ๋Œ€ํ•œ ์ข…์†์„ฑ์„ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ๊ธฐ๋ณธ์ ์œผ๋กœ http2 ์ „์†ก ์ƒํƒœ ํ™•์ธ์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.
apiserver(์˜ˆ: kubelet)์™€ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•ด client-go๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด "app hang at write tcp xxx: use of closed connection" ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

์˜๊ฒฌ์„ ๋‚จ๊ฒจ์ฃผ์„ธ์š”.

์–ธ๊ธ‰๋œ #95898์€ ๋…ผ์˜ํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ์ด์œ ๋กœ ํ์‡„๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์™€ ๊ด€๋ จํ•˜์—ฌ ๋‹ค๋ฅธ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

https://github.com/kubernetes/kubernetes/pull/95981 (์œ„์— ๋งํฌ๋จ)์ด http/2 ์ˆ˜์ • ์‚ฌํ•ญ์„ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด ์ง„ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” kubernetes์˜ 1.17.X ๋ฒ„์ „์—๋งŒ ํ•ด๋‹น๋ฉ๋‹ˆ๊นŒ?

@krmayankk ์ •ํ™•ํžˆ ์–ธ์ œ ์‹œ์ž‘๋˜์—ˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ ์–ด๋„ 1.17-1.19์—๋Š” ์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. #95980์€ ๊ทธ๊ฒƒ์„ ๊ณ ์ณค์–ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค(๋‹ค์Œ 1.20 ๋ฆด๋ฆฌ์Šค์˜ ์ผ๋ถ€๊ฐ€ ๋  ๊ฒƒ์ด๋ฉฐ ์–ด์ œ ๋ฒ ํƒ€์— ํฌํ•จ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค)

@krmayankk ์šฐ๋ฆฌ๋Š” v1.18.9์—์„œ๋„ ์ด ๋ฌธ์ œ๋ฅผ ๋ณด์•˜์ง€๋งŒ ๋งค์šฐ ๋†’์€ ๋„คํŠธ์›Œํฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์œ ๋ฐœํ•œ ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋Š” Rancher ๋ฒ„์ „์— ์˜ํ•ด ํŠธ๋ฆฌ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ฒ„์ „์œผ๋กœ ๋กค๋ฐฑํ•œ ํ›„ ๋ฌธ์ œ๊ฐ€ ๊ด€์ฐฐ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ ์ด์ œ ์œ„์˜ ์„ค๋ช…์— ์žˆ๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์€ ์ทจ๋ฏธ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ "๊ณ ์ •"ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์‹œ์Šคํ…œ ๋‹จ์œ„ ๋ฐ ํƒ€์ด๋จธ๋กœ ๋…ธ๋“œ์— ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์€ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ”Œ๋ ˆ์ด๋ถ ์„ ์ž‘์„ฑ

https://github.com/kubernetes/kubernetes/pull/95981 ๋ฐ https://github.com/kubernetes/kubernetes/issues/87615 ์—์„œ 1.18 ๋ฆด๋ฆฌ์Šค ๋ถ„๊ธฐ๋ฅผ ์ฒด๋ฆฌ ์„ ํƒ/๋ฐฑํฌํŠธํ•  ๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๊นŒ?

1.17 ๋ฆด๋ฆฌ์Šค ๋ถ„๊ธฐ์—์„œ #95981์„ ์ฒด๋ฆฌํ”ฝํ•  ๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ด ์˜๊ฒฌ์€ ์ด์ „ ๋ฆด๋ฆฌ์Šค์— ๋Œ€ํ•œ ๋ฐฑํฌํŠธ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. https://github.com/kubernetes/kubernetes/pull/95981#issuecomment -730561539

๋Œ€๋‹ต์€ "ํž˜๋“ค๊ณ  ๋ฌผ๊ฑด์„ ๋ถ€์ˆ  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์•„๋งˆ๋„ ๊ทธ๋ ‡์ง€ ์•Š์„ ๊ฒƒ"์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์งˆ๋ฌธ์„ ๋ฐ›์•˜์„ ๋•Œ v1.17์„ ์‹คํ–‰ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ์„œ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๋Œ€๋‹ต์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ˆ˜์ •์„ ์œ„ํ•ด v1.20์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๊นŒ? :์›ƒ์Œ:

์ด๊ฒƒ์„ 1.19 ์ด์ƒ์œผ๋กœ ๋ฐฑํฌํŒ…ํ•˜๋ฉด ๋น„๊ต์  ๋นจ๋ฆฌ ์ˆ˜์ • ์‚ฌํ•ญ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. Docker์˜ ์‚ฌ์šฉ ์ค‘๋‹จ์œผ๋กœ ์ธํ•ด ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์ด 1.20์„ ๋ณด๋ฅ˜ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ 1.19 ์ด์ƒ์œผ๋กœ ๋ฐฑํฌํŒ…ํ•˜๋ฉด ๋น„๊ต์  ๋นจ๋ฆฌ ์ˆ˜์ • ์‚ฌํ•ญ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋ฏธ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Docker์˜ ์‚ฌ์šฉ ์ค‘๋‹จ์œผ๋กœ ์ธํ•ด ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์ด 1.20์„ ๋ณด๋ฅ˜ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์ค‘๋‹จ ๊ฒฝ๊ณ  ์™ธ์— ๋„์ปค์™€ ๊ด€๋ จํ•˜์—ฌ 1.20์—์„œ ๋ณ€๊ฒฝ๋œ ์‚ฌํ•ญ์€ ์—†์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ ์ค‘๋‹จ ๊ธฐ๊ฐ„์˜ ๋์—์„œ, ์ง€์›์ด ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค dockershim.

raspbian 10์˜ 1.20์—์„œ ์ด๋Ÿฌํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด ์ค‘ ํ•˜๋‚˜๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ณณ์€ ์–ด๋””์ž…๋‹ˆ๊นŒ? ํด๋ผ์šฐ๋“œ ๊ด€๋ฆฌ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋น„์šฉ์ด ์ž์ฒด ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋น„์šฉ ํšจ์œจ์ ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚ด ์ž์‹ ์˜ ๋ช…ํ™•์„ฑ์„ ์œ„ํ•ด ์ด๊ฒƒ์€ #95981๋กœ ํ•ด๊ฒฐ๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋ฉฐ 1.20์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ๊ณ  1.19๋กœ ๋‹ค์‹œ ํฌํŒ…๋˜์—ˆ์Šต๋‹ˆ๊นŒ?

95981์€ 1.20์œผ๋กœ ๋ณ‘ํ•ฉ๋˜์—ˆ๊ณ  #96770์—์„œ 1.19๋กœ ์„ ํƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

/๋‹ซ๋‹ค

@caesarxuchao : ์ด ๋ฌธ์ œ๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

์— ๋Œ€ํ•œ ์‘๋‹ต ์ด :

95981์€ 1.20์œผ๋กœ ๋ณ‘ํ•ฉ๋˜์—ˆ๊ณ  #96770์—์„œ 1.19๋กœ ์„ ํƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

/๋‹ซ๋‹ค

PR ๋Œ“๊ธ€์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‚˜์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ง€์นจ์€ ์—ฌ๊ธฐ์—์„œ ํ™•์ธํ•  ์ˆ˜ kubernetes/test-infra ์ €์žฅ์†Œ์— ๋ฌธ์ œ๋ฅผ ์ œ์ถœํ•˜์„ธ์š”.

v1.16, v1.17 ๋˜๋Š” v1.18์— ๋Œ€ํ•œ ๋ฐฑํฌํŠธ/์ฒด๋ฆฌ ์„ ํƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@chilicat ์ฐธ์กฐ https://github.com/kubernetes/kubernetes/pull/95981#issuecomment -730561539. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ 1.18 ๋˜๋Š” ์ด์ „ ๋ฒ„์ „์œผ๋กœ ์„ ํƒํ•˜์ง€ ์•Š์„ ๊ณ„ํš์ž…๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰