当前位置: 首页 > news >正文

Kubernetes(K8S)集群部署实战

目录

  • 一、准备工作
    • 1.1、创建3台虚拟机
      • 1.1.1、下载虚拟机管理工具
      • 1.1.2、安装虚拟机管理工具
      • 1.1.3、下载虚Centos镜像
      • 1.1.4、创建台个虚拟机
      • 1.1.5、设置虚拟机网络环境
    • 1.2、虚拟机基础配置(3台虚拟机进行相同处理)
      • 1.2.1、配置host
      • 1.2.2、关闭防火墙
      • 1.2.3、将桥接的IPv4流量传递到iptables的链
  • 二、Docker安装
  • 三、Kubernetes安装
    • 3.1、配置阿里云yum源
    • 3.2、安装
    • 3.3、matser节点初始化
    • 3.4、创建文件夹、复制文件并给予权限
    • 3.5、安装node节点
  • 四、kubernetes-dashboard安装
    • 4.1、安装kubernetes-dashboard
    • 4.2、暴露端口
    • 4.3、查询放行的端口
    • 4.4、访问web界面
    • 4.5、创建访问账号
    • 4.6、生成令牌
  • 五、附言
  • 六、参考资料

一、准备工作

1.1、创建3台虚拟机

1.1.1、下载虚拟机管理工具

由于我的笔记本使用vmware安装虚拟机老是有问题,本次我使用的是Oracle VM VirtualBox虚拟机。下载地址:https://www.virtualbox.org/wiki/Downloads

1.1.2、安装虚拟机管理工具

双击下载的.exe文件即可,建议不要安装在C盘,原因大家都懂的。

1.1.3、下载虚Centos镜像

通过“里巴巴开源镜像站”https://developer.aliyun.com/mirror/进行下载,我本次下载的是Centos 7.9

1.1.4、创建台个虚拟机

创建虚拟机的过程此次省略,不懂的可以去百度就可以了。

1.1.5、设置虚拟机网络环境

我设置的虚拟机网络环境为“桥接模式”

1.2、虚拟机基础配置(3台虚拟机进行相同处理)

1.2.1、配置host

host配置如下图所示,IP地址使用自己的IP地址

192.168.1.7 k8s-master
192.168.1.8 k8s-node01
192.168.1.9 k8s-node02

1.2.2、关闭防火墙

执行一下命令完成操作

systemctl stop firewalld
systemctl disable firewalld

1.2.3、将桥接的IPv4流量传递到iptables的链

执行一下命令进行配置

cat > /etc/sysctl.conf << EOF 
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

二、Docker安装

参考我的另一篇博文:CentOS 7.8 Docker安装、卸载与Docker-Compose的安装

三、Kubernetes安装

3.1、配置阿里云yum源

执行一下命令进行配置

cat > /etc/yum.repos.d/kubernetes.repo <<EOF 
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpghttps://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

3.2、安装

所有虚拟机执行以下命令进行安装kubelet、kubeadm和kubectl。

yum -y install kubelet-1.20.0 kubeadm-1.1.20.0 kubectl-1.20.0
systemctl enable kubelet

3.3、matser节点初始化

使用以下命令进行matser节点初始化

kubeadm init --apiserver-advertise-address=192.168.1.7 --apiserver-bind-port=6443 --pod-network-cidr=192.168.1.0/16  --service-cidr=10.96.0.0/12 --kubernetes-version=1.20.0 --image-repository registry.aliyuncs.com/google_containers

3.4、创建文件夹、复制文件并给予权限

matser节点初始化成功之后,安装日志会输出接下来操作的提示,执行如下命令创建文件夹、复制文件并给予权限

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config 

3.5、安装node节点

执行matser节点初始化安装成功后,安装日志会输出安装node节点的命令,复制命令,在其他两个node节点中执行。

kubeadm join 192.168.1.7:6443 --token ysjwr1.ii05kwoyv823gdqe --discovery-token-ca-cert-hash sha256:7c6240a7b293068427e031f5d072e4b4c3ab1048fa947a52b8f882b10cca0914

至此,如果顺利的话,kubernetes的安装就完成了,可以使用一下命令检查是否安装成功

kubectl get nodes
kubectl get pods -A

四、kubernetes-dashboard安装

4.1、安装kubernetes-dashboard

执行以下命令安装kubernetes-dashboard

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml

4.2、暴露端口

执行以下命令

kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard

type: ClusterIP 改为 type: NodePort

4.3、查询放行的端口

使用以下命令进行查询。

kubectl get svc -A |grep kubernetes-dashboard

4.4、访问web界面

访问: https://集群任意IP:端口 例如:https://192.168.1.7:31820/

4.5、创建访问账号

执行以下命令创建访问账号。

vi dash.yaml# 内容如下:
apiVersion: v1
kind: ServiceAccount
metadata:name: admin-usernamespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: admin-user
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-admin
subjects:1. kind: ServiceAccountname: admin-usernamespace: kubernetes-dashboard

然后执行以下命令

kubectl apply -f dash-usr.yaml

4.6、生成令牌

执行以下命令生成令牌。

kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"

五、附言

本次搭建kubernetes集群差不多花了一天半了时间。主要在以下几个地方耗费了比较多的时间。

  1. 虚拟机IP地址查看
    在执行ipconfig查看IP的时候提示命令不存在,然后在执行yum install upgrade报如下错误
cannot find valid baseurl for repobase/7/x86_64

解决办法:
执行以下命令,

vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
service network restart
yum install upgrade
yum install net-tools

将onboot修改为“yes”,如下图所示
在这里插入图片描述
2. master节点初始化
在参考 Kubernetes集群部署中执行kubeadm init --config=init-config.yaml时,一直报如下错误
错误一:

Failed to start Docker Application Container Engine.

错误二:

k8s-master node not found.

解决方案:
卸载kubernetes旧版本,使用如下脚本

yum remove kube*
modprobe -r ipip
lsmod
rm -rf /etc/kubernetes/
rm -rf /etc/cni
rm -rf /var/lib/etcd
yum clean all

使用如下命令进行初始化并升级kubernetes的版本

kubeadm init --apiserver-advertise-address=192.168.1.7 --apiserver-bind-port=6443 --pod-network-cidr=192.168.1.0/16  --service-cidr=10.96.0.0/12 --kubernetes-version=1.20.0 --image-repository registry.aliyuncs.com/google_containers

补充:kubernetes-dashboard卸载
master节点初始化重置命令

kubeadm reset 
  1. kubernetes-dashboard安装
    在参考 Kubernetes(K8S)集群部署安装完kubernetes-dashboard一直打不开,开始以为是端口防火墙或火狐浏览器太新的问题,后面通过执行kubectl get pod -A发现kubernetes-dashboard的状态不对,服务压根就没起来。
    解决方案:
    通过查看kubernetes-dashboard与kubernetes版本对应关系升级kubernetes-dashboard到v2.4.0解决

补充:kubernetes-dashboard卸载
删除现有的dashboard服务

kubectl delete service kubernetes-dashboard --namespace=kubernetes-dashboard
kubectl delete service dashboard-metrics-scraper --namespace=kubernetes-dashboard

删除现有的dashboard pod

kubectl delete deployment kubernetes-dashboard --namespace=kubernetes-dashboard
kubectl delete deployment dashboard-metrics-scraper --namespace=kubernetes-dashboard

强制删除现有的dashboard pod命令

kubectl delete pods kubernetes-dashboard-658485d5c7-qnp55 -n kubernetes-dashboard --grace-period=0 --force

六、参考资料

  1. linux下ipconfig命令报:command not found 解决方法
  2. Kubernetes(K8S)集群部署
  3. Kubernetes集群部署
  4. k8s 安装 dashboard与卸载
  5. kubernetes-dashboard与kubernetes版本对应关系

相关文章:

Kubernetes(K8S)集群部署实战

目录 一、准备工作1.1、创建3台虚拟机1.1.1、下载虚拟机管理工具1.1.2、安装虚拟机管理工具1.1.3、下载虚Centos镜像1.1.4、创建台个虚拟机1.1.5、设置虚拟机网络环境 1.2、虚拟机基础配置&#xff08;3台虚拟机进行相同处理&#xff09;1.2.1、配置host1.2.2、关闭防火墙1.2.3…...

流畅的Python(十)-序列的修改、散列和切片

一、核心要义 以第九章定义的二维向量为基础&#xff0c;定义表示多为向量的Vector类。该类将支持如下功能&#xff1a; 1. 基本的序列协议 2. 适当的切片支持&#xff0c;且返回的是新Vector实例 3.综合各个元素的值计算散列值 4.格式化展示 二、代码示例 1、前情提要 …...

TCP/IP五层各层协议详解

TCP/IP协议栈是网络通信的基础&#xff0c;它由五层协议组成&#xff0c;分别是物理层、数据链路层、网络层、传输层和应用层。以下是对各层协议的详细解释&#xff1a; 1. 物理层&#xff08;Physical Layer&#xff09;&#xff1a;该层负责传输比特流&#xff0c;主要定义传…...

MySQL 基础知识(九)之视图

目录 1 视图的介绍 2 视图算法 3 创建视图 4 查看视图结构 5 修改视图 6 删除视图 7 参考文档 1 视图的介绍 视图是一张并不存储数据的虚拟表&#xff0c;其本质是根据 SQL 语句动态查询数据库中的数据。数据库中只存放了视图的定义&#xff0c;通过 SQL 语句使用视图时…...

算法之力扣数青蛙

题目连接 文章目录 题目解析算法原理第一步第二步第三步第三步第四步指向o 代码讲解代码实现 题目解析 先给大家来讲解一下这个题目的意思吧&#xff0c;这个题目是说呢给你一个蛙叫的字符串让你去设计一个算法求出发出这种蛙叫最少需要几只青蛙。比如说第一个样例发出这种叫声…...

【后端高频面试题--Nginx篇】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;后端高频面试题 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 后端高频面试题--Nginx篇 往期精彩内容什么是Nginx&#xff1f;为什么要用Nginx&#xff1f;为…...

TiDB 在医疗保障信息平台的应用实践

文章介绍了 TiDB 在医疗保障信息平台中的应用。东软医保云应用管理平台通过与 TiDB 联合&#xff0c;成功满足了医疗保障业务中高并发、实时性和复杂查询的要求。在某地市医疗保障信息平台的实践中&#xff0c;TiDB 分布式数据库有效实现了在线交易和实时分析服务&#xff0c;日…...

支付交易——跨境交易

摘要 老王兢兢业业经营生意多年&#xff0c;一步步从小杂货店做到现在&#xff0c;成立大型贸易公司。在做大做强的过程中&#xff0c;老王觉得国内市场已经饱和&#xff0c;竞争处处是红海。老王留意海外很多年了&#xff0c;决定走出去&#xff0c;转向海外:将国外的商品引进…...

上位机图像处理和嵌入式模块部署(上位机主要功能)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 目前关于机器视觉方面&#xff0c;相关的软件很多。比如说商业化的halcon、vision pro、vision master&#xff0c;当然也可以用opencv、pytorch自…...

【前端工程化面试题】webpack的module、bundle、chunk分别指的是什么?

首先从语法方面 在配置文件中有 module 这个配置项&#xff0c;里面有 rules 选项用来配置各种 loader&#xff0c;还有其他各种选项&#xff0c;参考官网。bundle 和 chunk 在配置文件中是没有这个选项的&#xff0c;但是会出现在配置的值中。 module 模块 指单个文件&#xf…...

软件实例分享,家具生产出库管理系统软件教程

软件实例分享&#xff0c;家具生产出库管理系统软件教程 一、前言 以下软件程序教程以 佳易王家具行业生产出库管理系统软件V16.1为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 销售管理——产品状态查询变更&#xff0c;可以根据生产进度变更…...

[uniapp的页面传参]详细讲解uniapp中页面传参的传递方式和接受方式 使用案例 代码注释

目录 一、传递方式1. URL传参2. Storage传参3. Vuex传参4.api传参eventChannel 二、接受方式1. URL传参2. Storage传参3. Vuex传参4.api传参eventChannel 三、使用案例四.提醒 在uniapp中&#xff0c;页面传参是非常常见的需求。本文将详细讲解uniapp中页面传参的传递方式和接受…...

Python实现时间序列分析霍尔特季节性平滑模型(Holt算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 霍尔特季节性平滑模型是指数平滑技术的一种扩展形式&#xff0c;由E. S. Holt和P. R. Winters分别独立…...

Rokid Station 进fastboot

前一阵子手里的station开不开机了&#xff0c;反复重启&#xff0c;摸索出进fastboot的方法&#xff1a; 关机状态下同时按电源键下面的确认键&#xff08;○键&#xff09;&#xff0c;指示灯会进入白色常亮状态&#xff0c;插入电脑会在设备管理器内显示DNL设备&#xff08;…...

Java支持的默认访问修饰符是什么?

Java支持的默认访问修饰符是没有指定任何访问修饰符&#xff0c;通常被称为“包访问级别”或“默认访问级别”。当一个类成员&#xff08;包括类、接口、变量以及方法&#xff09;没有显式地指定任何访问修饰符时&#xff0c;它就会拥有默认访问级别。 在默认访问级别下&#…...

Java使用Documents4j实现Word转PDF(知识点+案例)

文章目录 前言源码获取一、认识Documents4j二、快速集成2.1、pom.xml依赖2.2、word转PDF实现项目目录WordUtils.javaDemo6.java测试效果 参考文章资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝2W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里…...

CSimplemathproblem ---- 牛客网

题目描述 这一节课&#xff0c;Priest给大家做了一个小测试。 老师给了你两个正整数X, Y。并按照一下规则做运算&#xff0c;求出答案Z。 如果X是Y的因数&#xff0c;则Z等于X Y。否则Z Y - X。 输入描述: 输入两个正整数X, Y。 (1 < X < Y < 100000000000000)。 输…...

[嵌入式系统-27]:RT-Thread -14- 操作系统配置:rtconfig.h文件与menuconfig命令

目录 一、rtconfig.h 1.1 概述 1.2 软硬件资源配置 1.3 功能模块选择 1.4 内核配置详解 1.5 调度器配置 1.6 硬件设备驱动配置 1.7 网络配置 1.8 调试配置 二、menuconfig 2.1 概述 2.2 主要功能 三、RT Thread配置 VS Linux配置 一、rtconfig.h 1.1 概述 rtco…...

C++面向对象程序设计-北京大学-郭炜【课程笔记(一)】

C面向对象程序设计-北京大学-郭炜【课程笔记&#xff08;一&#xff09;】 1、引用的概念1.1、引用应用的简单示例1.2、常引用 2、"const"关键字的用法&#xff08;常量指针/指针常量&#xff09;3、动态内存分配4、内联函数5、函数重载5.1、什么是函数重载5.2、函数…...

C语言:国家名称按字母表排序

题目描述 输入一个整数n(n<20)&#xff0c;表示待输入国家的数量。随后输入n个国家或地区的名称 (名称长度为1~30)&#xff0c;要求按字母顺序升序输出。 注意&#xff1a;名称中可能包含空格符。 提示 字符串比较请使用函数&#xff1a; int strcmp(const char* str1&a…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...