环境配置
本次搭建的集群共三个节点,包含一个主节点,两个工作子节点:
节点 |
角色 |
IP |
hostname |
Node1 |
Master |
192.168.0.25 |
master-1 |
Node2 |
Woker |
192.168.0.30 |
node1 |
Node3 |
Woker |
192.168.0.31 |
node2 |
根据官方推荐,节点可以是Ubuntu或CentOS操作系统,本次选择使用CentOS 7。节点最低配置如下:
硬件 |
配置 |
内存 |
>=2G |
CPU |
>=2核 |
磁盘 |
>=15G |
检查 centos / hostname
# 在 master 节点和 worker 节点都要执行 cat /etc/redhat-release # 此处 hostname 的输出将会是该机器在 Kubernetes 集群中的节点名字 # 不能使用 localhost 作为节点的名字 hostname # 请使用 lscpu 命令,核对 CPU 信息 # Architecture: x86_64 本安装文档不支持 arm 架构 # CPU(s): 2 CPU 内核数量不能低于 2 lscpu
修改 hosts:
cat <<EOF >>/etc/hosts 192.168.0.25 master-1 192.168.0.30 node1 192.168.0.31 node2 EOF
有时如果时间时区不对等也需要同步下时钟信息
yum -y install ntpdate ntpdate ntp1.aliyun.com systemctl start ntpdate sustemctl enable ntpdate systemctl status ntpdate
安装docker-ce(所有机器)
# 设置yum源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo # 安装docker所需的工具 yum install -y yum-utils device-mapper-persistent-data lvm2 # 配置阿里云的docker源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 将服务器上的软件包信息 先在本地缓存,以提高搜索\安装软件的速 yum makecache # 指定安装这个版本的docker-ce yum install -y docker-ce-18.09.7 docker-ce-cli-18.09.7 containerd.io # 更新 cgroupdriver 为systemd,这个加速器地址目前能用失效了请更换成自己的 cat <<EOF > /etc/docker/daemon.json { "registry-mirrors": ["https://uy35zvn6.mirror.aliyuncs.com"], "exec-opts": ["native.cgroupdriver=systemd"] } EOF # 启动docker systemctl enable docker && systemctl start docker # 验证docker 是否安装成功 docker version # 检查 docker info|grep "Cgroup Driver" 是否输出 Cgroup Driver: systemd [root@master-1 ~]# docker info|grep "Cgroup Driver" Cgroup Driver: systemd
设置k8s环境准备条件(所有机器)
# 关闭防火墙 systemctl disable firewalld systemctl stop firewalld # 关闭selinux # 临时禁用selinux setenforce 0 # 永久关闭 修改/etc/sysconfig/selinux文件设置 sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config # 禁用交换分区 swapoff -a # 永久禁用,打开/etc/fstab注释掉swap那一行。 sed -i 's/.*swap.*/#&/' /etc/fstab # 验证swap是否关闭 # free -h # 若swap那一行输出为0,则说明已经关闭。 # 有时候也需要同时调整k8s的swappiness参数 # vi /etc/sysctl.d/k8s.conf # 添加一行 vm.swappiness=0 # 执行下面的命令使得修改生效 # sysctl -p /etc/sysctl.d/k8s.conf # 修改内核参数 cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF # 手动加载所有的配置文件 sysctl --system # 单独指定配置文件加载,执行: # sysctl -p XXX.conf
安装kubeadm、kubelet、kubectl(所有机器)
# 执行配置k8s的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 repo_gpgcheck=0 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF # 安装kubeadm、kubectl、kubelet 1.16.0 yum install -y kubectl-1.16.0-0 kubeadm-1.16.0-0 kubelet-1.16.0-0 # 安装kubeadm、kubectl、kubelet 1.22.2 # yum install -y kubectl-1.22.2 kubeadm-1.22.2 kubelet-1.22.2 # 查看是否安装成功 kubelet --version kubectl version kubeadm version # 重启 docker,并启动 kubelet systemctl daemon-reload systemctl restart docker systemctl enable kubelet && systemctl start kubelet
初始化k8s(master机器)
下载管理节点中用到的6个docker镜像,你可以使用docker images查看到
这里需要大概两分钟等待,会卡在[preflight] You can also perform this action in beforehand using ''kubeadm config images pull
#这里的--apiserver-advertise-address使用的是master和node间能互相ping通的ip,我这里是masterip kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.16.0 --apiserver-advertise-address 192.168.0.25 --pod-network-cidr=10.244.0.0/16 --token-ttl 0
# 上面安装完成后,k8s会提示你输入如下命令,执行
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
初始化后会输出加入节点命令,记住node加入集群的命令---- 上面kubeadm init执行成功后会返回给你node节点加入集群的命令,等会要在node节点上执行,需要保存下来
kubeadm join 192.168.0.25:6443 --token xl1lf1.qx7ftk8lt3w45n0r \ > --discovery-token-ca-cert-hash sha256:fbc2c4d47a2d34c593eb0c387518d3a627fb4c79e4518fd5d227bddef7419308
如果忘记了,可以使用如下命令获取。
kubeadm token create --print-join-command
安装calico (master机器)
yum install wget wget https://kuboard.cn/install-script/calico/calico-3.9.2.yaml export POD_SUBNET=10.244.0.0/16 sed -i "s#192\.168\.0\.0/16#${POD_SUBNET}#" calico-3.9.2.yaml kubectl apply -f calico-3.9.2.yaml
安装flannel(master机器)
mkdir -p ~/k8s/ cd ~/k8s curl -O https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml # 在我写这篇文章时该镜像的公网地址如下,如果你在使用时无法通过该公网地址拉取镜像,请去阿里云获取最新镜像地址 docker pull registry.cn-hangzhou.aliyuncs.com/k8sos/flannel:v0.13.1-rc2 修改 kube-flannel.yml 将其中的 “image: quay.io/coreos/flannel:v0.13.1-rc2” 修改为 “image: registry.cn-hangzhou.aliyuncs.com/k8sos/flannel:v0.13.1-rc2” kubectl apply -f kube-flannel.yml
配置完flannel STATUS状态从NotReady变成 Ready即代表成功集群
[root@master k8s]# kubectl get nodes NAME STATUS ROLES AGE VERSION master-1 Ready master 79m v1.16.0 node1 Ready <none> 78m v1.16.0 node2 Ready <none> 78m v1.16.0