<p>kubeadm ์žฌ์„ค์ •์ด ์„ฑ๊ณตํ–ˆ์ง€๋งŒ์ด ๋…ธ๋“œ IP๋Š” ์—ฌ์ „ํžˆ kubeadm-config configmap์— ์žˆ์Šต๋‹ˆ๋‹ค.</p>

์— ๋งŒ๋“  2018๋…„ 12์›” 05์ผ  ยท  32์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: kubernetes/kubeadm

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

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

๋ฒ„์ „

kubeadm ๋ฒ„์ „ ( kubeadm version ) :

[root@k8s-211 ~]# kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.0", GitCommit:"ddf47ac13c1a9483ea035a79cd7c10005ff21a6d", GitTreeState:"clean", BuildDate:"2018-12-03T21:02:01Z", GoVersion:"go1.11.2", Compiler:"gc", Platform:"linux/amd64"}

ํ™˜๊ฒฝ :

  • Kubernetes ๋ฒ„์ „ ( kubectl version ) :
[root@k8s-211 ~]# kubectl version
Client Version: version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.0", GitCommit:"ddf47ac13c1a9483ea035a79cd7c10005ff21a6d", GitTreeState:"clean", BuildDate:"2018-12-03T21:04:45Z", GoVersion:"go1.11.2", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.0", GitCommit:"ddf47ac13c1a9483ea035a79cd7c10005ff21a6d", GitTreeState:"clean", BuildDate:"2018-12-03T20:56:12Z", GoVersion:"go1.11.2", Compiler:"gc", Platform:"linux/amd64"}
  • ํด๋ผ์šฐ๋“œ ์ œ๊ณต ์—…์ฒด ๋˜๋Š” ํ•˜๋“œ์›จ์–ด ๊ตฌ์„ฑ :
  • OS (์˜ˆ : / etc / os-release) :
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
  • ์ปค๋„ (์˜ˆ : uname -a ) :
Linux k8s-lixin-211 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
  • ๊ธฐํƒ€ :

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

์ด ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ๋…ธ๋“œ๋ฅผ ์žฌ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด kubeadm reset -f ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ช…๋ น์ด ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ kubeadm-config ConfigMap์„ ๋ณด๋ฉด ์ด๋ฏธ ClusterStatus์—์ด ๋…ธ๋“œ IP๊ฐ€์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—ฌ์ „ํžˆ ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์™œ kubeadm reset ์ด ๋…ธ๋“œ๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ง์ ‘ ์‚ญ์ œํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ๋Œ€์‹  kubectl delete node <node name> ์ˆ˜๋™์œผ๋กœ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค.

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

kubeadm-config ConfigMap์€์ด ๋…ธ๋“œ IP๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

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

  • ์ฒซ ๋ฒˆ์งธ ๋…ธ๋“œ์—์„œ kubeadm init --config=kubeadm.yml .
  • ๋‘ ๋ฒˆ์งธ ๋…ธ๋“œ์—์„œ kubeadm join --experimental-control-plane --config=kubeadm.yml .
  • ๋‘ ๋ฒˆ์งธ ๋…ธ๋“œ์—์„œ kubeadm reset -f .
  • kubectl -n kube-system get cm kubeadm-config -oyaml ์ด๋ฏธ ClusterStatus์—์žˆ๋Š” ๋‘ ๋ฒˆ์งธ ๋…ธ๋“œ IP๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.

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


kubeadm-config configMap yaml :

apiVersion: v1
data:
  ClusterConfiguration: |
    apiServer:
      extraArgs:
        authorization-mode: Node,RBAC
      timeoutForControlPlane: 4m0s
    apiVersion: kubeadm.k8s.io/v1beta1
    certificatesDir: /etc/kubernetes/pki
    clusterName: kubernetes
    controlPlaneEndpoint: 192.168.46.117:6443
    controllerManager: {}
    dns:
      type: CoreDNS
    etcd:
      local:
        dataDir: /var/lib/etcd
        extraArgs:
          cipher-suites: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
        serverCertSANs:
        - 192.168.46.117
    imageRepository: k8s.gcr.io
    kind: ClusterConfiguration
    kubernetesVersion: v1.13.0
    networking:
      dnsDomain: cluster.local
      podSubnet: 10.244.0.0/16
      serviceSubnet: 10.96.0.0/12
    scheduler: {}
  ClusterStatus: |
    apiEndpoints:
      k8s-211:
        advertiseAddress: 192.168.46.211
        bindPort: 6443
      k8s-212:
        advertiseAddress: 192.168.46.212
        bindPort: 6443
    apiVersion: kubeadm.k8s.io/v1beta1
    kind: ClusterStatus
kind: ConfigMap
metadata:
  creationTimestamp: "2018-12-04T14:17:38Z"
  name: kubeadm-config
  namespace: kube-system
  resourceVersion: "103402"
  selfLink: /api/v1/namespaces/kube-system/configmaps/kubeadm-config
  uid: 5a9320c1-f7cf-11e8-868d-0050568863b3

help wanted kinbug prioritimportant-soon

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

1.13.3์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค (HA ํด๋Ÿฌ์Šคํ„ฐ ์„ค์ • : ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ 3 ๊ฐœ + ์ž‘์—…์ž 3 ๊ฐœ). ๋‹ค์Œ ๋‹จ๊ณ„ ํ›„์— ๋งŒ โ€‹โ€‹๋งˆ์Šคํ„ฐ ๋…ธ๋“œ๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ๊ต์ฒดํ–ˆ์Šต๋‹ˆ๋‹ค.

ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๋…ธ๋“œ ์‚ญ์ œ

kubectl delete node master03

etcdctl ๋‹ค์šด๋กœ๋“œ (์˜ˆ : master01)

mkdir /opt/tools && cd /opt/tools
wget https://github.com/etcd-io/etcd/releases/download/v3.3.12/etcd-v3.3.12-linux-arm64.tar.gz
tar xfz etcd-v3.3.12-linux-arm64.tar.gz

etcd์—์„œ ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ ์ œ๊ฑฐ

cd /opt/tools/etcd-v3.3.12-linux-arm64
./etcdctl --endpoints https://192.168.0.11:2379 --ca-file /etc/kubernetes/pki/etcd/ca.crt --cert-file /etc/kubernetes/pki/etcd/server.crt --key-file /etc/kubernetes/pki/etcd/server.key member list
./etcdctl --endpoints https://192.168.0.11:2379 --ca-file /etc/kubernetes/pki/etcd/ca.crt --cert-file /etc/kubernetes/pki/etcd/server.crt --key-file /etc/kubernetes/pki/etcd/server.key member remove 28a9dabfcfbca673

kubeadm-config์—์„œ ์ œ๊ฑฐ

kubectl -n kube-system get cm kubeadm-config -o yaml > /tmp/conf.yml
manually edit /tmp/conf.yml to remove the old server
kubectl -n kube-system apply -f /tmp/conf.yml

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

cc @fabriziopandini

์ด์ƒ์ ์œผ๋กœ๋Š” ClusterStatus๋ฅผ "์ƒˆ๋กœ ๊ณ ์นจ"ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜ผ๋ˆ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ œ์–ด ํ”Œ๋ ˆ์ธ ๋…ธ๋“œ๊ฐ€ ๊ฒฝ๊ณ ์—†์ด ์ข…๋ฃŒ๋˜๊ณ  kubeadm reset ๋ฅผ ์‹คํ–‰ํ•  ๊ธฐํšŒ์—†์ด ์™„์ „ํžˆ ์ข…๋ฃŒ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ƒ์ ์œผ๋กœ๋Š” ํด๋Ÿฌ์Šคํ„ฐ์— ๋” ์ด์ƒ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ œ์–ด ํ”Œ๋ ˆ์ธ ๋…ธ๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ClusterStatus๋ฅผ ๋ช…์‹œ ์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊นจ๋—ํ•œ ๋ฐฉ๋ฒ•์ด์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ kubeadm join --control-plane ... ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ์ˆ˜ํ–‰ ํ•  ์ž‘์—…์ž…๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ๋‚ด์žฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ?

์—ฌ๊ธฐ์— ๋ช‡ ๊ฐ€์ง€ ์˜๊ฒฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

kubeadm-config ConfigMap์€์ด ๋…ธ๋“œ ip๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

@pytimer ํด๋Ÿฌ์Šคํ„ฐ ์ƒํƒœ์— ๋…ธ๋“œ API ์ฃผ์†Œ๋ฅผ ๋‚จ๊ฒจ ๋‘๋Š” ๊ฒƒ์ด ์ด์ƒ์ ์ด์ง€

์—ฌ์ „ํžˆ ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์™œ kubeadm reset์ด์ด ๋…ธ๋“œ๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ง์ ‘ ์‚ญ์ œํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ๋Œ€์‹  kubectl delete node๋ฅผ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค.์ˆ˜๋™์œผ๋กœ.

@luxas ๋Š” ์•ฝ๊ฐ„์˜ ์—ญ์‚ฌ์  ๋งฅ๋ฝ์ด ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‚ด ์ƒ๊ฐ ์—” ๋…ธ๋“œ๊ฐ€ ์Šค์Šค๋กœ ์‚ญ์ œํ•  ๊ถŒํ•œ์ด ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค (๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ์ œ์–ด ํ”Œ๋ ˆ์ธ ๋…ธ๋“œ๊ฐ€ ์•„๋‹Œ ์ž‘์—…์ž ๋…ธ๋“œ์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค ...)

์ด์ƒ์ ์œผ๋กœ๋Š” ClusterStatus๋ฅผ "์ƒˆ๋กœ ๊ณ ์นจ"ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. / ClusterStatus๋ฅผ ๋ช…์‹œ ์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊นจ๋—ํ•œ ๋ฐฉ๋ฒ•์ด์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

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

@fabriziopandini ๋™์ผํ•œ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ๋…ธ๋“œ์— ๊ฐ€์ž…

๋‚ด ๊ฐ€์ž… ๋‹จ๊ณ„ :

๋‘ ๋ฒˆ์งธ ์ œ์–ด ํ‰๋ฉด ๋…ธ๋“œ ip๋Š” 192.168.46.212 ์ž…๋‹ˆ๋‹ค.

  • etcd ํด๋Ÿฌ์Šคํ„ฐ์—์„œ 192.168.46.212 ๋…ธ๋“œ etcd ๊ตฌ์„ฑ์›์„ ์ œ๊ฑฐํ•˜์‹ญ์‹œ์˜ค.
  • kubectl delete node k8s-212
  • ์ด ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ๋…ธ๋“œ์˜ kubeadm reset -f .
  • kubeadm join --experimental-control-plane --config kubeadm.yaml -v 5 ๋‹ค์‹œ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค.

kubeadm ๊ฐ€์ž… ๋กœ๊ทธ :

...
[etcd] Checking Etcd cluster health
I1207 17:57:18.109993    8541 local.go:66] creating etcd client that connects to etcd pods
I1207 17:57:18.110000    8541 etcd.go:134] checking etcd manifest
I1207 17:57:18.119797    8541 etcd.go:181] etcd endpoints read from pods: https://192.168.46.211:2379,https://192.168.46.212:2379
I1207 17:57:18.131111    8541 etcd.go:221] etcd endpoints read from etcd: https://192.168.46.211:2379
etcd cluster is not healthy: context deadline exceeded

kubeadm ์ฝ”๋“œ๋ฅผ๋ณด๊ณ ์ด ๋ฌธ์ œ๊ฐ€ kubeadm-config ConfigMap์— ๋‚จ์•„์žˆ๋Š” 192.168.46.212๋กœ ์ธํ•ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

Kubeadm์€ ์ œ์–ด ํ‰๋ฉด ๋…ธ๋“œ์— ๊ฐ€์ž… ํ•  ๋•Œ kubeadm-config ConfigMap์—์„œ api ์—”๋“œ ํฌ์ธํŠธ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  etcd ์—”๋“œ ํฌ์ธํŠธ๋Š” api ์—”๋“œ ํฌ์ธํŠธ์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ 912.168.46.212 ์ œ์–ด ํ”Œ๋ ˆ์ธ ๋…ธ๋“œ๊ฐ€ ์ œ๊ฑฐ๋˜์—ˆ๊ณ  ์•„์ง ๊ฐ€์ž…๋˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ etcd ํด๋Ÿฌ์Šคํ„ฐ ์ƒํƒœ๋ฅผ ์ž˜๋ชป ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

kubeadm-config ConfigMap์—์„œ 192.168.46.212 api ์—”๋“œ ํฌ์ธํŠธ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ ์ด ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ๋…ธ๋“œ์— ๋‹ค์‹œ ๊ฐ€์ž…ํ•˜๋ฉด ์„ฑ๊ณตํ•ฉ๋‹ˆ๋‹ค.

@pytimer ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!
์ด๊ฒƒ์€ ์กฐ์‚ฌ๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์ƒ๋˜๋Š” etcd ๋์  ๋ชฉ๋ก์„ ์‹ค์ œ etcd ๋ชฉ๋ก ๋์ ๊ณผ ๋™๊ธฐํ™”ํ•˜๋ ค๋Š” ๋…ผ๋ฆฌ๊ฐ€ ์ด๋ฏธ ์žˆ์ง€๋งŒ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์˜ˆ ์ด๊ฒƒ์€ ๋ฒ„๊ทธ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. 3 ๋…ธ๋“œ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ASG๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค๋ฅผ ์ข…๋ฃŒํ•˜๋ฉด ASG ๊ทœ์น™์— ๋”ฐ๋ผ ์ƒˆ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด ์‹œ๊ฐ„ ๋™์•ˆ ์ข…๋ฃŒ ๋œ ๋…ธ๋“œ๋Š” etcd์˜ ๊ตฌ์„ฑ์› ๋ชฉ๋ก์—์„œ ๋น„์ •์ƒ์œผ๋กœ ๋‚˜์—ด๋ฉ๋‹ˆ๋‹ค. ์ƒˆ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋‚˜ํƒ€๋‚˜๋ฉด kubeadm join... ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— etcd์—์„œ ๋น„์ •์ƒ ๋ฉค๋ฒ„๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. kubeadm join... ์‹คํ–‰ํ•  ๋•Œ etcd์— ๋”ฐ๋ผ 2 ๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€์žˆ๋Š” etcd ํด๋Ÿฌ์Šคํ„ฐ๋Š” ์ •์ƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ kubeadm์€ ClusterStatus๋ฅผ ์ง„์‹ค์˜ ์†Œ์Šค๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ ์—ฌ์ „ํžˆ ์ด์ „ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋‚˜์—ด๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ etcd ๋ฉค๋ฒ„์‹ญ ๊ด€๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ ํ•œ ์งํ›„์— ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ง„์‹ค๋กœ kubeadm-config ConfigMap์„ ์—…๋ฐ์ดํŠธ ํ•œ ๋‹ค์Œ kubeadm join... ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด์ƒ์ ์œผ๋กœ kubeadm join... ๋Š” etcd๋ฅผ ์ง„์‹ค์˜ ์†Œ์Šค๋กœ ์‚ฌ์šฉํ•˜๊ณ  ๊ทธ์— ๋”ฐ๋ผ kubeadm-config ConfigMap์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

@fabianofranz ์•„๋งˆ๋„์ด ๋ฌธ์ œ์˜ ์›์ธ์„ ์ฐพ์•˜์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

etcd ์—”๋“œ ํฌ์ธํŠธ๋ฅผ ์‹ค์ œ etcd ์—”๋“œ ํฌ์ธํŠธ ๋ชฉ๋ก๊ณผ ๋™๊ธฐํ™”ํ•˜๋ฉด ๋™๊ธฐํ™”๊ฐ€ ์„ฑ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‹ค์ œ etcd ์—”๋“œ ํฌ์ธํŠธ๋ฅผ etcd ํด๋ผ์ด์–ธํŠธ Endpoints ํ• ๋‹นํ•˜๋ฉด์ด ํด๋ผ์ด์–ธํŠธ ๋ณ€์ˆ˜๋Š” ํฌ์ธํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ๋‹ค๋ฅธ ์ฝ”๋“œ์—์„œ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์ด ํด๋ผ์ด์–ธํŠธ ์—”๋“œ ํฌ์ธํŠธ๋Š” ๋™๊ธฐํ™” ํ›„ ์‹ค์ œ ์—”๋“œ ํฌ์ธํŠธ๊ฐ€ ์•„๋‹ˆ๋ผ ์—ฌ์ „ํžˆ ์˜ค๋ž˜๋œ ์—”๋“œ ํฌ์ธํŠธ์ž…๋‹ˆ๋‹ค.

๋‚ด ํฌํฌ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์—์„œ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค . ์ด PR . ๊ทธ๋ฆฌ๊ณ  ์ €๋Š” join the same control-plane node ์‚ฌ์šฉ์ž ์‚ฌ๋ก€๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์„ฑ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.

@pytimer ๋ฉ‹์ง€๋„ค์š” ! ์ž˜ ๋ฐœ๊ฒฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!
PR์„ ๋ณด๋‚ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? IMO ์ด๊ฒƒ์€ ์ฒด๋ฆฌ ๋”ฐ๊ธฐ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

@ neolit123 @timothysc ^^^

@fabianofranz ์ฒซ ๋ฒˆ์งธ PR์ด ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค. CLA ํ™•์ธ์„ ์žŠ์–ด ๋ฒ„๋ ธ์Šต๋‹ˆ๋‹ค.

์ด PR https://github.com/kubernetes/kubernetes/pull/71945 ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž˜๋ชป๋œ ์ ์ด ์žˆ์œผ๋ฉด ์ง€์ ํ•˜์‹ญ์‹œ์˜ค.

@fabriziopandini ๋™์ผํ•œ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ๋…ธ๋“œ์— ๊ฐ€์ž…

๋‚ด ๊ฐ€์ž… ๋‹จ๊ณ„ :

๋‘ ๋ฒˆ์งธ ์ œ์–ด ํ‰๋ฉด ๋…ธ๋“œ ip๋Š” 192.168.46.212 ์ž…๋‹ˆ๋‹ค.

  • etcd ํด๋Ÿฌ์Šคํ„ฐ์—์„œ 192.168.46.212 ๋…ธ๋“œ etcd ๊ตฌ์„ฑ์›์„ ์ œ๊ฑฐํ•˜์‹ญ์‹œ์˜ค.
  • kubectl delete node k8s-212
  • ์ด ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ๋…ธ๋“œ์˜ kubeadm reset -f .
  • kubeadm join --experimental-control-plane --config kubeadm.yaml -v 5 ๋‹ค์‹œ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค.

kubeadm ๊ฐ€์ž… ๋กœ๊ทธ :

...
[etcd] Checking Etcd cluster health
I1207 17:57:18.109993    8541 local.go:66] creating etcd client that connects to etcd pods
I1207 17:57:18.110000    8541 etcd.go:134] checking etcd manifest
I1207 17:57:18.119797    8541 etcd.go:181] etcd endpoints read from pods: https://192.168.46.211:2379,https://192.168.46.212:2379
I1207 17:57:18.131111    8541 etcd.go:221] etcd endpoints read from etcd: https://192.168.46.211:2379
etcd cluster is not healthy: context deadline exceeded

kubeadm ์ฝ”๋“œ๋ฅผ๋ณด๊ณ ์ด ๋ฌธ์ œ๊ฐ€ kubeadm-config ConfigMap์— ๋‚จ์•„์žˆ๋Š” 192.168.46.212๋กœ ์ธํ•ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

Kubeadm์€ ์ œ์–ด ํ‰๋ฉด ๋…ธ๋“œ์— ๊ฐ€์ž… ํ•  ๋•Œ kubeadm-config ConfigMap์—์„œ api ์—”๋“œ ํฌ์ธํŠธ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  etcd ์—”๋“œ ํฌ์ธํŠธ๋Š” api ์—”๋“œ ํฌ์ธํŠธ์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ 912.168.46.212 ์ œ์–ด ํ”Œ๋ ˆ์ธ ๋…ธ๋“œ๊ฐ€ ์ œ๊ฑฐ๋˜์—ˆ๊ณ  ์•„์ง ๊ฐ€์ž…๋˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ etcd ํด๋Ÿฌ์Šคํ„ฐ ์ƒํƒœ๋ฅผ ์ž˜๋ชป ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

kubeadm-config ConfigMap์—์„œ 192.168.46.212 api ์—”๋“œ ํฌ์ธํŠธ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ ์ด ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ๋…ธ๋“œ์— ๋‹ค์‹œ ๊ฐ€์ž…ํ•˜๋ฉด ์„ฑ๊ณตํ•ฉ๋‹ˆ๋‹ค.

kubeadm ๋ฒ„์ „ 1.13.2์—์„œ ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜๋™์œผ๋กœ ๋…ธ๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  kubeadm-config๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ ค๊ณ ํ–ˆ์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋จธ์ง€ etcd ๋…ธ๋“œ๋Š” ์ œ๊ฑฐ ๋œ ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค.

kubeadm-config ConfigMap์—์„œ 192.168.46.212 api ์—”๋“œ ํฌ์ธํŠธ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ ์ด ์ œ์–ด ํ”Œ๋ ˆ์ธ ๋…ธ๋“œ์— ๋‹ค์‹œ ๊ฐ€์ž…ํ•˜๋ฉด ์„ฑ๊ณตํ•ฉ๋‹ˆ๋‹ค.

@pytimer ์ด์ „ api-server๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์„ค๋ช…ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

1.13.3์„ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์„ ํ†ตํ•ด ์ˆ˜๋™์œผ๋กœ ์ด์ „ ์„œ๋ฒ„ ์ œ๊ฑฐ :

1. kubectl -n kube-system get cm kubeadm-config -o yaml > /tmp/conf.yml
2. manually edit /tmp/conf.yml to remove the old server
3. kubectl -n kube-system apply -f /tmp/conf.yml 

์˜ค๋ฅ˜๋กœ ์ธํ•ด ์—ฌ์ „ํžˆ ํด๋Ÿฌ์Šคํ„ฐ์— ์ฐธ์—ฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

[etcd] Checking etcd cluster health
etcd cluster is not healthy: context deadline exceeded

๊ทธ๋Ÿฐ ๋‹ค์Œ api pod์™€ etcd pod (๊ฐ๊ฐ 2 ๊ฐœ)๋ฅผ ์ฃฝ์˜€์Šต๋‹ˆ๋‹ค.

๊ทธ๋“ค์€ ๋‹ค์‹œ ์ƒ์„ฑ๋˜์ง€๋งŒ ์ถ”๊ฐ€ ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์—ฌ์ „ํžˆ ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

1.13.3์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค (HA ํด๋Ÿฌ์Šคํ„ฐ ์„ค์ • : ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ 3 ๊ฐœ + ์ž‘์—…์ž 3 ๊ฐœ). ๋‹ค์Œ ๋‹จ๊ณ„ ํ›„์— ๋งŒ โ€‹โ€‹๋งˆ์Šคํ„ฐ ๋…ธ๋“œ๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ๊ต์ฒดํ–ˆ์Šต๋‹ˆ๋‹ค.

ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๋…ธ๋“œ ์‚ญ์ œ

kubectl delete node master03

etcdctl ๋‹ค์šด๋กœ๋“œ (์˜ˆ : master01)

mkdir /opt/tools && cd /opt/tools
wget https://github.com/etcd-io/etcd/releases/download/v3.3.12/etcd-v3.3.12-linux-arm64.tar.gz
tar xfz etcd-v3.3.12-linux-arm64.tar.gz

etcd์—์„œ ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ ์ œ๊ฑฐ

cd /opt/tools/etcd-v3.3.12-linux-arm64
./etcdctl --endpoints https://192.168.0.11:2379 --ca-file /etc/kubernetes/pki/etcd/ca.crt --cert-file /etc/kubernetes/pki/etcd/server.crt --key-file /etc/kubernetes/pki/etcd/server.key member list
./etcdctl --endpoints https://192.168.0.11:2379 --ca-file /etc/kubernetes/pki/etcd/ca.crt --cert-file /etc/kubernetes/pki/etcd/server.crt --key-file /etc/kubernetes/pki/etcd/server.key member remove 28a9dabfcfbca673

kubeadm-config์—์„œ ์ œ๊ฑฐ

kubectl -n kube-system get cm kubeadm-config -o yaml > /tmp/conf.yml
manually edit /tmp/conf.yml to remove the old server
kubectl -n kube-system apply -f /tmp/conf.yml

@zhangyelong ์ด์ œ kubeadm reset์ด etcd ๊ตฌ์„ฑ์›์„ ์ œ๊ฑฐ ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ etcd ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์ œ๊ฑฐ ๋œ etcd ๋…ธ๋“œ์— ์—ฌ์ „ํžˆ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Œ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ etcdctl์„ ์‚ฌ์šฉํ•˜์—ฌ etcd ๊ตฌ์„ฑ์›์„ ์ˆ˜๋™์œผ๋กœ ์ œ๊ฑฐํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์žฌ์„ค์ •์‹œ etcd ๋…ธ๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด PR์„ ๋ณด๋‚ด๋ฉด ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/kubernetes/kubernetes/pull/74112

@lvangool @Halytskyi ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. PR : https://github.com/kubernetes/kubernetes/pull/71945 ์ˆ˜์ •์€ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ๋…ธ๋“œ์— ๊ฐ€์ž… ํ•  ๋•Œ etcd ๋์ ์„ ๋™๊ธฐํ™”ํ•˜๊ณ  etcd ๊ตฌ์„ฑ์›์„ ์ œ๊ฑฐ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์žฌ์„ค์ •์‹œ etcd ํด๋Ÿฌ์Šคํ„ฐ์—์„œ etcd ๊ตฌ์„ฑ์›์„ ์ œ๊ฑฐํ•˜์‹ญ์‹œ์˜ค. kubernetes / kubernetes # 74112๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹1.13.4์˜ ๋ฒ„๊ทธ ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์—ฌ์ „ํžˆ kubeadm ๊ตฌ์„ฑ ๋งต ala https://github.com/kubernetes/kubeadm/issues/1300#issuecomment-463374200์„ ์ˆ˜๋™์œผ๋กœ ์—…๋ฐ์ดํŠธํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ
kubernetes / kubernetes # 71945๋Š” etcd ํด๋Ÿฌ์Šคํ„ฐ ๋ฉค๋ฒ„์‹ญ์„ ํด๋Ÿฌ์Šคํ„ฐ ๋ฉค๋ฒ„์˜ ์ง„์‹ค ์†Œ์Šค๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ? ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ๊ทธ PR์ด ์ •ํ™•ํžˆ ๋ฌด์—‡์„ ์ˆ˜์ • ํ–ˆ์Šต๋‹ˆ๊นŒ?

์ง€๋„๋ฅผ ํ†ตํ•ด ๋ฒ”์œ„๋ฅผ golang์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํฅ๋ฏธ๋กญ๊ฒŒ๋„์ด ์‚ฐ๋ฐœ์ ์œผ๋กœ ์ž‘๋™ ClusterStatus์ฒ˜๋Ÿผ , ๋น„ ๊ฒฐ์ •์ ์ด๋‹ค . ๋”ฐ๋ผ์„œ ๋ฐœ๊ฒฌ ๋œ ์ฒซ ๋ฒˆ์งธ ์—”๋“œ ํฌ์ธํŠธ๊ฐ€ ๋” ์ด์ƒ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ด์ „ ์—”๋“œ ํฌ์ธํŠธ์—์„œ ์˜จ ๊ฒƒ์ด๋ฉด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ์ •์ƒ ์—”๋“œ ํฌ์ธํŠธ๋ฅผ ์ฐพ์œผ๋ฉด etcd ๋™๊ธฐํ™”์—์„œ ClusterStatus๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์˜ ๊ทผ๋ณธ ์›์ธ์€ etcd clientv3์˜ ๋ฒ„๊ทธ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ฒ„๊ทธ๋กœ ์ธํ•ด ์ฒซ ๋ฒˆ์งธ ์—”๋“œ ํฌ์ธํŠธ๊ฐ€ https://github.com/etcd-io/etcd/issues/9949์— ์‹คํŒจํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋‹ค๋ฅธ ์—”๋“œ ํฌ์ธํŠธ๋ฅผ ๋‹ค์‹œ ์‹œ๋„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์žฌ์„ค์ • ๊ฐœ์„  ์‚ฌํ•ญ์„ ์ถ”์ ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ฌธ์ œ๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

@fabriziopandini ์—ฌ๊ธฐ์— kubeadm reset ์™€ ๊ด€๋ จ์ด์—†๋Š” ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ ์žˆ์Šต๋‹ˆ๋‹ค.

kubeadm ์žฌ์„ค์ •์„ ์ˆ˜ํ–‰ ํ•  ๊ธฐํšŒ์—†์ด ๋…ธ๋“œ๊ฐ€ ์‹คํŒจํ•˜๋Š” ๊ฒฝ์šฐ (์ธ์Šคํ„ด์Šค ์ข…๋ฃŒ, ํ•˜๋“œ์›จ์–ด ์‹คํŒจ ๋“ฑ)
ํด๋Ÿฌ์Šคํ„ฐ๋Š” ClusterStatus.apiEndpoints๊ฐ€ ๋” ์ด์ƒ ํด๋Ÿฌ์Šคํ„ฐ์—์—†๋Š” ๋…ธ๋“œ๋ฅผ ๊ณ„์† ๋‚˜์—ดํ•˜๋Š” ์ƒํƒœ๋กœ ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” kubeadm join ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ „์— ๊ตฌ์„ฑ ๋งต์„ ์ฝ๊ณ  ํŽธ์ง‘ํ•˜๊ณ  ์—…๋ฐ์ดํŠธํ•˜๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. Kubeadm์—๋Š” ์•„๋งˆ๋„ ๋‘ ๊ฐ€์ง€ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

1) ๋‹ค์ด์–ผ์ด ์‹คํŒจํ•˜๋ฉด etcd ํด๋ผ์ด์–ธํŠธ ์žฌ์‹œ๋„ ๊ตฌํ˜„
2) go-grpc ๋ฒ„๊ทธ๊ฐ€ ์ˆ˜์ • ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ ๋‹ค์Œ ์ˆ˜์ •์ด etcd ํด๋ผ์ด์–ธํŠธ์— ์ ์šฉ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ์ด๋Ÿฌํ•œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ถ”์ ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ์ข‹์€ ๋ฌธ์ œ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

kubeadm ์žฌ์„ค์ •์„ ์ˆ˜ํ–‰ ํ•  ๊ธฐํšŒ์—†์ด ๋…ธ๋“œ๊ฐ€ ์‹คํŒจํ•˜๋Š” ๊ฒฝ์šฐ (์ธ์Šคํ„ด์Šค ์ข…๋ฃŒ, ํ•˜๋“œ์›จ์–ด ์‹คํŒจ ๋“ฑ)
ํด๋Ÿฌ์Šคํ„ฐ๋Š” ClusterStatus.apiEndpoints๊ฐ€ ๋” ์ด์ƒ ํด๋Ÿฌ์Šคํ„ฐ์—์—†๋Š” ๋…ธ๋“œ๋ฅผ ๊ณ„์† ๋‚˜์—ดํ•˜๋Š” ์ƒํƒœ๋กœ ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” kubeadm join ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ „์— ๊ตฌ์„ฑ ๋งต์„ ์ฝ๊ณ  ํŽธ์ง‘ํ•˜๊ณ  ์—…๋ฐ์ดํŠธํ•˜๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰, reset์„ ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ  ClusterStatus๋ฅผ ์ˆ˜๋™์œผ๋กœ ์—…๋ฐ์ดํŠธํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ ‡๊ฒŒํ•˜๋Š” ๋ช…๋ น์ด ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด kubeadm์ด ์ง€์›ํ•ด์•ผํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋ผ๊ณ  ์ƒ๊ฐ๋˜๋ฉด ๋ณ„๋„์˜ ํ‹ฐ์ผ“์„ ์ œ์ถœํ•˜์‹ญ์‹œ์˜ค.

์˜ค๋Š˜ 1.14.1์—์„œ ์ด๊ฒƒ์„ ๊ฒฝํ—˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ธ์Šคํ„ด์Šค๊ฐ€ ์‹คํŒจํ•˜์—ฌ ์ •์ƒ์ ์œผ๋กœ ์ œ๊ฑฐ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ƒˆ ๋…ธ๋“œ๊ฐ€ ๋“ค์–ด ์˜ค๋ ค๊ณ  ํ•  ๋•Œ์ด ํ‹ฐ์ผ“์— ์„ค๋ช… ๋œ ์˜ค๋ฅ˜๋กœ ์ธํ•ด ์ฐธ์—ฌํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

etcdctl์„ ํ†ตํ•ด etcd ๋ฉค๋ฒ„๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ œ๊ฑฐํ•ด์•ผํ–ˆ๊ณ  ์ƒˆ ๋…ธ๋“œ์— ์ฐธ์—ฌํ•  ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ kubeadm-config ConfigMap์—์„œ ๋…ธ๋“œ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ œ๊ฑฐํ–ˆ์ง€๋งŒ ์ด๊ฒƒ์ด ํ•„์š”ํ•œ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@Halytskyi ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค etcdctl ์„น์…˜์ด ๋‚˜๋ฅผ ์œ„ํ•ด ๋„์›€์„ .......

์˜ค๋Š˜ 1.15.5์—์„œ ์ด๊ฒƒ์„ ๊ฒฝํ—˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ œ ๊ฒฝ์šฐ์—๋Š” 1.16 ๋ฒ„์ „์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ์— ๊ฐ€์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ์ด ๋…ธ๋“œ kubectl delete node ์„ ์‚ญ์ œํ•˜๊ณ  15.5.5๋กœ ๋‹ค์šด ๊ทธ๋ ˆ์ด๋“œํ•˜๊ณ  ๋‹ค์‹œ ๊ฐ€์ž… (๋™์ผํ•œ ip, ๋™์ผํ•œ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„, ๋‹ค๋ฅธ ๋ฒ„์ „)์„ ์‹œ๋„ํ•˜๊ณ  etcd ๋น„์ •์ƒ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ( @Halytskyi ๋‹ต๋ณ€์„ ๊ธฐ๋ฐ˜์œผ๋กœํ•˜์ง€๋งŒ ์—…๋ฐ์ดํŠธ ๋œ etcdctl ํฌํ•จ) :

  • kubeadm-config configmap์—์„œ ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•˜์‹ญ์‹œ์˜ค.
>: kubectl edit configmap  kubeadm-config -n kube-system
configmap/kubeadm-config edited
  • kubeadm reset -f ๋ฌธ์ œ๊ฐ€์žˆ๋Š” ๋…ธ๋“œ && iptables -t -f -X ๋“ฑ๋“ฑ.

  • etcd ๋ฉค๋ฒ„ ์‚ญ์ œ (ํ‚ค) :

root@k8s-nebula-m-115-2:wget https://github.com/etcd-io/etcd/releases/download/v3.4.3/etcd-v3.4.3-linux-amd64.tar.gz
root@k8s-nebula-m-115-2:tar xfz etcd-v3.4.3-linux-amd64.tar.gz

```์‰˜
root @ k8s-nebula-m-115-2 : ~ / etcdctl / etcd-v3.4.3-linux-amd64 # ./etcdctl --endpoints https://127.0.0.1:2379 --cacert / etc / kubernetes / pki /etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key ๊ตฌ์„ฑ์› ๋ชฉ๋ก
289ed62da3c6e9e5, ์‹œ์ž‘๋จ, k8s-nebula-m-115-1, https://10.205.30.2 : 2380, https://10.205.30.2 : 2379, false
917e16b9e790c427, ์‹œ์ž‘๋จ, k8s-nebula-m-115-0, https://10.205.30.1 : 2380, https://10.205.30.1 : 2379, false
ad6b76d968b18085, ์‹œ์ž‘๋จ, k8s-nebula-m-115-2, https://10.205.30.0 : 2380, https://10.205.30.0 : 2379, false

```shell
root@k8s-nebula-m-115-2:~/etcdctl/etcd-v3.4.3-linux-amd64# ./etcdctl --endpoints https://127.0.0.1:2379 --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key member remove 289ed62da3c6e9e5
Member 289ed62da3c6e9e5 removed from cluster d4913a539ea2384e

๊ทธ๋Ÿฐ ๋‹ค์Œ ์ž‘ํ’ˆ์— ๋‹ค์‹œ ์ฐธ์—ฌํ•˜์‹ญ์‹œ์˜ค.

kubeadm reset ์ด ์ค‘๋‹จ๋˜๊ณ  kubeadm CM์—์„œ ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜์—†๋Š” ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ kubeadm CM์—์„œ ์ˆ˜๋™์œผ๋กœ ์‚ญ์ œํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ kubectl delete node foobar ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•˜๋ฉด
etcd ํšŒ์›์—์„œ ์‚ญ์ œ ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ํ•˜์ง€๋งŒ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋…ธ๋“œ์—์„œ kubeadm reset ํ•˜๋ฉด
์‚ญ์ œํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒํ•ฉ๋‹ˆ๊นŒ? ๐Ÿ™„

์ˆ˜์š”์ผ, 30 Oct 2019, 13:27 Lubomir I. Ivanov, [email protected]
์ผ๋‹ค :

์ด๊ฒƒ์€ kubeadm reset์ด ์ค‘๋‹จ๋˜๊ณ  ์‚ญ์ œํ•  ์ˆ˜์—†๋Š” ๊ฒฝ์šฐ์— ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
kubeadm CM์˜ ๋…ธ๋“œ.
์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ kubeadm CM์—์„œ ์ˆ˜๋™์œผ๋กœ ์‚ญ์ œํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

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

"kubeadm reset"์€ kubeadm CM์—์„œ ์‚ญ์ œํ•ด์•ผํ•˜์ง€๋งŒ ๋…ธ๋“œ API ๊ฐ์ฒด๋ฅผ ์‚ญ์ œํ•˜๋Š” "kubectl delete node"๋„ ํ˜ธ์ถœํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ œ ๊ฒฝ์šฐ์—๋Š” de configmap์—์„œ ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•ด๋„ ์‚ญ์ œ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
etcd ํด๋Ÿฌ์Šคํ„ฐ๋Š” ์ˆ˜๋™์œผ๋กœ etcdctl delete member .

2019 ๋…„ 10 ์›” 31 ์ผ ๋ชฉ์š”์ผ 16:28, Lubomir I. Ivanov [email protected]
์ผ๋‹ค :

"kubeadm reset"์€ kubeadm CM์—์„œ ์‚ญ์ œํ•ด์•ผํ•˜์ง€๋งŒ "kubectl
๋…ธ๋“œ API ๊ฐ์ฒด๋ฅผ ์‚ญ์ œํ•˜๋Š” ๋…ธ๋“œ ์‚ญ์ œ "๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

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

kubeadm reset์€ ๋˜ํ•œ etcd ํด๋Ÿฌ์Šคํ„ฐ์—์„œ etcd ๊ตฌ์„ฑ์›์„ ์ œ๊ฑฐํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด --v = 5๋กœ ์‹คํ–‰ํ•˜๊ณ  ๊ทธ๊ฒƒ์ด ๋ฌด์—‡์„ํ•˜๋Š”์ง€๋ณด์‹ญ์‹œ์˜ค.

๊ทธ๋Ÿฌ๋‚˜ kubeadm reset์€ ์ตœ์„ ์˜ ๋ช…๋ น์ด๋ฏ€๋กœ ์–ด๋–ค ์ด์œ ๋กœ ์‹คํŒจํ•˜๋ฉด ๊ฒฝ๊ณ  ๋งŒ ์ธ์‡„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ kubectl delete node ์€ etcd์—์„œ ์‚ญ์ œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  kubeadm reset ๋…ธ๋“œ์—์„œ ์‹คํ–‰ํ•˜๋ฉด๋ฉ๋‹ˆ๋‹ค.
๋‚˜์—๊ฒŒ ๊นจ์ง„ ์†Œ๋ฆฌ, ๋‚˜๋Š” kubectl delete node ๊ทธ๊ฒƒ์„ etcd์—์„œ ์‚ญ์ œํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์•„๋‹ˆ๋ฉด ๋ถ„๋ช…ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๋†“์น˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?
๊ฑฐ๊ธฐ์—์„œ๋„ ์‚ญ์ œํ•ด์•ผํ•˜๋Š”์ง€ ๋ฌผ์–ด ๋ณผ๊นŒ์š”?
์–ด์จŒ๋“  @ neolit123 ์„ค๋ช…์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋จผ์ € ์ œ์–ด ํ‰๋ฉด์—์„œ ์‚ญ์ œ ํ•œ ๋‹ค์Œ ์žฌ์„ค์ •์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. etcd์—์„œ ์ž์‹ ์„ ์‚ญ์ œํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ๋Šฆ์—ˆ๋‹ค ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋‹ค๋ฅธ ์ฑ…์ž„์ด ์žˆ์Šต๋‹ˆ๋‹ค.
kubectl delete node๋Š” Node API ๊ฐ์ฒด๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. ๋…ธ๋“œ๊ฐ€ ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๊ณ  ํ™•์‹  ํ•  ๋•Œ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
๊ทธ ์ „์— ํ•ด๋‹น ๋…ธ๋“œ์—์„œ kubeadm reset์„ ํ˜ธ์ถœํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ํ•˜๋Š” ์ผ์€ ๋””์Šคํฌ์˜ ์ƒํƒœ๋ฅผ ์ •๋ฆฌํ•˜๊ณ  etcd ๋ฉค๋ฒ„๋„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค (์ œ์–ด ํ”Œ๋ ˆ์ธ ๋…ธ๋“œ์ด๊ณ  etcd ์ธ์Šคํ„ด์Šค๊ฐ€ ์ œ์–ด ํ”Œ๋ ˆ์ธ ๋…ธ๋“œ๋ณ„๋กœ ์‹คํ–‰๋˜๋Š” ๊ธฐ๋ณธ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ)

kubeadm reset์€ ๋…ธ๋“œ๋ฅผ ์žฌ์„ค์ •ํ•˜์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช‡ ๊ฐ€์ง€ ์ด์œ ๋กœ Node ๊ฐ์ฒด๋ฅผ ์‚ญ์ œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ์žฌ์„ค์ •์€ ๋…ธ๋“œ๋ฅผ ์žฌ์„ค์ •ํ•˜๊ณ  ๋‹ค์‹œ ๊ฐ€์ž… ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋…ธ๋“œ ์ด๋ฆ„์€ ์˜ˆ์•ฝ ๋œ ์ƒํƒœ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.
  • ๋…ธ๋“œ ์ž์ฒด์—๋Š” ๋…ธ๋“œ ๊ฐœ์ฒด๋ฅผ ์‚ญ์ œํ•  ์ˆ˜์žˆ๋Š” ์ถฉ๋ถ„ํ•œ ๊ถŒํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ "admin.conf"์†Œ์œ ์ž (์˜ˆ : ๊ด€๋ฆฌ์ž)์˜ ์ฑ…์ž„์ž…๋‹ˆ๋‹ค.

kubeadm reset์€ ์ตœ์„ ์˜ ๋ช…๋ น์ž…๋‹ˆ๋‹ค.

์ด์™€ ๊ด€๋ จํ•˜์—ฌ : kubeadm reset ๊ฐ€ ์–ด๋–ค ์ด์œ ๋กœ ๋“  ์™„๋ฃŒ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ (kubeadm ์žฌ์„ค์ •์ด ์ฒ˜์Œ์— ์‹คํ–‰๋˜์ง€ ์•Š๋„๋ก ๊ธฐ๋ณธ ์„œ๋ฒ„์˜ ํ•˜๋“œ ์‹คํŒจ ํฌํ•จ) ์ˆ˜๋™ ํŽธ์ง‘ ์™ธ์— ์ƒํƒœ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์กฐ์ •ํ•˜๋Š” ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. kubeadm-config configmap ๊ฐ์ฒด๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋…ธ๋“œ๋ฅผ ์ œ๊ฑฐ ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๋…ธ๋“œ๊ฐ€ ํ•˜๋“œ ์‹คํŒจํ•˜์—ฌ kubeadm reset์„ ํ˜ธ์ถœ ํ•  ์ˆ˜์—†๋Š” ๊ฒฝ์šฐ ์ˆ˜๋™ ๋‹จ๊ณ„๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
1) kubeadm-config CM ClusterStatus์—์„œ ์ œ์–ด ํ”Œ๋ ˆ์ธ IP ์ œ๊ฑฐ
2) etcdctl์„ ์‚ฌ์šฉํ•˜์—ฌ etcd ๋ฉค๋ฒ„ ์ œ๊ฑฐ
3) kubectl์„ ์‚ฌ์šฉํ•˜์—ฌ Node ๊ฐ์ฒด๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค (๋…ธ๋“œ๋ฅผ ๋” ์ด์ƒ ์ฃผ๋ณ€์—๋‘๊ณ  ์‹ถ์ง€ ์•Š์€ ๊ฒฝ์šฐ).

1๊ณผ 2๋Š” ์ œ์–ด ํ”Œ๋ ˆ์ธ ๋…ธ๋“œ์—๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

kubeadm reset์„ ์‹คํ–‰ํ•  ์ˆ˜์—†๋Š” ๊ฒฝ์šฐ์ด ์žฅ์•  ์กฐ์น˜๋ฅผ ์ž๋™ํ™” ํ•  ์ˆ˜์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

1.9์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ. ์†”๋ฃจ์…˜์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

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