Kubeadm 是 k8s 的部署工具,它提供了 kubeadm init 和 kubeadm join,专用于快速部署 k8s 集群,它能通过两条指令完成一个 Kubenetes 集群的搭建。

服务器配置
master 节点:

CPU 两核及以上 内存 4G 及以上 硬盘 20G 及以上

node 节点,作为“具体做事”的节点,它的配置要求会更高:

CPU 四核及以上   内存 8G 及以上  硬盘 40G 及以上

注意:下文中的操作步骤,除特别说明在哪个节点操作之外,未说明的均表示该操作在所有节点都得执行。

主机准备

Oracle VM VirtualBox 新建三台虚拟机 分别安装 CentOS 系统。一台作为 master 节点,另两台作为 node 节点,且每台虚拟机有自己的专属 IP 地址。

kubernetes restartPolicy 设置 kubeadm reset_docker


玩转虚拟机之VirtualBox设置虚拟机为静态IP并访问外网

虚拟机的创建和配置注意以下几点:

硬件按照上文要求进行配置
虚拟机之间可以进行网络互通
虚拟机可以访问外网,便于下载镜像
安装好 wget 工具 yum install wget

系统初始化

关闭防火墙
#临时关闭
systemctl stop firewalld
#永久关闭
systemctl disable firewalld

关闭 selinux
#永久关闭
sed -i '/selinux/s/enforcing/disabled/' /etc/selinux/config
#临时关闭
setenforce 0

关闭 swap
#临时关闭
swapoff -a
#永久关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab

设置主机名称,使用命令 hostnamectl set-hostname 主机名,如下三台主机分别设置为:
hostnamectl set-hostname master
hostnamectl set-hostname node1
hostnamectl set-hostname node2

#查看当前主机名称
hostname

master节点中添加 hosts,即节点 IP地址+节点名称;

cat >> /etc/hosts << EOF
192.168.99.101 master
192.168.99.102 node1
192.168.99.103 node2
EOF

将桥接的 IPv4 流量传递到 iptables 的链(所有节点都设置);

#设置
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

#使其生效
sysctl --system

时间同步,让各个节点(虚拟机)中的时间与本机时间保持一致

yum install ntpdate -y
ntpdate time.windows.com

Docker 的安装
Kubernetes 默认容器运行时(CRI)为 Docker,所以需要先在各个节点中安装 Docker。
docker 的详细安装步骤

centos7安装docker

安装 Docker 后,之后的操作均需在 docker 服务开启的前提下进行 。

各个节点执行启动docker 并设置为开机自启

#启动docker
systemctl start docker
#docker 开机自启
systemctl enable docker

添加阿里云 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、kubelet、kubectl 的安装

最好指定版本

#下载软件
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
#开机自启动
systemctl enable kubelet

安装成功如下:

kubernetes restartPolicy 设置 kubeadm reset_运维_02


在 Master 节点中部署集群

在 master 节点中执行以下命令,注意将 master 节点 IP 和 kube 版本号修改为自己主机中所对应的。

kubeadm init \
--apiserver-advertise-address=192.168.99.101 \            改成自己的
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.18.0 \      改成自己的
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16

此步骤执行完成之后,使用命令docker images查看系统中的镜像,可以我们需要的镜像均已安装完成。

查看提示信息,看到 initialized successfully 说明我们 master 节点上的 k8s 集群已经搭建成功;

kubernetes restartPolicy 设置 kubeadm reset_kubernetes_03


这两条命令分别表示:

① 开启 kubectl 工具的使用(该命令在master节点中执行)。

mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

分别在 master 节点中执行第 ① 条命令,在各个 node 节点中执行第 ② 条命令;

kubeadm join 192.168.99.101:6443 --token vnrts7.fxrd0pqmu4g2tv7h  \
    --discovery-token-ca-cert-hash sha256:51e381e25629699ba92ed534016f52f82100ab1d45b1a03a1c09e7e8c3be42

分别在 master 节点中执行第 ① 条命令,在各个 node 节点中执行第 ② 条命令

执行完成之后在 master 节点中使用命令 kubectl get nodes 查看此时集群中的工作节点。可以看到,node1 和 node2 工作节点已加入至 master 中的集群。

kubernetes restartPolicy 设置 kubeadm reset_Docker_04


部署 CNI 网络插件

在上述操作完成后,各个工作节点已经加入了集群,但是它们的状态都是 NoReady,这是由于无它们无法跨主机通信的原因。而 CNI 网络插件的主要功能就是实现 pod 资源能够跨宿主机进行通信。在master节点中执行以下命令进行配置:

curl https://docs.projectcalico.org/v3.20/manifests/calico.yaml -O

然后使用命令 kubectl get pods -n kube-system 查看运行状态,1 代表运行中;

最后再次使用kubectl get nodes查看集群中的工作节点;可以看到处于开机状态的 master 节点和 node1 node2 节点已经是 ready 状态

kubernetes restartPolicy 设置 kubeadm reset_kubernetes_05


查看kubelet日志

journalctl -xefu kubelet

Kubernetes 集群搭建完成。