LoginSignup
0
0

More than 1 year has passed since last update.

kubeadmでおうちkubernetesの作り方

Posted at

はじめに

何番煎じかわからないけどkubeadmを使っておうちkubernetesを構築したので忘備録として。
多々間違っているところがあるかもしれないです。

環境

種別 PC OS
マスター Mac Mini late 2012 Ubuntu 20.04.3 LTS
ワーカー ラズパイ3B+ Raspberry Pi OS Lite 32Bit

共通手順

インストール時にhostnameとかは設定済み

パッケージ周り更新

sudo apt-get update && sudo apt-get -y upgrade

swapを無効化

sudo vim /etc/fstab

# コメントアウトしてswapを無効化
# /swap.img     none    swap    sw      0       0

{{ hostname }}.local でアクセスできるようにする

sudo apt-get install -y avahi-daemon

Dockerをインストール

# インストール
sudo apt-get install -y docker

# dockerをsudoなしで使えるように
sudo usermod -aG docker $USER

# dockerが常時起動されるか確認
systemctl is-enabled docker

# enableが出力されなかった場合は常時起動を有効化
systemctl enable docker

Dockerのcgroup driverをsystemdに変更する

dockerのcgroup driverは cgroupfs が使用されているが、kubeadmはデフォルトで systemd を使用するため、cgroup driverを合わせなければいけない。
今回はdockerのcgroup driverを systemd に変更して合わせるようにした。

# docker daemonの設定を作成
sudo vim /etc/docker/daemon.json

{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}

# daemonを再起動
systemctl daemon-restart
systemctl restart docker

Dockerが動くか確認

# dockerコンテナ起動
docker run -p 80:80 nginx

# 疎通確認
curl http://{{ hostname }}.local

# 確認できたらコンテナ削除
docker rm {{ CONTAINER_ID }}

k8s周りのパッケージインストール

# dockerのGPGキーを取得
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add

# kubernetesのレポジトリを追加
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"

# httpでパッケージ追加できるように
sudo apt-get install -y apt-transport-https

# k8s周りのパッケージインストール
sudo apt-get install -y kubeadm kubelet kubectl kubernetes-cni

マスターノード構築

kubeadmでマスターノード構築

# マスターノード構築 (cirdrはflannelを使用するので固定)
kubeadm init --pod-network-cidr=10.244.0.0/16

# kubeconfig作成
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# ワーカーノードjoin用コマンドをメモしておく
# kubeadm join {{ ip_address }} ~~~ をコピー

kubectlが使えるか確認

kubectl get node
とか
kubectl get pod --all-namespaces

この時点ではcorednsはまだpendingになってておk。

flannel導入

kubectl apply -f https://github.com/flannel-io/flannel/blob/master/Documentation/kube-flannel.yml

ここで kubectl get pod --all-namespaces して core-dnsが起動していればおk。

ワーカーノード構築

kubeadmでjoin

# マスターノード構築時にメモったやつ
sudo kubeadm join {{ MASTER_IP }}:6443 --token {{ TOKEN }} --discovery-token-ca-cert-hash {{ SHA256_HASH }}

# 確認(masterで操作)
kubectl get node

# ワーカーノードのstatusがReadyになってればおk

トラブルシューティング

この時点でのトラブルはkubeletの起動周りが多いので、systemctl status kubeletjournalctl -u kubelet などでログを確認する。
以下よくハマったやつ。

err="open /run/systemd/resolve/resolv.conf: no such file or directory

これ今の所再起動すると毎回起きる。。。
自分で作ってあげれば解決。

sudo mkdir -p /run/systemd/resolve
sudo ln -s /etc/resolv.conf /run/systemd/resolve/resolv.conf

failed to run Kubelet: misconfiguration: kubelet cgroup driver: \"systemd\" is different from docker cgroup driver: \"cgroupfs\"

dockerとkubeletのcgroup driverがあってないやつ。
上の方でやってる /etc/docker/daemon.json 作って再起動すれば解決。

0
0
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
0
0