1. 基本系统环境
1.1 系统内核
查看当前系统内核(我这里是5.0.5-1.el7.elrepo.x86_64):
uname -a
版本必须大于等于3.10,否则需要升级内核:
# ELRepo 仓库(可以先看一下 /etc/yum.repos.d/ 中是否有yum 源)
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
# 查看可用内核
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
# 安装最新内核
yum --enablerepo=elrepo-kernel install kernel-ml
# 查看可用内核,一般上面安装的序号为0
awk -F\' '$1=="menuentry " {
print i++ " : " $2}' /etc/grub2.cfg
# 设置默认内核为最新的
grub2-set-default 0
# 生成 grub 配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg
# 重启
reboot
# 验证
uname -a
1.2 关闭增强型Linux SELINUX并禁用防火墙
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
# 更改为 SELINUX=disabled
vim /etc/selinux/config
systemctl stop firewalld
systemctl disable firewalld
# 验证
systemctl status firewalld
1.3 确保hostname、MAC地址和UUID的唯一性
# 查看mac地址确认
cat /sys/class/net/ens33/address
# 查看确认UUID
cat /sys/class/dmi/id/product_uuid
1.4 关闭swap
swapoff -a
,并注释/etc/fstab
中的
/dev/mapper/centos-swap swap swap defaults 0 0
确认关闭(swap应该为0)
free -m
1.5 配置网桥的流量,避免错误
引入br_netfilter
模块:
# 方式1
lsmod | grep br_netfilter
# 方式2
modprobe br_netfilter
配置各节点系统内核参数使流过网桥的流量也进入iptables/netfilter
框架中,可以配置到/etc/sysctl.conf
中,或者在/usr/lib/sysctl.d/
、/run/sysctl.d/
、/etc/sysctl.d/
任意目录下创建配置文件进行配置,比如:
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
指定加载的配置文件:
# 从/etc/sysctl.d/k8s.conf 加载配置
sysctl -p /etc/sysctl.d/k8s.conf
# 加载任意配置文件
sysctl --system
1.6 节点hosts文件
节点安排如下(根据自己虚拟机的IP自行更改),每个机器上hosts文件都加进去:
10.4.37.24 k8smaster
10.4.37.69 k8snode1
10.4.37.72 k8snode2
或者在克隆机器后,直接更改每个机器的主机命名(其他节点类似):
# 更改主机名
hostname k8smaster
# 编辑hosts,追加
vim /etc/hosts
127.0.0.1 k8smaster
2. 安装docker
详细版本搭配见External Dependencies。
添加docker的yum源(yum的源配置 /etc/yum.repos.d/
)
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
【注】如果没有代理,将上述yum的源改成国内的,这里使用阿里云:
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
搜索docker-ce可用镜像:
yum list docker-ce --showduplicates | sort -r
安装指定版本的docker(目前最新的1.14.0版本的kubenetes依赖的docker可以为1.13.1, 17.03, 17.06, 17.09, 18.06, 18.09):
yum install docker-ce-17.09.1.ce-1.el7.centos
创建docker配置目录和docker守护线程配置文件:
mkdir /etc/docker
vim /etc/docker/daemon.json
写入(可以更改驱动为默认的cgroupfs
,docker加速器可以去阿里云获取)
{
"registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
配置网络策略:
iptables -P FORWARD ACCEPT
配置docker启动策略并重新启动:
systemctl daemon-reload && systemctl enable docker && systemctl restart docker
【附】
若版本不符合需要对docker进行升级或者删除后再进行上述的安装:
yum -y remove docker*
rm -rf /var/lib/docker
3. 安装kubelet kubectl kubeadm(v1.14.0)
- kubeadm:启动集群的命令工具;
- kubelet:用于启动Pod和容器等对象的工具(核心组件),所以它需要在集群中的每个节点上部署;
- kubectl:用于和集群通信的命令行;
3.1 配置yum源
如果可以翻墙(科学上网Shadowsocks),可以直接使用google的源:
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kube*
EOF
添加Kubernetes安装源认证key:
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
【注】如果没有代理,将上述yum的源改成国内的,这里使用阿里云:
cat <<EOF > kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
安装最新的k8s安装工具并设置启动策略:
# 安装最新的kubelet和kubectl以及kubeadm
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
# 设置启动策略
systemctl daemon-reload && systemctl enable kubelet && systemctl start kubelet
当使用docker时,kubeadm 会自动检测 kubelet 使用的cgroup driver ,并将运行时设置到 /var/lib/kubelet/kubeadm-flags.env
文件中,如果使用不同的CRI(容器运行时),就需要编辑 /etc/default/kubelet
(该文件需要手动创建)指定cgroup-driver
的值:
Environment=
KUBELET_EXTRA_ARGS=--cgroup-driver=systemd
由于 kubelet 默认的驱动就是cgroupfs
,所以只有CRI的cgroup driver不是cgroupfs
时才需要指定(k8s推荐docker的cgroup driver配置为systemd
)。
拉取核心组件镜像(翻墙不稳定可能需要多拉几次):
kubeadm config images pull
注:
如果无法拉下镜像可以通过kubeadm config images list --kubernetes-version=v1.13.0
命令查看具体需要哪些镜像:
k8s.gcr.io/kube-apiserver:v1.13.0
k8s.gcr.io/kube-controller-manager:v1.13.0
k8s.gcr.io/kube-scheduler:v1.13.0
k8s.gcr.io/kube-proxy:v1.13.0
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.2.24
k8s.gcr.io/coredns:1.2.6
然后从docker的google的克隆镜像拉取,完事后更换tag
: