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

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.mzph.cn/bicheng/16264.shtml

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

相关文章

面试题·栈和队列的相互实现·详解

A. 用队列实现栈 用队列实现栈 实现代码如下 看着是队列&#xff0c;其实实际实现更接近数组模拟 typedef struct {int* queue1; // 第一个队列int* queue2; // 第二个队列int size; // 栈的大小int front1, rear1, front2, rear2; // 两个队列的首尾指针 } MyS…

6.Redis之String命令

1.String类型基本介绍 redis 所有的 key 都是字符串, value 的类型是存在差异的~~ 一般来说,redis 遇到乱码问题的概率更小~~ Redis 中的字符串,直接就是按照二进制数据的方式存储的. (不会做任何的编码转换【讲 mysql 的时候,知道 mysql 默认的字符集, 是拉丁文,插入中文…

Jenkins--从入门到入土

Jenkins–从入门到入土 文章目录 Jenkins--从入门到入土〇、概念提要--什么是CI/DI&#xff1f;1、CI&#xff08;Continuous Integration&#xff0c;持续集成&#xff09;2、DI&#xff08;DevOps Integration&#xff0c;DevOps 集成&#xff09;3、解决的问题 一、Jenkins安…

world machine学习笔记(4)

选择设备&#xff1a; select acpect&#xff1a; heading&#xff1a;太阳的方向 elevation&#xff1a;太阳的高度 select colour&#xff1a;选择颜色 select convexity&#xff1a;选择突起&#xff08;曲率&#xff09; select height&#xff1a;选择高度 falloff&a…

用常识滚雪球:拼多多的内生价值,九年的变与不变

2024年5月22日&#xff0c;拼多多公布了今年一季度财报&#xff0c;该季度拼多多集团营收868.1亿元&#xff0c;同比增长131%&#xff0c;利润306.0亿&#xff0c;同比增长了202%&#xff0c;数据亮眼。 市场对拼多多经历了“看不见”、“看不懂”、“跟不上”三个阶段。拼多多…

Vue.js条件渲染与列表渲染指南

title: Vue.js条件渲染与列表渲染指南 date: 2024/5/26 20:11:49 updated: 2024/5/26 20:11:49 categories: 前端开发 tags: VueJS前端开发数据绑定列表渲染状态管理路由配置性能优化 第1章&#xff1a;Vue.js基础与环境设置 1.1 Vue.js简介 Vue.js (读音&#xff1a;/vju…

SwiftUI中的Slider的基本使用

在SwiftUI中&#xff0c;可以使用Slider视图创建一个滑动条&#xff0c;允许用户从范围中选择一个值。通过系统提供的Slider&#xff0c;用起来也很方便。 Slider 先看一个最简单的初始化方法&#xff1a; State private var sliderValue: Float 100var body: some View {V…

ollama 使用,以及指定模型下载地址

ollama windows 使用 官网&#xff1a; https://ollama.com/ windows 指定 models 下载地址 默认会下载在C盘 &#xff0c;占用空间 在Windows系统中&#xff0c;可以通过设置环境变量OLLAMA_MODELS来指定模型文件的下载和存储路径。具体操作步骤如下&#xff1a; 1.打开系统…

【九十四】【算法分析与设计】练习四蛮力法练习,排列问题和组合问题,求解最大连续子序列和问题,求解幂集问题,求解0/1背包问题,求解任务分配问题

求解最大连续子序列和问题 给定一个有n&#xff08;n≥1&#xff09;个整数的序列&#xff0c;要求求出其中最大连续子序列的和。 例如&#xff1a; 序列&#xff08;-2&#xff0c;11&#xff0c;-4&#xff0c;13&#xff0c;-5&#xff0c;-2&#xff09;的最大子序列和为20…

第 33 次CCF认证

1. 词频统计 题目描述 样例输入 代码 #include <bits/stdc.h>using namespace std;int main() {int n,m;cin>>n>>m;vector<int> ans1(m,0),ans2(m,0);while (n --) {int t;cin>>t;vector<int> vis(m1,0);for (int i 1;i < t;i ) {i…

数据结构(五)

数据结构&#xff08;五&#xff09; 常见的排序算法内部排序交换插入选择归并基数 外部排序基于归并的 常见的排序算法 内部排序 交换 冒泡&#xff1a;每一次运行总会将最小的或者最大的放到前面&#xff0c;如果需要交换&#xff0c;一直在交换 快速排序*&#xff1a;经过…

2024最新前端面试八股文【基础篇293题】

⼀、HTML、HTTP、web综合问题 1 前端需要注意哪些SEO 2 <img> 的 title 和 alt 有什么区别 3 HTTP的⼏种请求⽅法⽤途 4 从浏览器地址栏输⼊url到显示⻚⾯的步骤 5 如何进⾏⽹站性能优化 6 HTTP状态码及其含义 7 语义化的理解 8 介绍⼀下你对浏览器内核的理解 9 …

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

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

正运动控制器:视觉纠偏和找孔

一、用户主界面CCD参数设置 通过主界面CCD参数设置&#xff0c;学习如何操作计算相机中心与电批中心的偏移量&#xff0c;以及相机标定的功能。 1、相机中心与电批中心的偏移量计算 1.1、在用户主界面点击CCD参数按钮&#xff0c;进入CCD设置界面。 主界面 CCD参数设置界面 1…

制作电子画册速成攻略,快来试试

​当今社会&#xff0c;数字媒体日益普及&#xff0c;电子画册作为一种崭新的展示方式&#xff0c;受到了越来越多人的青睐。它不仅形式新颖&#xff0c;互动性强&#xff0c;而且制作起来也并不复杂。想知道如何快速掌握制作电子画册的技巧吗&#xff1f;我来教你吧。 接下来&…

推荐13款常用的Vscode插件,提高前端日常开发效率

1. Live Server Live Server 插件是一个用于前端开发的扩展&#xff0c;它的主要作用是提供一个本地开发服务器&#xff0c;以便实时预览和调试网页应用程序。其最大特点在于热重载&#xff0c;即开发者可实时预览代码效果。 因为Live Server 允许开发者在浏览器中实时预览您正…

Llama 3没能逼出GPT-5!OpenAI怒“卷”To B战场,新企业级 AI 功能重磅推出!

Meta 是本周当之无愧的AI巨星&#xff01;刚刚推出的 Llama 3 凭借着强大的性能和开源生态的优势在 LLM 排行榜上迅速跃升。 按理说&#xff0c;Llama 3在开源的状态下做到了 GPT-3.7 的水平&#xff0c;必然会显得用户&#xff08;尤其是企业用户&#xff0c;他们更具备独立部…

C#调用HttpClient.SendAsync报错:System.Net.Http.HttpRequestException: 发送请求时出错。

C#调用HttpClient.SendAsync报错&#xff1a;System.Net.Http.HttpRequestException: 发送请求时出错。 var response await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken);问题出在SSL/TLS&#xff0c;Windows Server 2012不支持…

Vue3解决“找不到模块“@/components/xxx.vue”或其相应的类型声明”

文章目录 前言背景问题描述解决方案总结 前言 在使用 Vue 3 开发项目时&#xff0c;遇到“找不到模块 ‘/components/xxx.vue’ 或其相应的类型声明”的错误是一个常见问题。这通常与 TypeScript 和模块解析相关的配置不当有关。本文将详细介绍如何解决此问题&#xff0c;确保…

2024-6-遥远的救世主

2024-6-遥远的救世主 2024-4-18 豆豆 fatux&#xff1a; 2021.5.26 看完电视剧《天道》之后购买本书&#xff0c;断断续续一直没有读完。 非常好奇&#xff0c;一个什么样的作者能写出如此奇书。老丁&#xff0c;一个智者&#xff0c;智者是多么孤独&#xff0c;因为找不到同…