Kubernetes(K8S) 集群环境搭建指南

news2024/10/5 22:25:04

Kubernetes(简称K8s)是一个开源的容器编排平台,旨在自动化部署、扩展和管理容器化应用。K8S环境搭建过程比较复杂,涉及到非常多组件安装和系统配置,本文将会详细介绍如何在服务器上搭建好Kubernetes集群环境。

 

在学习和使用Kubernetes过程中,K8S环境搭建是新手非常头疼的一环,K8S提供了多种安装的方式包括Minikube、kubeadm、Rancher、sealos等,目前比较常见的是采用kubeadm和sealos方式进行安装,sealos相比kubeadm更加适合入门学习者,只需要几条命令就可以完成整个集群的部署。而Kubeadm适用于生产环境和复杂场景,针对希望有更多个性化定制的用户,但安装和维护复杂度较高。本文包含了kubeadm和sealos两种方式的安装,作为新手更加推荐使用sealos。

集群环境准备

1、集群环境说明

要求条件:

  1. 一台或多台Linux系统机器,推荐使用的是centos 7.5版本或以上

  2. 每台Linux至少有2GB的内存和2个CPU、硬盘30GB

  3. 所有的机器可以相互ping通

集群结构:

  • kubernetes集群主要包含master(主控节点)和node(工作节点)组成,master和node一般是多对多或者一对多的模式,

  • 为了学习使用这里选择1个master节点和多个node节点(这里一个节点相当于就是一台Linux系统主机)

    部署集群图如下:

图片

这里为了学习方便,采用了在本地电脑安装虚拟软件VMware(当然也可以使用VitualBox),然后再虚拟机VMware中安装centos,虚拟机安装centos过程省略,大家可以自行百度搜索相关教程,这里分别这里分别安装好master、node1、node2虚拟机:

图片

2、配置节点主机名

执行以下命令,依次配置各个节点主机名,这里是为了方便后面服务的访问

# master节点[root@localhost ~]# hostnamectl set-hostname master && bash# node1节点[root@localhost ~]# hostnamectl set-hostname node1 && bash# node2节点[root@localhost ~]# hostnamectl set-hostname node2 && bash

3、配置节点网络

进入VMware -> 设置 ->虚拟网络编辑器,查看VMnet8对应的子网IP地址:

图片

分别编辑各个节点的网络配置文件

[root@master ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33

修改以下关键项

master节点:

ONBOOT=yesIPADDR=192.168.10.100GATEWAY=192.168.10.2DNS1=114.114.114.114

node1节点:

ONBOOT=yesIPADDR=192.168.10.101GATEWAY=192.168.10.2DNS1=114.114.114.114

node2节点:

ONBOOT=yesIPADDR=192.168.10.102GATEWAY=192.168.10.2DNS1=114.114.114.114

4、修改hosts文件

编辑/etc/hosts文件,配置主机名和IP地址的映射解析,这一步是为了方便节点间的相互访问,分别在三台主机下添加以下的配置:​​​​​​​

192.168.10.100 master192.168.10.101 node1192.168.10.102 node2

图片

5、测试虚拟机网络

通过Xshell ssh工具去连接对应的节点主机(其他的ssh连接工具都可以)

测试各个节点主机是否能够访问外网:

图片

测试各个节点主机之间是否能够相互ping通

图片

集群环境初始化

1、关闭防火墙

在三个节点上分别执行​​​​​​​

[root@master ~]# systemctl stop firewalld[root@master ~]# systemctl disable firewalld

2、关闭SELINUX

在三个节点上分别执行​​​​​​​

# 编辑 /etc/selinux/config 文件,修改SELINUX的值为disableSELINUX=disabled

注意:生效需要重启linux

3、关闭swap分区

在三个节点上分别执行​​​​​​​

# 编辑/etc/fstab 文件,注释掉 /dev/mapper/centos-swap swap 这一行# /dev/mapper/centos-swap swap

注意:生效需要重启linux

4、修改内核参数

在三个节点上分别执行​​​​​​​

# 增加/etc/sysctl.d/kubernetes.conf 文件,添加如下配置:net.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1net.ipv4.ip_forward = 1# 重新加载配置[root@master ~]# sysctl -p# 加载网桥过滤模块[root@master ~]# modprobe br_netfilter# 查看网桥过滤模块是否加载成功[root@master ~]# lsmod | grep br_netfilter

出现如下结果代表OK:

图片

5、配置时间同步

在三个节点上分别执行

[root@master ~]# systemctl start chronyd[root@master ~]# systemctl enable chronyd[root@master ~]# date

6、加载ipvs模块

在三个节点上分别执行​​​​​​​

# 1.安装ipset和ipvsadm[root@master ~]# yum install ipset ipvsadm -y# 2.添加需要加载的模块写入脚本文件[root@master ~]# cat <<EOF> /etc/sysconfig/modules/ipvs.modules# 将以下脚本内容复制到命令行回车即可#!/bin/bashmodprobe -- ip_vsmodprobe -- ip_vs_rrmodprobe -- ip_vs_wrrmodprobe -- ip_vs_shmodprobe -- nf_conntrack_ipv4EOF

图片

# 3.为脚本添加执行权限[root@master ~]# chmod +x /etc/sysconfig/modules/ipvs.modules# 4.执行脚本文件[root@master ~]# /bin/bash /etc/sysconfig/modules/ipvs.modules# 5.查看对应的模块是否加载成功[root@master ~]# lsmod | grep -e ip_vs -e nf_conntrack_ipv4

图片

以上操作完成之后记得分别重启Linux主机!!!

sealos方式安装K8S集群

1、下载sealos

wget https://github.com/labring/sealos/releases/download/v4.3.7/sealos_4.3.7_linux_amd64.tar.gz

2、解压赋予权限

tar zxvf sealos_4.3.7_linux_amd64.tar.gz sealos && chmod +x sealos && mv sealos /usr/bin

3、安装K8S集群

sealos run labring/kubernetes:v1.25.0 labring/helm:v3.8.2 labring/calico:v3.24.1 \--masters 192.168.10.100 \--nodes 192.168.10.101,192.168.10.102 -p root 

参数说明:

  • --masters master 节点地址列表

  • –nodes node 节点地址列表

  • -p ssh登录密码(如果配置了ssh免密则不需要加-p参数)

4、查看连接状态

在master节点上面执行kubectl get nodes命令查看master和node节点状态

[root@master ~]# kubectl get nodes

这里会显示 NotReady ,代表未就绪状态:

图片

需要等待一会儿,节点状态会自动被修改为Ready:

图片

kubeadm方式安装K8S集群

1、安装Docker

# 1、切换镜像源[root@master ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
# 2、查看当前镜像源中支持的docker版本[root@master ~]# yum list docker-ce --showduplicates
# 3、安装特定版本的docker-ce[root@master ~]# yum install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7 -y
# 4、添加一个配置文件[root@master ~]# mkdir /etc/docker[root@master ~]# cat <<EOF> /etc/docker/daemon.json{  "exec-opts": ["native.cgroupdriver=systemd"],  "registry-mirrors": ["https://kn0t2bca.mirror.aliyuncs.com"]}EOF
# 5、启动dokcer[root@master ~]# systemctl restart docker[root@master ~]# systemctl enable docker

2、安装Kubernetes组件

​​​​​​​

# 1、由于kubernetes的镜像在国外,速度比较慢,这里切换成国内的镜像源,编辑/etc/yum.repos.d/kubernetes.repo,添加下面的配置[kubernetes]name=Kubernetesbaseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64enabled=1gpgchech=0repo_gpgcheck=0gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg      http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
# 2、安装kubeadm、kubelet和kubectl[root@master ~]# yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y
# 3、配置kubelet的cgroup,编辑/etc/sysconfig/kubelet, 添加下面的配置KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"KUBE_PROXY_MODE="ipvs"
# 4、设置kubelet开机自启[root@master ~]# systemctl enable kubelet

3、准备集群镜像​​​​​​​

# 1、在安装kubernetes集群之前,必须要提前准备好集群需要的镜像,所需镜像可以通过下面命令查看[root@master ~]# kubeadm config images list
# 2、下载镜像,此镜像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

4、master节点集群初始化

在master节点上面执行kubeadm init命令进行集群初始化​​​​​​​

# 1、创建集群,这里192.168.119.100 指定为master主机的IP地址,其他的配置不用修改[root@master ~]# kubeadm init \  --kubernetes-version=v1.17.4 \  --service-cidr=10.96.0.0/12 \  --pod-network-cidr=10.244.0.0/16 \  --apiserver-advertise-address=192.168.119.100 # 2、创建必要文件[root@master ~]# mkdir -p $HOME/.kube[root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config[root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config

5、node节点连接master节点

在node1和node2节点上分别去连接master节点集群

kubeadm join 192.168.10.100:6443 --token c78u0z.tqyd4xh4tc2s084f     --discovery-token-ca-cert-hash sha256:783e7453cb11db521a7fc3661caa0ac5cf6c6fb153d7d95d222882af7aae94c7

6、查看连接状态

在master节点上面执行kubectl get nodes命令查看master和node节点状态

[root@master ~]# kubectl get nodes

这里会显示 NotReady ,代表未就绪状态,我们还需要安装网络插件

图片

7、安装网络插件

在master节点上安装网络插件​​​​​​​

# 1、下载flannel网络资源配置文件[root@master ~]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 2、启动flannel网络[root@master ~]# kubectl apply -f kube-flannel.yml
# 3、再次查看节点状态[root@master ~]# kubectl get nodes

这里启动flannel网络之后一般需要等待一会儿,节点状态会被修改为Ready:

图片

集群环境测试​​​​​​​

# 1、创建nginx服务kubectl create deployment nginx  --image=nginx:1.14-alpine
# 2、暴露端口kubectl expose deployment nginx --port=80 --type=NodePort
# 3、查看pod和服务信息kubectl get pod,service

图片

在本地电脑打开浏览器测试nginx是否能够正常访问:

图片


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MybatisPlus中自定义sql

背景 在开发过程中&#xff0c;可能会出现除了where条件&#xff0c;其它sql比较复杂&#xff0c;这时候就需要用到自定义sql了。 问题 如&#xff1a;用户状态为正常的数据年龄加一&#xff08;所有用户年龄加一&#xff09; 数据库中sql&#xff1a; UPDATE USER SET…

Go GORM介绍

GORM 是一个功能强大的 Go 语言 ORM&#xff08;对象关系映射&#xff09;库&#xff0c;它提供了一种方便的方式来与 SQL 数据库进行交互&#xff0c;而不需要编写大量的 SQL 代码。 GORM的关键特性 全功能的ORM&#xff1a;支持几乎所有的ORM功能&#xff0c;包括模型定义、基…

【漏洞复现】英飞达医学影像存档与通信系统 WebJobUpload 任意文件上传漏洞

0x01 产品简介 英飞达医学影像存档与通信系统 Picture Archiving and Communicaton System&#xff0c;它是应用在医院影像科室的系统&#xff0c;主要的任务就是把日常产生的各种医学影像(包括核磁&#xff0c;CT&#xff0c;超声&#xff0c;各种X光机&#xff0c;各种红外仪…

如何编辑 PDF 中的文本?4个有效的编辑PDF方法

PDF 文件可以轻松打开和查看&#xff0c;但修改要复杂得多 - 尤其是在 PDF 中的文本编辑方面。 知道如何离线编辑 PDF 中的文本对于任何需要快速更改而无需在线加载文档或担心安全问题的人来说都非常有益。它使用户能够更好地控制他们的文档&#xff0c;并有更广泛的字体和图形…

详解 Scala 的集合类型

一、集合简介 1. 类型 序列 Seq&#xff1a;类似于 Java 中的 List 接口集 Set&#xff1a;类似于 Java 中的 Set 接口映射 Map&#xff1a;类似于 Java 中的 Map 接口所有的集合都扩展自 Iterable 特质 2. 不可变集合 位于 scala.collection.immutable 包&#xff0c;指该集…

【Linux】fork和exec中的信号继承探索

fork和exec中的信号继承探索 一、结论二、代码验证2.1 代码编写2.2 代码执行 三、linux源码验证四、APUE中的验证五、其他 一、结论 fork时子进程会继承父进程的信号处理方式&#xff0c;包括父进程设置信号为SIG_DFL或SIG_IGN或捕获后设置自定义处理函数。exce时子进程会继承…

有些错误,常犯常新、常新常犯:记录一个使用element-plus的tooltip组件的错误

使用element-plus的tooltip组件&#xff0c;最开始的写法是这样的&#xff1a; <el-tooltipclass"box-item"effect"dark"content"tooltip content" ><el-button v-if"isDisabled" :underline"false" type"pr…

一文扫尽Nas常用Docker软件

NAS&#xff08;Network Attached Storage&#xff0c;网络附加存储&#xff09;设备上的Docker软件选择取决于您的具体需求和用途。以下是一些NAS上常用的Docker软件推荐&#xff1a; Docker管理工具&#xff1a; Watchtower&#xff1a;它可以自动更新Docker容器中的镜像&…

从零开始学Vue3--环境搭建

1.搭建环境 下载nodejs nodejs下载地址 更新npm npm install -g npm 设置npm源&#xff0c;加快下载速度 npm config set registry https://registry.npmmirror.com 使用脚手架创建项目 npm create vuelatest 根据你的需要选择对应选项 进入新建的项目下载依赖 npm in…

kaggle竞赛实战3

接前文&#xff0c;本文主要做以下几件事&#xff1a; 1、把前面处理完的几个表拼成一个大表 2、做特征衍生&#xff08;把离散特征和连续特征两两组合得出&#xff09; # In[89]: #开始拼接表 transaction pd.concat([new_transaction, history_transaction], axis0, ignor…

STM32 USART的字符编码(发送器的实现逻辑)

目录 概述 1 字符编码 1.1 USART 字符说明 1.2 字长编程 2 发送器 2.1 字符发送 2.2 可配置的停止位 2.3 配置停止位方法 3 单字节通信 4 中断字符 5 空闲字符 概述 本文主要讲述STM32 USART的发送端功能实现的原理&#xff0c;包括字节编码长度&#xff0c;发送器…

Cyber Weekly #8

赛博新闻 1、微软召开年度发布会Microsoft Build 2024 本周&#xff08;5.22&#xff09;微软召开了年度发布会&#xff0c;Microsoft Build 2024&#xff0c;发布了包括大杀器 Copilot Studio 在内的 50 项更新。主要包括&#xff1a; 硬件层面&#xff1a;与英伟达 & A…

网络空间安全数学基础·群

重点&#xff1a; 1. 群及子群的定义及相关结论 2. 群的判断,子群的判断 3. 群的阶,元素的阶,它们的相互关系 4. 同态,同构,核子群 2.1群的定义 定义&#xff1a;设G是一非空集合。如果在G上定义了一个代数运算&#xff0c;称为乘法&#xff0c;记为ab&#xff0c;而且这个运…

【STL】C++ vector基本使用

目录 一 vector常见构造 1 空容器构造函数&#xff08;默认构造函数&#xff09; 2 Fill 构造函数 3 Range 构造函数 4 拷贝构造函数 5 C11构造 二 vector迭代器 1 begin && end 2 rbegin && rend 3 补充排序 三 vector 容量操作 1 size 2 resize …

进程信号(1)

目录 一、信号 1.1、生活中的信号 1.2、Linux中的信号 二、信号处理常见方式 三、信号的产生 3.1、简单理解信号的保存和发送 3.2、键盘产生信号 3.3、核心转储 3.4、系统调用接口产生信号 3.4.1、kill 3.4.2、raise 3.4.3、abort 3.5、软件条件产生信号 3.6、硬…

【操作系统】发展与分类(手工操作、批处理、分时操作、实时操作)

2.操作系统发展与分类 思维导图 手工操作阶段&#xff08;此阶段无操作系统&#xff09; 需要人工干预 缺点&#xff1a; 1.用户独占全机&#xff0c;资源利用率低&#xff1b; 2.CPU等待手工操作&#xff0c;CPU利用不充分。 批处理阶段&#xff08;操作系统开始出现&#x…

firewalld 防火墙

firewalld概述 Linux系统防火墙从CentOS7开始的默认防火墙工作在网络层&#xff0c;属于包过滤防火墙 Firewalld和iptables的关系 netfilter 位于Linux内核中的包过滤功能体系称为Linux防火墙的“内核态” firewalld Centos默认的管理防火墙规则的工具称为防火墙的“用…

【C++】右值引用 移动语义

目录 前言一、右值引用与移动语义1.1 左值引用和右值引用1.2 右值引用使用场景和意义1.3 右值引用引用左值及其一些更深入的使用场景分析1.3.1 完美转发 二、新的类功能三、可变参数模板 前言 本篇文章我们继续来聊聊C11新增的一些语法——右值引用&#xff0c;我们在之前就已…

sqli-lib4-6关教程

SERIES-4 输入?id1 输入?id2-1&#xff0c;说明该数据类型为字符型 输入?id1’ 输入?id1"&#xff0c;说明闭合符号为" 输入?id1")– 输入?id1") order by 3– 输入?id1") order by 4– 数据共三列&#xff0c;输入?id-1") union selec…

InfLLM的笔记

文件中提供的代码是一个Python函数chat_loop&#xff0c;它是聊天系统的核心循环。以下是对这段代码逻辑的梳理&#xff1a; 函数定义与参数 chat_loop函数接收多个参数&#xff0c;用于配置聊天模型和聊天环境。参数包括模型路径、设备类型、GPU数量、最大GPU内存、数据类型…