kubeadm join 시 discovery-file 이용하기
새로운 Worker 노드를 추가하기 위한 문법은 대략 다음과 같다.
1 2 |
]$ sudo kubeadm join klab-master1.systemv.local:6443 --token z49lc6.uz8qf3gwsjecttj6 \ --discovery-token-ca-cert-hash sha256:f092db77bacfb82dc8541ac0c18421ede18716a81fef69313a085ec34fa4b65f |
그런데, token 값은 시간이 지나면 만료되 사용할 수 없게 된다. 설사 token 을 알아도 ca-cert-hash 값을 알아야 한다. 이를 위해서 K8S 의 루트 CA 인증서를 이용해 hash 값을 알아내는 명령어를 사용한다.
1 2 |
]# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //' f092db77bacfb82dc8541ac0c18421ede18716a81fef69313a085ec34fa4b65f |
Discovery-file 만들기
하지만 이 방법외에도 discovery-file 을 이용하는 방법도 있다. 이는 kube-public 네임스페이스에 ConfigMap 에서 cluster-info 의 정보를 가지고 오면 된다. 다음과 같다.
1 |
]$ kubectl get cm cluster-info -o json -n kube-public | jq -r '.data.kubeconfig' > discovery-file.yaml |
위 파일을 추가하고자 하는 새로운 Worker 노드에 복사해준다.
Discovery-file 을 이용한 새로운 Worker 노드 추가
이제 discovery-file 를 이용해 새로운 Worker 노드를 추가할 수 있다. 다음과 같다.
1 |
]$ sudo kubeadm join --tls-bootstrap-token=jt0pr4.d57slk512u0c9dj8 --discovery-file=./discovery-config.yaml |
CSR Approved
이렇게 한 후에 csr 을 보면 pending 상태의 인증서들이 보인다. 이를 Approved 해주면 된다.
1 2 3 4 5 6 7 |
]$ kubectl get csr NAME AGE SIGNERNAME REQUESTOR REQUESTEDDURATION CONDITION csr-bjz7l 26m kubernetes.io/kubelet-serving system:node:klab-worker2.systemv.local <none> Pending csr-ls7qw 5m15s kubernetes.io/kubelet-serving system:node:klab-worker2.systemv.local <none> Pending csr-nvgdd 26m kubernetes.io/kube-apiserver-client-kubelet system:bootstrap:jt0pr4 <none> Approved,Issued csr-xvpqh 11m kubernetes.io/kubelet-serving system:node:klab-worker2.systemv.local <none> Pending ]$ kubectl certificate approve csr-nvgdd |