ํ๋ก๋์ ํด๋ฌ์คํฐ๋ฅผ 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๋ ๊ฐ๋๋์ด ์คํ ์ค์ด์๊ณ , ๋ค๋ฅธ ๋ชจ๋ ๋ ธ๋๋ ๊ฐ๋๋์ด ์คํ ์ค์ด์๊ณ , ๊ทธ ์ธ์ ๋ชจ๋ ๊ฒ์ ๋ณ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค. ์ด๊ฒ์ (์ค๋) ์ด ๋ฌธ์ ์ ์ํฅ์ ๋ฐ์ ์ ์ผํ ๊ฒ์ ๋๋ค.
์ด๋ฐ ์ข ๋ฅ์ ์ด๋ฒคํธ๋ฅผ ์ํํ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
์ด๊ฒ์ด ๋ฒ๊ทธ๊ฐ ๋ ๊น์?
/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
์ฝ๋์ ๊ฐ ํ๋์ฝ๋ฉ ์ค์ )์ ๊ตฌํํ์ฌ ๋ค์์ ๊ด์ฐฐํ์ต๋๋ค.
๋ํ ๋ฌธ์ ๋ฅผ ์ ๋ฐํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์๋ก์ด ํต์ฐฐ๋ ฅ์ ์ป์ ์ ์์์ต๋๋ค. ๋ผ์ด๋ธ ๋ง์ด๊ทธ๋ ์ด์ ์ ๋ํ @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์ ์ ๋ฐ์ดํธํ๋ ๊ฒ์ ์์ง ๋ง์ญ์์ค.
์ฐ๋ฆฌ๋ ๋๋๋ก ์ด ๋ฌธ์ ์ ์ง๋ฉดํ์ง๋ง ์ด ๋ฌธ์ ๋ฅผ ์ฌํํ ์ ์์์ต๋๋ค.
์ฆ์์ ๊ทผ๋ณธ ์์ธ์ ํ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ์๊ด์์ด ์ฆ์์ ์์ ํ๊ณ ์์ต๋๋ค.
์ฐ๋ฆฌ์ ์๋ฃจ์ :
thinks
์์ ์ ๋
ธ๋๊ฐ NotReady์ธ์ง ๋ฌป์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด ํ์ผ์์ touch
๋ช
๋ น์ ์คํํ์ฌ kubelet ์ฌ์์์ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค.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๋ก ๋ค์ ํฌํ ๋์์ต๋๊น?
/๋ซ๋ค
@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 ๋๋ ์ด์ ๋ฒ์ ์ผ๋ก ์ ํํ์ง ์์ ๊ณํ์ ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
5๋ถ๋ง๋ค ์ด bash ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.