【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站视频

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/455535.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云计算实验1——基于VirtualBox的Ubuntu安装和配置

实验步骤 1、VirtualBox的安装 本实验使用VirtualBox-7.0.10 进行演示。对于安装包&#xff0c;大家可以前往 VirtualBox官网下载页面(https :/ / www. virtualbox.org/wiki/Downloads)下载其7.0版本安装包进行安装&#xff0c;或者直接使用QQ群的安装包VirtualBox-7.0.10-15…

数字英文验证码识别 API 对接说明

本文将介绍一种 数字英文验证码识别 API 对接说明&#xff0c;它是基于深度学习技术&#xff0c;可用于识别变长英文数字验证码。输入验证码图像的内容&#xff0c;输出验证码结果。 接下来介绍下 数字英文验证码识别 API 的对接说明。 申请流程 要使用 API&#xff0c;需要…

腾讯地图SDK 手势失效或冲突的解决办法

前言 由于高德地图sdk开始涨价割韭菜了&#xff0c;因此&#xff0c;我司在降本增效的大背景下&#xff0c;需要把高德地图换成腾讯地图。 在更换sdk过程中&#xff0c;踩了一些关于地图手势事件的坑&#xff0c;这里记录下&#xff0c;希望能给遇到同样问题的大佬们一个思路。…

21、基于Firefly-rk3399字符设备驱动寄存器控制LED

文章目录 一、电路分析引脚配置功能(R/W register) 二、RK3399数据手册分析&#xff1a;1、GPIO(General-purpose input/output)介绍&#xff1a;2、CRU(Clock & Reset Unit)介绍查找GPIO相关内容&#xff1a; 3、PMU(Power Management Uni)4、GRF&#xff08;General Regi…

git 报错 SSL certificate problem: certificate has expired

git小乌龟 报错 SSL certificate problem: certificate has expired 场景复现&#xff1a; 原因&#xff1a; 这个错误表明你在使用Git时尝试通过HTTPS进行通信&#xff0c;但是SSL证书已经过期。这通常发生在使用自签名证书或证书有效期已到期的情况下。 解决方法: 1.如果是…

WTN6 E 系列语音芯片 单线时序及示例代码

1. 概述: WTN6 系列为多功能&#xff0c;低功耗&#xff0c;高性能的 CMOS 语音芯片。现有 WTN6020E、WTN6040E、 WTN6080E、WTN6170E 四种芯片&#xff08;语音长度分别为 20s、40s、80s、170s&#xff09;&#xff0c;已投入市场。 音频采样率目前最高可达 32kHz&#xff0…

streamlit 实现 flink SQL运行界面

实现效果 streamlit flink-playground.py 文件如下&#xff1a; import streamlit as st import io import contextlib import sys import os import uuid import subprocess from jinja2 import Templatest.set_page_config(layout"wide")# 设置页面标题 st.title…

SL3160 dcdc150V降压5.1V/1A 车载GPS定位器供电芯片

一、主要特性 宽输入电压范围&#xff1a;SL3160支持10~150V的宽输入电压范围&#xff0c;使其能够适应各种电源电压波动&#xff0c;确保稳定输出。 高效降压转换&#xff1a;该芯片采用先进的电源管理技术&#xff0c;转换效率高达90%以上&#xff0c;降低了散热压力和整体…

点云标注工具开发记录(五)之点云文件加载、视角转换

在Open3D中&#xff0c;通过read方法&#xff0c;我们可以读取不同格式的点云数据&#xff0c;那么&#xff0c;在不使用Open3D的相关接口时&#xff0c;我们就需要自己重写文件读入、加载、渲染展示方法&#xff0c;效果如下&#xff1a; 点云文件读入 首先&#xff0c;我们要…

vue开发的一个小插件vue.js devtools

可打开谷歌商城的情况下&#xff0c;不可打开的可以到极简插件里面去下载 极简插件官网_Chrome插件下载_Chrome浏览器应用商店 搜索vue即可

Flutter仿京东商城APP实战 用户中心基础布局

用户中心界面 pages/tabs/user/user.dart import package:flutter/material.dart; import package:jdshop/utils/zdp_screen.dart; import package:provider/provider.dart;import ../../../store/counter_store.dart;class UserPage extends StatefulWidget {const UserPage…

Maven入门到实践:从安装到项目构建与IDEA集成

目录 1. Maven的概念 1.1 什么是Maven 1.2 什么是依赖管理 1.3 什么是项目构建 1.4 Maven的应用场景 1.5 为什么使用Maven 1.6 Maven模型 2.初识Maven 2.1 Maven安装 2.1.1 安装准备 2.1.2 Maven安装目录分析 2.1.3 Maven的环境变量 2.2 Maven的第一个项目 2.2.1…

古埃及象形文字在线字典

我在个人网站“小孔的埃及学站点”上推出了在线的象形文字字典&#xff0c;总共收罗了将近700条的象形文字&#xff08;词&#xff09;。在线字典的使用方法很简单&#xff0c;在网站各大版块首页的右上方会有如下图所示的查询入口。 点击文本框&#xff0c;输入中文或英文关键…

公交IC卡收单管理系统 assets 信息泄露

0x01 产品描述&#xff1a; 公交IC卡系统是公交一卡通系统核心建设部分&#xff0c;是高时尚、高科技的管理系统&#xff0c;大大提升了公交行业的服务&#xff0c;能让公交企业信息化和电子化打下一个良好的硬件基础和软件基0x02 漏洞描述&#xff1a; 公交IC卡系统在/assets/…

FRIDA-JSAPI:Instruction使用

官方API文档介绍 Instruction.parse(target) 解析内存中 target 地址处的指令。 返回的对象具有的字段&#xff1a; address: 此指令的地址&#xff08;EIP&#xff09;&#xff0c;类型为 NativePointernext: 指向下一条指令的指针&#xff0c;您可以使用 parse() 解析它size…

详解如何使用WGCLOUD监测日志文件

WGCLOUD可以监控日志文件&#xff0c;包括.log、.txt、.out等类型的文件 WGCLOUD既可以监测文件夹下按天生成的日志文件&#xff0c;也可以监控指定的日志文件&#xff0c;非常灵活 我们只需要设置好日志中出现什么关键字符&#xff0c;那么WGCLOUD就可以自动进行这些监控工作…

【react 和 vue】 ---- 实现组件的递归渲染

1. 需求场景 今天遇到了一个需求&#xff0c;就是 HTML 的递归渲染。问题就是商品的可用时间&#xff0c;使用规则等数据是后端配置&#xff0c;然后配置规则则是可以无限递归的往下配置&#xff0c;可以存在很多级。后端实现后&#xff0c;数据返回前端&#xff0c;就需要前端…

一招教你解决Facebook广告账号问题

这段时间&#xff0c;我们写了很多文章来探讨Facebook的广告账户问题&#xff1a;《Facebook被封号该怎么办》《Facebook二不限、三不限账号是什么》《Facebook海外户&#xff08;三不限&#xff09;和账单户该如何选择》《如何区分真假Facebook三不限海外户》相信看过这些文章…

【传知代码】智能推荐与隐私保护的融合(论文复现)

本文将深入探讨这样一种系统的设计理念、关键技术以及其在实际应用中的潜力和优势。通过探索如何在保证个性化推荐效果的同时&#xff0c;有效保护用户隐私&#xff0c;我们将揭示出一种新兴的技术趋势&#xff0c;为未来智能化应用的发展开辟新的可能性。 目录 概述 项目设计…

基于SSM+小程序的就业管理系统(就业1)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 学生实习与就业管理系统的设计与实现管理员、辅导员管理、企业管理、工作管理人、用户管理5个角色。 1、管理员实现了基础数据管理、辅导员管理、企业管理、工作管理人管理、公告信息管理…