文章目录

  • 参考内容
  • 1.集群搭建的三种方式
  • 2.minikube
  • 3.云服务器可视化搭建
  • 4.裸机搭建


1.集群搭建的三种方式

  1. [minikube]
    K8S集群模拟器,部署时只需要一台机器(即只有一个节点),Master和Worker都在一起,仅作测试使用;
  2. [云服务器可视化搭建]
    如果机器都是云服务器,则可以通过云平台(阿里云、腾讯云等)可视化搭建,只需要简单几步就可以快速搭建好一个集群;
  3. [裸机安装]
    需要至少两台机器(Master × 1 + Worker

2.minikube

minikube运行时,模拟启动了一个Ubuntu系统,并基于此系统搭建了一个Master与Worker都在同一台机器的模拟集群。

  1. [安装minikube] 可以直接在网站上下载安装包,也可以在PowerShell中通过指令下载:
  2. [minikube常用指令]
# 启动集群
minikube start
# 查看节点。kubectl 是一个用来跟 K8S 集群进行交互的命令行工具
kubectl get node
# 停止集群
minikube stop
# 清空集群
minikube delete --all
# 安装集群可视化 Web UI 控制台
minikube dashboard

3.云服务器可视化搭建

大部分云平台(腾讯云、阿里云等)都支持可视化搭建集群。可参考视频 2.安装Kubernetes集群 按步骤搭建。

4.裸机搭建

2. kubernetes集群环境搭建

先准备好两台机器(云服务器或虚拟机都可以),分别为:

  • Master:内网IP - 192.168.245.174
  • Worker1:内网IP - 192.168.245.175
  1. [所有节点 - 配置主机名]
    为了方便集群节点间的直接调用,使用vim指令编辑 /etc/hosts
# 编辑 /etc/hosts
vim /etc/hosts

Kubernetes 如何管理多个服务器 kubernetes搭建集群_vim

  1. [所有节点 - 同步时间]
    kubernetes要求集群中的节点时间必须精确一致,使用chronyd服务从网络同步各主机的时间;
# 启动chronyd服务
systemctl start chronyd

# 让chronyd服务开机自启
systemctl enable chronyd
  1. [所有节点 - 禁用iptable和firewalld服务]
    kubernetes 和 docker 在运行的中会产生大量的 iptables 规则,为了不让系统规则跟它们混淆,直接关闭系统的规则。
# 关闭firewalld服务
systemctl stop firewalld
systemctl disable firewalld

# 关闭iptables服务
systemctl stop iptables
systemctl disable iptables
  1. [所有节点 - 禁用selinux]
    selinux是linux系统下的一个安全服务,如果不关闭它,在安装集群中会产生各种各样的奇葩问题。
  • 使用vim编辑 /etc/selinux/config
# 编辑 /etc/selinux/config
vim /etc/selinux/config

Kubernetes 如何管理多个服务器 kubernetes搭建集群_云原生_02

  • 使用下方指令重启主机;
# 重启主机
shutdown -r now
  1. [所有节点 - 禁用swap分区]
    swap分区指的是虚拟内存分区,它的作用是物理内存使用完,之后将磁盘空间虚拟成内存来使用,启用swap设备会对系统的性能产生非常负面的影响,因此kubernetes要求每个节点都要禁用swap设备,但是如果因为某些原因确实不能关闭swap分区,就需要在集群安装过程中通过明确的参数进行配置说明;
  • 使用vim编辑 /etc/fstab
# 编辑/etc/fstab
vim /etc/fstab

Kubernetes 如何管理多个服务器 kubernetes搭建集群_容器_03

  • 使用下方指令重启主机;
# 重启主机
shutdown -r now
  1. [所有节点 - 修改Linux的内核参数]
  • 使用vim创建 /etc/sysctl.d/kubernetes.conf
vim /etc/sysctl.d/kubernetes.conf

并在其中添加如下配置,并通过:wq保存修改;

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
  • 输入下方指令重新加载配置;
# 重新加载配置
sysctl -p

# 加载网桥过滤模块
modprobe br_netfilter
  1. [所有节点 - 配置ipvs功能]
    在Kubernetes中Service有两种带来模型,一种是基于iptables的,一种是基于ipvs的两者比较的话,ipvs的性能明显要高一些,但是如果要使用它,需要手动载入ipvs模块;
# 1.安装ipset和ipvsadm
yum install ipset ipvsadm -y

# 2.添加需要加载的模块写入脚本文件
cat <<EOF> /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF

# 3.为脚本添加执行权限
chmod +x /etc/sysconfig/modules/ipvs.modules

# 4.执行脚本文件
/bin/bash /etc/sysconfig/modules/ipvs.modules
  1. [所有节点 - 安装Docker]
# 1.下载Docker镜像源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

# 2.查看当前镜像源中支持的docker版本
yum list docker-ce --showduplicates

# 3.安装特定版本的docker-ce
# 必须添加参数--setopt=obsoletes=0,否则yum会自动安装更高版本
yum install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7 -y

# 4.添加配置文件
# Docker 在默认情况下使用Vgroup Driver为cgroupfs,而Kubernetes推荐使用systemd来替代cgroupfs
mkdir /etc/docker
cat <<EOF> /etc/docker/daemon.json
{
	"exec-opts": ["native.cgroupdriver=systemd"],
	"registry-mirrors": ["https://kn0t2bca.mirror.aliyuncs.com"]
}
EOF

# 5.启动Docker
systemctl restart docker
systemctl enable docker
  1. [所有节点 - 安装Kubernetes组件]
  • 添加K8S镜像源,通过vim创建 /etc/yum.repos.d/kubernetes.repo
vim /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
  • 安装kubeadm、kubelet和kubectl
yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y
  • 配置kubelet的cgroup,通过vim编辑 /etc/sysconfig/kubelet
vim /etc/sysconfig/kubelet

添加如下配置:

KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"
  • 设置kubelet开机自启
systemctl enable kubelet
  1. [所有节点 - 拉取集群镜像]
# 在安装kubernetes集群之前,必须要提前准备好集群需要的镜像,所需镜像可以通过下面命令查看
kubeadm config images list

# 下载镜像
# 此镜像kubernetes的仓库中,由于网络原因,无法连接,下面提供了一种替换方案
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
  1. [Master - 安装网络插件]
  • 输入下方指令安装网络插件;
# 安装下方指令安装网络插件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
  • 通过vim创建并配置文件 /etc/cni/net.d/10-flannel.conf
# 逐级创建目录
mkdir /etc/cni
mkdir /etc/cni/net.d

# 创建配置文件
vim /etc/cni/net.d/10-flannel.conf
{
    "name":"cbr0",
    "cniVersion":"0.3.1",
    "type":"flannel",
    "deledate":{
        "hairpinMode":true,
        "isDefaultGateway":true
    }
}
  • 重置kubeadm,重启机器
# 在master节点之外的节点进行操作
kubeadm reset

# 重启机器
shutdown -r now
  1. [Master - 将k8s的Master与本机绑定]
# 添加环境变量
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile

# 使新添加的环境变量生效
source /etc/profile
  1. [Master - 创建集群]
    在Master节点执行下方指令,注意替换 **–apiserver-advertise-address **参数的值为Master机器的IP地址
kubeadm init \
	--apiserver-advertise-address=192.168.245.174 \
	--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

随后会输出加入集群的指令,我们将其记录起来,后续Worker节点加入集群时需要用到;

Kubernetes 如何管理多个服务器 kubernetes搭建集群_kubernetes_04

  1. [Worker1 - 加入集群]
  • Worker1节点输入下方指令进行各项网络配置,随后重启服务器;
# 打开IP转发功能
echo "1" > /proc/sys/net/ipv4/ip_forward

# 重置kubeadm
kubeadm reset -y

# 其他网络配置
systemctl stop kubelet
systemctl stop docker
rm -rf /var/lib/cni/
rm -rf /var/lib/kubelet/*
rm -rf /etc/cni/
ifconfig cni0 down
ifconfig flannel.1 down
ifconfig docker0 down
ip link delete cni0
ip link delete flannel.1
# 重启kubelet
systemctl restart kubelet
# 重启docker
systemctl restart docker

# 重启服务器
shutdown -r now
  • 复制方才创建集群时输出的指令,在Worker1节点中执行以加入集群:
# SHA256的值是各有不同的
kubeadm join 192.168.245.174:6443 --token iq6c98.d621qyvp9652ix2c \
    --discovery-token-ca-cert-hash sha256:d872f1a0656a172e14f95231dd3xxxxxxxxxxxxxxxebadab11cb1a95954f0ec7

Kubernetes 如何管理多个服务器 kubernetes搭建集群_kubernetes_05

  1. [Master - 重新部署网络]

# 重新部署网络
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
  1. [Master - 查看结果]
kubectl get nodes