Raspbian GNU/Linux 9 (stretch)
apt install telnet curl lsof tmux tcpdump git locate vim
Network Manager をインストールします。
apt install network-manager
Network Manager を有効にします。
systemctl disable --now networking.service
systemctl enable --now network-manager
/etc/network/interfaces のバックアップを取ります。
yes no | cp -ai /etc/network/interfaces{,.default}
/etc/network/interfaces の設定を無効化します。
perl -pi -e 's|^|#|g' /etc/network/interfaces
eth0 の IPアドレスを固定します。
MY_ADDRESS="192.168.13.2/24"
nmcli con add ifname eth0 con-name eth0 type ethernet ipv4.addresses $MY_ADDRESS ipv4.dns 192.168.13.1 ipv4.gateway 192.168.13.1
root ユーザのパスワードを登録します。
# passwd
(パスワードを入力します)
cat << '_EOF_' >> /etc/hosts
# for k8s
192.168.13.2 k8s01
192.168.13.3 k8s02
192.168.13.4 k8s03
_EOF_
SSH の設定を行います。当設定後、PuTTY 等の SSH クライアントよりリモートログインが可能となります。
OpenSSH サーバーをインストールします。
apt install openssh-server
root ユーザへのリモートログインを許可します
perl -pi -e 's|^(PermitRootLogin) .*|$1 yes|g' /etc/ssh/sshd_config
cd $HOME
mkdir .ssh && chmod 700 .ssh
cat << _EOF_ >> .ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBNnWw32jjCM0fZeMcaW4RdD5pdMLUe7hP5aRPPBrSPJS0f0BOuJj5x90P9QcfvWI+AygbxWLU2DNdazDZPaVCgViZtM73xLtpru3rmTK6ogDdsgSEcok819bVnwTj5RPa3RveBiv8UyXSb9igegFwCTpvz51a9Wy2lCyhFP5/STmTc9I9WwFsf3X8bZUvpRElWX9xQGgbdQM37pSnrsf1cbUwpQre034y5LSfU3FSiqFd5UK8HUoGnbefaAQifLrsf0WGGs059hSluOdn6NqFtG/67liPBEB6DAIwCujuzTQBfrCcqAteX7qKi6FIVJhsxJcd6nj/5kpjys9Har01
_EOF_
chmod 600 .ssh/authorized_keys
設定を反映します。
systemctl restart sshd
TODO: Docker のインストール
Kubernetes クライアントの kubectl をインストールします。
TODO: バイナリの配置
各 Kubernetes コンポーネントで使用される共通の認証用ファイルを作成します。当手順では認証に X.509 Client Certs (デジタル証明書を用いたユーザ認証) を用います。
当ファイルは Master Node にて作成し、各 Node に配布されます。以降の手順は配布後に行ってください。
kubernetes-cni をインストールします。これにより Kubernetes から様々なソフトウェア (ex. ovs, flannel, calico) を用いた Node 間通信が可能となります。
mkdir -p /opt/cni/bin
cd /opt/cni/bin
wget https://github.com/containernetworking/plugins/releases/download/v0.7.1/cni-plugins-arm64-v0.7.1.tgz
tar xvzf cni-plugins-amd64-v0.7.1.tgz
rm -f cni-plugins-amd64-v0.7.1.tgz
設定ファイルを作成します。
mkdir -p /etc/cni/net.d/
cat << '_EOF_' > /etc/cni/net.d/flannel.conflist
{
"name": "flannel0",
"cniVersion": "0.3.1",
"plugins": [
{
"type": "flannel",
"delegate": {
"isDefaultGateway": true
}
},
{
"type": "portmap",
"capabilities": {
"portMappings": true
}
}
]
}
_EOF_
TODO: バイナリの配置
systemd ファイルを作成します。
cat << '_EOF_' > /etc/systemd/system/kubelet.service
[Unit]
Description=kubelet
Documentation=http://kubernetes.io/docs/
[Service]
CPUShares=700
MemoryLimit=250M
EnvironmentFile=/etc/default/kubelet
ExecStart=/usr/bin/kubelet $KUBE_OPTS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=always
StartLimitInterval=0
RestartSec=10
[Install]
WantedBy=multi-user.target
_EOF_
systemctl daemon-reload
設定ファイルを作成します。
cat << _EOF_ > /etc/default/kubelet
KUBE_OPTS="--v=1 \\
--address=0.0.0.0 \\
--port=10250 \\
--container-runtime=docker \\
--kubeconfig=${HOME}/.kube/config \\
--fail-swap-on=false \\
--network-plugin=cni \\
--cni-conf-dir=/etc/cni/net.d \\
--cni-bin-dir=/opt/cni/bin \\
--cluster-dns=10.254.0.254 \\
--cluster-domain=cluster.local \\
"
_EOF_
- cgroups にてメモリ割当を許可します。
- 各リソースに cgroup が割り当てられていることを確認します。
# cat /proc/cgroups
#subsys_name hierarchy num_cgroups enabled
cpuset 8 5 1
cpu 5 69 1
cpuacct 5 69 1
blkio 9 69 1
memory 2 104 1
devices 3 69 1
freezer 11 5 1
net_cls 7 5 1
perf_event 10 5 1
net_prio 7 5 1
hugetlb 4 5 1
pids 6 70 1
- 割り当てられていないリソースがある場合、 /boot/cmdline.txt の1行目の末尾に追記して再起動
- 以下はメモリの例
cgroup_enable=memory cgroup_memory=1
起動します。
systemctl enable --now kubelet.service
TODO: バイナリの配置
systemd ファイルを作成します。
cat << '_EOF_' > /etc/systemd/system/kube-proxy.service
[Unit]
Description=kube-proxy
Documentation=http://kubernetes.io/docs/
[Service]
CPUShares=700
MemoryLimit=250M
EnvironmentFile=/etc/default/kube-proxy
ExecStart=/usr/bin/kube-proxy $KUBE_OPTS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=always
StartLimitInterval=0
RestartSec=10
[Install]
WantedBy=multi-user.target
_EOF_
systemctl daemon-reload
設定ファイルを作成します。
cat << _EOF_ > /etc/default/kube-proxy
KUBE_OPTS="--v=1 \\
--bind-address=0.0.0.0 \\
--master=https://k8s01:6443 \\
--kubeconfig=${HOME}/.kube/config \\
"
_EOF_
起動します。
systemctl enable --now kube-proxy.service
TODO: バイナリの配置
systemd ファイルを作成します。
cat << '_EOF_' > /etc/systemd/system/flanneld.service
[Unit]
Description=flanneld
Documentation=http://kubernetes.io/docs/
[Service]
CPUShares=700
MemoryLimit=250M
EnvironmentFile=/etc/default/flanneld
ExecStart=/usr/bin/flanneld $FLANNEL_OPTS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=always
StartLimitInterval=0
RestartSec=10
[Install]
WantedBy=multi-user.target
_EOF_
systemctl daemon-reload
設定ファイルを作成します。
cat << '_EOF_' > /etc/default/flanneld
FLANNEL_OPTS="-v=1 \
-etcd-endpoints http://k8s01:2379 \
-etcd-username etcd-1 \
-iface eth0 \
-kube-api-url http://k8s01:8080 \
"
_EOF_
起動します。
systemctl enable --now flanneld.service