Kubeadm 是 k8s 的部署工具,它提供了 kubeadm init 和 kubeadm join,专用于快速部署 k8s 集群,它能通过两条指令完成一个 Kubenetes 集群的搭建。
服务器配置
master 节点:
CPU 两核及以上 内存 4G 及以上 硬盘 20G 及以上
node 节点,作为“具体做事”的节点,它的配置要求会更高:
CPU 四核及以上 内存 8G 及以上 硬盘 40G 及以上
注意:下文中的操作步骤,除特别说明在哪个节点操作之外,未说明的均表示该操作在所有节点都得执行。
Oracle VM VirtualBox 新建三台虚拟机 分别安装 CentOS 系统。一台作为 master 节点,另两台作为 node 节点,且每台虚拟机有自己的专属 IP 地址。
玩转虚拟机之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
在 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 集群已经搭建成功;
这两条命令分别表示:
① 开启 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 中的集群。
部署 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 状态
查看kubelet日志
journalctl -xefu kubelet
Kubernetes 集群搭建完成。
搭建的过程中可能遇到的问题和解决方案
https://blog.csdn.net/qq_49530779/article/details/122037992
https://blog.csdn.net/chechenshi/article/details/119143003
https://blog.csdn.net/qq_46237746/article/details/125453966