欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > 【Kubernetes实战】Kubernetes集群搭建(虚拟机环境,一主两从)

【Kubernetes实战】Kubernetes集群搭建(虚拟机环境,一主两从)

2024/10/25 3:53:28 来源:https://blog.csdn.net/Cherry0030/article/details/142925711  浏览:    关键词:【Kubernetes实战】Kubernetes集群搭建(虚拟机环境,一主两从)

目录

  • 一、 以Node1节点为例创建虚拟机
  • 二、 环境初始化
  • 三、集群所需组件安装
    • 1. docker(18.06.3)
    • 2. 安装Kubernetes组件
  • 四、安装Kubernetes集群
    • 1. 准备集群镜像
    • 2. 集群初始化
    • 3. 安装网络插件
  • 五、环境测试(服务部署)

集群规模:一主二从(一个master节点,两个node节点)。
虚拟机:VMware Workstation
节点环境:

节点名称操作系统IP地址配置
mastercentos7.5192.168.12.1002核CPU,2G内存,40G硬盘
node1centos7.5192.168.12.1012核CPU,2G内存,40G硬盘
node2centos7.5192.168.12.1022核CPU,2G内存,40G硬盘

一、 以Node1节点为例创建虚拟机

镜像文件下载地址。
在这里插入图片描述
如何安装虚拟机详见安装虚拟机。

打开Vmware Workstation,点击创建新的虚拟机
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里所设置的40G是一个最大限度,实际使用时用多少占多少,不是一下给你40G。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以把这两个设备删除。
在这里插入图片描述
为虚拟机添加操作系统镜像,之前在创建虚拟机时我们创建的是一个空的虚拟机。这里的ISO映像文件就选择最初下载好的CentOS-7-x86_64-DVD-1804.iso。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
不想检测也可以按Esc键跳过检测。
在这里插入图片描述
在这里插入图片描述
灰的是正在检测,等一会,变成高亮以后才能编辑。
在这里插入图片描述
在这里插入图片描述
完成后再等一会,等他变成高亮状态。
在这里插入图片描述
在这里插入图片描述
会分区的也可以自己分区,但是不推荐,在测试环境中自动分区就够了。
在这里插入图片描述
在这里插入图片描述
再进行IPv4设置。这里一定要注意网段的设置!我的是192.168.12.x,查看本机网段方法如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
点击开始安装。此时需要设置密码。设置完后等待安装。
在这里插入图片描述
安装后按提示重启,登陆进去。(关机poweroff)
在这里插入图片描述
至此,node1安装完毕,其余node2与master安装过程除ip地址和主机名不一样除外,其他安装步骤一样。

二、 环境初始化

需要在三台虚拟机上同时进行。因此我们可以使用一个软件叫MobaXterm来在三台主机上同时完成。
MobaXterm安装地址
连接虚拟机教程

在这里插入图片描述
在这里插入图片描述

  1. 检查操作系统版本

Kubenetes集群要求CentOS版本在7.5及以上。

cat /etc/redhat-release

在这里插入图片描述

  1. 主机名解析

为方便后面集群节点间直接调用,在此配置主机名解析,企业中推荐使用内部的DNS服务器。编辑三台服务器的/etc/hosts,添加如下内容:然后保存退出

vim /etc/hosts# 在最后添加如下内容
192.168.12.100 master
192.168.12.101 node1
192.168.12.102 node2

在这里插入图片描述
可以自己测试一下是否设置成功,推出多台模式,选择其中一台(以master为例),看看能不能ping通:
在这里插入图片描述

  1. 时间同步

Kubernetes要求集群中节点时间必须精确一致,因此使用chronyd服务从网络同步时间,企业中建议配置内部的时间同步服务器

# 启动chronyd服务
1. systemctl start chronyd
# 设置chronyd服务开机自启
2. systemctl enable chronyd
# chronyd服务启动稍等几秒钟,使用date命令验证时间
3. date

在这里插入图片描述设置成功

  1. 禁用iptables和firewalld服务

Kubenetes和Docker在运行过程中会产生大量的iptables规则,为不让系统规则与他们混淆,直接关闭系统的规则。

1. systemctl stop firewalld
2. systemctl disable firewalld
3. systemctl stop iptables

在这里插入图片描述

  1. 禁用selinux

selinux是linux系统的一个安全服务,如果不关闭它,在集群安装中会出现各种奇葩问题。

# 可以先查看是否开启
getenforce
# 临时关闭方式(重启后又会生效,不建议)
setenforce 0
# 编辑/etc/selinux/config文件,修改SELINUX的值为disabled
# 注意修改完毕后,需要重启linux服务
vim /etc/selinux/config

在这里插入图片描述
在这里插入图片描述
发现修改之后依旧是开启状态,因为要重启。(后面步骤做完统一重启,先不在这一步重启)

  1. 禁用swap分区

swap分区是指虚拟内存分区,作用在物理内存使用完后,将磁盘空间虚拟成内存来使用。启用swap会对系统性能产生较大负面影响,因此Kubernetes要求每个节点禁用swap设备。
如果因为某些原因无法关闭swap分区,需要在集群安装过程中通过明确的参数进行配置说明(自行搜索 )。

# 编辑分区配置文件/etc/fstab,注释掉swap分区这一行
# 注意修改完毕后需要重启linux
vim /etc/fstab

在这里插入图片描述

  1. 修改Linux内核参数

修改Linux内核参数,添加网桥过滤和地址转发功能

# 编辑/etc/sysctl.d/kubernetes.conf文件(新建一个新文件),添加如下配置
vim /etc/sysctl.d/kubernetes.confnet.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1# 重新加载配置,使文件生效
sysctl -p
# 加载网桥过滤模块
modprobe br_netfilter
# 查看网桥过滤模块是否加载成功
lsmod | grep br_netfilter

在这里插入图片描述
在这里插入图片描述

  1. 配置ipvs功能

Kubernetes中service有两种代理模型,一种基于iptables,一种基于ipvs,二者比较的话,ipvs性能更高,因此需要手动载入ipvs模块。

第一次使用yum中出现了一点小问题(估计有梯子不会出现),问题及解决方法:入口。

# 安装ipset和ipvsadm
1. 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
# 查看对应模块是否加载成功
5. lsmod | grep -e ip_vs -e nf_conntrack_ipv4

在这里插入图片描述
在这里插入图片描述

  1. 重启服务器

上面所有任务完成后,重启Linux系统。

reboot

重启后检查以上面的操作是否生效了:

1. getenforce  # 检查selinux
2. free -m # 通过查看内存分配来检查seap是否已经禁用

在这里插入图片描述

三、集群所需组件安装

需要在每台服务器上分别安装docker(18.06.3)、kubeadm(1.17.4)、kubelet(1.17.4)、kubelet(1.17.4)。

1. docker(18.06.3)

# 1. 切换镜像源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
# 2. 查看当前镜像源中支持的docker版本
# 看看有没有18.06.3.ce-3.el7这个版本(1. 比较稳定;2. 对一些参数做了初始化而不需要配置)
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在默认情况下使用的Cgroups 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  # 设置开机自启动
# 6. 检查docker状态和版本
docker version

过程记录:
第一步中间是-O,大写O,之前试过0和o都无法获取!!
在这里插入图片描述
第二步结果:
在这里插入图片描述
第三步中间有一个warnning(三台主机都有):
在这里插入图片描述
第四步检查一下文件:
在这里插入图片描述
第五步:
在这里插入图片描述

2. 安装Kubernetes组件

# 由于Kubernetes镜像源在国外,速度比较慢,因此需要切换成国内的镜像源
# 编辑/etc/yum.repos.d/kubernetes.repo,添加如下配置
# 如果yum源报错,将baseurl的http改成https,或者去阿里云镜像站复制最新的地址
vim /etc/yum.repos.d/kubernetes.repo[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpghttp://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
# 编辑/etc/sysconfig/kubelet,添加如下配置(原来这个文件是有内容的,删掉,添加如下内容)
vim /etc/sysconfig/kubeletKUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"
# 设置kubelet开机自启
systemctl enable kubelet
# 这里仅设置了开机自启没有启动,是因为在kubernetes启动时会自动启动kubelet

四、安装Kubernetes集群

1. 准备集群镜像

在安装Kubernetes之前,必须要准备好集群需要的镜像,通过如下命令查看集群所需镜像:

kubeadm config images list

在这里插入图片描述
显示最新的版本是1.31.1,给出的建议版本是1.17.17,为与之前保持同步,仍旧用1.17.4。定义要下载的镜像:

images=(kube-apiserver:v1.17.4kube-controller-manager:v1.17.4kube-scheduler:v1.17.4kube-proxy:v1.17.4pause:3.1etcd:3.4.3-0coredns: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

docker images查看镜像:
在这里插入图片描述

2. 集群初始化

  • 注意:以下操作只需要在master节点上进行
# 创建集群
kubeadm init \
--kubernetes-version=v1.17.4 \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12 \
--apiserver-advertise-address=192.168.12.100

在这里插入图片描述

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 join 192.168.12.100:6443 --token 3sth53.mqefyjvempzkqqp7 \--discovery-token-ca-cert-hash sha256:6045d94a76bf7f1c2d31715f865e1255003aa37b4ce8a2c49352a6fbbce3bb68

两个黄框框中间的命令是配置网络的。复制下来备用。

# You should now deploy a pod network to the cluster.
# Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
#   https://kubernetes.io/docs/concepts/cluster-administration/addons/

使用命令kubectl get nodes查看当前集群情况:
在这里插入图片描述
当前集群中只有一个master节点。现在去node1中去运行kubeadm join那条命令:
在这里插入图片描述
现在再回到master查看集群状态:新增了我们刚刚加入的node1节点。
在这里插入图片描述
再到node2中运行一下kubeadm join那条命令,将node2也加入到集群中:
在这里插入图片描述
在这里插入图片描述
此时集群中节点的状态都是NotReady,是因为没有配置网络,如想使其变成ready状态,则需安装网络插件。查看pods也可以发现coredns也处于pending状态,因为没有网络。

3. 安装网络插件

kubernetes支持多种网络插件:flannel、calico、canal等,任选一种使用,本文选择flannel。

以下操作只在master节点上执行即可,插件使用的是DaemonSet控制器,他会在每个节点上都运行。

# 下载配置文件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 配置
kubectl apply -f  kube-flannel.yml
# 查看集群pod
kubectl get pods -n kube-system

注意,在安装过程中涉及到拉取镜像,因此我们需要修改一下docker的镜像源,否则会出现拉取不成功的错误(Init:ImagePullBackOff):

1. vim /etc/docker/daemon.json
2. # 修改registry-mirrors部分
"registry-mirrors": ["https://dockerpull.com","https://docker.m.daocloud.io","https://dockerproxy.com","https://dockerhub.icu","https://hub.rat.dev","https://docker.1panel.live","https://registry.docker-cn.com","http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn"]
3. systemctl restart docker

此时发现,安装了网络插件后,当前pods中并没有flannel的pod:
在这里插入图片描述
因为他单独创建了一个命名空间:

kubelet get ns

在这里插入图片描述
在flannel的命名空间中查看其pod状态:

kubectl get pods -n kube-flannel

在这里插入图片描述
此时发现,有两个flannel的pod没有运行成功?原来是因为只修改了master节点的docker镜像源,node1和node2忘记修改了!因此分别进入node1和node2节点,重复上述修改镜像源步骤:
在这里插入图片描述
在这里插入图片描述
修改完毕后等待几分钟,重新回到master节点查看flannel的pods:全部运行成功!
在这里插入图片描述
查看node状态:ready成功!
在这里插入图片描述
至此,kubernetes集群搭建完毕,下面就可以在其中部署服务了。

五、环境测试(服务部署)

部署一个服务来测试一下集群是否正常工作。以nginx服务为例:

  1. 部署nginx
kubectl create deployment nginx --image=nginx:1.14-alpine

在这里插入图片描述

  1. 暴露端口,以便可以通过外部浏览器访问
kubectl expose deployment nginx --port=80 --type=NodePort

在这里插入图片描述

  1. 查看服务状态
kubectl get pod,svc # service

在这里插入图片描述
31248这个端口号就是暴露给外界的,可以通过访问服务器ip(192.168.12.100)+端口号来访问到这个服务,通过这个套接字转换到nginx中(80端口)。在浏览器中输入这个套接字:
在这里插入图片描述
说明这个服务已经正常提供。

参考:B站视频

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com