LoginSignup
6
6

More than 3 years have passed since last update.

k8sクラスタにノードを追加する

Last updated at Posted at 2019-09-30

社内のいらなくなったサーバをk8sクラスタにせこせこ追加している村田です。
今回はすでにあるマスターノードがある環境で、ノードの追加を行ってみようと思いますよ。

TL;DR

kubeadm を使って token create, joinをするだけです。

ノードの準備

まずKubernethesをインストールします。

https://kubernetes.io/ja/docs/setup/independent/install-kubeadm/ あたりを参考にセットアップしてください。
OSのswapやネットワークの設定、Dockerとk8sのインストールを行う感じです。

マスターノードでトークンの作成

参加させるノードに渡すためのトークンを作成します。このトークンを使ってマスターノードと認証します。

[root@k8s-node01 kubernetes]# kubeadm token create
ORENK8SDAtc91xgsvv8gz

[root@k8s-node01 kubernetes]# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt \
>   | openssl rsa -pubin -outform der 2>/dev/null \
>   | openssl dgst -sha256 -hex | sed 's/^.* //'
CACERTNOHASHDAYO6a9b56024195b2024d8ecdfea6ab715ec93174b420e2

ノードに参加

↑で作ったトークンを使って、参加させるノード側で以下のようにjoinコマンドを流します。
172.32.254.101はマスターノードのIPアドレスです。

[root@k8s-node02 ~]# kubeadm join 172.32.254.101:6443 --discovery-token ORENK8SDAtc91xgsvv8gz --discovery-token-ca-cert-hash sha256:CACERTNOHASHDAYO6a9b56024195b2024d8ecdfea6ab715ec93174b420e2
[preflight] Running pre-flight checks
    [WARNING SystemVerification]: this Docker version is not on the list of validated versions: 19.03.1. Latest validated version: 18.09
    [WARNING Hostname]: hostname "k8s-node02.derori.local" could not be reached
    [WARNING Hostname]: hostname "k8s-node02.derori.local": lookup k8s-node02.derori.local on 172.16.3.39:53: no such host
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'
[kubelet-start] Downloading configuration for the kubelet from the "kubelet-config-1.15" ConfigMap in the kube-system namespace
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml" 
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env" 
[kubelet-start] Activating the kubelet service
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...

This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

これ、結構時間かかります。&こけてエラーが出ているとマスターノードから参照できないので結果はちゃんと見てください。

見てみる

まだNotReadyだけど、参加された。

[root@k8s-node01 kubernetes]# kubectl get node -o wide -A
NAME                     STATUS     ROLES    AGE     VERSION   INTERNAL-IP      EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION               CONTAINER-RUNTIME
k8s-node01.derori.local   Ready      master   6d22h   v1.15.3   172.32.254.101   <none>        CentOS Linux 7 (Core)   3.10.0-957.27.2.el7.x86_64   docker://19.3.1
k8s-node02.derori.local   NotReady   <none>   40s     v1.15.3   172.32.254.102   <none>        CentOS Linux 7 (Core)   3.10.0-957.27.2.el7.x86_64   docker://19.3.1

5分ぐらいでReadyになった。calico-nodeっていうpodが立ち上がった。

[root@k8s-node01 kubernetes]# kubectl get all,node -A -o wide
NAMESPACE     NAME                                                 READY   STATUS    RESTARTS   AGE     IP               NODE                     NOMINATED NODE   READINESS GATES
kube-system   pod/calico-kube-controllers-65b8787765-mwvzf         1/1     Running   0          6d22h   10.13.158.66     k8s-node01.derori.local   <none>           <none>
kube-system   pod/calico-node-2x5nm                                1/1     Running   0          6m25s   172.32.254.102   k8s-node02.derori.local   <none>           <none>
kube-system   pod/calico-node-rcct7                                1/1     Running   0          6d22h   172.32.254.101   k8s-node01.derori.local   <none>           <none>
kube-system   pod/coredns-5c98db65d4-62f6x                         1/1     Running   0          6d22h   10.13.158.67     k8s-node01.derori.local   <none>           <none>
kube-system   pod/coredns-5c98db65d4-84s6q                         1/1     Running   0          6d22h   10.13.158.65     k8s-node01.derori.local   <none>           <none>
kube-system   pod/etcd-k8s-node01.derori.local                      1/1     Running   0          6d22h   172.32.254.101   k8s-node01.derori.local   <none>           <none>
kube-system   pod/kube-apiserver-k8s-node01.derori.local            1/1     Running   0          6d22h   172.32.254.101   k8s-node01.derori.local   <none>           <none>
kube-system   pod/kube-controller-manager-k8s-node01.derori.local   1/1     Running   0          6d22h   172.32.254.101   k8s-node01.derori.local   <none>           <none>
kube-system   pod/kube-proxy-s4745                                 1/1     Running   0          6d22h   172.32.254.101   k8s-node01.derori.local   <none>           <none>
kube-system   pod/kube-proxy-ztxwg                                 1/1     Running   0          6m25s   172.32.254.102   k8s-node02.derori.local   <none>           <none>
kube-system   pod/kube-scheduler-k8s-node01.derori.local            1/1     Running   0          6d22h   172.32.254.101   k8s-node01.derori.local   <none>           <none>

NAMESPACE     NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                  AGE     SELECTOR
default       service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP                  6d22h   <none>
kube-system   service/kube-dns     ClusterIP   10.96.0.10   <none>        53/UDP,53/TCP,9153/TCP   6d22h   k8s-app=kube-dns

NAMESPACE     NAME                         DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR                 AGE     CONTAINERS    IMAGES                          SELECTOR
kube-system   daemonset.apps/calico-node   2         2         2       2            2           beta.kubernetes.io/os=linux   6d22h   calico-node   calico/node:v3.8.2              k8s-app=calico-node
kube-system   daemonset.apps/kube-proxy    2         2         2       2            2           beta.kubernetes.io/os=linux   6d22h   kube-proxy    k8s.gcr.io/kube-proxy:v1.15.3   k8s-app=kube-proxy

NAMESPACE     NAME                                      READY   UP-TO-DATE   AVAILABLE   AGE     CONTAINERS                IMAGES                           SELECTOR
kube-system   deployment.apps/calico-kube-controllers   1/1     1            1           6d22h   calico-kube-controllers   calico/kube-controllers:v3.8.2   k8s-app=calico-kube-controllers
kube-system   deployment.apps/coredns                   2/2     2            2           6d22h   coredns                   k8s.gcr.io/coredns:1.3.1         k8s-app=kube-dns

NAMESPACE     NAME                                                 DESIRED   CURRENT   READY   AGE     CONTAINERS                IMAGES                           SELECTOR
kube-system   replicaset.apps/calico-kube-controllers-65b8787765   1         1         1       6d22h   calico-kube-controllers   calico/kube-controllers:v3.8.2   k8s-app=calico-kube-controllers,pod-template-hash=65b8787765
kube-system   replicaset.apps/coredns-5c98db65d4                   2         2         2       6d22h   coredns                   k8s.gcr.io/coredns:1.3.1         k8s-app=kube-dns,pod-template-hash=5c98db65d4

NAMESPACE   NAME                          STATUS   ROLES    AGE     VERSION   INTERNAL-IP      EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION               CONTAINER-RUNTIME
            node/k8s-node01.derori.local   Ready    master   6d22h   v1.15.3   172.32.254.101   <none>        CentOS Linux 7 (Core)   3.10.0-957.27.2.el7.x86_64   docker://19.3.1
            node/k8s-node02.derori.local   Ready    <none>   6m25s   v1.15.3   172.32.254.102   <none>        CentOS Linux 7 (Core)   3.10.0-957.27.2.el7.x86_64   docker://19.3.1

4台ゲットしたので4台分やりました。ansibleとかでレシピ作ったら楽だね。

[root@k8s-node01 kubernetes]# kubectl get node -A -o wide
NAME                     STATUS   ROLES    AGE    VERSION   INTERNAL-IP      EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION               CONTAINER-RUNTIME
k8s-node01.derori.local   Ready    master   7d     v1.15.3   172.32.254.101   <none>        CentOS Linux 7 (Core)   3.10.0-957.27.2.el7.x86_64   docker://19.3.1
k8s-node02.derori.local   Ready    <none>   133m   v1.15.3   172.32.254.102   <none>        CentOS Linux 7 (Core)   3.10.0-957.27.2.el7.x86_64   docker://19.3.1
k8s-node05.derori.local   Ready    <none>   19m    v1.15.3   172.32.254.105   <none>        CentOS Linux 7 (Core)   3.10.0-957.27.2.el7.x86_64   docker://19.3.2
node03.k8s.derori.local   Ready    <none>   64m    v1.15.3   172.32.254.103   <none>        CentOS Linux 7 (Core)   3.10.0-957.27.2.el7.x86_64   docker://19.3.2
node04.k8s.derori.local   Ready    <none>   44m    v1.15.3   172.32.254.104   <none>        CentOS Linux 7 (Core)   3.10.0-957.27.2.el7.x86_64   docker://19.3.2

まとめ

これでマスターノードにapplyすると適当にPodsなどがプロビジョニングされるはずです。Ingressとかのルーティングとかどうなるのかまだよくわからないですが、これからやっていこうと思います。

※centos8が出る前にやってしまったときのものです。

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6