kubeadmでFedora CoreOSにKubernetes1.17

[kubeadmでFedora CoreOSにKubernetes1.18を入れる場合はこちら](https://qiita.com/rururu_kenken/items/6d79fab49a05e6d8851c)

# メモ
・Fedora CoreOSは、CoreOS Container Linuxと同様にデフォルトで自動アップデートが有効なので、新しい安定版が出ると自動でアップデートします。

・Calicoのデプロイや設定を変えた時(kubectl apply -f calico.yaml)にすべてのノードの再起動(sudo systemctl reboot)しないとRedisにserviceでアクセスできなかった。

# CPUの数
・Fedora CoreOS testing 31.20200310.2.0でも同じ結果
　(2020/03/19追記)
[CoreOS incorrectly reports CPU info via /proc/cpuinfo #413](https://github.com/coreos/fedora-coreos-tracker/issues/413)
**Google翻訳**
>（AWS上の）Fedora CoreOSの最新の安定リリースを実行していて、/ proc / cpuinfoの内容が正しくない。
>
>[core@ip-10-36-176-20 ~]$ rpm-ostree status ・・・
>2つのCPUを備えたt3.smallは1を示します。4を備えたt3.xlargeは2を示します。これは、Kubernetes（正確にはcadvisor）が/ proc / cpuinfoを使用して容量用のCPUの数を決定するため、問題を引き起こします。 これにより、ノードの容量が必要な半分になると報告されます。
>
> Fedora CoreOS: [core@ip-10-36-176-20 ~]$ cat /proc/cpuinfo ・・・

>@jlebon
>FCOSが必要に応じてSMTを無効にしている可能性があります ： https : //github.com/coreos/fedora-coreos-tracker/blob/master/Design.md#automatically-disable-smt-when-needed-to-address-vulnerabilities 。 EC2インスタンスタイプで引用されているvCPU数はハイパースレッディングを想定していると思います。
>
>@ cyrus-mc
>それはそれのようです。 迅速な対応に感謝します。
>
>を使用してカーネルオプションを更新しました
>
> rpm-ostree kargs --replace="mitigations=auto" 
>
>nosmtを削除します

[Fedora CoreOSで/proc/cpuinfoの内容をEC2インスタンスのvCPU数と同じにする設定する場合はこちらを参照してください](https://qiita.com/rururu_kenken/items/2d7a2f50190940d99ac2)

# 環境

#### Master Node

|    EC2　　 |    OS         | Kubernetes | Docker    |
|:----------:|:-------------:|:----------:|:---------:|
| t3.medium| Fedora CoreOS stable 31.20200310.3.0| 1.17.4|18.09.8 |

Fedora CoreOS preview AMI のユーザー名は core です

Master Nodeは、2CPU、メモリ2GB以下の場合、kubeadm init実行時にエラーになります。
ディスクサイズはデフォルトの8G
Master NodeとWorker Nodeは同じVPC

#### Worker Node

|    EC2　　 |    OS         | Kubernetes | Docker    |
|:----------:|:-------------:|:----------:|:---------:|
| t3.small|Fedora CoreOS stable 31.20200310.3.0 |1.18.0|18.09.8 |

# 発生したエラー

・CPU 2つのt3.smallでは、kubeadm init実行時に
　以下のエラーが出る。
　・CPU 4つのt3.xlargeは問題なし。
　**＜参考情報(2020/1/22追記)＞**
　t3.smallのままで、
「sudo kubeadm init --config kubeadm-config.yaml」のうしろに「--ignore-preflight-errors=NumCPU」を付けてkubeadm init～flannelのデプロイまで確認
[How to get kubeadm init to not fail? #733]
その時点でメモリの空きが78MBでした。
少し上のインスタンスにすることを推奨します。
[How to get kubeadm init to not fail? #733](https://github.com/kubernetes/kubeadm/issues/733)

```sh
error execution phase preflight: [preflight] Some fatal errors occurred:
	[ERROR NumCPU]: the number of available CPUs 1 is less than the required 2
```

・kubeadm init実行で「[WARNING FileExisting-ethtool]: ethtool not found in system path」が出た。
→「sudo rpm-ostree install ethtool -r」でインストール

# 参考情報

/etc/docker/daemon.jsonを設定しても再起動後に/etc/dockerに
daemon.jsonがなくなっていた。
違う設定方法で設定する必要がありそう(2020/03/01追記)

# Podman確認

```sh
podman -v

podman version 1.8.1
```

# .bashrc編集など

```sh
vi .bashrc

export PATH=$PATH:/opt/bin

source ~/.bashrc

sudo visudo

# :/opt/bin を追加
Defaults    secure_path = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin
```

# SELinux設定確認

```sh
# 現在の状態確認
#・Enforcing ･･･ SELinuxは有効で、アクセス制限も有効。
#・Permissive ･･･ SELinuxは有効だが、アクセス制限は行わず警告を出力。
#・Disabled ･･･ SELinux機能は無効。
getenforce

# 実行結果
Enforcing

# Disabled への変更
sudo sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

# 再起動
sudo systemctl reboot

# 再起動後に再度sshで接続
getenforce

# 実行結果
Disabled 
```

# swap確認

```sh
# ある場合はswapoff -a
free
```

# Docker設定

```sh
docker -v

# 実行結果
Docker version 18.09.8, build 0dd43dd

# Dockerの自動起動有効
sudo systemctl enable docker

# ログインしているユーザーがdockerグループの追加されているか確認
# デフォルトでは設定されていない
cat /etc/group | grep docker

# 実行結果
docker:x:982:

# ログインしているユーザーをdockerグループに追加
sudo usermod -a -G docker $USER

# 確認コマンド
$ cat /etc/group | grep docker

# 実行結果
docker:x:993:core

# ログアウト
# すぐにsshで再接続
exit
```

# Docker の設定例

cgroupdriverを「systemd」
log-driverを「json-file」。max-size「100m」
insecure-registryに「hogehoge:5000」

[Control Docker with systemd](https://docs.docker.com/config/daemon/systemd/)
[systemd と Docker の管理・設定](http://docs.docker.jp/engine/articles/systemd.html)
[docker18.09.0にあげたらdocker.serviceが起動しなくなった](https://qiita.com/aoi1/items/7602ec6530eaab29aeee)

```sh
sudo mkdir -p /etc/systemd/system/docker.service.d

# Fedora CoreOSのDockerは18.09なので dockerdのうしろに「-H fd://」は付けないこと
sudo tee /etc/systemd/system/docker.service.d/docker.conf <<EOF
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --exec-opt native.cgroupdriver=systemd --log-driver=json-file \
          --log-opt max-size=100m \
          --insecure-registry=hogehoge:5000
EOF

sudo systemctl daemon-reload
sudo systemctl restart docker
```

# sysctlでネットワークをブリッジできるようする

```sh
# sysctlでネットワークをブリッジできるようする
sudo tee /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-iptables  = 1
net.ipv4.ip_forward                 = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF

# カーネルパラメータを手動で反映
sudo sysctl --system
```

# kubelet、kubectl、kubeadmのインストール

再度sshで接続

```sh
CNI_VERSION="v0.8.5"
sudo mkdir -p /opt/cni/bin
curl -L "https://github.com/containernetworking/plugins/releases/download/${CNI_VERSION}/cni-plugins-linux-amd64-${CNI_VERSION}.tgz" | sudo tar -C /opt/cni/bin -xz

CRICTL_VERSION="v1.17.0"
sudo mkdir -p /opt/bin
curl -L "https://github.com/kubernetes-incubator/cri-tools/releases/download/${CRICTL_VERSION}/crictl-${CRICTL_VERSION}-linux-amd64.tar.gz" | sudo tar -C /opt/bin -xz

# 1.17.0の場合はv1.17.0を指定してください
RELEASE="v1.17.4"
sudo mkdir -p /opt/bin
cd /opt/bin
sudo curl -L --remote-name-all https://storage.googleapis.com/kubernetes-release/release/${RELEASE}/bin/linux/amd64/{kubeadm,kubelet,kubectl}
sudo chmod +x {kubeadm,kubelet,kubectl}

cd
curl -sSL "https://raw.githubusercontent.com/kubernetes/kubernetes/${RELEASE}/build/debs/kubelet.service" | sed "s:/usr/bin:/opt/bin:g" > ./kubelet.service
sudo mv ./kubelet.service /etc/systemd/system/

sudo mkdir -p /etc/systemd/system/kubelet.service.d
curl -sSL "https://raw.githubusercontent.com/kubernetes/kubernetes/${RELEASE}/build/debs/10-kubeadm.conf" | sed "s:/usr/bin:/opt/bin:g" > ./10-kubeadm.conf
sudo mv 10-kubeadm.conf /etc/systemd/system/kubelet.service.d
```

# kubelet 起動

```sh
sudo systemctl enable --now kubelet
```

# Masterノードのセットアップ

Fedore CoreOSの場合、kubeadm init時にconfigファイルを用意する必要があります。詳細は以下のissuesを見てください。

[failed to join the cluster with /usr/libexec/kubernetes: read-only file system #88210](https://github.com/kubernetes/kubernetes/issues/88210)
[add workarounds for Fedora Coreos's R/O /usr/libexec/ #2031](https://github.com/kubernetes/kubeadm/issues/2031)

```sh
# kubeadm init実行で
#「[WARNING FileExisting-ethtool]: 
# ethtool not found in system path」
# が出るためインストール
sudo rpm-ostree install ethtool -r

# 再起動後にsshで再接続

# Calicoの場合、「podSubnet」に「192.168.0.0/16」を指定
# Flannelの場合、「podSubnet」に「10.244.0.0/16」を指定
# 例) Calico用のファイル作成
cat <<EOF > ./kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta2
kind: InitConfiguration
nodeRegistration:
  kubeletExtraArgs:
    volume-plugin-dir: "/opt/libexec/kubernetes/kubelet-plugins/volume/exec/"
---
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
controllerManager:
  extraArgs:
    flex-volume-plugin-dir: "/opt/libexec/kubernetes/kubelet-plugins/volume/exec/"
networking:
  podSubnet: 192.168.0.0/16
EOF

# CPU2つ(AWS EC2の場合、t3.smallやt3.medium)のままで、
#「sudo kubeadm init --config kubeadm-config.yaml」を
# 実行する場合は、うしろに「--ignore-preflight-errors=NumCPU」を付けて
# 実行してください。
sudo kubeadm init --config kubeadm-config.yaml --ignore-preflight-errors=NumCPU
```

## kubectl 設定

```sh
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
```

## 確認

```sh
kubectl get all --all-namespaces

# 実行結果
NAMESPACE     NAME                                          READY   STATUS    RESTARTS   AGE
kube-system   pod/coredns-6955765f44-k5bgd                  1/1     Running   0          107s
kube-system   pod/coredns-6955765f44-qc64d                  1/1     Running   0          107s
kube-system   pod/etcd-ip-172-31-23-58                      1/1     Running   0          2m3s
kube-system   pod/kube-apiserver-ip-172-31-23-58            1/1     Running   0          2m3s
kube-system   pod/kube-controller-manager-ip-172-31-23-58   1/1     Running   0          2m2s
kube-system   pod/kube-proxy-csmvq                          1/1     Running   0          107s
kube-system   pod/kube-scheduler-ip-172-31-23-58            1/1     Running   0          2m3s

NAMESPACE     NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                  AGE
default       service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP                  2m5s
kube-system   service/kube-dns     ClusterIP   10.96.0.10   <none>        53/UDP,53/TCP,9153/TCP   2m4s

NAMESPACE     NAME                        DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR                 AGE
kube-system   daemonset.apps/kube-proxy   1         1         1       1            1           beta.kubernetes.io/os=linux   2m4s

NAMESPACE     NAME                      READY   UP-TO-DATE   AVAILABLE   AGE
kube-system   deployment.apps/coredns   2/2     2            2           2m4s

NAMESPACE     NAME                                 DESIRED   CURRENT   READY   AGE
kube-system   replicaset.apps/coredns-6955765f44   2         2         2       107s
```

# Flannelデプロイ

[Super slow access to service IP from host (& host-networked pods) with Flannel CNI #1245](https://github.com/coreos/flannel/issues/1245)


```sh
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

# 確認
kubectl get all --all-namespaces

# 実行結果
NAMESPACE     NAME                                          READY   STATUS    RESTARTS   AGE
kube-system   pod/coredns-6955765f44-k5bgd                  1/1     Running   0          2m46s
kube-system   pod/coredns-6955765f44-qc64d                  1/1     Running   0          2m46s
kube-system   pod/etcd-ip-172-31-23-58                      1/1     Running   0          3m2s
kube-system   pod/kube-apiserver-ip-172-31-23-58            1/1     Running   0          3m2s
kube-system   pod/kube-controller-manager-ip-172-31-23-58   1/1     Running   0          3m1s
kube-system   pod/kube-flannel-ds-amd64-tz8vh               1/1     Running   0          16s
kube-system   pod/kube-proxy-csmvq                          1/1     Running   0          2m46s
kube-system   pod/kube-scheduler-ip-172-31-23-58            1/1     Running   0          3m2s

NAMESPACE     NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                  AGE
default       service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP                  3m4s
kube-system   service/kube-dns     ClusterIP   10.96.0.10   <none>        53/UDP,53/TCP,9153/TCP   3m3s

NAMESPACE     NAME                                     DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR                 AGE
kube-system   daemonset.apps/kube-flannel-ds-amd64     1         1         1       1            1           <none>                        16s
kube-system   daemonset.apps/kube-flannel-ds-arm       0         0         0       0            0           <none>                        16s
kube-system   daemonset.apps/kube-flannel-ds-arm64     0         0         0       0            0           <none>                        16s
kube-system   daemonset.apps/kube-flannel-ds-ppc64le   0         0         0       0            0           <none>                        16s
kube-system   daemonset.apps/kube-flannel-ds-s390x     0         0         0       0            0           <none>                        16s
kube-system   daemonset.apps/kube-proxy                1         1         1       1            1           beta.kubernetes.io/os=linux   3m3s

NAMESPACE     NAME                      READY   UP-TO-DATE   AVAILABLE   AGE
kube-system   deployment.apps/coredns   2/2     2            2           3m3s

NAMESPACE     NAME                                 DESIRED   CURRENT   READY   AGE
kube-system   replicaset.apps/coredns-6955765f44   2         2         2       2m46s
```

FlannelではなくCalicoをデプロイする場合 (2020/03/01追記)

[Install Calico -Kubernetes-](https://docs.projectcalico.org/getting-started/kubernetes/)
[How To Configure Bird Ip In Calico Node Container](http://akxc.github.io/2018/08/23/how-to-configure-bird-IP-in-calico-node-container.html)
[Project Calicoとはなにか](https://thinkit.co.jp/article/14111)
[Project Calicoのアーキテクチャを見てみよう](https://thinkit.co.jp/article/14112)
[Project CalicoをKubernetesで使ってみる：構築編](https://thinkit.co.jp/article/14638)
[Project CalicoをKubernetesで使ってみる：ネットワークポリシー編](https://thinkit.co.jp/article/15372)
[Calico について調べたメモ](https://medium.com/mhiro2/learn-calico-3f4962b2c26c)
[DockerとKubernetesのPodのネットワーキングについてまとめました](https://foobaron.hatenablog.com/entry/k8s-pod-networking)
[Project CalicoによるKubernetesのPod間ネットワーキングを試してみました](https://foobaron.hatenablog.com/entry/k8s-pod-networking-calico)
[CalicoによるKubernetesピュアL3ネットワーキング](https://techblog.yahoo.co.jp/infrastructure/kubernetes_calico_networking/)
[k8s: calico の Pod が Pending ステータスから変わらない](https://qiita.com/fastwind/items/b4229a3f360e7cd5b8e2)
[Kubernetes1.11 + Calico3.1 BGPモード 構築 (kubeadm)](https://qiita.com/sugimount/items/481c8e4bba4be98835d7)
[Calico readiness and liveliness probe fails #2042](https://github.com/projectcalico/calico/issues/2042)

```sh
curl -L -O https://docs.projectcalico.org/v3.13/manifests/calico.yaml

sed -i -e "s?/usr/libexec/kubernetes/kubelet-plugins/volume/exec/nodeagent~uds?/opt/libexec/kubernetes/kubelet-plugins/volume/exec/nodeagent~uds?g" calico.yaml

# name: calico-nodeのenvに以下の設定を追加
vi calico.yaml

- name: IP_AUTODETECTION_METHOD
  value: "interface=eth.*"

kubectl apply -f calico.yaml 

# 確認 
$ kubectl get po -A

# 実行結果
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE
kube-system   calico-kube-controllers-788d6b9876-4bl9h   1/1     Running   0          36s
kube-system   calico-node-cz5dw                          1/1     Running   0          36s
kube-system   coredns-6955765f44-6nlkx                   1/1     Running   0          116s
kube-system   coredns-6955765f44-7dblr                   1/1     Running   0          116s
kube-system   etcd-ip-172-31-28-127                      1/1     Running   0          2m9s
kube-system   kube-apiserver-ip-172-31-28-127            1/1     Running   0          2m9s
kube-system   kube-controller-manager-ip-172-31-28-127   1/1     Running   0          2m9s
kube-system   kube-proxy-wbqld                           1/1     Running   0          116s
kube-system   kube-scheduler-ip-172-31-28-127            1/1     Running   0          2m9s
```

```sh
kubectl get node

# 実行結果
NAME               STATUS   ROLES    AGE     VERSION
ip-172-31-28-127   Ready    master   3m30s   v1.17.4
```

# WorkerNodeを構築する場合

以下はMaster Nodeの手順を参照
・.bashrc編集など
・SELinux設定確認
・swap確認
・Docker設定
・kubelet、kubeadm、kubectlインストール
・kubelet 起動

クラスタに参加

Fedore CoreOSの場合、Joinする時にconfigファイルを用意する必要があります。詳細は以下のissuesを見てください。
[failed to join the cluster with /usr/libexec/kubernetes: read-only file system #88210](https://github.com/kubernetes/kubernetes/issues/88210)
[add workarounds for Fedora Coreos's R/O /usr/libexec/ #2031](https://github.com/kubernetes/kubeadm/issues/2031)
[kubeadm: add TS guide note about CoreOS read-only /usr #19166](https://github.com/kubernetes/website/pull/19166)

「kubeadm join・・・」実行時の「WARNING: JoinControlPane.controlPlane settings will be ignored when control-plane flag is not set.」については、以下のissueを見てください。
[kubeadm cannot join control plane node via --config flag](https://github.com/kubernetes/kubernetes/issues/89499)

**google翻訳**
>警告は偽です。 あなたの設定は引き続き尊重されます。 そのため、-control-planeを渡さず、-configを渡すだけで十分です。
>
>ここで問題を追跡しています：
>[kubernetes / kubeadm＃2065](https://github.com/kubernetes/kubeadm/issues/2065)
>
>修正は1.18.1で利用可能になりますが、1.17 *にバックポートすることはできません。
>
>/閉じる
[misleading warning on control-plane join #206]
(https://github.com/kubernetes/kubeadm/issues/2065)

```sh
# kubeadm join実行で
#「[WARNING FileExisting-ethtool]: 
# ethtool not found in system path」
# が出るためインストール
sudo rpm-ostree install ethtool -r

# Master Nodeで実行
kubeadm token create --print-join-command

# configファイル作成
vi node-join-config.yaml

apiVersion: kubeadm.k8s.io/v1beta2
kind: JoinConfiguration
discovery:
  bootstrapToken:
    token: "kubeadm joinコマンドのトークンの値を指定"
    caCertHashes:
    - "kubeadm joinコマンドのdiscovery-token-ca-cert-hashを指定"
    apiServerEndpoint: "マスターノードのIPアドレスを指定:6443"
nodeRegistration:
  kubeletExtraArgs:
    volume-plugin-dir: "/opt/libexec/kubernetes/kubelet-plugins/volume/exec/"

# WorkerNodeで生成されたコマンドに先頭に「sudo 」をつけて実行
sudo kubeadm join マスターノードのIPアドレスを指定:6443 --config=node-join-config.yaml
```

## MasterNodeとWorkerNodeの再起動

MasterNode

```sh
# 再起動
# 再起動後にsshで再接続
sudo systemctl reboot
```

WorkerNode

```sh
# 再起動
# 再起動後にsshで再接続
sudo systemctl reboot
```

## Redisデプロイ・動作確認

Master Nodeで作業

```
vi redis.yaml
```

```redis.yaml
apiVersion: v1
kind: Service
metadata:
  name: redis-svc
spec:
  ports:
    - port: 6379
      targetPort: 6379
  selector:
    app: redis
  clusterIP: None
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: redis.config
data:
  redis.conf: |
    requirepass password
    bind 0.0.0.0
---
apiVersion: apps/v1
kind: Deployment
metadata:
  # Deploymentの名前。Namespace内ではユニークである必要があります
  name: redis
spec:
  selector:
    matchLabels:
      app: redis
  # レプリカ数の指定
  replicas: 1
  # Podのテンプレート(PodTemplate)
  template:
    metadata:
      labels:
        # ラベル指定は必須
        app: redis
    spec:
      containers:
        - name: redis
          image: redis:5.0.8
          command: 
            - "redis-server"
            - "/redis-master/redis.conf"
          ports:
            - name: redis
              containerPort: 6379
          volumeMounts:
            - name: data
              mountPath: /redis-master-data
            - name: config
              mountPath: /redis-master
      volumes:
        - name: data
          emptyDir: {}
        - name: config
          configMap:
            name: redis.config
```

```shell-session
kubectl apply -f redis.yaml
kubectl run -it redis-cli --rm --image redis:5.0.8 --restart=Never -- bash
If you don't see a command prompt, try pressing enter.
root@redis-cli:/data# redis-cli -c -h redis-svc -p 6379 -a password
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
redis-svc:6379> set a 1
OK
redis-svc:6379> get a
"1"
redis-svc:6379> exit
root@redis-cli:/data# exit
```

# その他

「sudo rpm-ostree install kubernetes-kubeadm -r」でインストールした場合のバージョンは1.15.8。kubeadm init時にエラー発生した
以下のサイトの対応で解消するかもしれない。未確認

[kubeadmをセットアップしてみたが、いつも通りハマる](https://yunkt.hatenablog.com/entry/2018/08/13/200123)

```:エラー
[wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests". This can take up to 4m0s
[kubelet-check] Initial timeout of 40s passed.
[kubelet-check] It seems like the kubelet isn't running or healthy.
[kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error: Get http://localhost:10248/healthz: dial tcp [::1]:10248: connect: connection refused.
[kubelet-check] It seems like the kubelet isn't running or healthy.
[kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error: Get http://localhost:10248/healthz: dial tcp [::1]:10248: connect: connection refused.
[kubelet-check] It seems like the kubelet isn't running or healthy.
[kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error: Get http://localhost:10248/healthz: dial tcp [::1]:10248: connect: connection refused.
[kubelet-check] It seems like the kubelet isn't running or healthy.
[kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error: Get http://localhost:10248/healthz: dial tcp [::1]:10248: connect: connection refused.
[kubelet-check] It seems like the kubelet isn't running or healthy.
[kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error: Get http://localhost:10248/healthz: dial tcp [::1]:10248: connect: connection refused.

Unfortunately, an error has occurred:
	timed out waiting for the condition

This error is likely caused by:
	- The kubelet is not running
	- The kubelet is unhealthy due to a misconfiguration of the node in some way (required cgroups disabled)

If you are on a systemd-powered system, you can try to troubleshoot the error with the following commands:
	- 'systemctl status kubelet'
	- 'journalctl -xeu kubelet'

Additionally, a control plane component may have crashed or exited when started by the container runtime.
To troubleshoot, list all containers using your preferred container runtimes CLI, e.g. docker.
Here is one example how you may list all Kubernetes containers running in docker:
	- 'docker ps -a | grep kube | grep -v pause'
	Once you have found the failing container, you can inspect its logs with:
	- 'docker logs CONTAINERID'
error execution phase wait-control-plane: couldn't initialize a Kubernetes cluste
```

# kubeadm reset

[kubernetesでkubeadm initを叩きなおす方法](https://qiita.com/Gin/items/c2372b3e7e43d52c5642)

## Calico

[Pods failed to start after switch cni plugin from flannel to calico and then flannel](https://stackoverflow.com/questions/53900779/pods-failed-to-start-after-switch-cni-plugin-from-flannel-to-calico-and-then-fla)

```sh
sudo kubeadm reset
rm $HOME/.kube/config
sudo rm /etc/cni/net.d/10-calico.conflist && sudo rm /etc/cni/net.d/calico-kubeconfig
```

## Flannel

[Kubernetes cannot cleanup Flannel](https://stackoverflow.com/questions/46276796/kubernetes-cannot-cleanup-flannel)
[KubernetesでCoreDNS立ち上がらない](https://qiita.com/Minatoo/items/c968e42f7c7d579bc473)
[KubernetesでNodeをリセットする方法](https://daichan.club/container/78634)
[Kubernetesでpodが起動しない_controllerがおかしい](http://tkcman.hatenablog.com/entry/2019/04/08/115302)

[2019年版・Kubernetesクラスタ構築入門](https://knowledge.sakura.ad.jp/20955/)
>なお、このネットワーク設定を行った後にkubeadm resetコマンドを実行してクラスタを作り直す場合、
>以下のようにして作成された「flannel.1」や「cni0」という仮想ネットワークインターフェイスを先に削除しておく必要がある。
>
> ip link delete cni0
> ip link delete flannel.1

# 参考URL

[Fedora CoreOS](https://getfedora.org/en/coreos/)
[fedora-coreos-tracker](https://github.com/coreos/fedora-coreos-tracker/issues)
[fedora-coreos-streams](https://github.com/coreos/fedora-coreos-streams)

[2020年1月29日　Fedoraプロジェクト，「Fedora CoreOS」のGAとともに「CoreOS Container Linux」をEOLへ](https://gihyo.jp/admin/clip/01/linux_dt/202001/29)
[Container Linuxの後継となる新たなコンテナ向けOS「Fedora CoreOS」](https://knowledge.sakura.ad.jp/23287/)
[Fedora CoreOSを使う](https://tech.virtualtech.jp/entry/2019/11/26/181622)
[Installing Kubeadm on Fedora CoreOS](https://jebpages.com/2019/02/25/installing-kubeadm-on-fedora-coreos/)

[kubeadmのインストール](https://kubernetes.io/ja/docs/setup/independent/install-kubeadm/)
[kubeadmのトラブルシューティング](https://qiita.com/hmdsatoshi/items/48d6e16fcc25e59c667e)