k8s的部署

一、K8S简介

Kubernetes中文官网:Kubernetes

GitHub:github.com/kubernetes/kubernetes

Kubernetes简称为K8s,是用于自动部署、扩缩和管理容器化应用程序的开源系统,起源于Google 集群管理工具Borg。

Kubernetes集群组件逻辑图

k8s集群属于Master-Slave主从架构,Master节点负责集群管理和资源调度,用于运行控制平面组件(Control Plane Components),Slave节点就是工作负载节点,一般称为Node节点,也叫Worker节点,主要负责运行Pod,一个Pod里可以同时运行多个容器,而容器一般封装的就是基于Dokcer打包的应用,Pod英文叫豌豆荚,每个容器就像是一颗豌豆,简单来说Pod就是一组容器。

安装部署

二进制包
Github下载稳定版的二进制包,手动部署每个组件组成k8s集群。

kubeadm工具
使用Kubeadm工具可以快速搭建一个k8s集群,主要包括初始化控制平面节点和加入Worker节点,提供的主要功能如下:

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

 

二、准备工作

软硬件要求

  • Linux操作系统,Ubuntu 或 CentOS
  • 每台节点至少2G
  • Master节点至少2C
  • 集群节点网络互通

环境配置

修改hosts配置

配置所有节点的IP和域名映射

# vim /etc/hosts

172.25.254.100 k8s_master  

172.25.254.10 k8s_node1   

172.25.254.20 k8s_node2    

关闭Swap分区

kubelet要求必须禁用交换分区,所以kubeadm初始化时回检测swap是否关闭,如果没有关闭会报错,如果不想关闭安装时kubelet命令需要添加--fail-swap-on=false,关闭Swap分区必须在所有节点上执行如下命令:

# 临时关闭,重启恢复
[root@k8s_node1 ~]# swapoff -a
# 永久关闭,注释swap行
[root@k8s_node1 ~]# cat /etc/fstab
# /dev/mapper/centos-swap swap                    swap    defaults        0 0


禁用SELinux

所有节点执行如下命令:

[root@k8s_node1 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux

关闭防火墙

所有节点执行如下命令:

[root@k8s_node1 ~]# systemctl disable firewalld
[root@k8s_node1 ~]# systemctl stop firewalld

配置k8s的Yum源

[root@k8s_node1 ~]# cat  /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0

三、下载并安装docker 


[root@k8smaster yum.repos.d]# dnf install docker-ce -y
 
正在更新 Subscription Management 软件仓库。
无法读取客户身份
 
本系统尚未在权利服务器中注册。可使用 subscription-manager 进行注册。
 
上次元数据过期检查:0:02:44 前,执行于 2024年10月06日 星期日 16时57分04秒。
依赖关系解决。
========================================================================
 软件包                     架构    版本               仓库        大小
========================================================================
安装:
 docker-ce                  x86_64  3:27.3.1-1.el9     docker-ce   27 M
安装依赖关系:
 containerd.io              x86_64  1.7.22-3.1.el9     docker-ce   43 M
 docker-ce-cli              x86_64  1:27.3.1-1.el9     docker-ce  7.9 M
安装弱的依赖:
 docker-buildx-plugin       x86_64  0.17.1-1.el9       docker-ce   14 M
 docker-ce-rootless-extras  x86_64  27.3.1-1.el9       docker-ce  4.4 M
 docker-compose-plugin      x86_64  2.29.7-1.el9       docker-ce   13 M
 
事务概要
========================================================================
安装  6 软件包

配置认证 

[root@k8s_master ~]# mkdir -p /etc/docker/certs.d/reg.mqw.org/
 
 
[root@hub harbor]# scp /data/certs/mqw.org.crt root@172.25.254.100:/etc/docker/certs.d/reg.mqw.org/ca.crt
 
root@172.25.254.100's password: 
mqw.org.crt                           100% 2114     1.5MB/s   00:00   

指定docker默认的仓库 

[root@k8s_master ~]# cd /etc/docker/
[root@k8s_master docker]# vim daemon.json
{  "registry-mirrors": ["https://reg.mqw.org"]  }

[root@k8s_master docker]# systemctl enable --now docker

添加配置模块 

#开机时能自动激活
[root@k8s_master ~]# echo br_netfilter > /etc/modules-load.d/docker_mod.conf 

[root@k8s_master ~]# modprobe br_netfilter
[root@k8s_master ~]# vim /etc/sysctl.d/docker.conf
 
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
 [root@k8s_master ~]# sysctl --system 

[root@k8s_master ~]# systemctl restart docker

 四、配置k8s

配置软件仓库

#都配置

[root@k8s-master ~]# cd /etc/yum.repos.d/
[root@k8s-master yum.repos.d]# vim k8s.repo

安装三大组件-kubeadm、kubelet、kubectl

  • kubeadm:用来初始化k8s集群的指令。
  • kubelet:在集群的每个节点上用来启动 Pod 和容器等。
  • kubectl:用来与k8s集群通信的命令行工具,查看、创建、更新和删除各种资源

# 所有节点都安装
[root@k8s-node1 ~]# yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9
# 所有节点设置开机启动
[root@k8s-node1 ~]# systemctl enable kubelet

 [root@k8s-master ~]# dnf install *.rpm -y

[root@k8s-master ~]# vim /lib/systemd/system/cri-docker.service 

启动 

[root@k8s-master ~]# systemctl enable --now cri-docker.service 
[root@k8s-master ~]# systemctl enable --now kubelet.service 

在master节点拉取k8s镜像

root@k8s-master ~]# kubeadm config images pull \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.30.0 \
--cri-socket=unix:///var/run/cri-dockerd.sock
 
上传镜像到harbor仓库
[root@k8s-master ~]# docker images | awk '/google/{ print $1":"$2}' \
| awk -F "/" '{system("docker tag "$0" reg.timinglee.org/k8s/"$3)}'
 
[root@k8s-master ~]# docker images  | awk '/k8s/{system("docker push "$1":"$2)}'

 

上传到hub仓库 

打上标签上传 

[root@k8s-master ~]# docker tag registry.aliyuncs.com/google_containers/kube-apiserver:v1.30.0 reg.mqw.org/k8s/kube-apiserver:v1.30.0
 
[root@k8s-master ~]# docker push reg.mqw.org/k8s/kube-apiserver:v1.30.0
 
[root@k8s-master ~]# docker tag registry.aliyuncs.com/google_containers/kube-controller-manager:v1.30.0 reg.mqw.org/k8s/kube-controller-manager:v1.30.0
 
[root@k8s-master ~]# docker push reg.mqw.org/k8s/kube-controller-manager:v1.30.0
 
[root@k8s-master ~]# docker tag registry.aliyuncs.com/google_containers/kube-scheduler:v1.30.0 reg.mqw.org/k8s/kube-scheduler:v1.30.0
 
[root@k8s-master ~]# docker push reg.mqw.org/k8s/kube-scheduler:v1.30.0
 
[root@k8s-master ~]# docker tag registry.aliyuncs.com/google_containers/kube-proxy:v1.30.0 reg.mqw.org/k8s/kube-proxy:v1.30.0
 
[root@k8s-master ~]# docker push reg.mqw.org/k8s/kube-proxy:v1.30.0
 
[root@k8s-master ~]# docker tag registry.aliyuncs.com/google_containers/coredns:v1.11.3 reg.mqw.org/k8s/coredns:v1.11.3
 
[root@k8s-master ~]# docker push reg.mqw.org/k8s/coredns:v1.11.3
 
[root@k8s-master ~]# docker tag registry.aliyuncs.com/google_containers/pause:3.9 reg.mqw.org/k8s/pause:3.9
 
[root@k8s-master ~]# docker push reg.mqw.org/k8s/pause:3.9
 
[root@k8s-master ~]# docker tag  registry.aliyuncs.com/google_containers/etcd:3.5.15-0 reg.mqw.org/k8s/etcd:3.5.15-0
 
[root@k8s-master ~]# docker push reg.mqw.org/k8s/etcd:3.5.15-0

 集群

初始化

[root@k8smaster ~]#  kubeadm init --pod-network-cidr=10.244.0.0/16 \
> --image-repository reg.mqw.org/k8s \
> --kubernetes-version v1.30.0 \
> --cri-socket=unix:///var/run/cri-dockerd.sock

#指定集群配置文件变量
[root@k8s-master ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile 
[root@k8s-master ~]# source ~/.bash_profile 
#设置kubectl命令补齐功能
[root@k8s-master ~]#  echo "source <(kubectl completion bash)" >> ~/.bashrc
[root@k8s-master ~]#  source  ~/.bashrc

 

安装网络插件

[root@k8s-master ~]# wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
[root@k8s-master ~]# docker pull docker.io/flannel/flannel:v0.25.5
[root@k8s-master ~]# docekr docker.io/flannel/flannel-cni-plugin:v1.5.1-flannel1
 
[root@k8s-master ~]# docker tag flannel/flannel:v0.25.5 \
reg.timinglee.org/flannel/flannel:v0.25.5
[root@k8s-master ~]# docker tag flannel/flannel-cni-plugin:v1.5.1-flannel1 \
reg.timinglee.org/flannel/flannel-cni-plugin:v1.5.1-flannel
 
[root@k8s-master ~]# docker push reg.timinglee.org/flannel/flannel:v0.25.5
[root@k8s-master ~]# docker push reg.timinglee.org/flannel/flannel-cni-plugin:v1.5.1-flannel1
 
#编辑kube-flannel.yml 修改镜像下载位置
[root@k8s-master ~]# vim kube-flannel.yml
 
146:        image: reg.timinglee.org/flannel/flannel:v0.25.5
173:        image: reg.timinglee.org/flannel/flannel-cni-plugin:v1.5.1-flannel1
184:        image: reg.timinglee.org/flannel/flannel:v0.25.5
 
#安装flannel网络插件
[root@k8s-master ~]# kubectl apply -f kube-flannel.yml

 启用服务

[root@k8s-node1 ~]# systemctl start kubelet.serv

#复制令牌

[root@k8s-node1 ~]# kubeadm join 172.25.254.100:6443 --token n3u7gu.zzumlnbhevtohv9f --discovery-token-ca-cert-hash sha256:0c08e6ff75578e3b1778cf72c7e81c91397c4ec6de21ac5abde16c71a6df34d3 --cri-socket=unix:///var/run/cri-dockerd.sock 

五、K8s命令

基础命令 

1.显示集群版本
[root@k8s-master ~]# kubectl version
2.显示集群信息
[root@k8s-master ~]# kubectl cluster-info
3.给镜像打标签
[root@k8s-master ~]# docker tag busybox:latest reg.timinglee.org/mnwl/busybox:latest
4.上传本地镜像到镜像仓库
[root@k8s-master ~]# docker push reg.timinglee.org/mnwl/busybox:latest
5.创建一个名为webcluster的控制器,pod数量为2
[root@k8s-master ~]# kubectl create deployment webcluster --image reg.timinglee.org/mnwl/nginx:laest --replicas 2
6.查看控制器
[root@k8s-master ~]# kubectl get deployments.apps
7.查看资源帮助
[root@k8s-master ~]# kubectl explain deployment
8.查看控制器参数帮助
[root@k8s-master ~]# kubectl explain deployment.spec
9.编辑控制器
[root@k8s-master ~]# kubectl edit deployment.apps webcluster
10.利用补丁更改控制器数量
[root@k8s-master ~]# kubectl patch deployments.apps webcluster -p '{"spec":{"replicas":3}}'
11.删除控制器资源
[root@k8s-master ~]# kubectl delete deployments.apps webcluster

运行和调试命令 

1.运行pod
[root@k8s-master ~]# kubectl run testpod --image reg.timinglee.org/mnwl/nginx:latest
[root@k8s-master ~]# kubectl get pods
2.端口暴露
[root@k8s-master ~]# kubectl get services
[root@k8s-master ~]# kubectl expose pod testpod --port 80 --target-port 80
3.查看资源详细信息
[root@k8s-master ~]# kubectl describe pods testpod
4.快速删除资源信息
[root@k8s-master ~]# kubectl delete pods/testpod --force
5.查看资源日志
[root@k8s-master ~]# kubectl logs pods/testpod
6.进行交互pod
[root@k8s-master ~]# kubectl run -it testpod --image reg.timinglee.org/mnwl/busybox
[root@k8s-master ~]# kubectl attach pods/testpod -it
[root@k8s-master ~]# kubectl exec -it pods/testpod /bin/sh
7.本机和pod的文件交换
[root@k8s-master ~]# kubectl cp anaconda-ks.cfg testpod:/

高级命令 

1.利用命令生成yaml文件
[root@k8s-master ~]# kubectl create deployment --image reg.timinglee.org/mnwl/nginx webc  luster  --dry-run=client -o yaml > webcluster.yml
2.利用yaml文件生成资源
[root@k8s-master ~]# kubectl apply -f webcluster.yml
3.管理资源标签
[root@k8s-master ~]# kubectl run nginx --image reg.timinglee.org/mnwl/nginx:latest
[root@k8s-master ~]# kubectl get pods --show-labels
4.添加标签
[root@k8s-master ~]# kubectl label pods nginx app=mnwl
5.更改标签
[root@k8s-master ~]# kubectl label pods nginx app=cluster --overwrite
6.删除标签
[root@k8s-master ~]# kubectl label pods nginx app-
7.用控制器管理的pod,删除pod,会自动创建pod,除非删除控制器
[root@k8s-master network-scripts]# kubectl get pod
NAME                          READY   STATUS    RESTARTS   AGE
testpod                       1/1     Running   0          4h48m
webcluster-7697fbcd88-jmmcp   1/1     Running   0          3h49m
[root@k8s-master ~]# kubectl delete pod webcluster-7697fbcd88-jmmcp
pod "webcluster-7697fbcd88-jmmcp" deleted
[root@k8s-master ~]# kubectl get pod
NAME                          READY   STATUS    RESTARTS   AGE
testpod                       1/1     Running   0          4h50m
webcluster-7697fbcd88-9bk8t   1/1     Running   0          4s

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

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

相关文章

AI核身-金融场景凭证篡改检测Baseline实践

金融领域交互式自证业务中涵盖信用成长、用户开户、商家入驻、职业认证、商户解限等多种应用场景&#xff0c;通常都需要用户提交一定的材料&#xff08;即凭证&#xff09;用于证明资产收入信息、身份信息、所有权信息、交易信息、资质信息等&#xff0c;而凭证的真实性一直是…

柑橘缺陷病害识别数据集YOLO 1290张,xml和txt标签都有;5类别:yolov5-v10通用 包含数据集➕模型➕可视化界面

YOLO柑橘缺陷病害识别数据集 ✓图片数量1290&#xff0c;xml和txt标签都有&#xff1b; 5类 类别&#xff1a;Orange-Black-Spot&#xff0c;Orange-Canker &#xff0c;Orange-Greening&#xff0c;Orange-Healthy&#xff0c;Orange-Melanose&#xff1b; 数据集 YOLO柑橘缺…

微信支付商家转账到零钱审核不通过解决方法

商家转账到零钱功能通常指的是微信支付提供的一项服务&#xff0c;允许商家将资金转账至用户的微信零钱账户。以下是商家转账到零钱的最优申请方案总结&#xff1a; 一、申请条件确认 1. 主体资格&#xff1a; a.申请主体必须为公司性质&#xff08;有限公司类型&#xff09;…

Apache Doris介绍

Apache Doris 的发展 Apache Doris 是一款基于 MPP 架构的高性能、实时的分析型数据库&#xff0c;以高效、简单、统一的特点被人们所熟知&#xff0c;仅需亚秒级响应时间即可返回海量数据下的查询结果&#xff0c;不仅可以支持高并发的点查询场景&#xff0c;也能支持高吞吐的…

【LeetCode每日一题】——724.寻找数组的中心下标

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目注意】六【题目示例】七【题目提示】八【解题思路】九【时间频度】十【代码实现】十一【提交结果】 一【题目类别】 前缀和 二【题目难度】 简单 三【题目编号】 724.寻找数组的中心下标 四【…

挖掘空间数据要素典型领域应用场景

空间数据要素作为数字经济的基石&#xff0c;正在多个领域发挥着重要作用。随着技术的发展&#xff0c;空间数据的应用场景不断拓展&#xff0c;为各行各业带来了深刻的变革。以下是几个典型的空间数据要素应用领域&#xff1a; 1. 城市规划与管理 空间数据在城市规划和管理中…

opencv学习:人脸识别器特征提取BPHFaceRecognizer_create算法的使用

BPHFaceRecognizer_create算法 在OpenCV中&#xff0c;cv2.face.LBPHFaceRecognizer_create()函数用于创建一个局部二值模式直方图&#xff08;Local Binary Patterns Histograms&#xff0c;简称LBPH&#xff09;人脸识别器。LBPH是一种用于人脸识别的特征提取方法&#xff0…

Python 入门(二、什么是 Python 的虚拟环境)

Python 入门第二课 &#xff0c;Python 的虚拟环境...... by 矜辰所致前言 本来以为环境搭建好了&#xff0c;就直接开始敲代码了&#xff0c;但是一直看到一个专业词汇&#xff1a;虚拟环境。 对于习惯了嵌入式 C 语言开发博主来说&#xff0c;一开始确实有点不明白&#xf…

k8s杂记

在node节点内部使用kubectl&#xff1a; rootmultinode-demo-m02:/# ps aux | grep kubelet root 218 3.1 1.6 2066316 62516 ? Ssl 07:35 0:29 /var/lib/minikube/binaries/v1.30.0/kubelet --bootstrap-kubeconfig/etc/kubernetes/bootstrap-kubelet.con…

PL/SQL Developer如何连接Oracle数据库(汉化)

简介 PL/SQL Developer是一种用于Oracle数据库开发的集成开发环境&#xff08;IDE&#xff09;。它提供了一个可视化的界面&#xff0c;使开发人员能够方便地编写、调试和执行PL/SQL代码。PL/SQL Developer还具有其他功能&#xff0c;如数据库对象浏览器、SQL编辑器、数据导入…

JavaScript | 定时器(setInterval和clearInterval)的使用

效果图如下&#xff1a; 当用户第一次看到这个页面时&#xff0c;按钮是不可点击的&#xff0c;并显示一个5秒的倒计时。倒计时结束后&#xff0c;按钮变为可点击状态&#xff0c;并显示“同意协议”。这样做的目的是确保用户有足够的时间阅读用户协议。 <!DOCTYPE html>…

AI核身-金融场景凭证篡改检测YOLO原理

引言 YOLO (You Only Look Once) 模型是一种先进的实时目标检测算法&#xff0c;它在计算机视觉领域具有重要的地位。YOLO以其速度和准确性而闻名&#xff0c;能够快速识别图像和视频中的各种物体。这使得它在自动驾驶、安全监控、机器人技术、医学影像分析等众多领域都有着广…

HTML+CSS总结【量大管饱】

文章目录 前言HTML总结语义化标签常用标签H5新的语义元素H5的媒体标签\<embed> 元素&#xff08;少用&#xff09;\<object>元素&#xff08;少用&#xff09;\<audio>\<video> 元素包含关系iframe元素嵌入flash内容常用表单inputselect CSS总结权重样…

【JAVA毕业设计】基于Vue和SpringBoot的渔具租赁系统

本文项目编号 T 005 &#xff0c;文末自助获取源码 \color{red}{T005&#xff0c;文末自助获取源码} T005&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 渔…

Go 语言应用开发:从入门到实战

Go 语言应用开发&#xff1a;从入门到实战 引言 Go&#xff08;Golang&#xff09;是由 Google 开发的一种开源编程语言&#xff0c;设计初衷是提高编程效率&#xff0c;尤其是在高并发场景下表现出色。Go 语言以其简洁、易学、高效并发的特性&#xff0c;逐渐成为开发者的首…

如何将mov格式的视频转换mp4?5种解决方法任你选!

MOV即QuickTime影片格式&#xff0c;它是Apple公司开发的一种音频、视频文件格式&#xff0c;用于存储常用数字媒体类型。然而&#xff0c;它的兼容性主要局限于苹果生态系统。有时&#xff0c;我们需要IOS和Mac设备的视频图片保存到安卓手机或Windows系统中&#xff0c;却发现…

在线matlab环境

登陆https://ww2.mathworks.cn/ 在线文档https://ww2.mathworks.cn/help/index.html 在线环境[需要先登陆]

Java - WebSocket

一、WebSocket 1.1、WebSocket概念 WebSocket是一种协议&#xff0c;用于在Web应用程序和服务器之间建立实时、双向的通信连接。它通过一个单一的TCP连接提供了持久化连接&#xff0c;这使得Web应用程序可以更加实时地传递数据。WebSocket协议最初由W3C开发&#xff0c;并于2…

虚拟机VMware Workstation下CentOS7与主机Windows系统的文件夹共享

虚拟机设置&#xff1a; Linux中安装&#xff1a; yum install open-vm-tools# 判断是否共享&#xff0c;显示共享文件夹则为成功&#xff1a; vmware-hgfsclient# 挂载&#xff1a; vmhgfs-fuse .host:/ /mnt/hgfs/

ubuntu24 finalshell 无法连接ubuntu服务器, 客户端无法连接ubuntu, 无法远程连接ubuntu。

场景&#xff1a; 虚拟机新创建一个最小化的ubuntu服务器&#xff0c;使用finalshell连接服务&#xff0c;发现连接不上。 1. 查看防火墙ufw 是否开启&#xff0c;22端口是否放行 2. 查看是否安装openssh server, 并配置 我的问题是安装了openssh server 但是没有配置root可…