Kubeadm: apiserver ์ธ์ฆ์„œ๊ฐ€ ๋งŒ๋ฃŒ๋˜์—ˆ์„ ๋•Œ ์ธ์ฆ์„œ๋ฅผ ๊ฐฑ์‹ ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

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

๋„์›€ ์š”์ฒญ์ž…๋‹ˆ๊นŒ?

๊ทธ๋ ‡๋‹ค๋ฉด ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฐ€์ด๋“œ ๋ฐ ์ปค๋ฎค๋‹ˆํ‹ฐ ์ง€์› ์ฑ„๋„์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค( http://kubernetes.io/docs/troubleshooting/ ์ฐธ์กฐ)

๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ด ์„น์…˜์„ ์‚ญ์ œํ•˜๊ณ  ๊ณ„์† ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ด ํ•ญ๋ชฉ์„ ์ œ์ถœํ•˜๊ธฐ ์ „์— kubeadm ๋ฌธ์ œ์—์„œ ์–ด๋–ค ํ‚ค์›Œ๋“œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜์…จ์Šต๋‹ˆ๊นŒ?

์ค‘๋ณต๋˜๋Š” ํ•ญ๋ชฉ์„ ์ฐพ์œผ๋ฉด ๋Œ€์‹  ๊ฑฐ๊ธฐ์— ๋‹ต์žฅํ•˜๊ณ  ์ด ํŽ˜์ด์ง€๋ฅผ ๋‹ซ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ค‘๋ณต ํ•ญ๋ชฉ์„ ์ฐพ์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ ์ด ์„น์…˜์„ ์‚ญ์ œํ•˜๊ณ  ๊ณ„์† ์ง„ํ–‰ํ•˜์‹ญ์‹œ์˜ค.

์ด๊ฒƒ์€ ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ์ž…๋‹ˆ๊นŒ ์•„๋‹ˆ๋ฉด ๊ธฐ๋Šฅ ์š”์ฒญ์ž…๋‹ˆ๊นŒ?

๋ฒ„๊ทธ ๋ณด๊ณ  ๋˜๋Š” ๊ธฐ๋Šฅ ์š”์ฒญ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•˜์‹ญ์‹œ์˜ค.

๋ฒ„์ „

kubeadm ๋ฒ„์ „ ( kubeadm version ):1.7.5

ํ™˜๊ฒฝ :

  • Kubernetes ๋ฒ„์ „ ( kubectl version ):1.7.5
  • ํด๋ผ์šฐ๋“œ ์ œ๊ณต์ž ๋˜๋Š” ํ•˜๋“œ์›จ์–ด ๊ตฌ์„ฑ :
  • OS (์˜ˆ: /etc/os-release):
  • ์ปค๋„ (์˜ˆ: uname -a ):
  • ๊ธฐํƒ€ :

๋ฌด์Šจ ์ผ์ด์—์š”?

๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚  ๊ฒƒ์ด๋ผ๊ณ  ์˜ˆ์ƒํ–ˆ์Šต๋‹ˆ๊นŒ?

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

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

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

1.8 ์ด์ „ ๋ฒ„์ „์˜ kubeadm์„ ์‚ฌ์šฉ ์ค‘์ด๊ณ  ์ธ์ฆ์„œ ๊ต์ฒด #206์ด ( ๋ฒ ํƒ€ ๊ธฐ๋Šฅ์œผ๋กœ ) ์ ์šฉ๋˜์—ˆ๊ฑฐ๋‚˜ ์ธ์ฆ์„œ๊ฐ€ ์ด๋ฏธ ๋งŒ๋ฃŒ๋œ ๊ฒฝ์šฐ ์ธ์ฆ์„œ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(๋˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋‹ค์‹œ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. @kachkaev๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ผ๋ถ€)์— ์˜์กดํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์— SSH๋กœ ์—ฐ๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. kubeadm >= 1.8์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ 2๋กœ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.

  1. ํ•„์š”ํ•œ ๊ฒฝ์šฐ Kubeadm์„ ์—…๋ฐ์ดํŠธํ•˜์‹ญ์‹œ์˜ค. ๋‚˜๋Š” ์ด์ „์— 1.7์— ์žˆ์—ˆ๋‹ค.
$ sudo curl -sSL https://dl.k8s.io/release/v1.8.15/bin/linux/amd64/kubeadm > ./kubeadm.1.8.15
$ chmod a+rx kubeadm.1.8.15
$ sudo mv /usr/bin/kubeadm /usr/bin/kubeadm.1.7
$ sudo mv kubeadm.1.8.15 /usr/bin/kubeadm
  1. ์ด์ „ apiserver, apiserver-kubelet-client ๋ฐ front-proxy-client ์ธ์ฆ์„œ์™€ ํ‚ค๋ฅผ ๋ฐฑ์—…ํ•ฉ๋‹ˆ๋‹ค.
$ sudo mv /etc/kubernetes/pki/apiserver.key /etc/kubernetes/pki/apiserver.key.old
$ sudo mv /etc/kubernetes/pki/apiserver.crt /etc/kubernetes/pki/apiserver.crt.old
$ sudo mv /etc/kubernetes/pki/apiserver-kubelet-client.crt /etc/kubernetes/pki/apiserver-kubelet-client.crt.old
$ sudo mv /etc/kubernetes/pki/apiserver-kubelet-client.key /etc/kubernetes/pki/apiserver-kubelet-client.key.old
$ sudo mv /etc/kubernetes/pki/front-proxy-client.crt /etc/kubernetes/pki/front-proxy-client.crt.old
$ sudo mv /etc/kubernetes/pki/front-proxy-client.key /etc/kubernetes/pki/front-proxy-client.key.old
  1. ์ƒˆ apiserver, apiserver-kubelet-client, front-proxy-client ์ธ์ฆ์„œ ๋ฐ ํ‚ค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
$ sudo kubeadm alpha phase certs apiserver --apiserver-advertise-address <IP address of your master server>
$ sudo kubeadm alpha phase certs apiserver-kubelet-client
$ sudo kubeadm alpha phase certs front-proxy-client
  1. ์ด์ „ ๊ตฌ์„ฑ ํŒŒ์ผ ๋ฐฑ์—…
$ sudo mv /etc/kubernetes/admin.conf /etc/kubernetes/admin.conf.old
$ sudo mv /etc/kubernetes/kubelet.conf /etc/kubernetes/kubelet.conf.old
$ sudo mv /etc/kubernetes/controller-manager.conf /etc/kubernetes/controller-manager.conf.old
$ sudo mv /etc/kubernetes/scheduler.conf /etc/kubernetes/scheduler.conf.old
  1. ์ƒˆ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ์ค‘์š”ํ•œ ๋ฉ”๋ชจ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. AWS๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ด ์š”์ฒญ์—์„œ --node-name ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋‹น์‹ ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜๋ฅผ ์–ป์„ ๊ฒƒ์ด๋‹ค : Unable to register node "ip-10-0-8-141.ec2.internal" with API server: nodes "ip-10-0-8-141.ec2.internal" is forbidden: node ip-10-0-8-141 cannot modify node ip-10-0-8-141.ec2.internal ๋‹น์‹ ์˜ ๋กœ๊ทธ sudo journalctl -u kubelet --all | tail ์™€ ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ๋Š”์ด ์žˆ์Œ์„๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค Not Ready ์‹คํ–‰ํ•  ๋•Œ kubectl get nodes .

--apiserver-advertise-address ๋ฐ --node-name ์— ์ „๋‹ฌ๋œ ๊ฐ’์„ ํ™˜๊ฒฝ์— ๋งž๋Š” ์˜ฌ๋ฐ”๋ฅธ ๊ฐ’์œผ๋กœ ๋ฐ”๊พธ์‹ญ์‹œ์˜ค.

$ sudo kubeadm alpha phase kubeconfig all --apiserver-advertise-address 10.0.8.141 --node-name ip-10-0-8-141.ec2.internal
[kubeconfig] Wrote KubeConfig file to disk: "admin.conf"
[kubeconfig] Wrote KubeConfig file to disk: "kubelet.conf"
[kubeconfig] Wrote KubeConfig file to disk: "controller-manager.conf"
[kubeconfig] Wrote KubeConfig file to disk: "scheduler.conf"

  1. kubectl ์ด ๊ตฌ์„ฑ ํŒŒ์ผ์˜ ์˜ฌ๋ฐ”๋ฅธ ์œ„์น˜์— ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.
$ mv .kube/config .kube/config.old
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
$ sudo chmod 777 $HOME/.kube/config
$ export KUBECONFIG=.kube/config
  1. ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ ์žฌ๋ถ€ํŒ…
$ sudo /sbin/shutdown -r now
  1. ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์— ๋‹ค์‹œ ์—ฐ๊ฒฐํ•˜๊ณ  ํ† ํฐ์„ ๊ฐ€์ ธ์™€ ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ๊ฐ€ "์ค€๋น„" ์ƒํƒœ์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ํ† ํฐ์„ ํด๋ฆฝ๋ณด๋“œ์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๋‹จ๊ณ„์—์„œ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
$ kubectl get nodes
$ kubeadm token list

์œ ํšจํ•œ ํ† ํฐ์ด ์—†๋Š” ๊ฒฝ์šฐ. ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ kubeadm token create

ํ† ํฐ์€ 6dihyb.d09sbgae8ph2atjw์™€ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. ๊ฐ ์Šฌ๋ ˆ์ด๋ธŒ ๋…ธ๋“œ์— SSH๋กœ ์—ฐ๊ฒฐํ•˜๊ณ  ๋งˆ์Šคํ„ฐ์— ๋‹ค์‹œ ์—ฐ๊ฒฐ
$ sudo curl -sSL https://dl.k8s.io/release/v1.8.15/bin/linux/amd64/kubeadm > ./kubeadm.1.8.15
$ chmod a+rx kubeadm.1.8.15
$ sudo mv /usr/bin/kubeadm /usr/bin/kubeadm.1.7
$ sudo mv kubeadm.1.8.15 /usr/bin/kubeadm
$ sudo kubeadm join --token=<token from step 8>  <ip of master node>:<port used 6443 is the default> --node-name <should be the same one as from step 5>

  1. ๊ฐ ์—ฐ๊ฒฐ ๋…ธ๋“œ์— ๋Œ€ํ•ด 9๋‹จ๊ณ„๋ฅผ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์—์„œ ๋ชจ๋“  ์Šฌ๋ ˆ์ด๋ธŒ ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์ค€๋น„๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
$ kubectl get nodes

๋ฐ”๋ผ๊ฑด๋Œ€ ์ด๊ฒƒ์€ @davidcomeyne์ด ํ•„์š”ํ•œ ์œ„์น˜์— ๋„๋‹ฌํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

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

@zalmanzhao ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์…จ์Šต๋‹ˆ๊นŒ?

์ €๋Š” 1๋…„ ์ „์— kubeadm v1.9.3 ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ƒ์„ฑํ–ˆ์œผ๋ฉฐ ์ง€๊ธˆ๊นŒ์ง€ ์ž˜ ์ž‘๋™ํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜ ํ•˜๋‚˜์˜ ๋ฐฐํฌ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ ค๊ณ  ๊ฐ”๊ณ  ์ธ์ฆ์„œ๊ฐ€ ๋งŒ๋ฃŒ๋˜์–ด API๊ฐ€ ์ž ๊ฒจ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š”์กฐ์ฐจ ํ•  ์ˆ˜ kubeadm alpha phase certs apiserver ๋‚ด๊ฐ€ ์–ป์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, failure loading apiserver certificate: the certificate has expired (kubeadm ๋ฒ„์ „์€ ํ˜„์žฌ 1.10.6 I ์—…๊ทธ๋ ˆ์ด๋“œ ํ• ๋ถ€ํ„ฐ).

์ถ”๊ฐ€ insecure-skip-tls-verify: true ์— ~/.kube/config โ†’ clusters[0].cluser ๋„ˆ๋ฌด ๋„์›€์ด๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค - ๋‚˜๋Š” ๋ณผ You must be logged in to the server (Unauthorized) ํ•  ๋•Œ kubectl get pods (https : //๋กœ GitHub์˜. com/kubernetes/kubernetes/issues/39767).

ํด๋Ÿฌ์Šคํ„ฐ๋Š” ์ž‘๋™ํ•˜์ง€๋งŒ ์Šค์Šค๋กœ ํŒŒ๊ดด๋˜๊ฑฐ๋‚˜ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋  ๋•Œ๊นŒ์ง€ ์ž์ฒด ์ˆ˜๋ช…์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค ๐Ÿ˜‚ ์•„์‰ฝ๊ฒŒ๋„ #206์—์„œ ์ œ ์ƒํ™ฉ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์ง€ ๋ชปํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ๋น ์ ธ๋‚˜์˜ฌ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ฐพ์•„๋‚ผ ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ๊ด€๋ จ ์ž๋ฃŒ ๋Š” _'์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๋งŒ๋ฃŒ๋œ ์ธ์ฆ์„œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ๋ฒ•'_์ด๋ผ๋Š” ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด /etc/kubernetes/ssl/ ํด๋”( /etc/kubernetes/pki/ )๊ฐ€ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ๊ตญ ๋งž์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ k8s ๋ฒ„์ „์ด ์žˆ๊ฑฐ๋‚˜ ๊ทธ๋ƒฅ ๋ˆˆ์น˜์ฑ„์ง€ ์•Š๊ณ  ํ•ด๋‹น ํด๋”๋ฅผ ์‚ญ์ œํ–ˆ์Šต๋‹ˆ๋‹ค.

@errordeveloper ์ถ”์ฒœ kubeadm reset ๋ฐ ํŽ˜์ด๋กœ๋“œ ๋ ˆํฌ๋ฆฌ์—์ด์…˜ ์—†์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

@kachkaev kubeadm ์„ ์žฌ์„ค์ •ํ•˜์ง€ ์•Š๊ณ  ์ธ์ฆ์„œ๋ฅผ ๊ฐฑ์‹ ํ•˜๋Š” ๋ฐ ์šด์ด ์žˆ์—ˆ์Šต๋‹ˆ๊นŒ?
๊ทธ๋ ‡๋‹ค๋ฉด ๊ณต์œ ํ•˜์‹ญ์‹œ์˜ค. k8s 1.7.4์—์„œ๋„ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ธ์ฆ์„œ๊ฐ€ ๋งŒ๋ฃŒ๋˜์—ˆ๊ณ  ๋‚ด ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋งˆ์Šคํ„ฐ๋ฅผ ๋‚˜์—ดํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋‹ค์‹œ ํ‘œ์‹œ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์—…๊ทธ๋ ˆ์ด๋“œ($ kubeadm upgrade plan)๊ฐ€ ๋˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

[ERROR APIServerHealth]: the API Server is unhealthy; /healthz didn't return "ok"
[ERROR MasterNodesReady]: couldn't list masters in cluster: Get https://172.31.18.88:6443/api/v1/nodes?labelSelector=node-role.kubernetes.io%2Fmaster%3D: x509: certificate has expired or is not yet valid

์•„์‰ฝ๊ฒŒ๋„ ๊ฒฐ๊ตญ ํฌ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•ด๊ฒฐ์ฑ…์€ ์ƒˆ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“ค๊ณ  ๋ชจ๋“  ํŽ˜์ด๋กœ๋“œ๋ฅผ ๋ณต์›ํ•˜๊ณ  DNS ๋ ˆ์ฝ”๋“œ๋ฅผ ์ „ํ™˜ํ•˜๊ณ  ๋งˆ์นจ๋‚ด ์›๋ž˜ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜ญ ์ „ํ™˜ํ•˜๋Š” ๋™์•ˆ ์ด์ „ k8์— ๊ฑด๊ฐ•ํ•œ ํฌ๋“œ๋ฅผ ๊ฐ€์งˆ ๋งŒํผ ์šด์ด ์ข‹์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์†Œํ•œ ๋‹ค์šดํƒ€์ž„์€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

์‘๋‹ตํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค @kachkaev . ๊ทธ๋ž˜๋„ ๋‹ค์‹œ ์‹œ๋„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
๋ญ”๊ฐ€ ์ฐพ์œผ๋ฉด ์ด๊ณณ์— ๊ผญ ์˜ฌ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค...

1.8 ์ด์ „ ๋ฒ„์ „์˜ kubeadm์„ ์‚ฌ์šฉ ์ค‘์ด๊ณ  ์ธ์ฆ์„œ ๊ต์ฒด #206์ด ( ๋ฒ ํƒ€ ๊ธฐ๋Šฅ์œผ๋กœ ) ์ ์šฉ๋˜์—ˆ๊ฑฐ๋‚˜ ์ธ์ฆ์„œ๊ฐ€ ์ด๋ฏธ ๋งŒ๋ฃŒ๋œ ๊ฒฝ์šฐ ์ธ์ฆ์„œ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(๋˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋‹ค์‹œ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. @kachkaev๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ผ๋ถ€)์— ์˜์กดํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์— SSH๋กœ ์—ฐ๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. kubeadm >= 1.8์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ 2๋กœ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.

  1. ํ•„์š”ํ•œ ๊ฒฝ์šฐ Kubeadm์„ ์—…๋ฐ์ดํŠธํ•˜์‹ญ์‹œ์˜ค. ๋‚˜๋Š” ์ด์ „์— 1.7์— ์žˆ์—ˆ๋‹ค.
$ sudo curl -sSL https://dl.k8s.io/release/v1.8.15/bin/linux/amd64/kubeadm > ./kubeadm.1.8.15
$ chmod a+rx kubeadm.1.8.15
$ sudo mv /usr/bin/kubeadm /usr/bin/kubeadm.1.7
$ sudo mv kubeadm.1.8.15 /usr/bin/kubeadm
  1. ์ด์ „ apiserver, apiserver-kubelet-client ๋ฐ front-proxy-client ์ธ์ฆ์„œ์™€ ํ‚ค๋ฅผ ๋ฐฑ์—…ํ•ฉ๋‹ˆ๋‹ค.
$ sudo mv /etc/kubernetes/pki/apiserver.key /etc/kubernetes/pki/apiserver.key.old
$ sudo mv /etc/kubernetes/pki/apiserver.crt /etc/kubernetes/pki/apiserver.crt.old
$ sudo mv /etc/kubernetes/pki/apiserver-kubelet-client.crt /etc/kubernetes/pki/apiserver-kubelet-client.crt.old
$ sudo mv /etc/kubernetes/pki/apiserver-kubelet-client.key /etc/kubernetes/pki/apiserver-kubelet-client.key.old
$ sudo mv /etc/kubernetes/pki/front-proxy-client.crt /etc/kubernetes/pki/front-proxy-client.crt.old
$ sudo mv /etc/kubernetes/pki/front-proxy-client.key /etc/kubernetes/pki/front-proxy-client.key.old
  1. ์ƒˆ apiserver, apiserver-kubelet-client, front-proxy-client ์ธ์ฆ์„œ ๋ฐ ํ‚ค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
$ sudo kubeadm alpha phase certs apiserver --apiserver-advertise-address <IP address of your master server>
$ sudo kubeadm alpha phase certs apiserver-kubelet-client
$ sudo kubeadm alpha phase certs front-proxy-client
  1. ์ด์ „ ๊ตฌ์„ฑ ํŒŒ์ผ ๋ฐฑ์—…
$ sudo mv /etc/kubernetes/admin.conf /etc/kubernetes/admin.conf.old
$ sudo mv /etc/kubernetes/kubelet.conf /etc/kubernetes/kubelet.conf.old
$ sudo mv /etc/kubernetes/controller-manager.conf /etc/kubernetes/controller-manager.conf.old
$ sudo mv /etc/kubernetes/scheduler.conf /etc/kubernetes/scheduler.conf.old
  1. ์ƒˆ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ์ค‘์š”ํ•œ ๋ฉ”๋ชจ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. AWS๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ด ์š”์ฒญ์—์„œ --node-name ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋‹น์‹ ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜๋ฅผ ์–ป์„ ๊ฒƒ์ด๋‹ค : Unable to register node "ip-10-0-8-141.ec2.internal" with API server: nodes "ip-10-0-8-141.ec2.internal" is forbidden: node ip-10-0-8-141 cannot modify node ip-10-0-8-141.ec2.internal ๋‹น์‹ ์˜ ๋กœ๊ทธ sudo journalctl -u kubelet --all | tail ์™€ ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ๋Š”์ด ์žˆ์Œ์„๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค Not Ready ์‹คํ–‰ํ•  ๋•Œ kubectl get nodes .

--apiserver-advertise-address ๋ฐ --node-name ์— ์ „๋‹ฌ๋œ ๊ฐ’์„ ํ™˜๊ฒฝ์— ๋งž๋Š” ์˜ฌ๋ฐ”๋ฅธ ๊ฐ’์œผ๋กœ ๋ฐ”๊พธ์‹ญ์‹œ์˜ค.

$ sudo kubeadm alpha phase kubeconfig all --apiserver-advertise-address 10.0.8.141 --node-name ip-10-0-8-141.ec2.internal
[kubeconfig] Wrote KubeConfig file to disk: "admin.conf"
[kubeconfig] Wrote KubeConfig file to disk: "kubelet.conf"
[kubeconfig] Wrote KubeConfig file to disk: "controller-manager.conf"
[kubeconfig] Wrote KubeConfig file to disk: "scheduler.conf"

  1. kubectl ์ด ๊ตฌ์„ฑ ํŒŒ์ผ์˜ ์˜ฌ๋ฐ”๋ฅธ ์œ„์น˜์— ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.
$ mv .kube/config .kube/config.old
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
$ sudo chmod 777 $HOME/.kube/config
$ export KUBECONFIG=.kube/config
  1. ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ ์žฌ๋ถ€ํŒ…
$ sudo /sbin/shutdown -r now
  1. ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์— ๋‹ค์‹œ ์—ฐ๊ฒฐํ•˜๊ณ  ํ† ํฐ์„ ๊ฐ€์ ธ์™€ ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ๊ฐ€ "์ค€๋น„" ์ƒํƒœ์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ํ† ํฐ์„ ํด๋ฆฝ๋ณด๋“œ์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๋‹จ๊ณ„์—์„œ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
$ kubectl get nodes
$ kubeadm token list

์œ ํšจํ•œ ํ† ํฐ์ด ์—†๋Š” ๊ฒฝ์šฐ. ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ kubeadm token create

ํ† ํฐ์€ 6dihyb.d09sbgae8ph2atjw์™€ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. ๊ฐ ์Šฌ๋ ˆ์ด๋ธŒ ๋…ธ๋“œ์— SSH๋กœ ์—ฐ๊ฒฐํ•˜๊ณ  ๋งˆ์Šคํ„ฐ์— ๋‹ค์‹œ ์—ฐ๊ฒฐ
$ sudo curl -sSL https://dl.k8s.io/release/v1.8.15/bin/linux/amd64/kubeadm > ./kubeadm.1.8.15
$ chmod a+rx kubeadm.1.8.15
$ sudo mv /usr/bin/kubeadm /usr/bin/kubeadm.1.7
$ sudo mv kubeadm.1.8.15 /usr/bin/kubeadm
$ sudo kubeadm join --token=<token from step 8>  <ip of master node>:<port used 6443 is the default> --node-name <should be the same one as from step 5>

  1. ๊ฐ ์—ฐ๊ฒฐ ๋…ธ๋“œ์— ๋Œ€ํ•ด 9๋‹จ๊ณ„๋ฅผ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์—์„œ ๋ชจ๋“  ์Šฌ๋ ˆ์ด๋ธŒ ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์ค€๋น„๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
$ kubectl get nodes

๋ฐ”๋ผ๊ฑด๋Œ€ ์ด๊ฒƒ์€ @davidcomeyne์ด ํ•„์š”ํ•œ ์œ„์น˜์— ๋„๋‹ฌํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@danroliver๋‹˜ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!
๋‚˜๋Š” ํ™•์‹คํžˆ ๊ทธ๊ฒƒ์„ ์‹œ๋„ํ•˜๊ณ  ๋‚ด ๊ฒฐ๊ณผ๋ฅผ ์—ฌ๊ธฐ์— ๊ฒŒ์‹œํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@danroliver ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๋ฐฉ๊ธˆ ์ด์ „ ๋‹จ์ผ ๋…ธ๋“œ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์‹œ๋„ํ–ˆ์œผ๋ฉฐ ์ตœ๋Œ€ 7๋‹จ๊ณ„๊นŒ์ง€ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

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

๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์œผ๋ฉฐ ์ƒˆ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์„ค์ •ํ•ด์•ผํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋„์›€์ด ๋˜์—ˆ๋‹ค๋‹ˆ ๊ธฐ์ฉ๋‹ˆ๋‹ค!

@danroliver ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค
๋‚ด kubeadm ๋ฒ„์ „์€ 1.8.5์ž…๋‹ˆ๋‹ค.

@danroliver๋‹˜ ์ด ๋‹จ๊ณ„๋ฅผ ํ•จ๊ป˜ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ์˜ ๋‹จ๊ณ„์— ์ž‘์€ ์ถ”๊ฐ€๋ฅผํ•ด์•ผํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ํด๋Ÿฌ์Šคํ„ฐ๋Š” v1.9.3์„ ์‹คํ–‰ ์ค‘์ด๋ฉฐ ์ธํ„ฐ๋„ท ์™ธ๋ถ€์˜ ๊ฐœ์ธ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์— ์žˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์Šคํ„ฐ์—์„œ

  1. kubeadm config.yml ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค.
apiVersion: kubeadm.k8s.io/v1alpha1
kind: MasterConfiguration
api:
  advertiseAddress: <master-ip>
kubernetesVersion: 1.9.3
  1. ๋ฐฑ์—… ์ธ์ฆ์„œ ๋ฐ conf ํŒŒ์ผ
mkdir ~/conf-archive/
for f in `ls *.conf`;do mv $f ~/conf-archive/$f.old;done

mkdir ~/pki-archive
for f in `ls apiserver* front-*client*`;do mv $f ~/pki-archive/$f.old;done
  1. ๋งˆ์Šคํ„ฐ์˜ kubeadm ๋ช…๋ น์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ --config config.yml ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
kubeadm alpha phase certs apiserver --config ./config.yml 
kubeadm alpha phase certs apiserver-kubelet-client --config ./config.yml 
kubeadm alpha phase certs front-proxy-client --config ./config.yml
kubeadm alpha phase kubeconfig all --config ./config.yml --node-name <master-node>
reboot
  1. ํ† ํฐ ์ƒ์„ฑ

๋ฏธ๋‹ˆ์–ธ์ฆˆ์—

๋‚˜๋Š” ์›€์ง์—ฌ์•ผ ํ–ˆ๋‹ค

mv /etc/kubernetes/pki/ca.crt ~/archive/
mv /etc/kubernetes/kubelet.conf ~/archive/
systemctl stop kubelet
kubeadm join --token=eeefff.55550009999b3333 --discovery-token-unsafe-skip-ca-verification <master-ip>:6443

@danroliver ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๋‚ด ๋‹จ์ผ ๋…ธ๋“œ ํด๋Ÿฌ์Šคํ„ฐ๋งŒ 1-6๋‹จ๊ณ„(์žฌ๋ถ€ํŒ… ์—†์Œ)๋ฅผ ์ˆ˜ํ–‰ํ•œ ๋‹ค์Œ SIGHUP ์„ kube-apiserver ๋กœ ๋ณด๋‚ด๋Š” ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ–ˆ์Šต๋‹ˆ๋‹ค. docker ps ์ปจํ…Œ์ด๋„ˆ ID๋ฅผ ์ฐพ๊ณ  docker kill -s HUP <container id> ์‹ ํ˜ธ๋ฅผ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

@danroliver ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๋‹จ์ผ ๋งˆ์Šคํ„ฐ/๋‹ค์ค‘ ์ž‘์—…์ž ํด๋Ÿฌ์Šคํ„ฐ์—์„œ๋Š” 1์—์„œ 7๊นŒ์ง€์˜ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ–ˆ์œผ๋ฉฐ ๋ชจ๋“  ์ž‘์—…์ž ๋…ธ๋“œ๋ฅผ ๋งˆ์Šคํ„ฐ์— ๋‹ค์‹œ ์—ฐ๊ฒฐํ•  ํ•„์š”๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค(๊ฐ€์žฅ ๊ณ ํ†ต์Šค๋Ÿฌ์šด ๋ถ€๋ถ„).

์ด ํ›Œ๋ฅญํ•œ ๋‹จ๊ณ„๋ณ„ ๊ณผ์ •์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. @danroliver! ์ด ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค์ค‘ ๋งˆ์Šคํ„ฐ ํด๋Ÿฌ์Šคํ„ฐ(๋ฒ ์–ด๋ฉ”ํƒˆ, ํ˜„์žฌ 1.11.1์„ ์‹คํ–‰ ์ค‘)์— ์–ด๋–ป๊ฒŒ ์ ์šฉ๋˜๊ณ  ๋‹ค์šดํƒ€์ž„ ์—†์ด ์ ์šฉ๋˜๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ์ธ์ฆ์„œ๊ฐ€ ์•„์ง ๋งŒ๋ฃŒ๋˜์ง€ ์•Š์•˜์ง€๋งŒ ๊ทธ ์ผ์ด ๋ฐœ์ƒํ•˜๊ธฐ ์ „์— ์ธ์ฆ์„œ๋ฅผ ์žฌ์ƒ์„ฑ/๊ฐฑ์‹ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šฐ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

@kcronin
์ด ์ƒˆ ๋ฌธ์„œ๋ฅผ ์‚ดํŽด๋ณด์‹ญ์‹œ์˜ค.
https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/
๋„์›€์ด ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@danroliver : ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ž˜ ์ž‘๋™ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์„œ๋ฒ„๋ฅผ ์žฌ๋ถ€ํŒ…ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
๋‹ค์Œ ๋‘ ๋ช…๋ น์œผ๋กœ kube ์‹œ์Šคํ…œ ํฌ๋“œ(apiserver, schduler, ...)๋ฅผ ๋‹ค์‹œ ๋งŒ๋“œ๋Š” ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

systemctl ๋‹ค์‹œ ์‹œ์ž‘ kubelet
for i in $(docker ps | egrep 'admin|controller|scheduler|api|fron|proxy' | rev | awk '{print $1}' | rev);
docker stop $i; ์™„๋ฃŒ

1.13 ํด๋Ÿฌ์Šคํ„ฐ์—์„œ๋„ ์ด ๋ฌธ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ œ ๊ฒฝ์šฐ์—๋Š” ์ธ์ฆ์„œ๊ฐ€ ๋งŒ๋ฃŒ๋  ์˜ˆ์ •์ด์—ˆ์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ ์˜จํ”„๋ ˆ๋ฏธ์Šค์—์„œ ๋‹จ์ผ master\control ์ธ์Šคํ„ด์Šค๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ HA ์„ค์ • ๋˜๋Š” AWS ์„ธ๋ถ€ ์‚ฌํ•ญ์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์œ„์— ํฌํ•จํ–ˆ๋“ฏ์ด ๋ฐฑ ๋‹จ๊ณ„๋Š” ํฌํ•จํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ธ์ฆ์„œ๊ฐ€ ๋งŒ๋ฃŒ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ํด๋Ÿฌ์Šคํ„ฐ์—๋Š” ๊ณ„์† ์ž‘์—…ํ•˜๊ณ  ์‹ถ์€ ์›Œํฌ๋กœ๋“œ๊ฐ€ ์ด๋ฏธ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
ํ˜„์žฌ๋กœ์„œ๋Š” etcd ์ธ์ฆ์„œ๋ฅผ ์ฒ˜๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†์—ˆ์œผ๋ฏ€๋กœ ์ƒ๋žตํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋†’์€ ์ˆ˜์ค€์—์„œ

  • ๋งˆ์Šคํ„ฐ์—

    • ๋งˆ์Šคํ„ฐ์—์„œ ์ƒˆ ์ธ์ฆ์„œ ์ƒ์„ฑ

    • ํฌํ•จ๋œ ์ธ์ฆ์„œ๋กœ ์ƒˆ kubeconfig ์ƒ์„ฑ

    • ์ƒˆ kubelet ์ธ์ฆ์„œ ์ƒ์„ฑ - ํด๋ผ์ด์–ธํŠธ ๋ฐ ์„œ๋ฒ„

    • ์ž‘์—…์ž ๋…ธ๋“œ kubelets์— ๋Œ€ํ•œ ์ƒˆ ํ† ํฐ ์ƒ์„ฑ

  • ์ž‘์—…์ž๋งˆ๋‹ค

    • ์ž‘์—…์ž๋ฅผ ๋จผ์ € ๋งˆ์Šคํ„ฐ์—์„œ ๋ฐฐ์ถœ

    • ์ž‘์—…์ž์— ๋Œ€ํ•œ ssh, kubelet ์ค‘์ง€, ํŒŒ์ผ ์ œ๊ฑฐ ๋ฐ kubelet ๋‹ค์‹œ ์‹œ์ž‘

    • ๋งˆ์Šคํ„ฐ์—์„œ ์ž‘์—…์ž์˜ ์ฝ”๋“œ๋ฅผ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.

  • ๋งˆ์ง€๋ง‰์— ๋งˆ์Šคํ„ฐ์—์„œ

    • ํ† ํฐ ์‚ญ์ œ

# On master - See https://kubernetes.io/docs/setup/certificates/#all-certificates

# Generate the new certificates - you may have to deal with AWS - see above re extra certificate SANs
sudo kubeadm alpha certs renew apiserver
sudo kubeadm alpha certs renew apiserver-etcd-client
sudo kubeadm alpha certs renew apiserver-kubelet-client
sudo kubeadm alpha certs renew front-proxy-client

# Generate new kube-configs with embedded certificates - Again you may need extra AWS specific content - see above
sudo kubeadm alpha kubeconfig user --org system:masters --client-name kubernetes-admin  > admin.conf
sudo kubeadm alpha kubeconfig user --client-name system:kube-controller-manager > controller-manager.conf
sudo kubeadm alpha kubeconfig user --org system:nodes --client-name system:node:$(hostname) > kubelet.conf
sudo kubeadm alpha kubeconfig user --client-name system:kube-scheduler > scheduler.conf

# chown and chmod so they match existing files
sudo chown root:root {admin,controller-manager,kubelet,scheduler}.conf
sudo chmod 600 {admin,controller-manager,kubelet,scheduler}.conf

# Move to replace existing kubeconfigs
sudo mv admin.conf /etc/kubernetes/
sudo mv controller-manager.conf /etc/kubernetes/
sudo mv kubelet.conf /etc/kubernetes/
sudo mv scheduler.conf /etc/kubernetes/

# Restart the master components
sudo kill -s SIGHUP $(pidof kube-apiserver)
sudo kill -s SIGHUP $(pidof kube-controller-manager)
sudo kill -s SIGHUP $(pidof kube-scheduler)

# Verify master component certificates - should all be 1 year in the future
# Cert from api-server
echo -n | openssl s_client -connect localhost:6443 2>&1 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | openssl x509 -text -noout | grep Not
# Cert from controller manager
echo -n | openssl s_client -connect localhost:10257 2>&1 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | openssl x509 -text -noout | grep Not
# Cert from scheduler
echo -n | openssl s_client -connect localhost:10259 2>&1 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | openssl x509 -text -noout | grep Not

# Generate kubelet.conf
sudo kubeadm alpha kubeconfig user --org system:nodes --client-name system:node:$(hostname) > kubelet.conf
sudo chown root:root kubelet.conf
sudo chmod 600 kubelet.conf

# Drain
kubectl drain --ignore-daemonsets $(hostname)
# Stop kubelet
sudo systemctl stop kubelet
# Delete files
sudo rm /var/lib/kubelet/pki/*
# Copy file
sudo mv kubelet.conf /etc/kubernetes/
# Restart
sudo systemctl start kubelet
# Uncordon
kubectl uncordon $(hostname)

# Check kubelet
echo -n | openssl s_client -connect localhost:10250 2>&1 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | openssl x509 -text -noout | grep Not

ํด๋Ÿฌ์Šคํ„ฐ์— ๋‹ค์‹œ ์ฐธ์—ฌํ•˜๋Š” ๋…ธ๋“œ๋ฅผ ์œ„ํ•œ ์ƒˆ ํ† ํฐ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(kubelet ์žฌ์‹œ์ž‘ ํ›„).

# On master
sudo kubeadm token create

์ด์ œ ๊ฐ ์ž‘์—…์ž์— ๋Œ€ํ•ด - ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์”ฉ

kubectl drain --ignore-daemonsets --delete-local-data WORKER-NODE-NAME

์ž‘์—…์ž ๋…ธ๋“œ์— ssh

# Stop kubelet
sudo systemctl stop kubelet

# Delete files
sudo rm /etc/kubernetes/kubelet.conf
sudo rm /var/lib/kubelet/pki/*

# Alter the bootstrap token
new_token=TOKEN-FROM-CREATION-ON-MASTER
sudo sed -i "s/token: .*/token: $new_token/" /etc/kubernetes/bootstrap-kubelet.conf

# Start kubelet
sudo systemctl start kubelet

# Check kubelet certificate
echo -n | openssl s_client -connect localhost:10250 2>&1 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | openssl x509 -text -noout | grep Not
sudo openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -text -noout | grep Not
sudo openssl x509 -in /var/lib/kubelet/pki/kubelet.crt -text -noout | grep Not

๋งˆ์Šคํ„ฐ๋กœ ๋Œ์•„๊ฐ€ ์ž‘์—…์ž ์ฐจ๋‹จ ํ•ด์ œ

kubectl uncordon WORKER-NODE-NAME

๋ชจ๋“  ์ž‘์—…์ž๊ฐ€ ์—…๋ฐ์ดํŠธ๋œ ํ›„ - ํ† ํฐ ์ œ๊ฑฐ - 24์‹œ๊ฐ„ ํ›„์— ๋งŒ๋ฃŒ๋˜์ง€๋งŒ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

On master
sudo kubeadm token delete TOKEN-FROM-CREATION-ON-MASTER

@pmcgrath ํ•ด๋‹น ๋‹จ๊ณ„๋ฅผ ๊ฒŒ์‹œ

1.8 ์ด์ „ ๋ฒ„์ „์˜ kubeadm์„ ์‚ฌ์šฉ ์ค‘์ด๊ณ  ์ธ์ฆ์„œ ๊ต์ฒด #206์ด ( ๋ฒ ํƒ€ ๊ธฐ๋Šฅ์œผ๋กœ ) ์ ์šฉ๋˜์—ˆ๊ฑฐ๋‚˜ ์ธ์ฆ์„œ๊ฐ€ ์ด๋ฏธ ๋งŒ๋ฃŒ๋œ ๊ฒฝ์šฐ ์ธ์ฆ์„œ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(๋˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋‹ค์‹œ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. @kachkaev๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ผ๋ถ€)์— ์˜์กดํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์— SSH๋กœ ์—ฐ๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. kubeadm >= 1.8์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ 2๋กœ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.

1. Update Kubeadm, if needed. I was on 1.7 previously.
$ sudo curl -sSL https://dl.k8s.io/release/v1.8.15/bin/linux/amd64/kubeadm > ./kubeadm.1.8.15
$ chmod a+rx kubeadm.1.8.15
$ sudo mv /usr/bin/kubeadm /usr/bin/kubeadm.1.7
$ sudo mv kubeadm.1.8.15 /usr/bin/kubeadm
1. Backup old apiserver, apiserver-kubelet-client, and front-proxy-client certs and keys.
$ sudo mv /etc/kubernetes/pki/apiserver.key /etc/kubernetes/pki/apiserver.key.old
$ sudo mv /etc/kubernetes/pki/apiserver.crt /etc/kubernetes/pki/apiserver.crt.old
$ sudo mv /etc/kubernetes/pki/apiserver-kubelet-client.crt /etc/kubernetes/pki/apiserver-kubelet-client.crt.old
$ sudo mv /etc/kubernetes/pki/apiserver-kubelet-client.key /etc/kubernetes/pki/apiserver-kubelet-client.key.old
$ sudo mv /etc/kubernetes/pki/front-proxy-client.crt /etc/kubernetes/pki/front-proxy-client.crt.old
$ sudo mv /etc/kubernetes/pki/front-proxy-client.key /etc/kubernetes/pki/front-proxy-client.key.old
1. Generate new apiserver, apiserver-kubelet-client, and front-proxy-client certs and keys.
$ sudo kubeadm alpha phase certs apiserver --apiserver-advertise-address <IP address of your master server>
$ sudo kubeadm alpha phase certs apiserver-kubelet-client
$ sudo kubeadm alpha phase certs front-proxy-client
1. Backup old configuration files
$ sudo mv /etc/kubernetes/admin.conf /etc/kubernetes/admin.conf.old
$ sudo mv /etc/kubernetes/kubelet.conf /etc/kubernetes/kubelet.conf.old
$ sudo mv /etc/kubernetes/controller-manager.conf /etc/kubernetes/controller-manager.conf.old
$ sudo mv /etc/kubernetes/scheduler.conf /etc/kubernetes/scheduler.conf.old
1. Generate new configuration files.

์—ฌ๊ธฐ์— ์ค‘์š”ํ•œ ๋ฉ”๋ชจ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. AWS๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ด ์š”์ฒญ์—์„œ --node-name ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด Unable to register node "ip-10-0-8-141.ec2.internal" with API server: nodes "ip-10-0-8-141.ec2.internal" is forbidden: node ip-10-0-8-141 cannot modify node ip-10-0-8-141.ec2.internal ๋กœ๊ทธ์— sudo journalctl -u kubelet --all | tail ์™€ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  kubectl get nodes ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ๋Š” Not Ready ๋ผ๊ณ  ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค.

--apiserver-advertise-address ๋ฐ --node-name ์— ์ „๋‹ฌ๋œ ๊ฐ’์„ ํ™˜๊ฒฝ์— ๋งž๋Š” ์˜ฌ๋ฐ”๋ฅธ ๊ฐ’์œผ๋กœ ๋ฐ”๊พธ์‹ญ์‹œ์˜ค.

$ sudo kubeadm alpha phase kubeconfig all --apiserver-advertise-address 10.0.8.141 --node-name ip-10-0-8-141.ec2.internal
[kubeconfig] Wrote KubeConfig file to disk: "admin.conf"
[kubeconfig] Wrote KubeConfig file to disk: "kubelet.conf"
[kubeconfig] Wrote KubeConfig file to disk: "controller-manager.conf"
[kubeconfig] Wrote KubeConfig file to disk: "scheduler.conf"
1. Ensure that your `kubectl` is looking in the right place for your config files.
$ mv .kube/config .kube/config.old
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
$ sudo chmod 777 $HOME/.kube/config
$ export KUBECONFIG=.kube/config
1. Reboot your master node
$ sudo /sbin/shutdown -r now
1. Reconnect to your master node and grab your token, and verify that your Master Node is "Ready". Copy the token to your clipboard. You will need it in the next step.
$ kubectl get nodes
$ kubeadm token list

์œ ํšจํ•œ ํ† ํฐ์ด ์—†๋Š” ๊ฒฝ์šฐ. ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ kubeadm token create

ํ† ํฐ์€ 6dihyb.d09sbgae8ph2atjw์™€ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

1. SSH into each of the slave nodes and reconnect them to the master
$ sudo curl -sSL https://dl.k8s.io/release/v1.8.15/bin/linux/amd64/kubeadm > ./kubeadm.1.8.15
$ chmod a+rx kubeadm.1.8.15
$ sudo mv /usr/bin/kubeadm /usr/bin/kubeadm.1.7
$ sudo mv kubeadm.1.8.15 /usr/bin/kubeadm
$ sudo kubeadm join --token=<token from step 8>  <ip of master node>:<port used 6443 is the default> --node-name <should be the same one as from step 5>
1. Repeat Step 9 for each connecting node. From the master node, you can verify that all slave nodes have connected and are ready with:
$ kubectl get nodes

๋ฐ”๋ผ๊ฑด๋Œ€ ์ด๊ฒƒ์€ @davidcomeyne์ด ํ•„์š”ํ•œ ์œ„์น˜์— ๋„๋‹ฌํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

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

1.13 ํด๋Ÿฌ์Šคํ„ฐ์—์„œ๋„ ์ด ๋ฌธ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ œ ๊ฒฝ์šฐ์—๋Š” ์ธ์ฆ์„œ๊ฐ€ ๋งŒ๋ฃŒ๋  ์˜ˆ์ •์ด์—ˆ์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ ์˜จํ”„๋ ˆ๋ฏธ์Šค์—์„œ ๋‹จ์ผ master\control ์ธ์Šคํ„ด์Šค๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ HA ์„ค์ • ๋˜๋Š” AWS ์„ธ๋ถ€ ์‚ฌํ•ญ์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์œ„์— ํฌํ•จํ–ˆ๋“ฏ์ด ๋ฐฑ ๋‹จ๊ณ„๋Š” ํฌํ•จํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ธ์ฆ์„œ๊ฐ€ ๋งŒ๋ฃŒ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ํด๋Ÿฌ์Šคํ„ฐ์—๋Š” ๊ณ„์† ์ž‘์—…ํ•˜๊ณ  ์‹ถ์€ ์›Œํฌ๋กœ๋“œ๊ฐ€ ์ด๋ฏธ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
ํ˜„์žฌ๋กœ์„œ๋Š” etcd ์ธ์ฆ์„œ๋ฅผ ์ฒ˜๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†์—ˆ์œผ๋ฏ€๋กœ ์ƒ๋žตํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋†’์€ ์ˆ˜์ค€์—์„œ

* On the master

  * Generate new certificates on the master
  * Generate new kubeconfigs with embedded certificates
  * Generate new kubelet certicates - client and server
  * Generate a new token for the worker node kubelets

* For each worker

  * Drain the worker first on the master
  * ssh to the worker, stop the kubelet, remove files and restart the kubelet
  * Uncordon the worker on the master

* On master at the end

  * Delete token
# On master - See https://kubernetes.io/docs/setup/certificates/#all-certificates

# Generate the new certificates - you may have to deal with AWS - see above re extra certificate SANs
sudo kubeadm alpha certs renew apiserver
sudo kubeadm alpha certs renew apiserver-etcd-client
sudo kubeadm alpha certs renew apiserver-kubelet-client
sudo kubeadm alpha certs renew front-proxy-client

# Generate new kube-configs with embedded certificates - Again you may need extra AWS specific content - see above
sudo kubeadm alpha kubeconfig user --org system:masters --client-name kubernetes-admin  > admin.conf
sudo kubeadm alpha kubeconfig user --client-name system:kube-controller-manager > controller-manager.conf
sudo kubeadm alpha kubeconfig user --org system:nodes --client-name system:node:$(hostname) > kubelet.conf
sudo kubeadm alpha kubeconfig user --client-name system:kube-scheduler > scheduler.conf

# chown and chmod so they match existing files
sudo chown root:root {admin,controller-manager,kubelet,scheduler}.conf
sudo chmod 600 {admin,controller-manager,kubelet,scheduler}.conf

# Move to replace existing kubeconfigs
sudo mv admin.conf /etc/kubernetes/
sudo mv controller-manager.conf /etc/kubernetes/
sudo mv kubelet.conf /etc/kubernetes/
sudo mv scheduler.conf /etc/kubernetes/

# Restart the master components
sudo kill -s SIGHUP $(pidof kube-apiserver)
sudo kill -s SIGHUP $(pidof kube-controller-manager)
sudo kill -s SIGHUP $(pidof kube-scheduler)

# Verify master component certificates - should all be 1 year in the future
# Cert from api-server
echo -n | openssl s_client -connect localhost:6443 2>&1 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | openssl x509 -text -noout | grep Not
# Cert from controller manager
echo -n | openssl s_client -connect localhost:10257 2>&1 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | openssl x509 -text -noout | grep Not
# Cert from scheduler
echo -n | openssl s_client -connect localhost:10259 2>&1 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | openssl x509 -text -noout | grep Not

# Generate kubelet.conf
sudo kubeadm alpha kubeconfig user --org system:nodes --client-name system:node:$(hostname) > kubelet.conf
sudo chown root:root kubelet.conf
sudo chmod 600 kubelet.conf

# Drain
kubectl drain --ignore-daemonsets $(hostname)
# Stop kubelet
sudo systemctl stop kubelet
# Delete files
sudo rm /var/lib/kubelet/pki/*
# Copy file
sudo mv kubelet.conf /etc/kubernetes/
# Restart
sudo systemctl start kubelet
# Uncordon
kubectl uncordon $(hostname)

# Check kubelet
echo -n | openssl s_client -connect localhost:10250 2>&1 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | openssl x509 -text -noout | grep Not

ํด๋Ÿฌ์Šคํ„ฐ์— ๋‹ค์‹œ ์ฐธ์—ฌํ•˜๋Š” ๋…ธ๋“œ๋ฅผ ์œ„ํ•œ ์ƒˆ ํ† ํฐ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(kubelet ์žฌ์‹œ์ž‘ ํ›„).

# On master
sudo kubeadm token create

์ด์ œ ๊ฐ ์ž‘์—…์ž์— ๋Œ€ํ•ด - ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์”ฉ

kubectl drain --ignore-daemonsets --delete-local-data WORKER-NODE-NAME

์ž‘์—…์ž ๋…ธ๋“œ์— ssh

# Stop kubelet
sudo systemctl stop kubelet

# Delete files
sudo rm /etc/kubernetes/kubelet.conf
sudo rm /var/lib/kubelet/pki/*

# Alter the bootstrap token
new_token=TOKEN-FROM-CREATION-ON-MASTER
sudo sed -i "s/token: .*/token: $new_token/" /etc/kubernetes/bootstrap-kubelet.conf

# Start kubelet
sudo systemctl start kubelet

# Check kubelet certificate
echo -n | openssl s_client -connect localhost:10250 2>&1 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | openssl x509 -text -noout | grep Not
sudo openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -text -noout | grep Not
sudo openssl x509 -in /var/lib/kubelet/pki/kubelet.crt -text -noout | grep Not

๋งˆ์Šคํ„ฐ๋กœ ๋Œ์•„๊ฐ€ ์ž‘์—…์ž ์ฐจ๋‹จ ํ•ด์ œ

kubectl uncordon WORKER-NODE-NAME

๋ชจ๋“  ์ž‘์—…์ž๊ฐ€ ์—…๋ฐ์ดํŠธ๋œ ํ›„ - ํ† ํฐ ์ œ๊ฑฐ - 24์‹œ๊ฐ„ ํ›„์— ๋งŒ๋ฃŒ๋˜์ง€๋งŒ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

On master
sudo kubeadm token delete TOKEN-FROM-CREATION-ON-MASTER

์ด ๋ฌธ์ œ๊ฐ€ ์ข…๋ฃŒ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ 1.14.2์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ๊ณ  ๊ฐ€์ด๋“œ์—๋Š” ์˜ค๋ฅ˜๊ฐ€ ์—†์ง€๋งŒ ํด๋Ÿฌ์Šคํ„ฐ์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†๊ณ  ํ† ํฐ์„ ์žฌ๋ฐœ๊ธ‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค(์ธ์ฆ ์‹คํŒจ).

kubeadm v1.9.x๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ๋œ k8s ํด๋Ÿฌ์Šคํ„ฐ๋Š” v1.14.1 ์˜ ๋‚˜์ด์— ๋™์ผํ•œ ๋ฌธ์ œ๋ฅผ ๊ฒฝํ—˜ํ–ˆ์Šต๋‹ˆ๋‹ค( apiserver-kubelet-client.crt 7์›” 2์ผ์— ๋งŒ๋ฃŒ๋จ) lol

์ธ์ฆ์„œ๋ฅผ ๊ฐฑ์‹ ํ•˜๊ณ  ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์žฌ์ƒ์„ฑํ•˜๊ณ  ๊ฐ„๋‹จํ•œ 3๋…ธ๋“œ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋‹ค์‹œ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด 4๊ฐœ์˜ ๋‹ค๋ฅธ ์†Œ์Šค๋ฅผ ์ฐธ์กฐํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

@danroliver ๋Š” IBM์˜ ์•„๋ž˜ ๊ฐ€์ด๋“œ์— ๋งค์šฐ ๊ฐ€๊นŒ์šด ๋งค์šฐ ํ›Œ๋ฅญํ•˜๊ณ  ๊ตฌ์กฐํ™”๋œ ์ง€์นจ์„ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.
[Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ์ธ์ฆ์„œ ๊ฐฑ์‹ ] IBM WoW! (https://www.ibm.com/support/knowledgecenter/en/SSCKRH_1.1.0/platform/t_certificate_renewal.html)

์ฐธ๊ณ : IBM Financial Crimes Insight with Watson private์€ k8์— ์˜ํ•ด ๊ตฌ๋™๋˜๋ฉฐ, ๊ทธ ์‚ฌ์‹ค์„ ์ „ํ˜€ ๋ชฐ๋ž์Šต๋‹ˆ๋‹ค.

3๋‹จ๊ณ„์™€ 5๋‹จ๊ณ„์˜ ๋ฌธ์ œ

3๋‹จ๊ณ„๋Š” ๋ช…๋ น์— ๋‹จ๊ณ„๊ฐ€ ์—†์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

$ sudo kubeadm alpha certs renew apiserver
$ sudo kubeadm alpha certs renew apiserver-kubelet-client
$ sudo kubeadm alpha certs renew front-proxy-client

5๋‹จ๊ณ„๋Š” ์•„๋ž˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. kubeadm alpha ์—๋Š” kubeconfig๊ฐ€ ๋ชจ๋‘ ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉฐ ๋Œ€์‹  kubeadm ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค.

# kubeadm init phase kubeconfig all
I0705 12:42:24.056152   32618 version.go:240] remote version is much newer: v1.15.0; falling back to: stable-1.14
[kubeconfig] Using kubeconfig folder "/etc/kubernetes"
[kubeconfig] Writing "admin.conf" kubeconfig file
[kubeconfig] Writing "kubelet.conf" kubeconfig file
[kubeconfig] Writing "controller-manager.conf" kubeconfig file
[kubeconfig] Writing "scheduler.conf" kubeconfig file

1.15์—์„œ ์ธ์ฆ์„œ ๊ฐฑ์‹ ์— ๋Œ€ํ•œ ๋” ๋‚˜์€ ๋ฌธ์„œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/

๋˜ํ•œ 1.15 ์ดํ›„ kubeadm upgrade ์ž๋™์œผ๋กœ ์ธ์ฆ์„œ๋ฅผ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค!

kubeadm v1.9.x๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ๋œ k8s ํด๋Ÿฌ์Šคํ„ฐ๋Š” v1.14.1์˜ ๋‚˜์ด์— ๋™์ผํ•œ ๋ฌธ์ œ(apiserver-kubelet-client.crt๊ฐ€ 7์›” 2์ผ์— ๋งŒ๋ฃŒ๋จ)๋ฅผ ๊ฒฝํ—˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

1.13 ์ด์ „ ๋ฒ„์ „์€ ์ด๋ฏธ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๋Š” ์‚ฌ์šฉ์ž๋“ค์ด ์ด ๋น ๋ฅด๊ฒŒ ์›€์ง์ด๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ๋”ฐ๋ผ๊ฐˆ ๊ฒƒ์„ ๊ฐ•๋ ฅํžˆ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ LongTermSupport Working Group ์—์„œ ๋” ์˜ค๋žœ ๊ธฐ๊ฐ„ ๋™์•ˆ Kubernetes ๋ฒ„์ „์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ๋…ผ์˜๊ฐ€ ์ง„ํ–‰ ์ค‘์ด์ง€๋งŒ ํ”„๋กœ์„ธ์Šค๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@pmori ๊ฐ์‚ฌ
kube ๋ฒ„์ „ 1.13.6์—์„œ ์ž‘๋™

์˜๊ฒฌ ๋ฐ ๊ธฐ๋Šฅ ์š”์ฒญ: ์ด ์ธ์ฆ์„œ ๋งŒ๋ฃŒ๋Š” ์˜ค๋Š˜ ์•„์นจ Kubernetes 1.11.x ํด๋Ÿฌ์Šคํ„ฐ์˜ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์œ„(๋ฐ ๋งํฌ)๋ฅผ ๋ชจ๋‘ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์ˆ˜๋งŽ์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๊ณ  ๋ช‡ ์‹œ๊ฐ„ ํ›„์— ํฐ ํ˜ธ์Šค ํด๋Ÿฌ์Šคํ„ฐ์— ์™„์ „ํžˆ ๊ฐ‡ํžŒ ํ›„ ํฌ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹คํ–‰ํžˆ๋„ Kubernetes 1.15๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๊ณ  ์ƒˆ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ๊นŒ์ง€ ์•ฝ 2์ฃผ๊ฐ€ ๋‚จ์•˜์œผ๋ฏ€๋กœ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ƒˆ 1.15 ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“ค๊ณ  ๋ชจ๋“  ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋๋ƒˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฐ ์ผ์ด ์ผ์–ด๋‚˜๊ธฐ ์ „์— ๊ฒฝ๊ณ ๊ฐ€ ์žˆ์—ˆ์œผ๋ฉด ํ•˜๋Š” ๋ฐ”๋žจ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ฒฝ๊ณ  ์—†์ด "๋ฏฟ์„ ์ˆ˜ ์—†์„ ์ •๋„๋กœ ์•ˆ์ •์ ์ธ ํด๋Ÿฌ์Šคํ„ฐ"์—์„œ "์™„์ „ํžˆ ๋ถ€์„œ์ง„ ์ง€์˜ฅ ๊ฐ™์€ ์•…๋ชฝ"์œผ๋กœ ๋ฐ”๋€Œ์—ˆ๊ณ  ์•„๋งˆ๋„ ์ตœ์•…์˜ ๊ฐ€๋™ ์ค‘์ง€ ์‹œ๊ฐ„์„ ๊ฐ€์กŒ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹คํ–‰ํžˆ ๊ธˆ์š”์ผ ์˜คํ›„ ์„œํ•ด์•ˆ์ด์–ด์„œ ์ƒ๋Œ€์ ์œผ๋กœ ์˜ํ–ฅ์ด ์ ์—ˆ์Šต๋‹ˆ๋‹ค.

์œ„์—์„œ ๋…ผ์˜ํ•œ ๋ชจ๋“  ๊ฒƒ๊ณผ ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ํ‹ฐ์ผ“์—์„œ
์ฐจ์ด์ ์€ ์–ธ๊ธ‰๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ธ์ฆ์„œ๊ฐ€ ๊ณง ๋งŒ๋ฃŒ๋  ๋•Œ ๊ฒฝ๊ณ  ํ‘œ์‹œ๋ฅผ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค . (์˜ˆ๋ฅผ ๋“ค์–ด, kubectl์„ ์‚ฌ์šฉํ•˜๊ณ  ์ธ์ฆ์„œ๊ฐ€ ๋ช‡ ์ฃผ ์•ˆ์— ๋งŒ๋ฃŒ๋  ์˜ˆ์ •์ด๋ผ๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”!).

๋ถˆํŽธ์„ ๋ผ์ณ๋“œ๋ ค ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์šด์˜์ž์˜ ์ฑ…์ž„์ž…๋‹ˆ๋‹ค.
๋งŒ๋ฃŒ์— ๋Œ€ํ•ด ๋””์Šคํฌ์˜ ์ธ์ฆ์„œ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๋ถ€์กฑํ•˜๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.
๋ชจ๋‹ˆํ„ฐ๋ง์ด ์šฉ์ดํ•˜์ง€ ์•Š์•„ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€ํ•œ ์ด์œ  ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.
kubeadm์—์„œ ์ธ์ฆ์„œ ๋งŒ๋ฃŒ๋ฅผ ํ™•์ธํ•˜๋Š” ๋ช…๋ น์ž…๋‹ˆ๋‹ค. ๋ณด๋‹ค
https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/

๋˜ํ•œ 1.15 kubeadm ์ดํ›„์—๋Š” ์ธ์ฆ์„œ๊ฐ€ ์ž๋™์œผ๋กœ ๊ฐฑ์‹ ๋ฉ๋‹ˆ๋‹ค.
์—…๊ทธ๋ ˆ์ด๋“œ. ์‚ฌ์šฉ์ž๊ฐ€ ๋” ์ž์ฃผ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋„๋ก ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
2019๋…„ 7์›” 20์ผ 03:49์— "William Stein" [email protected]์ด ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

์˜๊ฒฌ ๋ฐ ๊ธฐ๋Šฅ ์š”์ฒญ: ์ด ์ธ์ฆ์„œ ๋งŒ๋ฃŒ ๋‚ ์งœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์˜ค๋Š˜ ์•„์นจ Kubernetes 1.11.x ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ํ”„๋กœ๋•์…˜์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์‹œ๋„ํ–ˆ๋‹ค
์œ„์˜ ๋ชจ๋“  ๊ฒƒ(๋ฐ ๋งํฌ), ๊ทธ๋Ÿฌ๋‚˜ ์ˆ˜๋งŽ์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ
๋ช‡ ์‹œ๊ฐ„ ๋™์•ˆ ๋Œ€ํ˜• ํ˜ธ์Šค ํด๋Ÿฌ์Šคํ„ฐ์— ์™„์ „ํžˆ ๊ฐ‡ํžˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋‹คํ–‰์Šค๋Ÿฝ๊ฒŒ๋„,
Kubernetes 1.15๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๊ณ  ๋นŒ๋“œํ•˜๊ธฐ๊นŒ์ง€ ์•ฝ 2์ฃผ๊ฐ€ ๋‚จ์•˜์Šต๋‹ˆ๋‹ค.
์ƒˆ ํด๋Ÿฌ์Šคํ„ฐ) ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ ์ƒˆ๋กœ์šด 1.15 ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
๋ชจ๋“  ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฐ ์ผ์ด ์ผ์–ด๋‚˜๊ธฐ ์ „์— ๊ฒฝ๊ณ ๊ฐ€ ์žˆ์—ˆ์œผ๋ฉด ํ•˜๋Š” ๋ฐ”๋žจ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๋ƒฅ
"๋ฏฟ์„ ์ˆ˜ ์—†์„ ์ •๋„๋กœ ์•ˆ์ •์ ์ธ ํด๋Ÿฌ์Šคํ„ฐ"์—์„œ "์™„์ „ํžˆ ๋ถ€์„œ์ง„ ์ง€์˜ฅ ๊ฐ™์€"
์•…๋ชฝ"์ด๋ผ๋Š” ๊ฒฝ๊ณ ๋„ ํ‘œ์‹œ๋˜์ง€ ์•Š์•˜๊ณ  ์•„๋งˆ๋„ ์‚ฌ์ƒ ์ตœ์•…์˜ ๊ฐ€๋™ ์ค‘์ง€ ์‹œ๊ฐ„์„ ๊ฐ€์กŒ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋‹คํ–‰ํžˆ ๊ธˆ์š”์ผ ์˜คํ›„ ์„œํ•ด์•ˆ์ด๋ผ ์ƒ๋Œ€์ ์œผ๋กœ
์ž„ํŒฉํŠธ ์žˆ๋Š”.

์œ„์—์„œ ๋…ผ์˜ํ•œ ๋ชจ๋“  ๊ฒƒ๊ณผ ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ํ‹ฐ์ผ“์—์„œ ํ•œ ๊ฐ€์ง€
๊ทธ๊ฒƒ์€ ๋Œ€๊ทœ๋ชจ๋ฅผ ๋งŒ๋“ค์—ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค
์šฐ๋ฆฌ๋ฅผ ์œ„ํ•œ ์ฐจ์ด์ ์€ ์–ธ๊ธ‰๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค: ์ธ์ฆ์„œ๊ฐ€ ์žˆ์„ ๋•Œ ๊ฒฝ๊ณ  ํ‘œ์‹œ ์‹œ์ž‘๊ณง ๋งŒ๋ฃŒ๋ฉ๋‹ˆ๋‹ค . (์˜ˆ: kubectl์„ ์‚ฌ์šฉํ•˜๊ณ  ์ธ์ฆ์„œ๊ฐ€
๋ช‡ ์ฃผ ์•ˆ์— ๋งŒ๋ฃŒ๋  ์˜ˆ์ •์ด๋‹ˆ ์•Œ๋ ค์ฃผ์„ธ์š”!).

โ€”
๋‹น์‹ ์ด ๋Œ“๊ธ€์„ ๋‹ฌ์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/kubernetes/kubeadm/issues/581?email_source=notifications&email_token=AACRATDWBQHYVVRG4LYVXLQAJOJHA5CNFSM4EGBFHKKYY3PNVWWK3TUL52HS4DFVEXG43VMVBW63LNMVX
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AACRATC437G4OZ3ZOEQM5LLQAJOJHANCNFSM4EGBFHKA
.

@neolit123 ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ์˜๊ฒฌ์— ์„ค๋ช…๋œ ๋Œ€๋กœ ํ–ฅํ›„ ์ธ์ฆ์„œ ๋ฌธ์ œ๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ž์ฒด ๋ชจ๋‹ˆํ„ฐ๋ง ์ธํ”„๋ผ์— ๋ฌด์–ธ๊ฐ€๋ฅผ ์ถ”๊ฐ€ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@danroliver Thx ๋‹ต์žฅ์„ ๋ณด๋‚ด
์–ธ๊ธ‰ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š” ํ•œ ๊ฐ€์ง€ ์‚ฌํ•ญ์€ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ฐฑ์‹ ํ•ด์•ผ ํ•˜๋Š” "etcd" ๊ด€๋ จ ์ธ์ฆ์„œ์ž…๋‹ˆ๋‹ค. ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ YAML ํŒŒ์ผ์—์„œ ์ฐธ์กฐ๋กœ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌ์„ฑ์„ ๋‹ค์‹œ ๋กœ๋“œํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

Kubernetes v1.14์˜ ๊ฒฝ์šฐ @desdic ์ด ์ œ์•ˆํ•œ ์ด ์ ˆ์ฐจ๊ฐ€ ๊ฐ€์žฅ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

$ cd /etc/kubernetes/pki/
$ mv {apiserver.crt,apiserver-etcd-client.key,apiserver-kubelet-client.crt,front-proxy-ca.crt,front-proxy-client.crt,front-proxy-client.key,front-proxy-ca.key,apiserver-kubelet-client.key,apiserver.key,apiserver-etcd-client.crt} ~/
$ kubeadm init phase certs all --apiserver-advertise-address <IP>
  • ๋ชจ๋“  kubeconfig ํŒŒ์ผ์„ ๋ฐฑ์—…ํ•˜๊ณ  ๋‹ค์‹œ ์ƒ์„ฑํ•˜์‹ญ์‹œ์˜ค.
$ cd /etc/kubernetes/
$ mv {admin.conf,controller-manager.conf,mv kubelet.conf,scheduler.conf} ~/
$ kubeadm init phase kubeconfig all
$ reboot
  • ์ƒˆ admin.conf ๋ณต์‚ฌ:
$ cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

Kubernetes v1.14์˜ ๊ฒฝ์šฐ ์ด ์ ˆ์ฐจ๊ฐ€ ๊ฐ€์žฅ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

* https://stackoverflow.com/a/56334732/1147487

๋‚ด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ˆ˜์ •ํ•œ ํ›„ ์ˆ˜์ • ์‚ฌํ•ญ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@danroliver ๋Š” IBM์˜ ์•„๋ž˜ ๊ฐ€์ด๋“œ์— ๋งค์šฐ ๊ฐ€๊นŒ์šด ๋งค์šฐ ํ›Œ๋ฅญํ•˜๊ณ  ๊ตฌ์กฐํ™”๋œ ์ง€์นจ์„ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.
[Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ์ธ์ฆ์„œ ๊ฐฑ์‹ ] IBM WoW! (https://www.ibm.com/support/knowledgecenter/en/SSCKRH_1.1.0/platform/t_certificate_renewal.html)

๋ฉ‹์ง„! ์ด๊ฒŒ ์–ธ์ œ ์ถœ๊ฐ„๋๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ด๊ฒƒ์„ ๊ฒช์„ ๋•Œ ๋‚˜๋Š” ํ™•์‹คํžˆ ์ด๊ฒƒ์ด ๋„์›€์ด๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

K8s 1.13.x ํ† ํฐ์— ๋Œ€ํ•œ ์ฐธ๊ณ  ์‚ฌํ•ญ (๋‹ค๋ฅธ K8s ๋ฒ„์ „์ผ ์ˆ˜ ์žˆ์Œ)
CA ์ธ์ฆ์„œ( /etc/kubernetes/pki/ca.crt )๋ฅผ ๋‹ค์‹œ ์ƒ์„ฑํ•œ ๊ฒฝ์šฐ ํ† ํฐ( kubectl -n kube-system get secret | grep token )์— ์ด์ „ CA๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋‹ค์‹œ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ํ† ํฐ์—๋Š” kube-proxy-token , coredns-token ๋˜์–ด ์žˆ์–ด ํด๋Ÿฌ์Šคํ„ฐ ํฌ๋ฆฌํ‹ฐ์ปฌ ์„œ๋น„์Šค๊ฐ€ K8s API๋กœ ์ธ์ฆํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.
ํ† ํฐ์„ ์žฌ์ƒ์„ฑํ•˜๋ ค๋ฉด ์ด์ „ ํ† ํฐ์„ ์‚ญ์ œํ•˜๋ฉด ๋‹ค์‹œ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
PV Provisioner, Ingress Controllers, cert-manager ๋“ฑ๊ณผ ๊ฐ™์€ K8s API์™€ ํ†ต์‹ ํ•˜๋Š” ๋ชจ๋“  ์„œ๋น„์Šค๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

์ด ํ›Œ๋ฅญํ•œ ๋‹จ๊ณ„๋ณ„ ๊ณผ์ •์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. @danroliver! ์ด ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค์ค‘ ๋งˆ์Šคํ„ฐ ํด๋Ÿฌ์Šคํ„ฐ(๋ฒ ์–ด๋ฉ”ํƒˆ, ํ˜„์žฌ 1.11.1์„ ์‹คํ–‰ ์ค‘)์— ์–ด๋–ป๊ฒŒ ์ ์šฉ๋˜๊ณ  ๋‹ค์šดํƒ€์ž„ ์—†์ด ์ ์šฉ๋˜๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ์ธ์ฆ์„œ๊ฐ€ ์•„์ง ๋งŒ๋ฃŒ๋˜์ง€ ์•Š์•˜์ง€๋งŒ ๊ทธ ์ผ์ด ๋ฐœ์ƒํ•˜๊ธฐ ์ „์— ์ธ์ฆ์„œ๋ฅผ ์žฌ์ƒ์„ฑ/๊ฐฑ์‹ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šฐ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” @kcronin๋‹˜ , ๋ฉ€ํ‹ฐ ๋งˆ์Šคํ„ฐ ๊ตฌ์„ฑ์œผ๋กœ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•˜์…จ๋‚˜์š”? --apiserver-advertise-address๋กœ ์ง„ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.ํ•˜๋‚˜๊ฐ€ ์•„๋‹ˆ๋ผ 3๊ฐœ์˜ IP๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

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

@pmcgrath ๋งˆ์Šคํ„ฐ๊ฐ€ 3๊ฐœ์ธ ๊ฒฝ์šฐ ๊ฐ ๋งˆ์Šคํ„ฐ์— ๋Œ€ํ•ด ๋‹จ๊ณ„๋ฅผ ๋ฐ˜๋ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋˜๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ . ์‚ฌ๋ก€

@SuleimanWA , CA๊ฐ€ ์žฌ์ƒ์„ฑ๋œ ๊ฒฝ์šฐ admin.conf ๋ฐ CA ํŒŒ์ผ์„ ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒฝ์šฐ์—๋Š” ๋ชจ๋“  ๋งˆ์Šคํ„ฐ์—์„œ ์ธ์ฆ์„œ(etcd, kubelet, ์Šค์ผ€์ค„๋Ÿฌ ๋“ฑ)๋ฅผ ์žฌ์ƒ์„ฑํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ๋ฐ˜๋ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@anapsix
1.13.x ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‹คํ–‰ ์ค‘์ด๊ณ  kubeadm alpha certs renew all ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ธ์ฆ์„œ๋ฅผ ๊ฐฑ์‹ ํ•œ ํ›„ apiserver๊ฐ€ Unable to authenticate the request due to an error: [x509: certificate has expired or is not yet valid, x509: certificate has expired or is not yet valid] ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค.

ํ† ํฐ์„ ์žฌ์ƒ์„ฑํ•˜๋ ค๋ฉด ์ด์ „ ํ† ํฐ์„ ์‚ญ์ œํ•˜๋ฉด ๋‹ค์‹œ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ ์–ด๋–ค ํ† ํฐ์„ ๋งํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๊นŒ? kubeadm์ด ์ƒ์„ฑํ•œ ๊ฒƒ์ž…๋‹ˆ๊นŒ ์•„๋‹ˆ๋ฉด ํ† ํฐ์„ ์–ด๋–ป๊ฒŒ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

-----์—…๋ฐ์ดํŠธ-----
๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋น„๋ฐ€ ๊ทธ ์ž์ฒด๋ผ๋Š” ๊ฒƒ์„ ์•Œ์•˜๋‹ค. ์ œ ๊ฒฝ์šฐ์—๋Š” kube-controller๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์•„ ๋น„๋ฐ€์ด ์ž๋™ ์ƒ์„ฑ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋†’์€ ๋ฒ„์ „ ์‚ฌ์šฉ:

kubeadm ์•ŒํŒŒ ์ธ์ฆ์„œ ๋ชจ๋‘ ๊ฐฑ์‹ 

์ฒซ ๋ฒˆ์งธ ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์˜ kubelet์ด ๋‹ค์šด๋˜๋ฉด(systemctl stop kubelet) ๋‹ค๋ฅธ ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ๋Š” ์ฒซ ๋ฒˆ์งธ ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์˜ CA์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์›๋ž˜ ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์˜ kubelet์ด ๋‹ค์‹œ ์˜จ๋ผ์ธ ์ƒํƒœ๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ ๋‹ค์Œ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

kubectl ๊ฐ€์ ธ์˜ค๊ธฐ ๋…ธ๋“œ
์„œ๋ฒ„ ์˜ค๋ฅ˜(InternalError): ์„œ๋ฒ„ ์˜ค๋ฅ˜("")๋กœ ์ธํ•ด ์š”์ฒญ์ด ์„ฑ๊ณตํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค(๋…ธ๋“œ ๊ฐ€์ ธ์˜ค๊ธฐ).

์›๋ž˜ CA ๋…ธ๋“œ์˜ kublet์ด ๋‹ค์šด๋˜๋Š” ๋™์•ˆ CA ์—ญํ• ์„ ๋‹ค๋ฅธ ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ๋กœ ์ด์ „ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@anapsix
1.13.x ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‹คํ–‰ ์ค‘์ด๊ณ  kubeadm alpha certs renew all ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ธ์ฆ์„œ๋ฅผ ๊ฐฑ์‹ ํ•œ ํ›„ apiserver๊ฐ€ Unable to authenticate the request due to an error: [x509: certificate has expired or is not yet valid, x509: certificate has expired or is not yet valid] ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค.

ํ† ํฐ์„ ์žฌ์ƒ์„ฑํ•˜๋ ค๋ฉด ์ด์ „ ํ† ํฐ์„ ์‚ญ์ œํ•˜๋ฉด ๋‹ค์‹œ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ ์–ด๋–ค ํ† ํฐ์„ ๋งํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๊นŒ? kubeadm์ด ์ƒ์„ฑํ•œ ๊ฒƒ์ž…๋‹ˆ๊นŒ ์•„๋‹ˆ๋ฉด ํ† ํฐ์„ ์–ด๋–ป๊ฒŒ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

-----์—…๋ฐ์ดํŠธ-----
๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋น„๋ฐ€ ๊ทธ ์ž์ฒด๋ผ๋Š” ๊ฒƒ์„ ์•Œ์•˜๋‹ค. ์ œ ๊ฒฝ์šฐ์—๋Š” kube-controller๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์•„ ๋น„๋ฐ€์ด ์ž๋™ ์ƒ์„ฑ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”, ์ €๋Š” ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์ง€๋งŒ 1.13 ๋ฒ„์ „์—์„œ๋Š” ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ ํ•ด๋ณด์…จ๋‹ค๋ฉด ๋ช‡๊ฐ€์ง€ ์—ฌ์ญค๋ด๋„ ๋ ๊นŒ์š”?
๊ทธ๋ž˜์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‚˜๋Š” ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค :
kubeadm alpha certs๋Š” ๋ชจ๋‘๋ฅผ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค(๋งˆ์Šคํ„ฐ์˜ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ cert uber pki/ ํด๋”๋ฅผ ์—…๋ฐ์ดํŠธํ•จ).
kubeadm init phase kubeconfig๋ฅผ ์‹คํ–‰ํ•˜์—ฌ kube ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. (๋งˆ์Šคํ„ฐ ๋ฐ ์ž‘์—…์ž).
๋ชจ๋“  ๋…ธ๋“œ์—์„œ kubelet์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค.

์—ฌ์ „ํžˆ ํ† ํฐ์„ ๋งŒ๋“ค๊ณ  ์ž‘์—…์ž ๋…ธ๋“œ์—์„œ ์กฐ์ธ์„ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์ˆ˜ํ–‰ํ•œ ๋‹จ๊ณ„๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

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