第一步:树莓派kubernetes安装准备工作

版权声明:本文为CSDN博主「liukuan73」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/liukuan73/article/details/83150473

1. 准备工作


1.1 环境信息


操作系统:Raspbian GNU/Linux 9(Stretch Desktop)
内核:4.14.50-v7+

1.2 关闭防火墙


关闭ufw防火墙,树莓派系统没有ufw模块,无需设置。

$ sudo ufw disable


备注:

ufw的底层是使用iptables进行数据过滤,建立在iptables之上,这可能会与 Docker 产生冲突。
为避免不必要的麻烦,这里把firewalld关掉。


1.3 禁用SELINUX


树莓派系统默认不安装selinux,无需设置。假如安装了的话,按如下步骤禁用selinux

临时禁用(重启后失效)

$ sudo setenforce 0                 #0代表permissive 1代表enforcing



永久禁用

$ sudo vi /etc/selinux/config
SELINUX=permissive        


备注:

kubelet目前对selinux的支持还不好,需要禁用掉。
不禁用selinux的话有时还会出现明明容器里是root身份运行,操作挂载进来的主机文件夹时没有权限的情况,这时候要么配置selinux的权限,要么就禁掉selinux
另外,当docker的storage-driver使用overlay2的时候,低版本内核的selinux不支持overlay2文件驱动,docker启动时设置为--selinux-enabled会失败报错:“Error starting daemon: SELinux is not supported with the overlay2 graph driver on this kernel”,需设置--selinux-enabled=false


1.4 开启数据包转发


1.4.1 内核开启ipv4转发
1.修改/etc/sysctl.conf,开启ipv4转发:

$ sudo vim /etc/sysctl.conf
net.ipv4.ip_forward = 1             #开启ipv4转发,允许内置路由


2.写入后执行如下命令生效:

$ sudo sysctl -p


备注:

什么是ipv4转发:出于安全考虑,Linux系统默认是禁止数据包转发的。转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将数据包发往本机另一块网卡,该网卡根据路由表继续发送数据包。这通常是路由器所要实现的功能。
kube-proxy的ipvs模式和calico(都涉及路由转发)都需要主机开启ipv4转发。
另外,不使用k8s,即使只使用docker的时候,以下两种情况也依赖ipv4转发:
<1>当同一主机上的两个跨bridge(跨bridge相当于跨网段,跨网络需要路由)的容器互访
<2>从容器内访问外部
参考: https://docs.docker.com/v17.09/engine/userguide/networking/default_network/container-communication/#communicating-to-the-outside-world

1.4.2 防火墙修改FORWARD链默认策略
数据包经过路由后,假如不是发往本机的流量,下一步会走iptables的FORWARD链,而docker从1.13版本开始,将FORWARD链的默认策略设置为DROP,会导致出现一些例如跨主机的两个pod使用podIP互访失败等问题。解决方案有2个:

在所有节点上开机启动时执行iptables -P FORWARD ACCEPT
让docker不操作iptables
方案一

临时生效:

$ sudo iptables -P FORWARD ACCEPT



iptables的配置重启后会丢失,可以将配置写进/etc/rc.local中,重启后自动执行:

/usr/sbin/iptables -P FORWARD ACCEPT



方案二

设置docker启动参数添加--iptables=false选项,使docker不再操作iptables,比如1.10版以上可编辑docker daemon默认配置文件/etc/docker/daemon.json:

{
    "iptables": false
}


备注:

建议方案二
kubernetes官网建议和k8s结合的时候docker的启动参数设置--iptables=false使得docker不再操作iptables,完全由kube-proxy来操作iptables。
参考:
<1>https://docs.docker.com/v17.09/engine/userguide/networking/default_network/container-communication/#container-communication-between-hosts
<2>https://github.com/kubernetes/kubernetes/issues/40182
<3>https://kubernetes.io/docs/setup/scratch/#docker
<4>https://github.com/moby/moby/pull/28257


1.5 禁用swap


1.禁掉所有的swap分区

$ sudo swapoff -a


2.同时还需要修改/etc/fstab文件,注释掉 SWAP 的自动挂载,防止机子重启后swap启用。

备注:

Kubernetes 1.8开始要求关闭系统的Swap,如果不关闭,默认配置下kubelet将无法启动,虽然可以通过kubelet的启动参数--fail-swap-on=false更改这个限制,但不建议,最好还是不要开启swap。
一些为什么要关闭swap的讨论:
<1>https://github.com/kubernetes/kubernetes/issues/7294
<2>https://github.com/kubernetes/kubernetes/issues/53533


1.6 配置iptables参数,使得流经网桥的流量也经过iptables/netfilter防火墙

 

$ sudo tee /etc/sysctl.d/k8s.conf <<-'EOF'
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

$ sudo sysctl --system


备注:

网络插件需要为kube-proxy提供一些特定的支持,比如kube-proxy的iptables模式基于iptables,网络插件就需要确保容器的流量可以流过iptables。比如一些网络插件会用到网桥,而网桥工作在数据链路层,iptables/netfilter防火墙工作在网络层,以上配置则可以使得通过网桥的流量也进入iptables/netfilter防火墙中,确保iptables模式的kube-proxy可以正常工作。
默认没有指定kubelet网络插件的情况下,会使用noop插件,它也会设置net/bridge/bridge-nf-call-iptables=1来确保iptables模式的kube-proxy可以正常工作。
参考:
<1>https://kubernetes.io/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/#network-plugin-requirements
<2>https://kubernetes.io/docs/setup/independent/install-kubeadm/


1.7 开启memory的cgroup功能


树莓派是基于debian的系统,而debian默认没有mount memory的cgroup,这里需要手动开启

编辑/boot/cmdline.txt,在该行的末尾添加此文本,但不要创建任何新行:

cgroup_enable=memory


重启:

sudo reboot



1.8 修改系统源


修改树莓派的源,换成中科大的源(http://mirrors.ustc.edu.cn/help/raspbian.html)

$ sudo sed -i 's|raspbian.raspberrypi.org|mirrors.ustc.edu.cn/raspbian|g' /etc/apt/sources.list
$ sudo apt-get update

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值