2019/11/26 Winds Chord Blogに移行しました。
前回に引き続きkubernetesをRaspberry pi 3にインストールします。
今回はビルドして、そのバイナリを他のRasPiに配るようにします。
前回に引き続きkubernetesをRaspberry pi 3にインストールします。
1. etcdのインストール
etcdの配布されているバイナリーにARM版がないため、ソースコードからビルドします。今回はビルドして、そのバイナリを他のRasPiに配るようにします。
1.1 etcdのビルドとインストール (masterの1台)
# Go-langをインストール
$ wget https://storage.googleapis.com/golang/go1.8.1.linux-armv6l.tar.gz
$ tar zxf go1.8.1.linux-armv6l.tar.gz
$ sudo mv go /usr/local
$ echo "export PATH=$PATH:/usr/local/go/bin" >> ~/.bashrc
# etcdをクローンしてビルド
$ export GOOS=linux
$ export GOARCH=arm
$ export GOARM=7
$ git clone --branch v3.1.7 https://github.com/coreos/etcd.git
$ cd etcd
$ ./build
# ビルドされたファイルは./bin/にできるので、インストール
$ sudo mv ./bin/* /usr/local/bin/
$ sudo chmod 755 /usr/local/bin/etcd
$ sudo chmod 755 /usr/local/bin/etcdctl
# 他のRasPiにファイルを転送
$ scp ./bin/etcd node02:/usr/local/bin/etcd
$ scp ./bin/etcd node02:/usr/local/bin/etcdctl
$ scp ./bin/etcd node03:/usr/local/bin/etcd
$ scp ./bin/etcd node03:/usr/local/bin/etcdctl
# etcdのデータ保存用のディレクトリを作成
$ sudo mkdir -p /var/lib/etcd
$ sudo chown -R root:$(whoami) /var/lib/etcd
$ sudo chmod -R a+rw /var/lib/etcd
# systemdファイルを作成
$ cat > /etc/systemd/system/etcd.service <<EOF
[Unit]
Description=etcd
Documentation=https://github.com/coreos/etcd
After=network.target
[Service]
Type=notify
Restart=always
RestartSec=5s
LimitNOFILE=40000
TimeoutStartSec=0
Environment="ETCD_UNSUPPORTED_ARCH=arm"
ExecStart=/usr/local/bin/etcd --name etcd-1 \\
--data-dir /var/lib/etcd \\
--discovery-srv k8s.h-tsk.com \\
--initial-advertise-peer-urls http://node01.k8s.h-tsk.com:2380 \\
--advertise-client-urls http://node01.k8s.h-tsk.com:2379 \\
--listen-client-urls http://127.0.0.1:2379,http://node01.k8s.h-tsk.com:2379 \\
--listen-peer-urls http://node01.k8s.h-tsk.com:2380 \\
--initial-cluster-token my-etcd-token \\
--initial-cluster-state new
[Install]
WantedBy=multi-user.target
EOF
1.2 etcdのインストール (残りmaster)
# ビルドされたファイルは転送してあるので、実行権限付与
$ sudo chmod 755 /usr/local/bin/etcd
$ sudo chmod 755 /usr/local/bin/etcdctl# etcdのデータ保存用のディレクトリを作成
$ sudo mkdir -p /var/lib/etcd
$ sudo chown -R root:$(whoami) /var/lib/etcd
$ sudo chmod -R a+rw /var/lib/etcd# systemdファイルを作成 (インストール先によってNODE_IDをかえる)
$ sudo su -
$$ export NODE_ID= 2 or 3
$$ cat > /etc/systemd/system/etcd.service <<EOF
[Unit]
Description=etcd
Documentation=https://github.com/coreos/etcd
After=network.target
[Service]
Type=notify
Restart=always
RestartSec=5s
LimitNOFILE=40000
TimeoutStartSec=0
Environment="ETCD_UNSUPPORTED_ARCH=arm"
ExecStart=/usr/local/bin/etcd --name etcd-${NODE_ID} \\
--data-dir /var/lib/etcd \\
--discovery-srv k8s.h-tsk.com \\
--initial-advertise-peer-urls http://node0${NODE_ID}.k8s.h-tsk.com:2380 \\
--advertise-client-urls http://node0${NODE_ID}.k8s.h-tsk.com:2379 \\
--listen-client-urls http://127.0.0.1:2379,http://node0${NODE_ID}.k8s.h-tsk.com:2379 \\
--listen-peer-urls http://node0${NODE_ID}.k8s.h-tsk.com:2380 \\
--initial-cluster-token my-etcd-token \\
--initial-cluster-state new
[Install]
WantedBy=multi-user.target
EOF
1.3 etcdの起動 (master)
etcdを2つ目のmasterを起動するまでは、1台目のstartコマンドは戻ってこないです。(2台でetcdクラスタが組めるまでは待機するらしい)
$ sudo systemctl start etcd
$ sudo systemctl enable etcd
2. flannelのインストール (master, node)
$ sudo apt-get install -y build-essential linux-libc-dev bridge-utils git curl ssh unzip
$ wget https://github.com/coreos/flannel/releases/download/v0.7.1/flannel-v0.7.1-linux-arm.tar.gz
$ tar zxf flannel-v0.7.1-linux-arm.tar.gz
$ sudo mkdir /opt/flanneld
$ sudo mv flanneld /usr/local/bin/flanneld
$ sudo mv mk-docker-opts.sh /opt/flanneld/mk-docker-opts.sh
$ sudo chmod 755 /usr/local/bin/flanneld
$ sudo chmod 755 /opt/flanneld/mk-docker-opts.sh
$ sudo su -
$$ mkdir -p /etc/flanneld
$$ export ADVERTISE_IP=192.168.13.1 # <- 設定する各masterのIPアドレス
$$ cat > /etc/flanneld/options.env << EOF
FLANNELD_IFACE=${ADVERTISE_IP}
FLANNELD_ETCD_ENDPOINTS=http://node01.k8s.h-tsk.com:2379,http://node02.k8s.h-tsk.com:2379,http://node02.k8s.h-tsk.com:2379
EOF
$$ cat > /etc/systemd/system/flanneld.service << EOF
[Unit]
Description=Network fabric for containers
Documentation=https://github.com/coreos/flannel
Requires=networking.service
Before=docker.service
After=networking.service
[Service]
Type=notify
Restart=always
RestartSec=5
EnvironmentFile=/etc/flanneld/options.env
LimitNOFILE=40000
LimitNPROC=1048576
ExecStartPre=/sbin/modprobe ip_tables
ExecStartPre=/bin/mkdir -p /run/flanneld
ExecStart=/usr/local/bin/flanneld --ip-masq=true
## Updating Docker options
ExecStartPost=/opt/flanneld/mk-docker-opts.sh -d /run/flanneld/docker_opts.env -i
[Install]
WantedBy=multi-user.target
EOF
3. flannelとdockerの連携設定 (master, node)
3.1 docker.serviceにflannelの設定をおこなう(master, node)
$ sudo cp /lib/systemd/system/docker.service /etc/systemd/system/docker.service
$ sudo sed -i "s/\[Service\]/\[Service\]\nEnvironmentFile=-\/run\/flanneld\/docker_opts.env/" /etc/systemd/system/docker.service
$ sudo sed -i "s/fd:\/\/$/fd:\/\/ \$DOCKER_OPTS \$DOCKER_OPT_BIP \$DOCKER_OPT_MTU \$DOCKER_OPT_IPMASQ/" /etc/systemd/system/docker.service
3.2 etcdにflannelの設定を入れる (masterの1台だけ)
$ etcdctl mk /coreos.com/network/config '{"Network":"172.17.0.0/16"}'
3.3 flannelとdockerを起動させる (master, node)
$ sudo systemctl daemon-reloadやっとkubernetesを動かす環境がセットアップできたので、次回はインストールをします。
$ sudo systemctl start flanneld
$ sudo systemctl enable flanneld
$ sudo systemctl restart docker
コメント
コメントを投稿