kubeadm是kubernetes官方提供的快速安装和初始化kubernetes集群的工具,虽然处于beta和alpha状态,还不能用在生产环境,但可以体会官方推荐的kubernetes最佳实践的设计和思想。
准备
3台CentOS 7.2主机,修改/etc/hosts
10.110.18.216 node1
10.110.18.217 node2
10.110.18.218 node3
关闭各个主机的防火墙
systemctl stop firewalld
systemctl disable firewalld
禁用SELINUX
setenforce 0
创建/etc/sysctl.d/k8s.conf
,配置内容
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
安装Docker-ce-17.03.2
添加docker-ce的源
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
查看yum源中的docker版本
yum list docker-ce.x86_64 --showduplicates |sort -r
docker-ce.x86_64 17.09.0.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.06.2.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.06.1.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.06.0.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.03.2.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable
kubernetes 1.8针对Docker的1.11.2、1.12.6、1.13.1和17.03等版本做了验证。
安装docker-ce-17.03.2
yum makecache fast
yum install -y --setopt=obsoletes=0 \
docker-ce-17.03.2.ce-1.el7.centos \
docker-ce-selinux-17.03.2.ce-1.el7.centos
systemctl start docker
systemctl enable docker
docker从1.13版本开始调整默认的防火墙规则,禁用iptables filter表中的FORWARD链,这样会引起Kubernetes集群中跨Node的Pod无法通信,因此需要在各个Docker节点执行
iptables -P FORWARD ACCEPT
可以在docker的systemd unit文件/lib/systemd/system/docker.service
中加入配置
ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT
重新加载配置,并启动
systemctl daemon-reload
systemctl restart docker
安装kubeadm和kubelet(1.9.0)
配置kubernetes的yum源
cat >> /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF
安装kubelet、kubeadm、kubectl(1.9.0)
yum makecache fast
yum install -y kubelet kubeadm kubectl
kubernetes文档中kubelet的启动参数--cgroup-driver
默认是cgroupfs。但通过yum安装时,会生成/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
文件,内容
Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=systemd"
当使用docker info
查看信息时
docker info
......
Server Version: 17.03.2-ce
......
Cgroup Driver: cgroupfs
修改docker的cgroup driver与kubelet一致,在/etc/docker/daemon.json
配置
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
重启docker服务
systemctl restart docker
在各节点开机启动Kubelet服务
systemctl enable kubelet.service
关闭swap
kubernetes 1.8要求关闭系统的Swap,否则默认配置下kubelet无法启动,当然也可以通过修改启动参数--fail-swap-on=false
更改限制。
关闭swap
swapoff -a
修改/etc/fstab
文件,注释掉SWAP的自动参数,使用free -m
确认swap关闭。调整swap参数,修改/etc/sysctl.d/k8s.conf
vm.swappiness=0
执行sysctl -p /etc/sysctl.d/k8s.conf
使修改生效。
或者是修改/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
Environment="KUBELET_EXTRA_ARGS=--fail-swap-on=false"
重新加载配置
systemctl daemon-reload
初始化集群
使用kubeadm初始化集群,选在node1作为Master Node
kubeadm init \
--kubernetes-version=v1.9.0 \
--pod-network-cidr=10.244.0.0/16 \
--apiserver-advertise-address=10.110.18.216