Kubernetes(k8s)学习笔记(二)--k8s 集群安装

1、kubeadm

kubeadm 是官方社区推出的一个用于快速部署 kubernetes 集群的工具。这个工具能通过两条指令完成一个 kubernetes 集群的部署:

1.1 创建一个 Master 节点$ kubeadm init

1.2 将一个 Node 节点加入到当前集群中$ kubeadm join <Master 节点的 IP 和端口 >

2、前置要求

  • 一台或多台机器, 操作系统 CentOS7.x-86_x64
  • 硬件配置: 2GB 或更多 RAM, 2 个 CPU 或更多 CPU, 硬盘 30GB 或更多
  • 集群中所有机器之间网络互通可以访问外网, 需要拉取镜像
  • 禁止 swap 分区

3、部署步骤

3.1.在所有节点上安装 Docker 和 kubeadm

3.2.部署 Kubernetes Master

3.3.部署容器网络插件

3.4.部署 Kubernetes Node, 将节点加入 Kubernetes 集群中5.部署 Dashboard Web 页面, 可视化查看 Kubernetes 资源

4、 环境准备

 1、准备工作

  • 我们可以使用 vagrant 快速创建三个虚拟机。 虚拟机启动前先设置 virtualbox 的主机网络。 现全部统一为 192.168.56.1, 以后所有虚拟机都是 56.x 的 ip 地址
  • 1.设置虚拟机存储目录, 防止硬盘空间不足


2、 启动三个虚拟机
 

使用下面的Vagrantfile文件

Vagrant.configure("2") do |config|
   (1..3).each do |i|
        config.vm.define "k8s-node#{i}" do |node|
            # 设置虚拟机的Box
            node.vm.box = "centos/7"

            # 设置虚拟机的主机名
            node.vm.hostname="k8s-node#{i}"

            # 设置虚拟机的IP
            node.vm.network "private_network", ip: "192.168.56.#{99+i}", netmask: "255.255.255.0"

            # 设置主机与虚拟机的共享目录
            # node.vm.synced_folder "~/Documents/vagrant/share", "/home/vagrant/share"

            # VirtaulBox相关配置
            node.vm.provider "virtualbox" do |v|
                # 设置虚拟机的名称
                v.name = "k8s-node#{i}"
                # 设置虚拟机的内存大小
                v.memory = 4096
                # 设置虚拟机的CPU个数
                v.cpus = 4
            end
        end
   end
end

  • 将上面的Vagrantfile到非中文无空格目录下, 运行 vagrant up 启动三个虚拟机。

题外话:vagrant 完全可以一键部署全部 k8s 集群,可参照下面的地址去实现。

https://github.com/rootsongjc/kubernetes-vagrant-centos-cluster

http://github.com/davidkbainbridge/k8s-playground

  • 进入三个虚拟机, 开启 root 的密码访问权限。

Vagrant ssh XXX(比如k8s-node1) 依次进入各个节点系统之后
su root 密码为 vagrant
vi /etc/ssh/sshd_config
修改 PasswordAuthentication yes/no
重启服务 service sshd restart

 所有虚拟机设置为 4 核 4G

设置好 NAT 网络,设置各个节点网络地址不一样以便区分不同的节点,要不然各个节点网址一样就不好操作。

 3、设置 linux 环境(各个节点都执行)

关闭防火墙:
systemctl stop firewalld
systemctl disable firewalld

关闭 selinux:
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0

临时关闭 swap:
swapoff -a 
需设置为永久关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab 
验证,swap 必须为 0;
free -g 

 小tips:由于各个节点都要执行重复的命令,在xshell中,我们可以设置在一个节点输入并发送给所有打开的节点从而避免重复输入,只需在命令行区域右键,在弹出的窗口进行选择已连接的会话,当只需要把命令在当前节点执行时,切换到当前会话即可。

添加主机名与 IP 对应关系

vi /etc/hosts
10.0.2.15 k8s-node1
10.0.2.24 k8s-node2
10.0.2.25 k8s-node3
hostnamectl set-hostname <newhostname>: 指定新的 hostname
su 切换过来 

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

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

然后执行sysctl --system命令让配置生效

如果执行sysctl --system遇到提示是只读的文件系统的问题,运行如下命令
mount -o remount rw /

5、 所有节点安装 Docker、 kubeadm、 kubelet、 kubectl

Kubernetes 默认 CRI(容器运行时) 为 Docker, 因此先安装 Docker。

1、 安装 docker

1、 卸载系统之前的 docker

sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

2、 安装 Docker-CE

安装必须的依赖
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2 

设置 docker repo 的 yum 位置

sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo 

由于docker镜像的原因,这一步执行可能会失败,如果失败配置阿里云的  

安装 docker,以及 docker-cli

sudo yum install -y docker-ce docker-ce-cli containerd.io

3、配置 docker 加速

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"]
} EOF 

sudo systemctl daemon-reload
sudo systemctl restart docker 

4、启动 docker & 设置 docker 开机自启

systemctl enable docker

 基础环境准备好, 可以给三个虚拟机备份一下; 为 node3 分配 16g, 剩下的 3g。 方便未来侧测试

2、添加阿里云 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.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

3、安装 kubeadm, kubelet 和 kubectl

yum list|grep kube
yum install -y kubelet-1.17.3 kubeadm-1.17.3 kubectl-1.17.3
systemctl enable kubelet
systemctl start kubelet

注意:虽然执行了启动命令systemctl start kubelet,但一些配置尚未完成,此时启动失败是正常的。鉴于篇幅关系,关于配置在下一篇文章进行总结。
 

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

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

相关文章

AI数据分析的优势分析

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已经深入渗透到数据分析领域&#xff0c;为各行各业带来了前所未有的变革。AI数据分析作为一种新兴的技术手段&#xff0c;通过运用机器学习、深度学习等算法对海量数据进行挖掘和分析&#xff0c;显著提升了…

leetcode(01)森林中的兔子

今天开始记录刷题的过程&#xff0c;每天记录自己刷题的题目和自己的解法&#xff0c;欢迎朋友们给出更多更好的解法。 森林中的兔子 森林中有未知数量的兔子&#xff0c;提问其中若干只兔子“还有多少只兔子与你&#xff08;被提问的兔子&#xff09;颜色相同”。将答案收集到…

基于SpringBoot+Vue实现的旅游景点预约平台功能一

一、前言介绍&#xff1a; 1.1 项目摘要 随着人们生活水平的提高和休闲时间的增多&#xff0c;旅游已经成为人们生活中不可或缺的一部分。旅游业作为全球经济的重要支柱&#xff0c;其发展趋势呈现出数字化、网络化和智能化的特点。传统的旅游服务方式&#xff0c;如人工预约…

【支付】支付宝支付

下面为你详细介绍使用 Spring Boot 对接支付宝支付&#xff0c;实现支付与退款功能的具体步骤和代码示例。 添加依赖 在 pom.xml 里添加支付宝 SDK 依赖&#xff1a; <dependencies><!-- Spring Boot Web --><dependency><groupId>org.springframewo…

shell 正则表达式与文本处理器

目录 前言 一、正则表达式 &#xff08;一&#xff09;定义与用途 &#xff08;二&#xff09;基础正则表达式 &#xff08;三&#xff09;基础正则表达式元字符 &#xff08;四&#xff09;扩展正则表达式 二、文本处理器&#xff1a;Shell 编程的得力助手 &#xff0…

ASP.NET Core 最小 API:极简开发,高效构建(上)

一、概述 构建最小 API&#xff0c;以创建具有最小依赖项的 HTTP API。 它们非常适合于需要在 ASP.NET Core 中仅包括最少文件、功能和依赖项的微服务和应用。 本文介绍使用 ASP.NET Core 生成最小 API 的基础知识&#xff0c;将创建以下 API&#xff1a; API&#xff08;应用…

Apache Parquet 文件组织结构

简要概述 Apache Parquet 是一个开源、列式存储文件格式&#xff0c;最初由 Twitter 与 Cloudera 联合开发&#xff0c;旨在提供高效的压缩与编码方案以支持大规模复杂数据的快速分析与处理。Parquet 文件采用分离式元数据设计 —— 在数据写入完成后&#xff0c;再追加文件级…

IntelliJ IDEA 2025.1 发布 ,默认 K2 模式 | Android Studio 也将跟进

2025.1 版本已经发布&#xff0c;在此之前我们就聊过该版本的 《Terminal 又发布全新重构版本》&#xff0c;而现在 2025.1 中的 K2 模式也成为了默认选项。 可以预见&#xff0c;这个版本可能会包含不少大坑&#xff0c;为下个 Android Studio 祈祷。 首先有一点可以确定&…

云效部署实现Java项目自动化部署图解

前言 记录下使用云效部署Java项目&#xff0c;实现java项目一键化自动化部署。 云效流程说明&#xff1a; 1.云效拉取最新git代码后 2.进行maven编译打包后&#xff0c;上传到指定服务器目录 3.通过shell脚本&#xff0c;先kill java项目后&#xff0c;通过java -jar 启动项…

国际数据加密算法(IDEA)详解

以下是修正后的准确版本,已解决原文中的术语、符号及技术细节问题: ​国际数据加密算法(IDEA)​ IDEA是一种分组加密算法,由Xuejia Lai(来学嘉)和James Massey于1990年设计。IDEA使用128位密钥对64位明文分组进行加密,经过8轮迭代运算后生成64位密文分组。其安全性基于…

TensorFlow介绍

TensorFlow 是由 Google 开发 的开源机器学习框架&#xff0c;主要用于构建、训练和部署机器学习模型。它支持深度学习、传统机器学习和数值计算&#xff0c;适用于图像识别、自然语言处理&#xff08;NLP&#xff09;、推荐系统、强化学习等多种任务。 核心特性 基于 数据流…

百级Function架构集成DeepSeek实践:Go语言超大规模AI工具系统设计

一、百级Function系统的核心挑战 1.1 代码结构问题 代码膨胀现象&#xff1a;单个文件超过2000行代码路由逻辑复杂&#xff1a;巨型switch-case结构维护困难依赖管理失控&#xff1a;跨Function依赖难以追踪 // 传统实现方式的问题示例 switch functionName { case "fu…

嵌入式芯片中的 SRAM 内容细讲

什么是 RAM&#xff1f; RAM 指的是“随机存取”&#xff0c;意思是存储单元都可以在相同的时间内被读写&#xff0c;和“顺序访问”&#xff08;如磁带&#xff09;相对。 RAM 不等于 DRAM&#xff0c;而是一类统称&#xff0c;包括 SRAM 和 DRAM 两种主要类型。 静态随机存…

标准的JNI (Java Native Interface) 加载函数 JNI_OnLoad

1.JNI_OnLoad 在 Android Native 开发中&#xff0c;JNI_OnLoad 是动态注册本地方法的标准入口点。以下是一个标准实现示例及其说明&#xff1a; JNI_OnLoad 标准实现 #include <jni.h> #include <string>// 声明本地方法对应的 C/C 函数 jint native_add(JNIEnv…

算法导论思考题

2-1 在归并排序中对小数组采用插入排序 c. 假定修改后的算法的最坏情况运行时间为 Θ \Theta Θ(nknlg(n/k))&#xff0c;要使修改后的算法与标准的归并排序具有相同的运行时间&#xff0c;作为n的一个函数&#xff0c;借助 Θ \Theta Θ记号&#xff0c;k的最大值是什么&#…

JavaScript 性能优化

JavaScript 性能优化是提高 Web 应用性能的关键步骤,特别是在处理大量数据、复杂计算或频繁的 DOM 操作时。以下是一些常见的 JavaScript 性能优化技巧和策略: 文章目录 @[TOC]一、代码层面优化1. **减少全局变量**2. **避免使用 `with` 语句**3. **使用局部变量**4. **减少 …

NLP高频面试题(四十七)——探讨Transformer中的注意力机制:MHA、MQA与GQA

MHA、MQA和GQA基本概念与区别 1. 多头注意力(MHA) 多头注意力(Multi-Head Attention,MHA)通过多个独立的注意力头同时处理信息,每个头有各自的键(Key)、查询(Query)和值(Value)。这种机制允许模型并行关注不同的子空间上下文信息,捕捉复杂的交互关系。然而,MHA…

51单片机的原理图和PCB绘制

51单片机最小系统原理图 加了两个led灯和按键检测电路。 PCB中原件摆放位置 成品 资源链接&#xff1a;https://download.csdn.net/download/qq_61556106/90656365

使用注解方式整合ssm时,启动tomcat扫描不到resource下面的xxxmapper.xml

解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.xxx.mapper.方法 在Spring与Mybatis整合时&#xff0c;可能会遇到这样的报错 原因&#xff1a; 其原因为mapper路径的映射错误&#xff0c;表示在尝试执行某个 Mapper 接口的方法时…

提示词设计:动态提示词 标准提示词

提示词设计:动态提示词 标准提示词 研究背景:随着人工智能与司法结合的推进以及裁判文书公开数量增多,司法摘要任务愈发重要。传统司法摘要方法生成质量有待提升,大语言模型虽有优势,但处理裁判文书时存在摘要结构信息缺失、与原文不一致等问题。研究方法 DPCM方法:分为大…