1. 至少一台服务器,操作系统 CentOS7.x-86_x64
2. 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多
1. docker
2. kubernetes
[root@master ~]# cat /etc/redhat-release
# 此方式下安装kubernetes集群要求Centos版本要在7.5或之上
编辑三台服务器的/etc/hosts文件,添加下面内容
主机IP master
systemctl stop firewalld
systemctl disable firewalld
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久关闭
setenforce 0 # 临时关闭
swap分区指的是虚拟内存分区,它的作用是物理内存使用完,之后将磁盘空间虚拟成内存来使用,启用swap设备会对系统的性能产生非常负面的影响,因此kubernetes要求每个节点都要禁用swap设备
# 编辑分区配置文件/etc/fstab,注释掉swap分区一行
# 注意修改完毕之后需要重启linux服务
vim /etc/fstab
注释掉 /dev/mapper/centos-swap swap
# /dev/mapper/centos-swap swap
将桥接的IPv4流量传递到iptables的链
# 编辑/etc/sysctl.d/kubernetes.conf文件,添加如下配置:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
# 重新加载配置
[root@master ~]# sysctl -p
# 加载网桥过滤模块
[root@master ~]# modprobe br_netfilter
# 查看网桥过滤模块是否加载成功
[root@master ~]# lsmod | grep br_netfilter
换成国内的源下载安装速度更快
[root@master ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O
Docker的版本和Kubeneters的版本有适配要求,笔者一开始,安装了最新版的Docker,结果因为自己的K8S版本为1.17.4,最多只能支持Docker 19.03版本,导致K8S集群初始化一直出问题,如下图所示。
通过如下命令可以查看当前源支持的Docker版本。
yum list docker-ce --showduplicates
安装最新版docker,可使用如下命令
yum install -y docker-ce
Dockr安装指定版本
指定--setopt=obsoletes=0,否则yum可能会自动安装更高版本
yum install --setopt=obsoletes=0 [版本号] -y
eg:yum install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7 -y
Docker启动
sudo systemctl start docker
通过运行hello-world镜像来验证是否正确安装了Docker,如果执行之后,控制台显示如下信息,则说明Docker安装和启动成功
源中版本较新,与笔者选择的K8S版本冲突,所以以手动安装的方式安装了Docker18.06.1
下载rpm包
docker-ce-18.06.1.ce-3.el7.x86_64.rpm 下载地址1 下载地址2
# 使用yum命令安装
$ sudo yum -y install docker-ce-18.06.1.ce-3.el7.x86_64.rpm
由于kubernetes的镜像在国外,速度比较慢,这里切换成国内的镜像源
vi /etc/yum.repos.d/kubernetes.repo,添加下面的配置
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgchech=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
笔者安装的K8S版本为1.17.4
[root@master ~]# yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y
通过查看组件版本测试安装是否成功
kubelet --version
kubectl version
kubeadm version
配置kubelet的cgroup
#编辑/etc/sysconfig/kubelet, 添加下面的配置
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
设置kubelet开机自启
systemctl enable kubelet
可通过如下命令查看kubelet运行状态
systemctl status kubelet
在安装kubernetes集群之前,必须要提前准备好集群需要的镜像,所需镜像可以通过下面命令查看
kubeadm config images list
下载镜像,此镜像kubernetes的仓库中,由于网络原因,无法连接,下面提供了一种替换方案,版本使用1.17.4
images=(
kube-apiserver:v1.17.4
kube-controller-manager:v1.17.4
kube-scheduler:v1.17.4
kube-proxy:v1.17.4
pause:3.1
etcd:3.4.3-0
coredns:1.6.5
)
for imageName in ${images[@]};do
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done
在master节点上运行即可
# 创建集群
[root@master ~]# kubeadm init \
--apiserver-advertise-address=XXX.XXX.XXX.XXX \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.17.4 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
此处的xxx.xxx.xxx.xxx为主机节点的IP地址,笔者在服务器中搭建集群环境时,一开始将此IP设置成了服务器的公网IP,出现了初始化超时的现象,卡在如下图所示位置,最后初始化失败。
多次探索之后,发现将公网IP改成服务器的内网IP即可。内网IP可通过如下命令查看
ipconfig
将IP地址换成内网IP,再次执行初始化命令即可完成集群环境的初始化,
根据弹出的提示信息,复制粘贴运行即可
[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
在master节点上查看节点信息
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master NotReady master 59m v1.17.4
这里的NotReady是因为没有安装网络插件,无法产生通信,安装网络插件即可,在github的kubernetes仓库中下载对应的版本的kube-flannel.yml文件,可以直接传输到服务器的根目录下,运行如下命令即可
kubectl apply -f kube-flannel.yml
执行完毕,再次运行kubectl get nodes即可发现,状态已经更新为ready
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 2h23m v1.17.4