Kubernetes系列之一快速部署一套K8s集群(kubeadm方式)

news2024/11/23 16:45:14

      最近本人在重温云原生相关的技术,说到云原生,必然绕不开Kubernetes,今天想跟大家聊的就是大名顶顶的Kubernetes。相信很多朋友在学习和使用Kubernetes的过程遇到各式各样不同的问题。我将从一个初学者的角度来给大家讲解一下Kubernete从安装、到架构以及生产中的使用。

 

1、生产环境可部署Kubernetes集群的两种方式

目前生产部署Kubernetes集群主要有两种方式:

  • kubeadm 

Kubeadm是一个K8s部署工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。

  • 二进制包

从github下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群。

这里采用kubeadm搭建集群。

kubeadm工具功能:

  • kubeadm init:初始化一个Master节点
  • kubeadm join:将工作节点加入集群
  • kubeadm upgrade:升级K8s版本
  • kubeadm token:管理 kubeadm join 使用的令牌
  • kubeadm reset:清空 kubeadm init 或者 kubeadm join 对主机所做的任何更改
  • kubeadm version:打印 kubeadm 版本

kubeadm alpha:预览可用的新功能

2、准备环境

服务器要求:

  • 建议最小硬件配置:2核CPU、2G内存、20G硬盘
  • 服务器最好可以访问外网,会有从网上拉取镜像需求,如果服务器不能上网,需要提前下载对应镜像并导入节点

软件环境:

软件

版本

操作系统

Rocky Linux 9

Docker

20-ce

Kubernetes

1.28.2

服务器规划:

角色

IP

k8s-master

192.168.1.71

k8s-node1

192.168.1.72

k8s-node2

192.168.1.73

架构图: 

 3、操作系统初始化配置【所有节点】

# 关闭防火墙
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    # 永久

# 根据规划设置主机名
hostnamectl set-hostname <hostname>

# 在master添加hosts
cat >> /etc/hosts << EOF
192.168.1.71 k8s-master
192.168.1.72 k8s-node1
192.168.1.73 k8s-node2
EOF

# 将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF
vm.swappiness=0
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-arptables=1
EOF

#加载br_netfilter模块,并查看
modprobe br_netfilter && lsmod | grep br_netfilter

sysctl --system  # 生效

4、安装Docker/kubeadm/kubelet【所有节点】 

4.1 安装Docker
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce
systemctl enable docker && systemctl start docker
4.2 配置镜像下载加速器
cat > /etc/docker/daemon.json << EOF
{
  "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

systemctl restart docker
docker info
4.3 安装cri-dockerd

Kubernetes v1.24移除docker-shim的支持,而Docker Engine默认又不支持CRI标准,因此二者默认无法再直接集成。为此,MirantisDocker联合创建了cri-dockerd项目,用于为Docker Engine提供一个能够支持到CRI规范的桥梁,从而能够让Docker作为Kubernetes容器引擎。

如图所示:

下载cri-docker

wget -c https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.15/cri-dockerd-0.3.15.amd64.tgz

 解压cri-docker

tar -xvf cri-dockerd-0.3.15.amd64.tgz --strip-components=1 -C /usr/local/bin/

下载cri-docker service文件

wget -O /etc/systemd/system/cri-docker.service https://raw.githubusercontent.com/Mirantis/cri-dockerd/master/packaging/systemd/cri-docker.service 

wget -O /etc/systemd/system/cri-docker.socket https://raw.githubusercontent.com/Mirantis/cri-dockerd/master/packaging/systemd/cri-docker.socket

 指定依赖镜像地址

vim /etc/systemd/system/cri-docker.service
ExecStart=/usr/local/bin/cri-dockerd --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9 --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --cri-dockerd-root-directory=/var/lib/dockershim --cri-dockerd-root-directory=/var/lib/docker

编辑cri-docker.server

vim /etc/systemd/system/cri-docker.socket
ListenStream=/var/run/cri-dockerd.sock
systemctl daemon-reload 
systemctl enable cri-docker && systemctl start cri-docker
4.4 添加阿里云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
4.5 安装kubeadm,kubelet和kubectl
yum install -y kubelet-1.28.2 kubeadm-1.28.2 kubectl-1.28.2
systemctl enable kubelet

 5、部署Kubernetes Master

在192.168.1.71(Master)执行。

kubeadm init \
  --apiserver-advertise-address=192.168.1.71 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.28.2 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16 \
--cri-socket=unix:///var/run/cri-dockerd.sock \
  --ignore-preflight-errors=all
  • --apiserver-advertise-address 集群通告地址
  • --image-repository 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
  • --kubernetes-version K8s版本,与上面安装的一致
  • --service-cidr 集群内部虚拟网络,Pod统一访问入口
  • --pod-network-cidr Pod网络,与下面部署的CNI网络组件yaml中保持一致
  • --cri-socket 指定cri-dockerd接口,如果是containerd则使用--cri-socket unix:///run/containerd/containerd.sock

初始化完成后,最后会输出一个join命令,先记住,下面用。

拷贝kubectl使用的连接k8s认证文件到默认路径:

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

查看工作节点

kubectl get nodes
NAME               STATUS     ROLES            AGE   VERSION
k8s-master   NotReady   control-plane          20s   v1.28.2

加入Kubernetes Node

在192.168.1.72/73(Node)执行。

向集群添加新节点,执行在kubeadm init输出的kubeadm join命令并手动加上--cri-socket=unix:///var/run/cri-dockerd.sock:

kubeadm join 192.168.1.71:6443 --token cxoka7.sdqnph9vhwyc94xh \
	--discovery-token-ca-cert-hash sha256:a8e49f249b2b71c61dea230cd1674aa39093c050fe69bd61411368c74079b5d1  --cri-socket=unix:///var/run/cri-dockerd.sock

默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,可以直接使用命令快捷生成:

kubeadm token create --print-join-command

6、部署容器网络(CNI)

Calico是一个纯三层的数据中心网络方案,是目前Kubernetes主流的网络方案。

下载YAML:

wget https://raw.githubusercontent.com/projectcalico/calico/v3.28.2/manifests/calico.yaml

下载完后还需要修改里面定义Pod网络(CALICO_IPV4POOL_CIDR),与前面kubeadm init的 --pod-network-cidr指定的一样。这一点在老版本需要修改文件,在新版本里面已经不需要了。

修改完后文件后,部署:

kubectl apply -f calico.yaml
kubectl get pods -n kube-system

等Calico Pod都Running,节点也会准备就绪。

以后所有yaml文件都只在Master节点执行。

安装目录/etc/kubernetes/

组件配置文件目录/etc/kubernetes/manifests/

参考资料:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/#pod-network

 7、部署 Dashboard

Dashboard是官方提供的一个UI,可用于基本管理K8s资源。

YAML下载地址

https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

 文件名是:kubernetes-dashboard.yaml

默认Dashboard只能集群内部访问,修改Service为NodePort类型,暴露到外部: 

vi recommended.yaml
...
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30001
  selector:
    k8s-app: kubernetes-dashboard
  type: NodePort
...

kubectl apply -f recommended.yaml
kubectl get pods -n kubernetes-dashboard

 访问地址:https://NodeIP:30001

创建service account并绑定默认cluster-admin管理员集群角色: 

# 创建用户
kubectl create serviceaccount dashboard-admin -n kubernetes-dashboard
# 用户授权
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:dashboard-admin
# 获取用户Token
kubectl create token dashboard-admin -n kubernetes-dashboard

 使用输出的token登录Dashboard。 

       以上是我本人一步一个脚印实战下来总结的基于kubeadm方式快速部署一套Kubernetes集群的步骤,如有不对的地方,还请大家多批评指正!

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

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

相关文章

1006每日一题

2 https://leetcode.cn/problems/maximize-the-topmost-element-after-k-moves/ 如果真的是堆的话&#xff0c;没有任何思路 如果是栈的话&#xff0c;先去找最大值所在的索引m&#xff0c;判断与k的关系 如果m>k&#xff0c;说明删k个也无法到当前的最大值或者到了也没法再…

分享7款AI学术论文生成器!一键实现论文生成器chat在线生成

在当今的学术研究和写作领域&#xff0c;AI论文写作工具的出现极大地提高了写作效率和质量。这些工具不仅能够帮助研究人员快速生成论文草稿&#xff0c;还能进行内容优化、查重和排版等操作。以下是七款值得推荐的AI学术论文生成器&#xff0c;它们通过一键生成的方式&#xf…

2024年4款PDF编辑工具分享,一起来看看

在日常的工作和生活中&#xff0c;PDF文档可以说是无处不在。它们既方便又稳定&#xff0c;但有时候&#xff0c;我们总需要对这些PDF文档进行一些修改或编辑。今天&#xff0c;我就从一个普通人的角度&#xff0c;来聊聊我用过的几款PDF编辑器在编辑PDF文档时的表现如何。 一、…

python写的window小工具-一键设置ip自动获取ip

最近有个需求,笔记本在公司上网需要设置固定ip&#xff0c;拿回家之后又要设置自动获取ip&#xff0c;有些美女同事根本就不知道怎么设置&#xff0c;所以我打算开发一个一键设置的小软件供大家使用。 但是不会c&#xff0c;也不会c#&#xff0c;更加不会vb&#xff0c;不可能…

东方仙盟——软件终端架构思维———未来之窗行业应用跨平台架构

一、创生.前世今生 在当今的数字化时代&#xff0c;我们的服务覆盖全球&#xff0c;拥有数亿客户。然而&#xff0c;这庞大的用户规模也带来了巨大的挑战。安全问题至关重要&#xff0c;任何一处的漏洞都可能引发严重的数据泄露危机。网络带宽时刻面临考验&#xff0c;稍有不足…

产品经理内容分享:产品经理必背面试题(一)

目录 1、互联网领域你最崇拜的人是谁?为什么? 2、公司会有多个产品经理&#xff0c;请问你们的分工是怎样的&#xff1f; 3、举例分析你知道的几种商业模式? 4、一份PRD文档通常应包含什么内容? 5、请你说一下产品的需求来源有哪些&#xff1f; 6、产品经理如何进行商…

【韩顺平Java笔记】第8章:面向对象编程(中级部分)【262-271】

文章目录 262. 回顾上一章内容263. IDEA介绍263.1 IDEA 介绍263.2 Eclipse 介绍 264. IDEA下载265. IDEA使用1257. IDEA使用2268. IDEA使用3268. 269. 270. IDEA快捷键1,2,3271. IDEA模板 262. 回顾上一章内容 看视频 263. IDEA介绍 263.1 IDEA 介绍 IDEA 全称 IntelliJ ID…

台湾高雄三维倾斜摄影模型3DTiles样例数据介绍

台湾一直是国内研究的重点方向&#xff0c;最主要的原因是祖国统一大业尚未完成&#xff0c;加上当前国际局势比较复杂&#xff0c;台湾及周边有众多不稳定因素&#xff0c;美国、日本等国家与台湾地区当局一直保持着紧密关系&#xff0c;成为祖国统一进程的一大阻碍。在国内众…

LSTM模型实现电力数据预测

关于深度实战社区 我们是一个深度学习领域的独立工作室。团队成员有&#xff1a;中科大硕士、纽约大学硕士、浙江大学硕士、华东理工博士等&#xff0c;曾在腾讯、百度、德勤等担任算法工程师/产品经理。全网20多万粉丝&#xff0c;拥有2篇国家级人工智能发明专利。 社区特色&a…

【c语言——指针详解(4)】

文章目录 一、回调函数是什么&#xff1f;二、qsort的使⽤1、使⽤qsort函数排序整型数据2、使⽤qsort排序结构数据 三、qsort函数的模拟实现 作者主页 一、回调函数是什么&#xff1f; 回调函数就是⼀个通过函数指针调⽤的函数。 如果你把函数的指针&#xff08;地址&#xf…

旅游管理自动化:SpringBoot系统设计与实现

第二章 相关技术简介 2.1 JAVA技术 本次系统开发采用的是面向对象的Java作为软件编程语言&#xff0c;Java表面上很像C&#xff0c;但是Java仅仅是继承了C的某些优点&#xff0c;程序员很少使用的C语言的特征在Java设计中去掉了。Java编程语言并没有什么结构&#xff0c;它把数…

HLS协议

HTTP Live Streaming&#xff08;缩写是 HLS&#xff09;是一个由苹果公司提出的基于 HTTP 的流媒体网络传输协议。它的工作原理是把整个流分成一个个小的基于 HTTP 的文件来下载&#xff0c;每次只下载一些。当媒体流正在播放时&#xff0c;客户端可以选择从许多不同的备用源中…

自然语言处理:第五十一章 LangChain面经

写在前面: 笔者更新不易&#xff0c;希望走过路过点个关注和赞&#xff0c;笔芯!!! 写在前面: 笔者更新不易&#xff0c;希望走过路过点个关注和赞&#xff0c;笔芯!!! 写在前面: 笔者更新不易&#xff0c;希望走过路过点个关注和赞&#xff0c;笔芯!!! 一. 什么是 LangChain…

JTAG在Chiplet测试中的应用

JTAG&#xff08;Joint Test Action Group&#xff09;在Chiplet&#xff08;芯粒&#xff09;测试中扮演着重要角色。Chiplet是一种具有特定功能的模块化小芯片&#xff0c;它们可以混合搭配成一个完整的系统&#xff0c;如CPU或GPU。随着Chiplet市场的快速发展&#xff0c;JT…

Linux 缓冲区

概念 用于临时存储数据的内存区域&#xff0c;目的是优化设备 I/O 操作&#xff0c;以提高传输效率 刷新方式 无缓冲(立即刷新)&#xff1a;write行缓冲(行刷新)&#xff1a;显示器文件全缓冲(缓冲区满刷新)&#xff1a;磁盘文件 刷新策略 强制刷新(fflush)进程退出的时候…

Qt_QSS介绍与使用

目录 1、QSS的语法介绍 2、QSS的基本使用 3、QSS的全局设置 4、样式的叠加特性 5、样式的优先级 6、使用Qt Designer设置样式 7、选择器种类介绍 7.1 类选择器 7.2 ID选择器 7.3 并集选择器 8、子控件选择器 9、伪类选择器 10、盒子模型 10.1 设置边框和内…

开源链动2+1模式、AI智能名片与S2B2C商城小程序在精准选品与定位决策中的应用

摘要&#xff1a;在当今竞争激烈的商业环境中&#xff0c;精准把握顾客偏好&#xff0c;实现有效选品与定位决策&#xff0c;已成为企业持续发展的关键。本文旨在探讨如何通过引入开源链动21模式、AI智能名片及S2B2C商城小程序等创新工具&#xff0c;来深度观测销售报表中的销量…

你还在为教学资料转换烦恼吗?4款神器安利给你,PDF转JPG一键搞定

工作或者学习的时候&#xff0c;我们经常得把PDF文件转换成JPG图片。可能是因为在手机上看起来方便&#xff0c;或者是想放到PPT里展示&#xff0c;反正把PDF转JPG的情况挺多的。那有什么好用的软件能做这个转换呢&#xff1f;今天我就给你们介绍几个好用的。 1. 福昕PDF高质量…

目标检测与图像分类:有什么区别?各自的使用场景是什么?

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

思维+数论,CF 922C - Cave Painting

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 922C - Cave Painting 二、解题报告 1、思路分析 诈骗题 我们发现 n mo…