微服务 云原生:搭建 K8S 集群

为节约时间和成本,仅供学习使用,直接在两台虚拟机上模拟 K8S 集群搭建

踩坑之旅

系统环境:CentOS-7-x86_64-Minimal-2009 镜像,为方便起见,直接在 root 账户下操作,现实情况最好不要这样做。

基础准备

  1. 关闭防火墙
systemctl disable firewalld
systemctl stop firewalld
  1. 关闭 selinux
# 临时禁用selinux
setenforce 0# 永久关闭selinux 
sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
  1. 禁用 Swap
# 临时关闭 Swap
swapoff -a# 永久禁用 Swap
vi /etc/fstab
在swap分区这行前加 # 注释掉
#/dev/mapper/centos-swap swap
  1. 设置存储库
# 安装 yum-utils 包, 并设置稳定存储库
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  1. 安装配置 Docker
# 查看docker-ce支持版本
yum list docker-ce --showduplicates|sort -r#查看docker-ce-cli版本
yum list docker-ce-cli --showduplicates|sort -r# 指定版本号安装
#yum install -y docker-ce-24.0.4 docker-ce-cli-24.0.4 containerd.io# 默认安装最新版本
yum install docker-ce docker-ce-cli containerd.io# 启动 Docker
systemctl enable docker && systemctl start docker# 查看版本
docker -v# 配置国内镜像源,修改/新建 daemon.json
vi /etc/docker/daemon.json# 在 daemon.json 中添加:
{"registry-mirrors": ["https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","http://hub-mirror.c.163.com","https://cr.console.aliyun.com/"]
}# 重启 Docker
systemctl restart docker
  1. 安装 Docker Compose
# 下载 Docker Compose
sudo curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose# 对二进制文件添加可执行权限
chmod +x /usr/local/bin/docker-compose# 查看版本
docker-compose -v

最好使用 GitHub 的地址,如果使用其他比如:
curl -L "https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose,有几率会出现下面错误:

/usr/local/bin/docker-compose: line 1: html: No such file or directory
/usr/local/bin/docker-compose: line 2: syntax error near unexpected token `<'
'usr/local/bin/docker-compose: line 2: `<head><title>502 Bad Gateway</title></head>

搭建 K8S 集群

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

基础环境搭建完成后,令当前虚拟机做 Master 主机,利用虚拟机平台,比如 VMWare、VirtualBox 等的克隆功能,克隆一台 Worker 主机(当然也可以克隆多台)。注意,克隆后的多台主机要保证 ip 不同,不同软件的操作不同,具体操作此处此处不做赘述。

  1. Master 端安装 kubeadm、kubectl、kubelet
# 安装指定版本
# yum install -y kubeadm-1.21.3 kubelet-1.21.3 kubectl-1.21.3# 默认安装
yum install -y kubectl kubeadm kubelet# 启动 kubelet 服务
systemctl enable kubelet && systemctl start kubelet# 查看版本
docker-compose version
  1. Worker 端安装 kubeadm、kubelet
# 安装
yum install -y kubeadm kubelet# 启动 kubelet 服务
systemctl enable kubelet && systemctl start kubelet
  1. 启动容器运行时 containerd
# Master 端和 Worker 端都要操作
mv /etc/containerd/config.toml /etc/containerd/config.bak
containerd config default | sudo tee /etc/containerd/config.toml
systemctl restart containerd
  1. 配置主机名,需要同时在 Master 和 Worker 上操作
    • Master 节点下:
    # 编辑 hosts,添加各个节点的映射
    vi /etc/hosts# 我的 Master 主机 ip 为 192.168.65.130,Worker 主机 ip 为 192.168.65.132
    192.168.65.132 k8s-node1
    192.168.65.130 k8s-master# Master 节点
    hostnamectl --static set-hostname k8s-master# 立刻生效
    hostname $hostname
    
    • Worker 节点下:
    vi /etc/hosts192.168.65.132 k8s-node1
    192.168.65.130 k8s-master# Worker 节点
    hostnamectl --static set-hostname k8s-node1# 立刻生效
    hostname $hostname
    
  2. 初始化 Master 节点
# 仅在 Master 主机上执行:
kubeadm init \
--image-repository registry.aliyuncs.com/google_containers \
--apiserver-advertise-address=192.168.65.130 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--token-ttl 0
  • –apiserver-advertise-address=192.168.65.130,master 主机的 IP 地址
  • –image-repository=registry.aliyuncs.com/google_containers,这个是镜像地址
  • –service-cidr=10.96.0.0/12,IP 地址直接就套用10.96.0.0/12
  • –pod-network-cidr=10.244.0.0/16,K8S 内部的 pod 节点之间网络可以使用的 IP 段,是可以更改的,暂时用 10.244.0.0/16 也无所谓

初始化完成后结果如下:
在这里插入图片描述
将这里提示的 kubeadm join xxx 命令保存下来,如果忘记了也可以通过下面命令查看:

kubeadm token create --print-join-command

继续执行:

mkdir -p ~/.kube
sudo cp -i /etc/kubernetes/admin.conf ~/.kube/config
sudo chown $(id -u):$(id -g) ~/.kube/config
  1. 将 Worker 加入到 Master 节点
# Worker 端,使用上一步得到的 join 命令
kubeadm join 192.168.65.130:6443 --token 4olf44.2t6sqev73d6ewm48 --discovery-token-ca-cert-hash sha256:3603cf3bd9efa671e95a93f922f097580b1ffbfe3e55ca8b7f1876bf8fc4be69

成功后的提示如下:
在这里插入图片描述
这一步可能报错:

[ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1

解决办法:

echo "1" >/proc/sys/net/bridge/bridge-nf-call-iptables
  1. Master 端安装 Calico 网络插件
    注意,Calico 的版本需要与 kubelet 匹配,适配关系在 Calico 每个版本的说明都有,比如我的 kubelet 是 1.21.3,满足此版本的 Calico 有 3.20、3.21:
    在这里插入图片描述
    https://docs.tigera.io/archive/v3.20/getting-started/kubernetes/requirements
# 下载 calico.yaml 到本地
curl https://docs.projectcalico.org/v3.20/manifests/calico.yaml -O# 执行
kubectl apply -f calico.yaml

在这里插入图片描述
9. 查看节点、pod 状态

# 查看 nodes
kubelet get node# 查看 pods
kubectl get pods -n kube-system -o wide

一开始节点处于 NotReady 状态:
在这里插入图片描述
相关的 coredns 等也在启动中:
在这里插入图片描述
经过一段时间后,可以看到,所有 pods 均已启动(running),节点已就绪(Ready):
在这里插入图片描述

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

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

相关文章

React18和React16合成事件原理(附图)

&#x1f4a1; React18合成事件的处理原理 “绝对不是”给当前元素基于addEventListener做的事件绑定&#xff0c;React中的合成事件&#xff0c;都是基于“事件委托”处理的&#xff01; 在React17及以后版本&#xff0c;都是委托给#root这个容器&#xff08;捕获和冒泡都做了…

【java】java中注解的简介,如何自定义注解,有哪些类型,有什么作用

java注解 注解的定义 Java 注解用于为 Java 代码提供元数据。作为元数据&#xff0c;注解不直接影响你的代码执行&#xff0c;但也有一些类型的注解实际上可以用于这一目的。Java 注解是从 Java5 开始添加到 Java 的。 首先要明确一点的是&#xff0c;注解并没有实际的作用&…

八股文(消息队列)

文章目录 1. RabbitMQ特点2. 如何保证消息的可靠性3. RabbitMQ消息的顺序性4. 实现RabbitMQ的高可用性5. 如何解决消息队列的延时以及过期失效问题&#xff1f;6. RabbitMQ死信队列7. RabbitMQ延迟队列8.RabbitMQ的工作模式9. RabbitMQ消息如何传输10. 核心概念10.1 生产者和消…

SpringBoot整合Spring Security实现权限控制

文章目录 Spring Security介绍Spring Security案例1、快速搭建一个springboot工程2、导入SpringSecurity整合springboot工程3、认证3.1、登录流程校验3.2、入门案例的原理3.3、实现思路3.4、实现认证流程&#xff08;自定义&#xff09;3.5、正式实现3.5.1 实现数据库的校验3.5…

python node Ubuntu 安装软件、删除软件 、更新软件 中的 软件源概念

在Node 用npm 安装软件 在Python 用 pip 安装软件 在Ubuntu 用 apt 、apt-get 、snap 安装软件 因为这三款软件 都是国外的&#xff0c; 软件包&#xff08;模块&#xff09;都放在国外的&#xff0c; 安装 、更新 特别慢 Node中配置 下载源 在 node 中 要配置 下载的的地址…

【C语言初阶】指针的运算or数组与指针的关系你了解吗?

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《快速入门C语言》《C语言初阶篇》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 &#x1f4cb; 前言&#x1f4ac; 指针运算&#x1f4ad; 指针-整数&#x1f4ad; 指针-指针&#x1f4ad; 指针…

关于K8s的Pod的详解(一)

关于K8s的Pod的详解&#xff08;一&#xff09; Pod和API server的通信加快Pod启动更改Pod的资源Pod 的持久卷的单个访问模式Pod 拓扑分布约束Pod 拓扑分布中的最小域数 Pod 作为k8s创建&#xff0c;调度&#xff0c;管理的基本单位。由上级的Controller对Node上安装的Kubelet发…

电脑安装双系统ubuntu18.04+windows后开机直接进入Windows解决方法

电脑型号&#xff1a;联想拯救者Y9000K2021H 系统&#xff1a;Windows11Ubuntu18.04双系统 问题&#xff1a;笔记本安装双系统后&#xff0c;Windows系统下处理word或者看论文&#xff1b;Ubuntu18.04系统安装ros进行机械臂控制等的研究。但最近开机后发现没有系统选项了&#…

网络传输媒体

物理层下面的传输媒体分为两种&#xff1a;导向型传输媒体和非导向型传输媒体。 一、导向型传输媒体 同轴电缆&#xff1a; 图示&#xff1a; 分类&#xff1a; 基带同轴电缆&#xff1a;用于数字传输&#xff0c;在早期局域网中广泛使用宽带同轴电缆&#xff1a;用于模拟传输…

数据结构之BinaryTree(二叉树)的实现

BinaryTree要实现的方法 总结 remove不在BinNode里&#xff0c;而是BinTree里 递归的两种写法 从上往下&#xff1a;同一对象的递归&#xff08;参数多一个&#xff0c;判空用一句话&#xff09;&#xff0c;子对象的递归&#xff08;参数void&#xff0c;判空用两句话&#…

python数据分析05—Pandas数据处理

目录 1.缺失数据处理 1.1 DataFrame自身产生的缺失数据 1.2 缺失数据判断和统计 ​1.3 缺失数据清理 2. 多源数据操作 2.1 合并函数&#xff1a;merge() 2.2 连接函数&#xff1a;join() 2.3 指定方向合并&#xff1a;concat() 3. 数据分组和聚合运算 3.1 groupby()方…

(34)继电器开关

文章目录 前言 34.1 装有IOMCU的自动驾驶仪上的继电器引脚 34.2 通过任务规划器定义继电器引脚 34.3 飞行员控制继电器 34.4 任务控制继电器 34.5 任务规划器控制继电器 前言 "继电器"是自动驾驶仪上的一个数字输出引脚&#xff0c;可在 0V 和 3.3V 或 5V 之间…

《向量数据库指南》:使用公共的Pinecone数据集

目录 数据集包含向量和元数据 列出公共数据集 加载数据集 迭代数据集 分批迭代文档并插入到索引中。 将数据集插入为数据帧。 接下来怎么做 本文档介绍如何使用现有的Pinecone数据集。 要了解创建和列出数据集的方法,请参阅创建数据集。 数据集包含向量和元数据 P…

WPF 搜索框控件样式

WPF 搜索框控件样式 完全通过Xaml代码实现&#xff0c;使用了UserControl进行封装。功能包括聚焦时控件展开&#xff0c;输入为空时的文字提示&#xff0c;以及待选提示项列表等效果。实现效果如下图&#xff1a; xaml代码 <UserControl x:Class"SearchBar.SearchBo…

栈OJ(C++)

文章目录 1.最小栈2.栈的压入、弹出序列3.逆波兰表达式&#xff08;后缀表达式&#xff09;求值3.1后缀表达式求值3.2中缀表达式转后缀表达式3.3带有括号的中缀表达式转后缀表达式 1.最小栈 class MinStack { public:MinStack(){}void push(int val){_st.push(val);//empty放在…

【kafka调试】用命令行查看kafka是否发出了命令

server 10.10.90.210:9092 topic stream_manager_center_capture_file 摄像头id&#xff1a; 17283ed2a1ac685f9fd5ef9f0de04792 cd /usr/loca/kafka bin/kafka-console-consumer.sh --bootstrap-server 10.10.90.210:9092 --topic stream_manager_center_capture_file 然后添…

<C语言> 数据在内存中的存储

1.数据类型介绍 C语言中的基本内置类型如下&#xff1a; char //字符数据类型 short //短整型 int //整型 long //长整型 long long //更长的整型 float //单精度浮点数 double //双精度浮点数类型的意义&#xff1a; 1.使用这个类…

设计模式-抽象工厂模式

在经济学领域中&#xff0c;其主要研究对象(商品)之间根据消费依存关系可分为互补商品或替代商品&#xff0c;其中&#xff0c;互补商品如汽车与汽油、自行车与自行车胎、大饼和香肠、开水和泡面等。在面向对象的代码世界中&#xff0c;不同对象之间也存在这种类似相互依赖的关…

使用 ChatGPT 碰到的坑

最近在使用 ChatGPT 的时候碰到一个小坑&#xff0c;因为某些特殊情况我需要使用 syslog 向 logbeat 中发送日志。 由于这是一个比较古老的协议&#xff0c;确实也没接触过&#xff0c;所以就想着让 ChatGPT 帮我生成个例子。 原本我已经在 Go 中将这个流程跑通&#xff0c;所…

PyTorch从零开始实现Transformer

文章目录 自注意力Transformer块编码器解码器块解码器整个Transformer参考来源全部代码&#xff08;可直接运行&#xff09; 自注意力 计算公式 代码实现 class SelfAttention(nn.Module):def __init__(self, embed_size, heads):super(SelfAttention, self).__init__()self.e…