Kubeadm: ๋งˆ์Šคํ„ฐ IP ์ฃผ์†Œ ๋ณ€๊ฒฝ

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

๋…ธ๋“œ ์‹œ์ž‘ ์‹œ ์‚ฌ์„ค IP ์ฃผ์†Œ๋ฅผ ๋™์ ์œผ๋กœ ํ• ๋‹นํ•˜๋Š” ๊ณต๊ธ‰์ž๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”๋ฐ kubeadm ๊ธฐ๋ฐ˜ ์„ค์ •์ด ์ค‘๋‹จ๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” kubeadm์œผ๋กœ ์ƒˆ๋กœ์šด ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„๋ฅผ ์„ค์ •ํ–ˆ๊ณ  ์ž˜ ์ž‘๋™ํ–ˆ์ง€๋งŒ ์‹œ์Šคํ…œ์„ ์ข…๋ฃŒํ•˜๊ณ  ๋‹ค์‹œ ์‹œ์ž‘ํ•œ ํ›„ ์‚ฌ์„ค IP ์ฃผ์†Œ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์œผ๋ฉฐ ์ด์ œ kubectl์„ ์‚ฌ์šฉํ•  ๋•Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค Unable to connect to the server: x509: certificate is valid for 10.96.0.1, 10.4.36.13, not 10.4.20.67
(ํ›„์ž๋Š” ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์˜ ์ƒˆ IP ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค.)

๊ตฌ์„ฑ์„ ์žฌ์„ค์ •ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ kubeadm init ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์˜ˆ๋ฅผ ๋“ค์–ด ํด๋Ÿฌ์Šคํ„ฐ ํฌ๋“œ, RC ๋“ฑ์„ ์œ ์ง€ํ•˜๊ณ  ์‹ถ์ง€๋งŒ IP ์ฃผ์†Œ ๋Œ€์‹  ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋„๋ก ์ธ์ฆ์„œ๋ฅผ ๋‹ค์‹œ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ IP ์ฃผ์†Œ ๋Œ€์‹  ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์œผ๋กœ init๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๋‚˜์™€ ๋™์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

[06:20 root<strong i="12">@scumbag01</strong> ~] > kubeadm init --apiserver-advertise-address scumbag01 --skip-preflight-checks
[kubeadm] WARNING: kubeadm is in beta, please do not use it for production clusters.
[init] Using Kubernetes version: v1.7.0
[init] Using Authorization modes: [Node RBAC]
[preflight] Skipping pre-flight checks
[certificates] Using the existing CA certificate and key.
[certificates] Using the existing API Server certificate and key.
[certificates] Using the existing API Server kubelet client certificate and key.
[certificates] Using the existing service account token signing key.
[certificates] Using the existing front-proxy CA certificate and key.
[certificates] Using the existing front-proxy client certificate and key.
[certificates] Valid certificates and keys now exist in "/etc/kubernetes/pki"
a kubeconfig file "/etc/kubernetes/admin.conf" exists already but has got the wrong API Server URL

์žฌ์„ค์ •ํ•˜๋Š” ๋Œ€์‹  ์ œ์–ดํ•  ์ˆ˜ ์—†๋Š” IP ์ฃผ์†Œ์ธ 10.4.36.13์— ๋Œ€ํ•ด ํ˜„์žฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ์ธ์ฆ์„œ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

/etc/kubernetes/*.conf ์ œ๊ฑฐํ•˜๊ณ  ์œ„์˜ init๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋ฉด ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  ์—ฌ์ „ํžˆ server: https://10.4.20.67:6443 ๋ฅผ ์”๋‹ˆ๋‹ค.

kubeadm init๊ฐ€ ์„ค์ •์„ ๋ฎ์–ด์“ฐ๊ณ  ์ƒˆ ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์žฌ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ์ƒˆ๋กœ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ด์ „ kubeadm init ์ƒ์„ฑ๋œ ๋ชจ๋“  ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ํŒŒ๊ดดํ•˜๋Š” kubeadm reset ๋˜๋Š” ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๊นŒ?

  • kubeadm ๋ฒ„์ „ : &version.Info{์ฃผ์š”:"1", ๋ถ€:"7", GitVersion:"v1.7.0", GitCommit:"d3ada0119e776222f11ec7945e6d860061339aad", GitTreeState:"clean", BuildDate-2:" 19Z", GoVersion:"go1.8.3", ์ปดํŒŒ์ผ๋Ÿฌ:"gc", ํ”Œ๋žซํผ:"linux/amd64"}
  • ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฒ„์ „ : 1.7.0
  • ํด๋ผ์šฐ๋“œ ์ œ๊ณต์ž ๋˜๋Š” ํ•˜๋“œ์›จ์–ด ๊ตฌ์„ฑ : Scaleway, Intel ATOM x64
  • OS (์˜ˆ: /etc/os-release): Debian Jessie
  • ์ปค๋„ : 4.9.20
kinsupport

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

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์˜ค๋ž˜๋œ ๋ฌธ์ œ๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์•„๋งˆ๋„ ๋‚ด ์˜๊ฒฌ์ด ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ์œ ์šฉ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋ถˆํ–‰ํžˆ๋„ @patricklucas ์™€ @weisjohn ์ด ์ œ์•ˆํ•œ ์†”๋ฃจ์…˜์ด ์ €์—๊ฒŒ ํšจ๊ณผ๊ฐ€ ์—†์—ˆ์œผ๋ฏ€๋กœ ์ œ๊ฐ€ ์ง์ ‘ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

systemctl stop kubelet docker

cd /etc/

# backup old kubernetes data
mv kubernetes kubernetes-backup
mv /var/lib/kubelet /var/lib/kubelet-backup

# restore certificates
mkdir -p kubernetes
cp -r kubernetes-backup/pki kubernetes
rm kubernetes/pki/{apiserver.*,etcd/peer.*}

systemctl start docker

# reinit master with data in etcd
# add --kubernetes-version, --pod-network-cidr and --token options if needed
kubeadm init --ignore-preflight-errors=DirAvailable--var-lib-etcd

# update kubectl config
cp kubernetes/admin.conf ~/.kube/config

# wait for some time and delete old node
sleep 120
kubectl get nodes --sort-by=.metadata.creationTimestamp
kubectl delete node $(kubectl get nodes -o jsonpath='{.items[?(@.status.conditions[0].status=="Unknown")].metadata.name}')

# check running pods
kubectl get pods --all-namespaces

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

์ด๋Š” kubeadm์˜ ์ œํ•œ ์‚ฌํ•ญ์ด ์•„๋‹ˆ๋ผ ์ผ๋ฐ˜์ ์ธ ๋ณด์•ˆ ๊ด€ํ–‰์ž…๋‹ˆ๋‹ค.
์ธ์ฆ์„œ๋Š” {your-old-IP-here}์— ๋Œ€ํ•ด ์„œ๋ช…๋˜์—ˆ์œผ๋ฉฐ ๋ณด์•ˆ ํ†ต์‹ ์€ {your-new-ip-here}์— ๋ฐœ์ƒํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋ฏธ๋ฆฌ ์ธ์ฆ์„œ์— ๋” ๋งŽ์€ IP๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ...

๋‹น์‹ ์˜ ์‘๋‹ต์„ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

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

๋‚˜๋Š” kubeadm reset ์‹ค์ œ๋กœ ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๊ฐ„๊ณผํ–ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋ ˆํผ๋Ÿฐ์Šค ๊ฐ€์ด๋“œ์— ์–ธ๊ธ‰๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. Reset ๋ฐ init๋Š” ์ €์—๊ฒŒ ์ถฉ๋ถ„ํžˆ ์ž˜ ์ž‘๋™ํ–ˆ์œผ๋ฉฐ ๋งˆ์Šคํ„ฐ ์‹œ์Šคํ…œ์„ ์ข…๋ฃŒํ•˜๋Š” ๊ฒƒ์„ ํ”ผํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ œ ๋ฌธ์ œ๋Š” ๋“œ๋ฌผ๊ณ  ํ”„๋กœ๋•์…˜ ์‚ฌ์šฉ ์‚ฌ๋ก€์™€ ๊ฑฐ๋ฆฌ๊ฐ€ ๋ฉ€๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. kubeadm reset ๋‹จ๊ณ„๋ฅผ ๋ชจ๋ฐฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํด๋Ÿฌ์Šคํ„ฐ ์„ค์ •์„ ๋ณด์กดํ•˜๊ธฐ ์œ„ํ•ด etcd ๋ฐ์ดํ„ฐ ํด๋”๋ฅผ ์œ ์ง€ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์–ด๋Š ์ชฝ์ด๋“  kubeadm์—์„œ ์ˆ˜ํ–‰ํ•œ ๋ชจ๋“  ์ž‘์—…์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค! ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ๋ช‡ ๋ถ„ ๋งŒ์— ์‹œ์ž‘๋˜๋Š” ๊ฒƒ์„ ๋ณด๋Š” ๊ฒƒ์€ ๋งˆ๋ฒ•๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ €๋Š” 0.14๋ถ€ํ„ฐ Kubernetes๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ 1.0๋ถ€ํ„ฐ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@analytik ๋‚˜๋Š” ๋‹น์‹ ๊ณผ ๋˜‘๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํšŒ์‚ฌ ๋„คํŠธ์›Œํฌ๊ฐ€ gcr.io๋ฅผ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์„ค์น˜๋ฅผ ์œ„ํ•ด ๋™๊ธ€์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ณต๊ธ‰์ž IP๋Š” ๊ณ„์† ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝ๋˜๋ฉฐ ๋‚ด ํ†ต์ œ ํ•˜์— ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜์กฐ์ฐจ๋„ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋™๊ธ€์„ ๊ณ„์† ์—ฐ๊ฒฐํ•ด๋„ ๋„คํŠธ์›Œํฌ ์žฌ์„ค์ •์œผ๋กœ ์ธํ•ด IP๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?
@luxas ์ง„ํ–‰ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ œ์•ˆํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์ €๋Š” K8S์˜ ์ดˆ๋ณด์ž์ž…๋‹ˆ๋‹ค. ์ด ๊ตฌ์„ฑ์œผ๋กœ ์™„์ „ํžˆ ์†์‹ค๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋™์  IP ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๋ณ€๊ฒฝ๋œ ๋งˆ์Šคํ„ฐ IP๋Š” ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ณ  ๊ณ„์‹ ๊ฐ€์š”?

์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ „์ฒด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์žฌ์„ค์ •ํ•˜์ง€ ์•Š๊ณ  ๋งˆ์Šคํ„ฐ IP ์ˆ˜์ •์„ ์ง„ํ–‰ํ•˜๋Š” ๋ฌธ์„œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ด๊ฒƒ์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค:

  • /etc/kubernetes์˜ ๋ชจ๋“  ๊ตฌ์„ฑ ํŒŒ์ผ์—์„œ IP ์ฃผ์†Œ ๋ฐ”๊พธ๊ธฐ
  • /etc/kubernetes/pki ๋ฐฑ์—…
  • /etc/kubernetes/pki์—์„œ ์ด์ „ IP ์ฃผ์†Œ๋ฅผ ๋Œ€์ฒด ์ด๋ฆ„์œผ๋กœ ๊ฐ€์ง„ ์ธ์ฆ์„œ ์‹๋ณ„[1]
  • ๊ฐ๊ฐ์— ๋Œ€ํ•œ ์ธ์ฆ์„œ์™€ ํ‚ค๋ฅผ ๋ชจ๋‘ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค (๋‚˜์—๊ฒŒ๋Š” apiserver ๋ฐ etcd/peer์˜€์Šต๋‹ˆ๋‹ค)
  • kubeadm alpha phase certs ์‚ฌ์šฉํ•˜์—ฌ ์ธ์ฆ์„œ ์žฌ์ƒ์„ฑ [2]
  • ์ด์ „ IP[3]๋ฅผ ์ฐธ์กฐํ•œ kube-system ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ configmap ์‹๋ณ„
  • ํ•ด๋‹น ๊ตฌ์„ฑ ๋งต์„ ์ˆ˜๋™์œผ๋กœ ํŽธ์ง‘
  • kubelet ๋ฐ docker ๋‹ค์‹œ ์‹œ์ž‘(๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ฐ•์ œ๋กœ ๋‹ค์‹œ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด)

[1]

/etc/kubernetes/pki# for f in $(find -name "*.crt"); do openssl x509 -in $f -text -noout > $f.txt; done
/etc/kubernetes/pki# grep -Rl 12\\.34\\.56\\.78 .
./apiserver.crt.txt
./etcd/peer.crt.txt
/etc/kubernetes/pki# for f in $(find -name "*.crt"); do rm $f.txt; done

[2]

/etc/kubernetes/pki# rm apiserver.crt apiserver.key
/etc/kubernetes/pki# kubeadm alpha phase certs apiserver
...
/etc/kubernetes/pki# rm etcd/peer.crt etcd/peer.key
/etc/kubernetes/pki# kubeadm alpha phase certs etcd-peer
...

[์‚ผ]

$ kubectl -n kube-system get cm -o yaml | less
...
$ kubectl -n kube-system edit cm ...

์™€์šฐ, ๋‚˜๋Š”์ด ๋ช…๋ น์„ ๋ชฐ๋ž์Šต๋‹ˆ๋‹ค. ํ›Œ๋ฅญํ•œ ์ •๋ณด, ๊ทธ ํŠธ๋ฆญ์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ณ ๋ง™์Šต๋‹ˆ๋‹ค !

configmaps๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ฐพ์•„ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

kubeadm์ด ํ–ฅํ›„ ๋ฆด๋ฆฌ์Šค์—์„œ ์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@patricklucas ์ง„์ง€ํ•˜๊ฒŒ

๋” ๋ช…ํ™•ํ•œ ์ •๋ณด๋ฅผ ์›ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝํ—˜์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

  1. /etc/kubernetes ์žˆ๋Š” ๋ชจ๋“  ๊ตฌ์„ฑ ํŒŒ์ผ์˜ IP ์ฃผ์†Œ๋ฅผ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค.
    bash oldip=192.168.1.91 newip=10.20.2.210 cd /etc/kubernetes # see before find . -type f | xargs grep $oldip # modify files in place find . -type f | xargs sed -i "s/$oldip/$newip/" # see after find . -type f | xargs grep $newip
  2. /etc/kubernetes/pki ๋ฐฑ์—…
    bash mkdir ~/k8s-old-pki cp -Rvf /etc/kubernetes/pki/* ~/k8s-old-pki
  3. ์ด์ „ IP ์ฃผ์†Œ๋ฅผ ๋Œ€์ฒด ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” /etc/kubernetes/pki ์ธ์ฆ์„œ ์‹๋ณ„(์ •๋ฆฌ ๊ฐ€๋Šฅ)
    bash cd /etc/kubernetes/pki for f in $(find -name "*.crt"); do openssl x509 -in $f -text -noout > $f.txt; done grep -Rl $oldip . for f in $(find -name "*.crt"); do rm $f.txt; done
  4. ์ด์ „ IP๋ฅผ ์ฐธ์กฐํ•œ kube-system ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ configmap์„ ์‹๋ณ„ํ•˜๊ณ  ํŽธ์ง‘ํ•ฉ๋‹ˆ๋‹ค.

    # find all the config map names
    configmaps=$(kubectl -n kube-system get cm -o name | \
      awk '{print $1}' | \
      cut -d '/' -f 2)
    
    # fetch all for filename reference
    dir=$(mktemp -d)
    for cf in $configmaps; do
      kubectl -n kube-system get cm $cf -o yaml > $dir/$cf.yaml
    done
    
    # have grep help you find the files to edit, and where
    grep -Hn $dir/* -e $oldip
    
    # edit those files, in my case, grep only returned these two:
    kubectl -n kube-system edit cm kubeadm-config
    kubectl -n kube-system edit cm kube-proxy
    
  5. IP ์ฃผ์†Œ ๋ณ€๊ฒฝ(๋ฐฐํฌ์šฉ cli ๋˜๋Š” gui๋ฅผ ํ†ตํ•ด)
  6. ์ด์ „ ๋‹จ๊ณ„์—์„œ grep์œผ๋กœ ์‹๋ณ„๋œ ๊ฐ๊ฐ์— ๋Œ€ํ•œ ์ธ์ฆ์„œ์™€ ํ‚ค๋ฅผ ๋ชจ๋‘ ์‚ญ์ œํ•˜๊ณ  ํ•ด๋‹น ์ธ์ฆ์„œ๋ฅผ ์žฌ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

    ์ฐธ๊ณ : kubeadm admin phase certs ... ๋ฅผ ํ†ตํ•ด ์ธ์ฆ์„œ๋ฅผ ๋‹ค์‹œ ๋งŒ๋“ค๊ธฐ ์ „์— ์ƒˆ IP ์ฃผ์†Œ๋ฅผ ์ ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    rm apiserver.crt apiserver.key
    kubeadm alpha phase certs apiserver
    
    rm etcd/peer.crt etcd/peer.key
    kubeadm alpha phase certs etcd-peer
    
  7. kubelet ๋ฐ docker๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค.
    bash sudo systemctl restart kubelet sudo systemctl restart docker
  8. ์ƒˆ ๊ตฌ์„ฑ ์œ„์— ๋ณต์‚ฌ
    bash sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config

@mariamTr ^

์ฃผ๋ชฉํ•ด์•ผ ํ•  ๋˜ ๋‹ค๋ฅธ ์‚ฌํ•ญ์€ ๊ตฌ์„ฑ ํŒŒ์ผ์—์„œ k8s ๋ฒ„์ „์„ ์ง€์ •ํ•˜์—ฌ ์˜คํ”„๋ผ์ธ ๋ชจ๋“œ์—์„œ ์ธ์ฆ์„œ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. https://github.com/kubernetes/kubernetes/issues/54188#issuecomment -418880831

@weisjohn ๋‹ค์Œ ์‚ฌํ•ญ์„ ์ฐธ๊ณ ํ•˜์—ฌ ์˜๊ฒฌ์„ ์—…๋ฐ์ดํŠธํ•ด ์ฃผ

kubectl edit cm -nkube-public cluster-info

kubeadm์—๋„ ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ?

๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํ”„๋กœ์„ธ์Šค ์ค‘๊ฐ„์— ์ด์ „/์ž˜๋ชป๋œ apiserver IP๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ kubeadm join ๋ช…๋ น์ด ๊ณ„์† ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌ ํ•ด์š”!

@weisjohn (https://github.com/kubernetes/kubeadm/issues/338#issuecomment-418879755) ๋ฐ @michaelfig (https://github.com/kubernetes/kubeadm/issues/)์˜ ๋ชจ๋“  ๋‹จ๊ณ„๋ฅผ ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. 338#issuecomment-428340099) ๋ชจ๋“  ๊ณณ์—์„œ ์ฃผ์†Œ๋ฅผ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.

์ด๋Š” kubernetes๊ฐ€ eth0์˜ ๊ณต์šฉ IP ๋Œ€์‹  eth1์—์„œ ์ƒˆ๋กœ ์ƒ์„ฑ๋œ VPC ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ kubeadm upgrade diff v1.12.3 ์‹คํ–‰ํ•˜๋ฉด --advertise-address ์—์„œ /etc/kubernetes/manifests/kube-apiserver.yaml --advertise-address ๋กœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋˜๋Œ๋ฆฌ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์–ด๋–ค ๋‹จ์„œ?

kubectl get all --export=true --all-namespaces -o yaml ์—๋„ ๊ธฐ์กด IP๋Š” ์–ด๋””์—๋„ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ: kubeadm upgrade diff ๋Š” ๋ณ€๊ฒฝ์„ ์ œ์•ˆํ–ˆ์ง€๋งŒ kubeadm upgrade apply ๋Š” ์‹ค์ œ๋กœ ์ฃผ์†Œ๋ฅผ ์ „ํ˜€ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. (์ˆ˜์ •๊ณผ ๊ฐ™์€ ๋งŽ์€ ๋ฒ„๊ทธ kubernetes 1.13 ์ค‘ ํ•˜๋‚˜)

@weisjohn ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

@patricklucas ์ง„์ง€ํ•˜๊ฒŒ

๋” ๋ช…ํ™•ํ•œ ์ •๋ณด๋ฅผ ์›ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝํ—˜์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

  1. /etc/kubernetes ์žˆ๋Š” ๋ชจ๋“  ๊ตฌ์„ฑ ํŒŒ์ผ์˜ IP ์ฃผ์†Œ๋ฅผ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค.
    shell oldip=192.168.1.91 newip=10.20.2.210 cd /etc/kubernetes # see before find . -type f | xargs grep $oldip # modify files in place find . -type f | xargs sed -i "s/$oldip/$newip/" # see after find . -type f | xargs grep $newip
  2. /etc/kubernetes/pki ๋ฐฑ์—…
    shell mkdir ~/k8s-old-pki cp -Rvf /etc/kubernetes/pki/* ~/k8s-old-pki
  3. ์ด์ „ IP ์ฃผ์†Œ๋ฅผ ๋Œ€์ฒด ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” /etc/kubernetes/pki ์ธ์ฆ์„œ ์‹๋ณ„(์ •๋ฆฌ ๊ฐ€๋Šฅ)
    shell cd /etc/kubernetes/pki for f in $(find -name "*.crt"); do openssl x509 -in $f -text -noout > $f.txt; done grep -Rl $oldip . for f in $(find -name "*.crt"); do rm $f.txt; done
  4. ์ด์ „ IP๋ฅผ ์ฐธ์กฐํ•œ kube-system ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ configmap์„ ์‹๋ณ„ํ•˜๊ณ  ํŽธ์ง‘ํ•ฉ๋‹ˆ๋‹ค.

    # find all the config map names
    configmaps=$(kubectl -n kube-system get cm -o name | \
     awk '{print $1}' | \
     cut -d '/' -f 2)
    
    # fetch all for filename reference
    dir=$(mktemp -d)
    for cf in $configmaps; do
     kubectl -n kube-system get cm $cf -o yaml > $dir/$cf.yaml
    done
    
    # have grep help you find the files to edit, and where
    grep -Hn $dir/* -e $oldip
    
    # edit those files, in my case, grep only returned these two:
    kubectl -n kube-system edit cm kubeadm-config
    kubectl -n kube-system edit cm kube-proxy
    
  5. IP ์ฃผ์†Œ ๋ณ€๊ฒฝ(๋ฐฐํฌ์šฉ cli ๋˜๋Š” gui๋ฅผ ํ†ตํ•ด)
  6. ์ด์ „ ๋‹จ๊ณ„์—์„œ grep์œผ๋กœ ์‹๋ณ„๋œ ๊ฐ๊ฐ์— ๋Œ€ํ•œ ์ธ์ฆ์„œ์™€ ํ‚ค๋ฅผ ๋ชจ๋‘ ์‚ญ์ œํ•˜๊ณ  ํ•ด๋‹น ์ธ์ฆ์„œ๋ฅผ ์žฌ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

    ์ฐธ๊ณ : kubeadm admin phase certs ... ๋ฅผ ํ†ตํ•ด ์ธ์ฆ์„œ๋ฅผ ๋‹ค์‹œ ๋งŒ๋“ค๊ธฐ ์ „์— ์ƒˆ IP ์ฃผ์†Œ๋ฅผ ์ ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    rm apiserver.crt apiserver.key
    kubeadm alpha phase certs apiserver
    
    rm etcd/peer.crt etcd/peer.key
    kubeadm alpha phase certs etcd-peer
    
  7. kubelet ๋ฐ docker๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค.
    shell sudo systemctl restart kubelet sudo systemctl restart docker
  8. ์ƒˆ ๊ตฌ์„ฑ ์œ„์— ๋ณต์‚ฌ
    shell sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config

@mariamTr ^

๋‹จ๊ณ„๋ฅผ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์—์„œ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ๊ณผ ๊ทธ ํ›„ ์žฌ๊ตฌ์„ฑ๋œ ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์— ์ฐธ์—ฌํ•˜๊ธฐ ์œ„ํ•ด ์ด์ „ ์ž‘์—…์ž ๋…ธ๋“œ์— ์ ์šฉํ•ด์•ผ ํ•˜๋Š” ์ ˆ์ฐจ์™€ ๊ฐ™์€ ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ฏธ๋ฆฌ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค :)

๋งˆ์Šคํ„ฐ IP๋ฅผ ์‚ฌ์„ค ๋„คํŠธ์›Œํฌ๋กœ ์ด๋™ํ•  ๋•Œ ์˜ค๋ฒ„๋ ˆ์ด ๋„คํŠธ์›Œํฌ๋„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์ด ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Calico๋Š” ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค์— ๋ฐ”์ธ๋”ฉ๋  ๋•Œ๊นŒ์ง€ VPC ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

         env:
            - name: IP_AUTODETECTION_METHOD
              value: interface=eth1

kubeadm ์•ŒํŒŒ ๋‹จ๊ณ„ ์ธ์ฆ์„œ apiserver

@weisjohn kubeadm alpha phase certs apiserver๋Š” v1.13.0์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉฐ "์ด ๋ช…๋ น์€ ์ž์ฒด์ ์œผ๋กœ ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ•˜์œ„ ๋ช…๋ น ๋ชฉ๋ก์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค." ์—…๋ฐ์ดํŠธ๋œ ์˜๊ฒฌ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

1.13์—์„œ ๋ช…๋ น์€ kubeadm init phase certs apiserver .
https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd -phase-certs

๋งค์šฐ ์œ ์šฉํ•œ ์น˜๋ฃŒ ๋‹จ๊ณ„ - @patricklucas ๋ฐ @weisjohn์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

์ €์ฒ˜๋Ÿผ IP ์ฃผ์†Œ๊ฐ€ ์ด๋ฏธ ๋ณ€๊ฒฝ๋œ ์ƒํƒœ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ 4๋‹จ๊ณ„์—์„œ configmap์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด api-server์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ํ•œ ๊ฐ€์ง€ ์ถ”๊ฐ€ ํŒ:
api-server ์ธ์ฆ์„œ๋Š” ํ˜ธ์ŠคํŠธ ์ด๋ฆ„ kubernetes ๋Œ€ํ•ด ์„œ๋ช…๋˜์—ˆ์œผ๋ฏ€๋กœ /etc/hosts ์˜ ์ƒˆ IP ์ฃผ์†Œ์— ๋ณ„์นญ์œผ๋กœ ์ถ”๊ฐ€ํ•œ ๋‹ค์Œ kubectl --server=https://kubernetes:6443 ... ์žˆ์Šต๋‹ˆ๋‹ค.

@bboreham @weisjohn @patricklucas ๊ฒฝํ—˜ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์—์„œ IP๋ฅผ ๋ณ€๊ฒฝํ•œ ํ›„ ์ž‘์—…์ž ๋…ธ๋“œ์—์„œ ๋ฌด์—‡์„ ํ•ด์•ผ ํ•˜๋Š”์ง€ ์กฐ์–ธ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.
ํด๋Ÿฌ์Šคํ„ฐ์— ์‚ญ์ œ/์ถ”๊ฐ€ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด __/etc/kubernetes/kubelet.conf_ ๋ฐ _/etc/kubernetes/pki/ca.crt_๋ฅผ ์ˆ˜๋™์œผ๋กœ ๋ณ€๊ฒฝํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์˜ค๋ž˜๋œ ๋ฌธ์ œ๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์•„๋งˆ๋„ ๋‚ด ์˜๊ฒฌ์ด ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ์œ ์šฉ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋ถˆํ–‰ํžˆ๋„ @patricklucas ์™€ @weisjohn ์ด ์ œ์•ˆํ•œ ์†”๋ฃจ์…˜์ด ์ €์—๊ฒŒ ํšจ๊ณผ๊ฐ€ ์—†์—ˆ์œผ๋ฏ€๋กœ ์ œ๊ฐ€ ์ง์ ‘ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

systemctl stop kubelet docker

cd /etc/

# backup old kubernetes data
mv kubernetes kubernetes-backup
mv /var/lib/kubelet /var/lib/kubelet-backup

# restore certificates
mkdir -p kubernetes
cp -r kubernetes-backup/pki kubernetes
rm kubernetes/pki/{apiserver.*,etcd/peer.*}

systemctl start docker

# reinit master with data in etcd
# add --kubernetes-version, --pod-network-cidr and --token options if needed
kubeadm init --ignore-preflight-errors=DirAvailable--var-lib-etcd

# update kubectl config
cp kubernetes/admin.conf ~/.kube/config

# wait for some time and delete old node
sleep 120
kubectl get nodes --sort-by=.metadata.creationTimestamp
kubectl delete node $(kubectl get nodes -o jsonpath='{.items[?(@.status.conditions[0].status=="Unknown")].metadata.name}')

# check running pods
kubectl get pods --all-namespaces

@valerius257 ๊ณ ๋งˆ์›Œ์š”, ๋‹น์‹ ์€ ์šฐ๋ฆฌ ์ฃผ๋ง์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค)

@valerius257 ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ๐Ÿ‘
@patricklucas ๋ฐ @weisjohn์˜ ๋ชจ๋“  ์ž‘์„ฑ/์ง€์‹œ๋ฅผ ์‹œ๋„ ํ–ˆ์Šต๋‹ˆ๋‹ค . ๊ทธ๋“ค์€ ๋‚ด ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ข‹์€ ์ ์€ ์ด๋Ÿฌํ•œ ์ง€์นจ์ด ์ธ์ฆ์„œ ๋ฐ ํ‚ค์˜ ์ผ๋ถ€ ์ฃผ์š” ์ธก๋ฉด๊ณผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์ผ์ •์„ ๊ฐ•์กฐํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@valerius257์ด ์–ธ๊ธ‰ํ•œ ์ง€์นจ์€ ๋‚ด kubeadm ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์— ๋งค์šฐ ํŠน์ •ํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๊นŒ์ง€ ์›ํ™œํ•˜๊ฒŒ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. IP๊ฐ€ ๋ณ€๊ฒฝ๋œ kubeadm ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ๋ฅผ ๋ณต๊ตฌํ•˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.

@valerius257์ด ์–ธ๊ธ‰ํ•œ ๋‹จ๊ณ„์˜ ํ›„์† ์ž‘์—…
ํ•˜๋‚˜์˜ ๋‹จ์ผ ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์—์„œ flannel n/w ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
Flannel ๋ฌธ์ œ: kube-flannel-ds-xxxx ๋ฐฑ์˜คํ”„๊ฐ€ ์‹คํŒจํ•œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•จ
ํฌ๋“œ ์ƒํƒœ: CrashLoopBackOff. ์ด๋กœ ์ธํ•ด core-dns-xxx์™€ ๊ฐ™์€ ๋‹ค๋ฅธ Pod๋„ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ: cidr n/w๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ kubeadm init์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‹œ์ž‘ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—(IP๊ฐ€ ์˜ค๋ž˜๋˜์—ˆ๊ฑฐ๋‚˜ ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ๋ฅผ ์‹œ์šด์ „ํ•˜๋Š” ๋™์•ˆ) ๋‹ค์Œ ๋‹จ๊ณ„์—์„œ "/etc/kubernetes/manifests/kube-controller-manager"์—์„œ cidr ์„ค์ •์„ ์ง€์› ์Šต๋‹ˆ๋‹ค. .yaml" ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.
kubeadm ์ดˆ๊ธฐํ™” --ignore-preflight-errors=DirAvailable--var-lib-etcd.

๋”ฐ๋ผ์„œ "kubeadm init --token {{ kubeadm_token }} --pod-network-cidr=10.244.0.0/16" "๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ kubeadm ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ(์ฒซ ๋ฒˆ์งธ IP ์ฃผ์†Œ ํฌํ•จ)๋ฅผ ์‹œ์ž‘ํ•œ ๊ฒฝ์šฐ ํ• ๋‹น ํ›„ ์ƒˆ IP๋Š” --pod-network-cidr=10.244.0.0/16์œผ๋กœ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
" kubeadm ์ดˆ๊ธฐํ™” --ignore-preflight-errors=DirAvailable--var-lib-etcd --token {{ kubeadm_token }} --pod-network-cidr=10.244.0.0/16"

๋˜๋Š” Spec:containers :command์—์„œ ๋ˆ„๋ฝ๋œ ๊ฒฝ์šฐ ๋‹ค์Œ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ํฌํ•จ๋œ "/etc/kubernetes/manifests/kube-controller-manager.yaml" ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜์‹ญ์‹œ์˜ค.

  • --allocate-node-cidrs=true
  • --cluster-cidr=10.244.0.0/16

    • --node-cidr-mask-size=24

      ์ฐธ์กฐ: https://github.com/coreos/flannel/issues/728 , @wkjun์—์„œ ์†”๋ฃจ์…˜ ์ฝ๊ธฐ

      ์œ„์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ ์šฉ๋˜๋ฉด

      systemctl ์ค‘์ง€ kubelet ๋„์ปค

      ์ž  20

      systemctl ๋„์ปค kubelet ์‹œ์ž‘

      ํ”Œ๋ž€๋„ฌ์„ ํฌํ•จํ•˜์—ฌ ๋ชจ๋“  ํฌ๋“œ๊ฐ€ ์‹คํ–‰ ์ค‘์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

      kubect ํฌ๋“œ ๊ฐ€์ ธ์˜ค๊ธฐ -n kube-system

๋ฌธ์ œ 2:
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋˜๋Š” kube-system์˜ ๋ชจ๋“  ํฌ๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํฌ๋“œ ๋ช…๋ น ์„ค๋ช…์—์„œ ์˜ค๋ฅ˜๋ฅผ ํ‘œ์‹œํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
"๊ฒฝ๊ณ  FailedScheduling ๊ธฐ๋ณธ ์Šค์ผ€์ค„๋Ÿฌ 0/1 ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 1๊ฐœ ๋…ธ๋“œ์— ํฌ๋“œ๊ฐ€ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ์˜ค์—ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค."
๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. kubectl taint nodes --all node-role.kubernetes.io/master-
์•ฑ ์ž‘์—… ๊ณต๊ฐ„ ๋˜๋Š” kube-system ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ ์‹คํ–‰๋˜๋Š” ๋ชจ๋“  ํฌ๋“œ๋ฅผ ์„ค๋ช…ํ•˜๋ฉด ์–ธ๊ธ‰๋œ ์˜ค๋ฅ˜๊ฐ€ ๊ด€์ฐฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค์ค‘ ๋…ธ๋“œ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ๋Š” ๊ฐ๋ณ„ํ•œ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

@patricklucas ์ง„์ง€ํ•˜๊ฒŒ

๋” ๋ช…ํ™•ํ•œ ์ •๋ณด๋ฅผ ์›ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝํ—˜์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

  1. /etc/kubernetes ์žˆ๋Š” ๋ชจ๋“  ๊ตฌ์„ฑ ํŒŒ์ผ์˜ IP ์ฃผ์†Œ๋ฅผ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค.
    shell oldip=192.168.1.91 newip=10.20.2.210 cd /etc/kubernetes # see before find . -type f | xargs grep $oldip # modify files in place find . -type f | xargs sed -i "s/$oldip/$newip/" # see after find . -type f | xargs grep $newip
  2. /etc/kubernetes/pki ๋ฐฑ์—…
    shell mkdir ~/k8s-old-pki cp -Rvf /etc/kubernetes/pki/* ~/k8s-old-pki
  3. ์ด์ „ IP ์ฃผ์†Œ๋ฅผ ๋Œ€์ฒด ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” /etc/kubernetes/pki ์ธ์ฆ์„œ ์‹๋ณ„(์ •๋ฆฌ ๊ฐ€๋Šฅ)
    shell cd /etc/kubernetes/pki for f in $(find -name "*.crt"); do openssl x509 -in $f -text -noout > $f.txt; done grep -Rl $oldip . for f in $(find -name "*.crt"); do rm $f.txt; done
  4. ์ด์ „ IP๋ฅผ ์ฐธ์กฐํ•œ kube-system ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ configmap์„ ์‹๋ณ„ํ•˜๊ณ  ํŽธ์ง‘ํ•ฉ๋‹ˆ๋‹ค.

    # find all the config map names
    configmaps=$(kubectl -n kube-system get cm -o name | \
     awk '{print $1}' | \
     cut -d '/' -f 2)
    
    # fetch all for filename reference
    dir=$(mktemp -d)
    for cf in $configmaps; do
     kubectl -n kube-system get cm $cf -o yaml > $dir/$cf.yaml
    done
    
    # have grep help you find the files to edit, and where
    grep -Hn $dir/* -e $oldip
    
    # edit those files, in my case, grep only returned these two:
    kubectl -n kube-system edit cm kubeadm-config
    kubectl -n kube-system edit cm kube-proxy
    
  5. IP ์ฃผ์†Œ ๋ณ€๊ฒฝ(๋ฐฐํฌ์šฉ cli ๋˜๋Š” gui๋ฅผ ํ†ตํ•ด)
  6. ์ด์ „ ๋‹จ๊ณ„์—์„œ grep์œผ๋กœ ์‹๋ณ„๋œ ๊ฐ๊ฐ์— ๋Œ€ํ•œ ์ธ์ฆ์„œ์™€ ํ‚ค๋ฅผ ๋ชจ๋‘ ์‚ญ์ œํ•˜๊ณ  ํ•ด๋‹น ์ธ์ฆ์„œ๋ฅผ ์žฌ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

    ์ฐธ๊ณ : kubeadm admin phase certs ... ๋ฅผ ํ†ตํ•ด ์ธ์ฆ์„œ๋ฅผ ๋‹ค์‹œ ๋งŒ๋“ค๊ธฐ ์ „์— ์ƒˆ IP ์ฃผ์†Œ๋ฅผ ์ ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    rm apiserver.crt apiserver.key
    kubeadm alpha phase certs apiserver
    
    rm etcd/peer.crt etcd/peer.key
    kubeadm alpha phase certs etcd-peer
    
  7. kubelet ๋ฐ docker๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค.
    shell sudo systemctl restart kubelet sudo systemctl restart docker
  8. ์ƒˆ ๊ตฌ์„ฑ ์œ„์— ๋ณต์‚ฌ
    shell sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config

@mariamTr ^

newip ๋Œ€์‹ ์— ์–ด๋–ค ip๋ฅผ ์ฃผ์–ด์•ผํ•ฉ๋‹ˆ๊นŒ?
์šฐ๋ฆฌ ๊ณ ์œ ์˜ ip๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@VipinKrizz ์ด ๋ฌธ์ œ์˜ ์ปจํ…์ŠคํŠธ๋Š” ์ธํ”„๋ผ ๋‚ด ์š”์ธ์œผ๋กœ ์ธํ•ด IP๊ฐ€ ์ด๋ฏธ ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŠน์ • ์„ค์ •์— ๋Œ€ํ•ด ์ž˜ ์•Œ๊ณ  ์žˆ๋Š” ์‚ฌ๋žŒ ์™ธ์—๋Š” ์–ด๋–ค IP๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€ ๋Œ€๋‹ตํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์—†์Šต๋‹ˆ๋‹ค.

Slack์—์„œ ์ด์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•  ์‚ฌ๋žŒ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์„๊นŒ์š”? Kubeadm ๋ฌธ์ œ๋Š” ์˜ฌ๋ฐ”๋ฅธ ์œ„์น˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

@valerius257 ๊ทธ ์Šคํฌ๋ฆฝํŠธ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ด์ œ ์ œ ์ ‘๊ทผ ๋ฐฉ์‹์— ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ์†”๋ฃจ์…˜์ด ์ž‘๋™ํ–ˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ชจ๋“  k8์—์„œ์™€ ๊ฐ™์ด ์ž‘์€ ๊ฐ€์žฅ์ž๋ฆฌ๊ฐ€ ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ™œ์„ฑํ™”๋œ ์„œ๋น„์Šค/๋‚ด์žฅ, dns, ํŠน์ˆ˜ ์Šคํ† ๋ฆฌ์ง€ ํด๋ž˜์Šค ๋“ฑ์— ๋ชจ๋“  ํŒจ์น˜๋ฅผ ๋‹ค์‹œ ์ ์šฉํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋„ค, ๋‹น์‹ ์˜ ๋Œ€๋ณธ์ด ์˜ค๋Š˜ ์ œ ๋ฒ ์ด์ปจ์„ ๊ตฌํ•ด์คฌ์Šต๋‹ˆ๋‹ค.

@ valerius257 ๊ท€ํ•˜์˜ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ž์ง€๋งŒ ๋ฌธ์ œ๊ฐ€ ์•„๋ž˜์— ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

root@ubuntu :/etc/kubernetes/pki# kubeadm init --ignore-preflight-errors=DirAvailable--var-lib-etcd
W0122 10:15:34.819150 102032 version.go:101] ์ธํ„ฐ๋„ท์—์„œ Kubernetes ๋ฒ„์ „์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค: URL " https://dl.k8s.io/release/stable-1.txt ": Get https: //dl.k8s.io/release/stable-1.txt : ๋‹ค์ด์–ผ tcp: 127.0.0.53:53์—์„œ dl.k8s.io ์กฐํšŒ: ์„œ๋ฒ„ ์˜ค์ž‘๋™
W0122 10:15:34.819340 102032 version.go:102] ๋กœ์ปฌ ํด๋ผ์ด์–ธํŠธ ๋ฒ„์ „: v1.16.3์œผ๋กœ ํด๋ฐฑ
[์ดˆ๊ธฐํ™”] Kubernetes ๋ฒ„์ „ ์‚ฌ์šฉ: v1.16.3
[์‹คํ–‰ ์ „] ์‹คํ–‰ ์ „ ๊ฒ€์‚ฌ ์‹คํ–‰
[๊ฒฝ๊ณ  IsDockerSystemdCheck]: "cgroupfs"๋ฅผ Docker cgroup ๋“œ๋ผ์ด๋ฒ„๋กœ ๊ฐ์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ถŒ์žฅ ๋“œ๋ผ์ด๋ฒ„๋Š” "systemd"์ž…๋‹ˆ๋‹ค. https://kubernetes.io/docs/setup/cri/ ์˜ ๊ฐ€์ด๋“œ๋ฅผ ๋”ฐ๋ฅด์‹ญ์‹œ์˜ค.
[๊ฒฝ๊ณ  DirAvailable--var-lib-etcd]: /var/lib/etcd๊ฐ€ ๋น„์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
[ํ”„๋ฆฌํ”Œ๋ผ์ดํŠธ] Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ์„ค์ •์— ํ•„์š”ํ•œ ์ด๋ฏธ์ง€ ๊ฐ€์ ธ์˜ค๊ธฐ
[ํ”„๋ฆฌํ”Œ๋ผ์ดํŠธ] ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ ์†๋„์— ๋”ฐ๋ผ 1~2๋ถ„ ์ •๋„ ์†Œ์š”๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
[ํ”„๋ฆฌํ”Œ๋ผ์ดํŠธ] 'kubeadm config images pull'์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฏธ๋ฆฌ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
[kubelet-start] "/var/lib/kubelet/kubeadm-flags.env" ํŒŒ์ผ์— ํ”Œ๋ž˜๊ทธ๊ฐ€ ์žˆ๋Š” kubelet ํ™˜๊ฒฝ ํŒŒ์ผ ์“ฐ๊ธฐ
[kubelet-start] "/var/lib/kubelet/config.yaml" ํŒŒ์ผ์— kubelet ๊ตฌ์„ฑ ์“ฐ๊ธฐ
[kubelet-start] kubelet ์„œ๋น„์Šค ํ™œ์„ฑํ™”
[certs] certificateDir ํด๋” "/etc/kubernetes/pki" ์‚ฌ์šฉ
[certs] ๊ธฐ์กด ca ์ธ์ฆ ๊ธฐ๊ด€ ์‚ฌ์šฉ
[certs] "apiserver" ์ธ์ฆ์„œ ๋ฐ ํ‚ค ์ƒ์„ฑ
[certs] apiserver ์„œ๋น™ ์ธ์ฆ์„œ๋Š” DNS ์ด๋ฆ„ [ubuntu kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] ๋ฐ IP [10.96.0.1 192.168.120.137]์— ๋Œ€ํ•ด ์„œ๋ช…๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
[certs] ๋””์Šคํฌ์˜ ๊ธฐ์กด apiserver-kubelet-client ์ธ์ฆ์„œ ๋ฐ ํ‚ค ์‚ฌ์šฉ
[certs] ๊ธฐ์กด front-proxy-ca ์ธ์ฆ ๊ธฐ๊ด€ ์‚ฌ์šฉ
[certs] ๋””์Šคํฌ์˜ ๊ธฐ์กด ํ”„๋ก ํŠธ ํ”„๋ก์‹œ ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ ๋ฐ ํ‚ค ์‚ฌ์šฉ
[certs] ๊ธฐ์กด etcd/ca ์ธ์ฆ ๊ธฐ๊ด€ ์‚ฌ์šฉ
[certs] ๋””์Šคํฌ์˜ ๊ธฐ์กด etcd/server ์ธ์ฆ์„œ ๋ฐ ํ‚ค ์‚ฌ์šฉ
[certs] "etcd/peer" ์ธ์ฆ์„œ ๋ฐ ํ‚ค ์ƒ์„ฑ
[์ธ์ฆ์„œ] etcd/ํ”ผ์–ด ์„œ๋น„์Šค ์ธ์ฆ์„œ๋Š” DNS ์ด๋ฆ„ [ubuntu localhost] ๋ฐ IP [192.168.120.137 127.0.0.1 ::1]์— ๋Œ€ํ•ด ์„œ๋ช…๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
[certs] ๋””์Šคํฌ์˜ ๊ธฐ์กด etcd/healthcheck-client ์ธ์ฆ์„œ ๋ฐ ํ‚ค ์‚ฌ์šฉ
[certs] ๋””์Šคํฌ์˜ ๊ธฐ์กด apiserver-etcd-client ์ธ์ฆ์„œ ๋ฐ ํ‚ค ์‚ฌ์šฉ
[certs] ๊ธฐ์กด "sa" ํ‚ค ์‚ฌ์šฉ
[kubeconfig] kubeconfig ํด๋” "/etc/kubernetes" ์‚ฌ์šฉ
[kubeconfig] "admin.conf" kubeconfig ํŒŒ์ผ ์ž‘์„ฑ
[kubeconfig] "kubelet.conf" kubeconfig ํŒŒ์ผ ์ž‘์„ฑ
[kubeconfig] "controller-manager.conf" kubeconfig ํŒŒ์ผ ์ž‘์„ฑ
[kubeconfig] "scheduler.conf" kubeconfig ํŒŒ์ผ ์ž‘์„ฑ
[์ œ์–ด ํ‰๋ฉด] ๋งค๋‹ˆํŽ˜์ŠคํŠธ ํด๋” "/etc/kubernetes/manifests" ์‚ฌ์šฉ
[์ œ์–ด ํ‰๋ฉด] "kube-apiserver"์— ๋Œ€ํ•œ ์ •์  ํฌ๋“œ ๋งค๋‹ˆํŽ˜์ŠคํŠธ ์ƒ์„ฑ
[์ œ์–ด ํ‰๋ฉด] "kube-controller-manager"์— ๋Œ€ํ•œ ์ •์  Pod ๋งค๋‹ˆํŽ˜์ŠคํŠธ ๋งŒ๋“ค๊ธฐ
[์ œ์–ด ํ‰๋ฉด] "kube-scheduler"์— ๋Œ€ํ•œ ์ •์  ํฌ๋“œ ๋งค๋‹ˆํŽ˜์ŠคํŠธ ์ƒ์„ฑ
[etcd] "/etc/kubernetes/manifests"์—์„œ ๋กœ์ปฌ etcd์— ๋Œ€ํ•œ ์ •์  Pod ๋งค๋‹ˆํŽ˜์ŠคํŠธ ๋งŒ๋“ค๊ธฐ
[wait-control-plane] kubelet์ด "/etc/kubernetes/manifests" ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์ •์  ํŒŒ๋“œ๋กœ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์„ ๋ถ€ํŒ…ํ•˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. ์ตœ๋Œ€ 4m0์ดˆ๊ฐ€ ์†Œ์š”๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
[kubelet-check] 40์ดˆ์˜ ์ดˆ๊ธฐ ์ œํ•œ ์‹œ๊ฐ„์ด ์ง€๋‚ฌ์Šต๋‹ˆ๋‹ค.
[kubelet-check] kubelet์ด ์‹คํ–‰๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ์ •์ƒ์ ์ด์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
[kubelet-check] 'curl -sSL http://localhost :10248/healthz'์™€ ๊ฐ™์€ HTTP ํ˜ธ์ถœ์ด ์˜ค๋ฅ˜๋กœ ์ธํ•ด ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. Get http://localhost :10248/healthz: dial tcp 127.0.0.1:10248: connect: connection ๊ฑฐ์ ˆํ–ˆ๋‹ค.
[kubelet-check] kubelet์ด ์‹คํ–‰๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ์ •์ƒ์ ์ด์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
[kubelet-check] 'curl -sSL http://localhost :10248/healthz'์™€ ๊ฐ™์€ HTTP ํ˜ธ์ถœ์ด ์˜ค๋ฅ˜๋กœ ์ธํ•ด ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. Get http://localhost :10248/healthz: dial tcp 127.0.0.1:10248: connect: connection ๊ฑฐ์ ˆํ–ˆ๋‹ค.
[kubelet-check] kubelet์ด ์‹คํ–‰๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ์ •์ƒ์ ์ด์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
[kubelet-check] 'curl -sSL http://localhost :10248/healthz'์™€ ๊ฐ™์€ HTTP ํ˜ธ์ถœ์ด ์˜ค๋ฅ˜๋กœ ์ธํ•ด ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. Get http://localhost :10248/healthz: dial tcp 127.0.0.1:10248: connect: connection ๊ฑฐ์ ˆํ–ˆ๋‹ค.
[kubelet-check] kubelet์ด ์‹คํ–‰๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ์ •์ƒ์ ์ด์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
[kubelet-check] 'curl -sSL http://localhost :10248/healthz'์™€ ๊ฐ™์€ HTTP ํ˜ธ์ถœ์ด ์˜ค๋ฅ˜๋กœ ์ธํ•ด ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. Get http://localhost :10248/healthz: dial tcp 127.0.0.1:10248: connect: connection ๊ฑฐ์ ˆํ–ˆ๋‹ค.
[kubelet-check] kubelet์ด ์‹คํ–‰๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ์ •์ƒ์ ์ด์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
[kubelet-check] 'curl -sSL http://localhost :10248/healthz'์™€ ๊ฐ™์€ HTTP ํ˜ธ์ถœ์ด ์˜ค๋ฅ˜๋กœ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. Get http://localhost :10248/healthz: dial tcp 127.0.0.1:10248: connect: connection ๊ฑฐ์ ˆํ–ˆ๋‹ค.

์œ ๊ฐ์Šค๋Ÿฝ๊ฒŒ๋„ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
์กฐ๊ฑด์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ์ดˆ๊ณผ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

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

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

๋˜ํ•œ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์—์„œ ์‹œ์ž‘ํ•  ๋•Œ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์ถฉ๋Œํ•˜๊ฑฐ๋‚˜ ์ข…๋ฃŒ๋˜์—ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ์„ ํ˜ธํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„ CLI(์˜ˆ: docker)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‚˜์—ดํ•˜์‹ญ์‹œ์˜ค.
๋‹ค์Œ์€ ๋„์ปค์—์„œ ์‹คํ–‰๋˜๋Š” ๋ชจ๋“  Kubernetes ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‚˜์—ดํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ ํ•œ ๊ฐ€์ง€ ์˜ˆ์ž…๋‹ˆ๋‹ค.
- '๋„์ปค PS -a | ๊ทธ๋ ™ ํ๋ธŒ | grep -v ์ผ์‹œ ์ค‘์ง€'
์‹คํŒจํ•œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ฐพ์œผ๋ฉด ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๊ทธ๋ฅผ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
- '๋„์ปค ๋กœ๊ทธ CONTAINERID'
์˜ค๋ฅ˜ ์‹คํ–‰ ๋‹จ๊ณ„ wait-control-plane: Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
์ด ์˜ค๋ฅ˜์˜ ์Šคํƒ ์ถ”์ ์„ ๋ณด๋ ค๋ฉด --v=5 ์ด์ƒ์œผ๋กœ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค.

์นœ์ ˆํ•˜๊ฒŒ ๋„์™€์ฃผ์„ธ์š”

๋‚˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ด๊ฒƒ์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค:

  • /etc/kubernetes์˜ ๋ชจ๋“  ๊ตฌ์„ฑ ํŒŒ์ผ์—์„œ IP ์ฃผ์†Œ ๋ฐ”๊พธ๊ธฐ
  • /etc/kubernetes/pki ๋ฐฑ์—…
  • /etc/kubernetes/pki์—์„œ ์ด์ „ IP ์ฃผ์†Œ๋ฅผ ๋Œ€์ฒด ์ด๋ฆ„์œผ๋กœ ๊ฐ€์ง„ ์ธ์ฆ์„œ ์‹๋ณ„[1]
  • ๊ฐ๊ฐ์— ๋Œ€ํ•œ ์ธ์ฆ์„œ์™€ ํ‚ค๋ฅผ ๋ชจ๋‘ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค (๋‚˜์—๊ฒŒ๋Š” apiserver ๋ฐ etcd/peer์˜€์Šต๋‹ˆ๋‹ค)
  • kubeadm alpha phase certs ์‚ฌ์šฉํ•˜์—ฌ ์ธ์ฆ์„œ ์žฌ์ƒ์„ฑ [2]
  • ์ด์ „ IP[3]๋ฅผ ์ฐธ์กฐํ•œ kube-system ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ configmap ์‹๋ณ„
  • ํ•ด๋‹น ๊ตฌ์„ฑ ๋งต์„ ์ˆ˜๋™์œผ๋กœ ํŽธ์ง‘
  • kubelet ๋ฐ docker ๋‹ค์‹œ ์‹œ์ž‘(๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ฐ•์ œ๋กœ ๋‹ค์‹œ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด)

[1]

/etc/kubernetes/pki# for f in $(find -name "*.crt"); do openssl x509 -in $f -text -noout > $f.txt; done
/etc/kubernetes/pki# grep -Rl 12\\.34\\.56\\.78 .
./apiserver.crt.txt
./etcd/peer.crt.txt
/etc/kubernetes/pki# for f in $(find -name "*.crt"); do rm $f.txt; done

[2]

/etc/kubernetes/pki# rm apiserver.crt apiserver.key
/etc/kubernetes/pki# kubeadm alpha phase certs apiserver
...
/etc/kubernetes/pki# rm etcd/peer.crt etcd/peer.key
/etc/kubernetes/pki# kubeadm alpha phase certs etcd-peer
...

[์‚ผ]

$ kubectl -n kube-system get cm -o yaml | less
...
$ kubectl -n kube-system edit cm ...

๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ–ˆ์Šต๋‹ˆ๋‹ค ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

์œ ์ผํ•œ ๊ฒƒ์€ ๋‹น์‹ ์ด ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 kubeadm init phase ..

์ตœ์‹  kubectl ๋ฒ„์ „์˜ ๊ฒฝ์šฐ

@bboreham
@patricklucas๊ฐ€ ์–ธ๊ธ‰ํ•œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ž์Šต๋‹ˆ๋‹ค.
4๋‹จ๊ณ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด IP๊ฐ€ ์ด๋ฏธ ๋ณ€๊ฒฝ๋˜์–ด api-server์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— /etc/hosts์—์„œ ์ผ๋ถ€ ๊ตฌ์„ฑ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์ฆ์„œ ์ƒ์„ฑ
kubeadm init --kubernetes-version=v1.16.3 ๋‹จ๊ณ„ ์ธ์ฆ์„œ API ์„œ๋ฒ„

/etc/hosts์—์„œ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

kubectl --server=https://๋ฅผ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.:6443 ์—ฌ์ „ํžˆ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค :(

/etc/hosts์—์„œ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ํŠน์ • ๊ตฌ์„ฑ์€??

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