OSS Fan ~OSSでLinuxサーバ構築~

作成日: 2018/06/17

OSSでLinuxサーバ構築

Kubernetes 1.10.2でノードを別のクラスタに再参加

トップページOSSでLinuxサーバ構築 > Kubernetes 1.10.2でノードを別のクラスタに再参加
このエントリーをはてなブックマークに追加

概要

 Kubernetesのノードがクラスタに参加した後で、一度既存のクラスタから離脱して、 別のクラスタに参加させるための手順です。

 AWSのEC2を利用して1マスタ、2ノードのKubernetesクラスタを構築していたのですが、 ちょっとしたミスでマスタサーバのLinuxが起動しなくなってしまいました。 そこでマスタサーバをゼロから再セットアップしたのですが、これまでとは別の 新規のクラスタとして構成されるため、2台のノードは新規のマスタサーバから認識されない状態になりました。 そこで、ノードのKubernetesをリセットして、新規のクラスタに参加させました。その時の手順です。

構成

利用環境

 サーバ環境はAWS(Amazon Web Services)のEC2インスタンスを利用しました。 サーバのスペックは以下のとおりです。

■サーバスペック
項目内容
AMICentOS 7 (x86_64) - with Updates HVM
インスタンスタイプt2.micro
vCPU1
メモリ1GiB
ディスク汎用SSD(GP2) 8GiB
リージョン日本

サーバ構成

OSバージョン

CentOS 7.5.1804 x86_64

ソフトウェア・パッケージ一覧

  • docker-1.13.1-58.git87f2fab.el7.centos.x86_64.rpm
  • 32e8bd812a3944ccf07750d52088a118fa11493d34e009e2873317e0f0b0dfd2-kubectl-1.10.2-0.x86_64.rpm
  • b754a6990af7d7012189610b0dc69e6e950c13a8c415b9ebea8d56352e9719fd-kubeadm-1.10.2-0.x86_64.rpm
  • bdee083331998c4631bf6653454c584fb796944fe97271906acbaacbf340e1d5-kubelet-1.10.2-0.x86_64.rpm

サーバ構築

ノードでクラスタからの離脱(Kubernetesのリセット)

(1) Kubernetesのリセット

 kubeadmコマンドで既存のKubernetes環境をリセットします。

$ sudo su -
Last login: Thu Jun  7 07:03:46 UTC 2018 on pts/0
# kubeadm reset
[preflight] Running pre-flight checks.
[reset] Stopping the kubelet service.
[reset] Unmounting mounted directories in "/var/lib/kubelet"
[reset] Removing kubernetes-managed containers.
[reset] No etcd manifest found in "/etc/kubernetes/manifests/etcd.yaml". Assuming external etcd.
[reset] Deleting contents of stateful directories: [/var/lib/kubelet /etc/cni/net.d /var/lib/dockershim /var/run/kubernetes]
[reset] Deleting contents of config directories: [/etc/kubernetes/manifests /etc/kubernetes/pki]
[reset] Deleting files: [/etc/kubernetes/admin.conf /etc/kubernetes/kubelet.conf /etc/kubernetes/bootstrap-kubelet.conf /etc/kubernetes/controller-manager.conf /etc/kubernetes/scheduler.conf]

(2) Dockerコンテナの停止を確認

 Kubernetesの環境をリセットしたことで、これまで起動していたFlannelなどのDockerコンテナが停止していることを確認します。

# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

ノードをクラスタへ参加

(1) ノードをクラスタへ参加

 マスタサーバで kubeadm init を実行したときに表示されたクラスタへの参加コマンド(kubeadm join)を実行します。

# kubeadm join 172.31.31.100:6443 --token k1hxj6.xs146671w14qiwj8 --discovery-token-ca-cert-hash sha256:a03e85ecbbee1b62d8d7b3528e2534974cf99e5a5f1ddd5dee38cec0292613df
[preflight] Running pre-flight checks.
        [WARNING FileExisting-crictl]: crictl not found in system path
Suggestion: go get github.com/kubernetes-incubator/cri-tools/cmd/crictl
[preflight] Starting the kubelet service
[discovery] Trying to connect to API Server "172.31.31.100:6443"
[discovery] Created cluster-info discovery client, requesting info from "https://172.31.31.100:6443"
[discovery] Requesting info from "https://172.31.31.100:6443" again to validate TLS against the pinned public key
[discovery] Cluster info signature and contents are valid and TLS certificate validates against pinned roots, will use API Server "172.31.31.100:6443"
[discovery] Successfully established connection with API Server "172.31.31.100:6443"

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

Run 'kubectl get nodes' on the master to see this node join the cluster.

(2) Dockerコンテナの起動を確認

 クラスタへ参加したことで、ノードとして動作するために必要なFlannelなどのプロセスがDockerコンテナとして起動していることを確認します。

# docker ps
CONTAINER ID        IMAGE                                                                                                 COMMAND                  CREATED             STATUS              PORTS               NAMES
b0390a7524ee        f0fad859c909                                                                                          "/opt/bin/flanneld..."   2 minutes ago       Up 2 minutes                            k8s_kube-flannel_kube-flannel-ds-479jj_kube-system_7b40af29-6cc3-11e8-94c6-062edb1e23b8_1
448880ce8c38        k8s.gcr.io/kube-proxy-amd64@sha256:d46cfa2b1d944d42b1cd3890dc7b7f32a1f5d8eb6ff2047ecab650f5406a7e96   "/usr/local/bin/ku..."   2 minutes ago       Up 2 minutes                            k8s_kube-proxy_kube-proxy-8fp22_kube-system_7b3fc76a-6cc3-11e8-94c6-062edb1e23b8_0
b40fb6db9bed        k8s.gcr.io/pause-amd64:3.1                                                                            "/pause"                 2 minutes ago       Up 2 minutes                            k8s_POD_kube-flannel-ds-479jj_kube-system_7b40af29-6cc3-11e8-94c6-062edb1e23b8_0
1d30b297375a        k8s.gcr.io/pause-amd64:3.1                                                                            "/pause"                 2 minutes ago       Up 2 minutes                            k8s_POD_kube-proxy-8fp22_kube-system_7b3fc76a-6cc3-11e8-94c6-062edb1e23b8_0

マスタサーバでノードの確認

(1) ノードの確認

 マスタサーバでクラスタに参加しているノードの一覧を表示すると、 1行目に表示されているノードが今回クラスタに参加したノードです。 STATUSがReadyとなっているので、正常にノードが稼働しています。

# kubectl get nodes
NAME                                               STATUS    ROLES     AGE       VERSION
ip-172-31-21-206.ap-northeast-1.compute.internal   Ready     <none>    18s       v1.10.2
ip-172-31-31-100.ap-northeast-1.compute.internal   Ready     master    6m        v1.10.4

参考にしたサイト

 Kubernetesの公式サイト kubernetes.io に書かれている手順を参考にしました。

プロフィール

らのっち

損害保険会社のIT企画部に勤務するSEです。OSSを勉強中です。

<所属>
日本PostgreSQLユーザ会とくしまOSS普及協議会


第000414号