kubeadm快速部署k8s集群

文章目录

  • Kubernetes简介
  • 1、k8s集群环境
  • 2、linux实验环境初始化【所有节点】
  • 3、安装docker容器引擎【所有节点】
  • 4、安装cri-dockerd【所有节点】
  • 5、安装 kubeadm、kubelet、kubectl【所有节点】
  • 6、部署 k8s master 节点【master节点】
  • 7、加入k8s Node 节点【node节点】
  • 8、部署容器网络(CNI) 【所有节点】
  • 9、部署dashboard【所有YAML文件在Master节点上执行】
  • 10、在dashboard部署Nginx镜像
  • 11、搭建完集群后,建议虚拟机做快照

Kubernetes简介

Kubernetes,简称k8s,容器编排引擎,以API编程的方式管理安排各个容器的引擎。

  • k8s会在多台node服务器上调度pod进行部署和扩缩容
  • 每个pod内部可以含有多个container
  • 每个container本质上就是一个服务进程
    在这里插入图片描述

1、k8s集群环境

  • 工具:kubeadm
  • 软件环境:
    操作系统 CentOS7.2_x64【建议7.9,7.2版本需升级内核】
    Docker 24.0.0(CE)
    Kubernetes 1.30
  • 服务器规划:
节点IP
k8s-master10.12.16.11
k8s-node110.12.16.12
k8s-node210.12.16.13
  • 架构如下:
    在这里插入图片描述

2、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    # 永久# 根据规划设置主机名
hostnamectl set-hostname <hostname># 将桥接的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  # 生效# 时间同步
yum install ntpdate -y
ntpdate time.windows.com

3、安装docker容器引擎【所有节点】

  • 安装docker
wget http://mirrors.aliyun.com/repo/Centos-7.repo -O /etc/yum.repos.d/CentOS-Base.repo sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.reposed -i 's/\$releasever/7/g' /etc/yum.repos.d/CentOS-Base.repoyum makecache
yum -y updateyum install lrzsz -y  wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repoyum -y install docker-ce
systemctl enable docker && systemctl start docker
  • 配置镜像下载加速器
cat > /etc/docker/daemon.json << EOF
{"registry-mirrors": ["https://docker.m.daocloud.io","https://b9pmyelo.mirror.aliyuncs.com","http://dockerhub.aliangedu.cn"],"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
systemctl restart docker
docker info

4、安装cri-dockerd【所有节点】

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

cri-dockerd 作为代理,作为k8s与docker的桥梁

wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.2/cri-dockerd-0.3.2-3.el7.x86_64.rpmrpm -ivh cri-dockerd-0.3.2-3.el7.x86_64.rpm

在这里插入图片描述

  • 指定依赖镜像地址
vim /usr/lib/systemd/system/cri-docker.service
# fd:// +空格 + --pod-infra*
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9
systemctl daemon-reload 
systemctl enable cri-docker && systemctl start cri-docker

5、安装 kubeadm、kubelet、kubectl【所有节点】

  • 安装 k8s 源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/repodata/repomd.xml.key
EOF
  • 安装kubeadm、kubelet、kubectl
yum install -y kubelet-1.30.0 kubeadm-1.30.0 kubectl-1.30.0
systemctl enable kubelet# 系统7.2版本需要 升级内核支持k8s,在/boot/config-*文件中追加 CONFIG_CGROUP_PIDS=y
echo 'CONFIG_CGROUP_PIDS=y' >> /boot/config-3.10.0-327.el7.x86_64
sudo yum update kernel -y
reboot
kubeadm工具常用命令:
•kubeadm init:初始化一个Master节点
•kubeadm join:将工作节点加入集群
•kubeadm upgrade:升级K8s版本
•kubeadm token:管理 kubeadm join 使用的令牌
•kubeadm reset:清空 kubeadm init 或者 kubeadm join 对主机所做的任何更改
•kubeadm version:打印 kubeadm 版本
•kubeadm alpha:预览可用的新功能

6、部署 k8s master 节点【master节点】

k8s-master(10.12.16.11)中执行如下:

kubeadm init \--apiserver-advertise-address=10.12.16.11 \--image-repository registry.aliyuncs.com/google_containers \--kubernetes-version v1.30.0 \--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
  mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config
# 参数解释
•--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认证文件到默认路径:
  • 此时就可以使用kubectl工具管理K8s集群了,例如查看节点:
    在这里插入图片描述
    (注:由于网络插件还没有部署,节点会处于NotReady状态)

7、加入k8s Node 节点【node节点】

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

kubeadm join 10.12.16.11:6443 --token fvmhoe.opbjzwxj1vf6r9rt \--discovery-token-ca-cert-hash sha256:f2f25cf7bf0a7c8bc8c708cd4fe951cbc75cc704e8cb2d886224560262dd2f25 --cri-socket=unix:///var/run/cri-dockerd.sock

在这里插入图片描述

为了安全性,上述命令中的token,默认有效期为24小时,当过期后,就无法使用该命令再加入节点了。需要重新生成加入节点命令:

kubeadm token create --print-join-command

在这里插入图片描述
在这里插入图片描述

参考资料:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-join/

8、部署容器网络(CNI) 【所有节点】

目前三台节点状态均为 NotReady,由于网络插件还没有部署,节点会处于NotReady状态在这里插入图片描述

Calico是一个纯三层的数据中心网络方案,是目前Kubernetes主流的网络方案。
官方部署文档:https://docs.tigera.io/calico/latest/getting-started/kubernetes/quickstart

  • 【 master节点】这步仅master节点
unzip calico-operator.zip
kubectl create -f tigera-operator.yaml 
kubectl create -f custom-resources.yaml 
  • 【所有节点】
unzip calico-image-3.25.1.zip
cd calico-image-3.25.1/
ls *.tar |xargs -i docker load -i {}    # 导入镜像
  • 【所有节点】
unzip dashboard-image-2.7.zip 
cd dashboard-image-2.7/
ls *.tar |xargs -i docker load -i {}    #  导入镜像

应用完成后,等待5分钟后,查看Pod运行状态:

kubectl get pods -n calico-system

所有节点状态都running了,节点状态也是 ready!!

在这里插入图片描述
Calico容器处于Running状态,节点也会准备就绪。

9、部署dashboard【所有YAML文件在Master节点上执行】

Dashboard是官方提供的一个UI,可用于基本管理K8s资源。
YAML下载地址:
https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

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

  • kubernetes-dashboard.yaml 文件内容
kind: Service
apiVersion: v1
metadata:labels:k8s-app: kubernetes-dashboardname: kubernetes-dashboardnamespace: kubernetes-dashboard
spec:ports:- port: 443targetPort: 8443nodePort: 30001selector:k8s-app: kubernetes-dashboardtype: NodePort
  • 应用yaml
# kubectl apply -f recommended.yaml
kubectl apply -f kubernetes-dashboard.yaml # kubernetes-dashboard.yaml 离线文件
kubectl get pods -n kubernetes-dashboard

在这里插入图片描述

  • 访问地址:https://NodeIP:30001【任意node】
    • https://10.12.16.13:30001
    • 下一步在master节点创建管理员后,拿到token登录

在这里插入图片描述

  • 命令行创建用户【master节点】
# 创建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
    在这里插入图片描述
  • 使用输出的token登录Dashboard。将进入到首页:
    在这里插入图片描述
  • 点击登录
    在这里插入图片描述
  • 查看集群的nodes
    在这里插入图片描述

10、在dashboard部署Nginx镜像

  • 创建资源
    在这里插入图片描述

  • 从表单创建
    service 选 External 对外暴露
    在这里插入图片描述

  • 点击部署后
    在这里插入图片描述
    等1分钟左右(线上拉取镜像)
    在这里插入图片描述

  • 在services拿到nginx端口,访问
    在这里插入图片描述
    成功 !!
    在这里插入图片描述

11、搭建完集群后,建议虚拟机做快照

- Kubernetes安装目录:/etc/kubernetes/
  • 问题解决:
    https://blog.csdn.net/weixin_38146924/article/details/117519139

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

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

相关文章

【JavaWeb程序设计】JSP访问数据库

目录 一、安装Mysql&#xff0c;设置好数据库的账户和密码 二、JSP访问数据库的步骤 ①加载数据库驱动程序&#xff1b; ②建立连接对象&#xff1b; ③创建语句对象&#xff1b; ④获得结果集&#xff1b; ⑤关闭有关连接对象。 三、实现个人信息的查询和展示 1、新增…

缓存-缓存使用2

1.缓存击穿、穿透、雪崩 1.缓存穿透 指查询一个一定不存在的数据&#xff0c;由于缓存是不命中&#xff0c;将去查询数据库&#xff0c;但是数据库也无此纪录&#xff0c;我们没有将这次查询的null写入缓存&#xff0c;这将导致这个不存在的数据每次请求都要到存储层去查询&a…

java信号量(Semaphore)

Java中的信号量&#xff08;Semaphore&#xff09;是一种用于控制多个线程对共享资源的访问的同步工具。它可以用来限制可以同时访问某些资源的线程数量。Semaphore 提供了一个计数器来管理许可证的获取和释放&#xff0c;每个许可证代表对资源的一次访问权限。 import java…

【Python进阶】函数的扩展

函数 目录 函数 一、容器知识补充 1、字典遍历方法 2、遍历字典元素 keys()方法&#xff1a; values()方法&#xff1a; items()方法&#xff1a; 3、公共运算符 4、公共方法 二、函数介绍 1、函数的概念 2、引入函数 3、函数定义与调用 4、函数的参数 5、函数…

机器学习与深度学习:区别(含工作站硬件推荐)

一、机器学习与深度学习区别 机器学习&#xff08;ML&#xff1a;Machine Learning&#xff09;与深度学习&#xff08;DL&#xff1a;Deep Learning&#xff09;是人工智能&#xff08;AI&#xff09;领域内两个重要但不同的技术。它们在定义、数据依赖性以及硬件依赖性等方面…

Unity扩展 Text支持超链接文本

重点提示&#xff1a;当前的文本扩展支持多个超链接&#xff0c;支持修改超链接规则和支持修改超链接颜色。 近期在邮件文本中用到了超链接。最初是在邮件窗口中新加一个按钮用来超链接跳转&#xff0c;之后发现效果表现不如直接在文本中添加&#xff0c;后经过几个小时的资料…

日本服务器托管需要注意哪些问题

日本服务器托管是一项涉及多方面因素的重要决策&#xff0c;为了确保托管服务的稳定、高效与安全&#xff0c;企业或个人在托管过程中需要注意以下几个关键问题&#xff1a; 首先&#xff0c;数据中心的基础设施建设标准是决定托管稳定性的关键。这包括数据中心的建筑抗震、抗洪…

拍桌子、甩脸子、抡棒子没用,带出一流战斗力团队用好3招就够了

拍桌子、甩脸子、抡棒子没用&#xff0c;带出一流战斗力团队用好3招就够了 第一招&#xff1a;及时激励 在现实中&#xff0c;绝大部分管理者管理手段缺乏&#xff0c;只知道用钱进行激励。 而真正的高手不仅会满足员工物质上的需求&#xff0c;更注重员工心理上的满足。 他…

水箱高低水位浮球液位开关工作原理

工作原理 水箱高低水位浮球液位开关是一种利用浮球随液位升降来实现液位控制的设备。其基本原理是浮球在液体的浮力作用下上下浮动&#xff0c;通过磁性作用驱动与之相连的磁簧开关的开合&#xff0c;从而实现液位的高低控制和报警。当液位升高时&#xff0c;浮球上浮&#xf…

04-ArcGIS For JavaScript的可视域分析功能

文章目录 综述代码实现代码解析结果 综述 在数字孪生或者实景三维的项目中&#xff0c;视频融合和可视域分析&#xff0c;一直都是热点问题。Cesium中&#xff0c;支持对阴影的后处理操作&#xff0c;通过重新编写GLSL代码就能实现视域和视频融合的功能。ArcGIS之前支持的可视…

Kubernetes分享

幂等性(Idempotency) 介绍 简单来说&#xff0c;幂等性幂等性(Idempotency)是计算机科学中的一个重要概念&#xff0c;特别是在分布式系统和网络应用中。指的是某个操作可以重复执行多次&#xff0c;但其结果是相同的&#xff0c;不会因为多次执行而改变系统的状态。 https://…

IT之家最新科技热点 | 小米 AI 研究院开创多模态通用模型

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

【计算机视觉】基于OpenCV的直线检测

直线检测原理 霍夫变换是图像处理必然接触到的一个算法&#xff0c;它通过一种投票算法检测具有特定形状的物体,该过程在一个参数空间中通过计算累计结果的局部最大值得到一个符合该特定形状的集合作为霍夫变换结果&#xff0c;该方法可以进行圆&#xff0c;直线&#xff0c;椭…

Java入门-异常机制

java异常机制 异常概念 在Java中&#xff0c;异常处理(exception handling) : java语言或者程序员开发提供的一种机制&#xff0c;当有不正常的情况发生时&#xff0c;可以发出信号。这种发出信号的过程被称为抛出异常(throwing an exception)。 java异常体系 Error Error类对…

Android OpenGL ES 离屏幕渲染1——EGL环境的创建,以及基础概念的理解

创建EGL上下文、配置EGL环境、创建EGL DISPLAY 什么是EGL&#xff1a; 由于OpenGL ES并不负责窗口管理以及上下文管理&#xff0c;该职责由各个平台自行完成&#xff1b;在Android平台下OpenGL ES的上下文环境是依赖EGL的API进行搭建的。 对于EGL这个框架&#xff0c;谷歌已经提…

测试环境:使用OpenSSL生成证书并配置Https

文章目录 需求1、安装OpenSSL1.1、安装包下载1.2、安装&#xff08;以window 64位为例&#xff09;1.3、配置环境变量&#xff08;非必须&#xff09; 2、生成证书2.1、新建文件夹2.2、生成根证书2.2.1、生成私钥2.2.2、生成根证书&#xff0c;并且自签名 2.3、服务端证书生成2…

【双一流高校主办,Springer-LNICST出版,EI稳定检索】2024年应用计算智能、信息学与大数据国际会议(ACIIBD 2024,7月26-28)

2024年应用计算智能、信息学与大数据国际学术会议&#xff08;ACIIBD 2024&#xff09;将于2024年7月26-28日在中国广州举办。会议将聚焦于计算智能及其应用、信息、大数据等相关的研究领域&#xff0c; 广泛邀请国内外知名专家学者&#xff0c;共同探讨相关学科领域的最新发展…

rsyslog日志转发

前言 Rsyslog可用于接受来自各种来源(本地和网络)的输入&#xff0c;转换它们&#xff0c;并将结果输出到不同&#xff08;通过模板和filter过滤&#xff09;的目的地&#xff08;目录文件中&#xff09; rsyslog是一个开源工具&#xff0c;被广泛用于Linux系统以通过TCP/UDP…

[spring] Spring MVC - security(上)

[spring] Spring MVC - security&#xff08;上&#xff09; 这部分的内容基本上和 [spring] rest api security 是重合的&#xff0c;主要就是添加 验证&#xff08;authentication&#xff09;和授权&#xff08;authorization&#xff09;这两个功能 即&#xff1a; 用户…

python自动化办公之cryptography加密解密

目录 用到的库 实现效果 代码部分 1、加密2024.txt文件 2、解密2024.txt文件 用到的库 cryptography 实现效果 加密文件和解密文件 代码部分 1、加密2024.txt文件 # 加密 from cryptography.fernet import Fernet # 生成加密密钥 keyFernet.generate_key() cipher_s…