raspberry-kubernetes-node
将树莓派变成Kubernetes的一个节点
前提
我在自己的主机上搭建了一个K8S集群,一个master节点,两个node节点,手边还有三个树莓派,想把他们也并到集群中。昨天我在docker中安装了docker,而kubernetes官网上也有arm的二进制文件,今天打算将这些文件配置到raspberry上,使之成为K8S集群的新节点。
需要指出的是,我原来的集群是X86_64架构的机器,raspberry是arm架构的,他们用的是不一样的镜像,在master节点需要指定不同架构的镜像给不同的node节点。
下载kubernetes node节点
本人使用的是k8s 1.8版本的(master节点是这个版本)
Figure 1: K8S node 节点
解压后新建文件夹:
1sudo mkdir -p /opt/kubernetes/{bin,cfg}
2sudo mv kubelet kubectl kube-proxy /opt/kubernetes/bin/
bash
编写Kubernetes配置文件
创建kubeconfig配置文件
1sudo vim /opt/kubernetes/cfg/kubelet.kubeconfig
2apiVersion: v1
3kind: Config
4clusters:
5 - cluster:
6 server: http://{master 节点 IP}:8080
7 name: local
8contexts:
9 - context:
10 cluster: local
11 name: local
12current-context: local
bash
创建配置文件kubeconfig用于kubelet连接master apiserver。
创建自身配置文件
1sudo vim /opt/kubernetes/cfg/kubelet
2# 启用日志标准错误
3KUBE_LOGTOSTDERR="--logtostderr=true"
4# 日志级别
5KUBE_LOG_LEVEL="--v=4"
6# Kubelet服务IP地址
7NODE_ADDRESS="--address={本机IP}"
8# Kubelet服务端口
9NODE_PORT="--port=10250"
10# 自定义节点名称
11NODE_HOSTNAME="--hostname-override={本机IP}"
12# kubeconfig路径,指定连接API服务器
13KUBELET_KUBECONFIG="--kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig"
14# 允许容器请求特权模式,默认false
15KUBE_ALLOW_PRIV="--allow-privileged=false"
16# DNS信息
17KUBELET_DNS_IP="--cluster-dns=172.16.76.2"
18KUBELET_DNS_DOMAIN="--cluster-domain=cluster.local"
19# 禁用使用Swap
20KUBELET_SWAP="--fail-swap-on=false"
bash
创建systemd服务文件
1sudo vim /lib/systemd/system/kubelet.service
2[Unit]
3Description=Kubernetes Kubelet
4After=docker.service
5Requires=docker.service
6[Service]
7EnvironmentFile=-/opt/kubernetes/cfg/kubelet
8ExecStart=/opt/kubernetes/bin/kubelet \
9${KUBE_LOGTOSTDERR} \
10${KUBE_LOG_LEVEL} \
11${NODE_ADDRESS} \
12${NODE_PORT} \
13${NODE_HOSTNAME} \
14${KUBELET_KUBECONFIG} \
15${KUBE_ALLOW_PRIV} \
16${KUBELET_DNS_IP} \
17${KUBELET_DNS_DOMAIN} \
18${KUBELET_SWAP}
19Restart=on-failure
20KillMode=process
21[Install]
22WantedBy=multi-user.target
23
24# systemctl daemon-reload
25# systemctl enable kubelet
26# systemctl restart kubelet
bash
创建kube-proxy配置文件
1sudo vim /opt/kubernetes/cfg/kube-proxy
2# 启用日志标准错误
3KUBE_LOGTOSTDERR="--logtostderr=true"
4# 日志级别
5KUBE_LOG_LEVEL="--v=4"
6# 自定义节点名称
7NODE_HOSTNAME="--hostname-override={本机IP}"
8# API服务地址
9KUBE_MASTER="--master=http://{master 节点 IP}:8080"
bash
创建proxy的systemd服务文件
1sudo vim /lib/systemd/system/kube-proxy.service
2[Unit]
3Description=Kubernetes Proxy
4After=network.target
5[Service]
6EnvironmentFile=-/opt/kubernetes/cfg/kube-proxy
7ExecStart=/opt/kubernetes/bin/kube-proxy \
8${KUBE_LOGTOSTDERR} \
9${KUBE_LOG_LEVEL} \
10${NODE_HOSTNAME} \
11${KUBE_MASTER}
12Restart=on-failure
13[Install]
14WantedBy=multi-user.target
bash
最后将/opt/kubernetes/bin 放到PATH变量中。
遇到问题
Failed to start ContainerManager system validation failed - Following Cgroup subsystem not mounted: [memory]
新建文件/etc/default/grub,添加:
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
或者更有效的是,在/boot/cmdline.txt之后加入
cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1
再reboot。就可以了。
参考文献
[3]树莓派论坛