raspberry-kubernetes-node May 23, 2018 · raspberry docker · 分享到: 将树莓派变成Kubernetes的一个节点 前提 我在自己的主机上搭建了一个K8S集群,一个master节点,两个node节点,手边还有三个树莓派,想把他们也并到集群中。昨天我在docker中安装了docker,而kubernetes官网上也有arm的二进制文件,今天打算将这些文件配置到raspberry上,使之成为K8S集群的新节点。 需要指出的是,我原来的集群是X86_64架构的机器,raspberry是arm架构的,他们用的是不一样的镜像,在master节点需要指定不同架构的镜像给不同的node节点。 下载kubernetes node节点 本人使用的是k8s 1.8版本的(master节点是这个版本)$^{[1]}$ 解压后新建文件夹: 1sudo mkdir -p /opt/kubernetes/{bin,cfg} 2sudo mv kubelet kubectl kube-proxy /opt/kubernetes/bin/ 编写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 创建配置文件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" 创建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 创建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" 创建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 最后将/opt/kubernetes/bin 放到PATH变量中。 遇到问题 Failed to start ContainerManager system validation failed - Following Cgroup subsystem not mounted: [memory] 新建文件/etc/default/grub,添加:$^{[2]}$ GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1" 1sudo update-grub 2# 如果无法找到 update-grub 命令,你可以通过下面的命令安装它。 3sudo apt-get install grub2-common 或者更有效的是,在/boot/cmdline.txt之后加入 cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1 再reboot。就可以了。$^{[3]}$ 参考文献 [1]Kubernetes Github [2]如何在linux上通过GRUB添加内核参数 [3]树莓派论坛