Ubuntu-16.04使用kubeadm安装kubernetes-1.18.3(阿里源快速安装与配置)

官方文档和源码永远都是最好的学习资料,有什么问题大家可以讨论

docker官方文档

kubernetes官方文档

一. 准备工作

1.1 环境信息

  • 操作系统:Ubuntu 16.04.1 LTS

关闭防火墙

  • 关闭ufw防火墙,Ubuntu默认未启用,无需设置。
$ sudo ufw disable  

备注:

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

1.2 禁用SELINUX

  • ubuntu默认不安装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.3 开启数据包转发

1.3.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.3.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.4 禁用swap

1.禁掉所有的swap分区


$ sudo swapoff -a

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

备注:

  • Kubernetes 1.8开始要求关闭系统的Swap,如果不关闭,默认配置下kubelet将无法启动,虽然可以通过kubelet的启动参数–fail-swap-on=false更改这个限制,但不建议,最好还是不要开启swap。

1.5 配置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可以正常工作。

二. 安装docker

2.1 安装docker-18.03.1

1.卸载旧docker

$ sudo apt-get remove docker docker-engine docker.io         

2.安装依赖,使得apt可以使用https

sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common

3.添加docker的GPG key:

$ curl -fsSL https://download.docker.com
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值