KubernetesのNode再構築方法

本記事が参考になるシチュエーション

  • すでにKubernetesのノード構築をしている
  • ノード構築はkubeadmを使ってセットアップをする
  • 過去構築してからホストノードのIP情報の変更がある

自分の場合

・過去にkubeadmを使ってSingle node構成で構築済
・物理サーバー移設影響でホストサーバーのIPアドレスが変更となった

初期構築時の手順

kubeadmについて

kubeadmとは

kubeadmはKubernetesコミュニティが公式に提供している簡易な構築ツールです。Kubernetesを構成するコンポーネントや証明書、各種設定ファイルを自動で作成し、素早くKubernetesクラスタを作成できます。

kubeadmを使ったkubernetesインストール手順

vagrant@vagrant:~$ sudo su -
# install kubernetes
# x.x.x.xはapi-serverが待ち受けるnicのip addressを指定する。
root@vagrant:~# kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=x.x.x.x --ignore-preflight-errors all

# To make kubectl work for your non-root user
root@vagrant:~# exit
vagrant@vagrant:~$ mkdir -p $HOME/.kube
vagrant@vagrant:~$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
vagrant@vagrant:~$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

# install CNI (Flannel)
vagrant@vagrant:~$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml

–apiserver-advertise-address=x.x.x.x ここにホストサーバー側のアドレスを指定する

出来上がった/etc/kubernetes/admin.conf を
$HOME/.kube/config にコピーしてkubectl apply コマンドにてflannel.ymlを適用することで構築が完了する。

kubeadmで作成されるファイル等

xxxxx@xxxx-----xxx000100:/etc/kubernetes$ ls -al
合計 56
drwxr-xr-x   4 root root  4096  2月 17 16:42 .
drwxr-xr-x 129 root root 12288  2月 17 16:42 ..
-rw-------   1 root root  5452  2月 17 16:42 admin.conf
-rw-------   1 root root  5484  2月 17 16:42 controller-manager.conf
-rw-------   1 root root  5540  2月 17 16:42 kubelet.conf
drwx------   2 root root  4096  2月 17 16:42 manifests
drwxr-xr-x   3 root root  4096  2月 17 16:42 pki
-rw-------   1 root root  5436  2月 17 16:42 scheduler.conf

ubunts利用のためtree がインストールされていない状況。見栄え悪くてすいません。

admin.conf
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: 
文字列がたくさん羅列されている
    server: https://10.xx.xxx.xx:xxxx
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data:
 文字列がたくさん羅列されている
    client-key-data:
 文字列がたくさん羅列されている

さっきkubeadm init コマンドで指定したserverIPが記載されている。

ホストIPが変わったあと初期と同様の手順を再実行した結果

初期構築と同じ手順を踏んで再構築した

以下構築したnodeの状態を確認するコマンド実行結果
xxx@xxxxx:/etc/kubernetes$ kubectl describe node
Name:               xxxxxxxxx
Roles:              master
Labels:             beta.kubernetes.io/arch=amd64
                    beta.kubernetes.io/os=linux
                    kubernetes.io/arch=amd64
                    kubernetes.io/hostname=xxxxxxx
                    kubernetes.io/os=linux
                    node-role.kubernetes.io/master=
Annotations:        flannel.alpha.coreos.com/backend-data: {"VtepMAC":"7a:68:b7:20:3b:8a"}
                    flannel.alpha.coreos.com/backend-type: vxlan
                    flannel.alpha.coreos.com/kube-subnet-manager: true
                    flannel.alpha.coreos.com/public-ip: xxxxxxxxxx
                    kubeadm.alpha.kubernetes.io/cri-socket: /var/run/dockershim.sock
                    node.alpha.kubernetes.io/ttl: 0
                    volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp:  Mon, 11 Nov 2019 14:01:37 +0900
Taints:             <none>
Unschedulable:      false
Conditions:
  Type             Status  LastHeartbeatTime                 LastTransitionTime                Reason                       Message
  ----             ------  -----------------                 ------------------                ------                       -------
  MemoryPressure   False   Fri, 17 Dec 2021 15:14:44 +0900   Mon, 11 Nov 2019 14:01:33 +0900   KubeletHasSufficientMemory   kubelet has sufficient memory available
  DiskPressure     False   Fri, 17 Dec 2021 15:14:44 +0900   Mon, 11 Nov 2019 14:01:33 +0900   KubeletHasNoDiskPressure     kubelet has no disk pressure
  PIDPressure      False   Fri, 17 Dec 2021 15:14:44 +0900   Mon, 11 Nov 2019 14:01:33 +0900   KubeletHasSufficientPID      kubelet has sufficient PID available
  Ready            True    Fri, 17 Dec 2021 15:14:44 +0900   Tue, 27 Oct 2020 13:42:41 +0900   KubeletReady                 kubelet is posting ready status. AppArmor enabled
Addresses:
  InternalIP:  xxxxxx
  Hostname:    xxxxxx
Capacity:
 cpu:                16
 ephemeral-storage:  575261800Ki
 hugepages-1Gi:      0
 hugepages-2Mi:      0
 memory:             49318132Ki
 pods:               110
Allocatable:
 cpu:                16
 ephemeral-storage:  530161274003
 hugepages-1Gi:      0
 hugepages-2Mi:      0
 memory:             49215732Ki
 pods:               110
System Info:
 Machine ID:                 6bb14d41837d4561bad8576ecf6cd571
 System UUID:                36363238-3238-4e43-3737-353130485244
 Boot ID:                    8d1f6576-9b70-48e9-a7aa-e175ee1d7b11
 Kernel Version:             5.0.0-32-generic
 OS Image:                   Ubuntu 18.04.3 LTS
 Operating System:           linux
 Architecture:               amd64
 Container Runtime Version:  docker://19.3.4
 Kubelet Version:            v1.16.2
 Kube-Proxy Version:         v1.16.2
PodCIDR:                     10.244.0.0/24
PodCIDRs:                    10.244.0.0/24
Non-terminated Pods:         (20 in total)
  Namespace                  Name                                            CPU Requests  CPU Limits  Memory Requests  Memory Limits  AGE
  ---------                  ----                                            ------------  ----------  ---------------  -------------  ---
  confluence                 confluence-756cc84558-gdf7g                     0 (0%)        0 (0%)      0 (0%)           0 (0%)         2y103d
  confluence2                confluence2-84f8ddb488-8hnt9                    0 (0%)        0 (0%)      0 (0%)           0 (0%)         2y84d
  confluence3                confluence3-dc9ddf655-qmbqp                     0 (0%)        0 (0%)      0 (0%)           0 (0%)         701d
  confluence4                confluence4-85cc478c54-tnr2z                    0 (0%)        0 (0%)      0 (0%)           0 (0%)         701d
  jira-to-slack              jira-to-slack-769bb5f895-thx9r                  0 (0%)        0 (0%)      0 (0%)           0 (0%)         2y69d
  jira                       jira-5f8464dd77-pnmlw                           0 (0%)        0 (0%)      0 (0%)           0 (0%)         2y67d
  jira2                      jira2-6644795cdc-xj2nf                          0 (0%)        0 (0%)      0 (0%)           0 (0%)         250d
  jira3                      jira3-685fbc5676-6lxxm                          0 (0%)        0 (0%)      0 (0%)           0 (0%)         701d
  jira4                      jira4-7fbd554cb9-2ph8m                          0 (0%)        0 (0%)      0 (0%)           0 (0%)         250d
  jira5                      jira5-68fc66fd86-cd8qz                          0 (0%)        0 (0%)      0 (0%)           0 (0%)         626d
  jira6                      jira6-5bd85c568c-x54mg                          0 (0%)        0 (0%)      0 (0%)           0 (0%)         626d
  jira7                      jira7-56c7f4c5b8-mg7k9                          0 (0%)        0 (0%)      0 (0%)           0 (0%)         232d
  kube-system                coredns-5644d7b6d9-l265j                        100m (0%)     0 (0%)      70Mi (0%)        170Mi (0%)     2y105d
  kube-system                coredns-5644d7b6d9-shzcs                        100m (0%)     0 (0%)      70Mi (0%)        170Mi (0%)     2y82d
  kube-system                etcd-w27os-----nssv000100                       0 (0%)        0 (0%)      0 (0%)           0 (0%)         2y105d
  kube-system                kube-apiserver-w27os-----nssv000100             250m (1%)     0 (0%)      0 (0%)           0 (0%)         2y82d
  kube-system                kube-controller-manager-w27os-----nssv000100    200m (1%)     0 (0%)      0 (0%)           0 (0%)         2y82d
  kube-system                kube-flannel-ds-amd64-hp6xr                     100m (0%)     100m (0%)   50Mi (0%)        50Mi (0%)      485d
  kube-system                kube-proxy-tnqtd                                0 (0%)        0 (0%)      0 (0%)           0 (0%)         2y82d
  kube-system                kube-scheduler-w27os-----nssv000100             100m (0%)     0 (0%)      0 (0%)           0 (0%)         2y82d
Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  Resource           Requests    Limits
  --------           --------    ------
  cpu                850m (5%)   100m (0%)
  memory             190Mi (0%)  390Mi (0%)
  ephemeral-storage  0 (0%)      0 (0%)
Events:              <none>

IPaddress の赤文字の部分が旧構築時のIPからupdateされていない

nodeにデプロイした各種podの状態を確認した結果
xxxx@xxxx:~/jira$ kubectl get pods -A
NAMESPACE       NAME                                           READY   STATUS    RESTARTS   AGE
confluence      confluence-756cc84558-gdf7g                    1/1     Running   1          2y103d
confluence2     confluence2-84f8ddb488-8hnt9                   1/1     Running   1          2y84d
confluence3     confluence3-dc9ddf655-qmbqp                    1/1     Running   1          701d
confluence4     confluence4-85cc478c54-tnr2z                   1/1     Running   1          701d
jira-to-slack   jira-to-slack-769bb5f895-thx9r                 1/1     Running   3          2y69d
jira            jira-5f8464dd77-pnmlw                          1/1     Running   3          2y67d
jira2           jira2-6644795cdc-xj2nf                         1/1     Running   9          250d
jira3           jira3-685fbc5676-6lxxm                         1/1     Running   3          701d
jira4           jira4-7fbd554cb9-2ph8m                         1/1     Running   2          250d
jira5           jira5-68fc66fd86-cd8qz                         1/1     Running   3          626d
jira6           jira6-5bd85c568c-x54mg                         1/1     Running   3          626d
jira7           jira7-56c7f4c5b8-mg7k9                         1/1     Running   0          232d
kube-system     coredns-5644d7b6d9-l265j                       1/1     Running   1          2y105d
kube-system     coredns-5644d7b6d9-shzcs                       1/1     Running   1          2y82d
kube-system     etcd-w27os-----nssv000100                      1/1     Running   1          2y105d
kube-system     kube-apiserver-w27os-----nssv000100            1/1     Running   1          2y82d
kube-system     kube-controller-manager-w27os-----nssv000100   1/1     Running   4          2y82d
kube-system     kube-flannel-ds-amd64-hp6xr                    1/1     Running   1          485d
kube-system     kube-proxy-tnqtd                               1/1     Running   1          2y82d
kube-system     kube-scheduler-w27os-----nssv000100            1/1     Running   4          2y82d

statusはRunningのため動いてはいる模様。

Podの1つのserviceの状態確認結果
xxx@xxxxx:~/jira$ kubectl get svc -n jira
NAME   TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
jira   NodePort   10.105.25.153   <none>        8080:30001/TCP   2y67d
podの状態確認
xxx@xxxxx:~/jira$ kubectl describe pods -A
Name:         confluence-756cc84558-gdf7g
Namespace:    confluence
Priority:     0
Node:         xxxxxxxx/xx.xx.xx.xxx
Start Time:   Wed, 13 Nov 2019 16:01:49 +0900
Labels:       app=confluence
              pod-template-hash=756cc84558
              tier=confluence
Annotations:  <none>
Status:       Running
IP:           10.244.0.130
IPs:
  IP:           10.244.0.130
Controlled By:  ReplicaSet/confluence-756cc84558
Containers:
  confluence:
    Container ID:   docker://8d74ac6f601e2df167150a8a6d53877df0120fb431572af9067
    Image:          atlassian/confluence-server:latest
    Image ID:       docker-pullable://atlassian/confluence-server@sha256:cad46ec
    Port:           8090/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Mon, 14 Jun 2021 01:25:32 +0900
    Last State:     Terminated
      Reason:       Error
      Exit Code:    255
      Started:      Mon, 16 Nov 2020 19:04:40 +0900
      Finished:     Mon, 14 Jun 2021 01:24:40 +0900
    Ready:          True
    Restart Count:  1
    Environment:    <none>
    Mounts:
      /var/atlassian/application-data/confluence from confluence-persistent-stor
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-kjtp9 (ro
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True
Volumes:
  confluence-persistent-storage:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in
    ClaimName:  confluence-pv-claim
    ReadOnly:   false
  default-token-kjtp9:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-kjtp9
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:          <none>

podの状態を確認してみても赤文字の通り古いIP情報から更新がされていない状況。

kubeadmを使って再構築する際、node情報やその上で動くpod情報が上書きされない様子。
/etc/kubenetes 配下のファイルを全て削除し、初期構築手順を実施しても同様の状態のため、ホスト装置のアドレス変更時はnode削除、再構築をする必要があると判断した。

主筋とは

基礎に対して短辺を形成する鉄筋のこと
辺が短いと支える建物の圧力によるたわみが少ないから下側で支える

なにわリーマンゆうき
なにわリーマンゆうき
あやたろう
あやたろう

なにわリーマンゆうき
なにわリーマンゆうき
あやたろう
あやたろう

なにわリーマンゆうき
なにわリーマンゆうき
あやたろう
あやたろう

コメント

タイトルとURLをコピーしました