K8S简介、使用教程
以下是关于 Kubernetes(通常缩写为 K8S)的简介和使用教程:
一、Kubernetes 简介
-
定义与作用
Kubernetes 是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它最初由谷歌开发,后捐赠给云原生计算基金会(CNCF),并成为云原生领域中非常重要的基础设施。在如今的软件开发和部署场景中,随着容器技术(如 Docker)的广泛应用,Kubernetes 能够帮助开发者和运维团队高效地管理大量的容器,确保应用程序在不同的环境(如开发、测试、生产环境)中可靠且稳定地运行。 -
核心概念
- Pod:是 Kubernetes 中最小的可部署和可管理的计算单元,它可以包含一个或多个紧密相关的容器。这些容器通常会共享网络和存储资源,并且总是一起被调度到同一个节点上运行。例如,一个包含 Web 服务器容器和数据库容器的组合,如果它们之间关联紧密,就可以放在一个 Pod 中(不过实际应用中更建议将数据库单独部署在不同的 Pod 中,这里只是为了便于理解举例)。
- Node(节点):指的是集群中的一台机器,可以是物理机也可以是虚拟机,节点上运行着 Kubernetes 的相关组件(如
kubelet
、kube-proxy
等),并且可以用来运行 Pod。简单理解就是承载 Pod 的宿主主机。 - Service(服务):用于将一组 Pod 暴露给其他应用或者外部网络,提供了稳定的网络访问入口。它可以通过不同的类型(如
ClusterIP
只在集群内部可访问、NodePort
可以通过集群中节点的特定端口访问、LoadBalancer
借助外部负载均衡器来对外提供服务等)实现不同的网络访问需求。 - Deployment(部署):用于声明式地管理 Pod 的创建、更新和删除等操作,提供了应用程序的滚动更新、回滚等功能,方便开发者对应用进行版本升级等操作。
- Namespace(命名空间):类似于操作系统中的文件夹,用于对集群中的资源进行隔离和分组管理,不同的命名空间中的资源可以同名,便于在多团队、多项目共用集群时划分资源和权限。
二、Kubernetes 使用教程
安装 Kubernetes
-
本地环境安装(以 Minikube 为例,适合用于学习和开发测试)
- 前提条件:需要先安装好 Docker(因为 Minikube 依赖 Docker 来运行容器)以及对应的命令行工具(如
kubectl
,用于与 Kubernetes 集群交互的客户端工具)。 - 安装步骤:
- 根据操作系统下载对应的 Minikube 安装包(可以从官方网站获取),然后进行安装。
- 安装完成后,在命令行执行
minikube start
命令来启动本地的 Kubernetes 集群。这个过程中,Minikube 会自动下载所需的镜像等资源并初始化集群。 - 通过
kubectl get nodes
命令可以查看集群中的节点信息,若看到节点状态为Ready
,则表示集群启动成功。
- 前提条件:需要先安装好 Docker(因为 Minikube 依赖 Docker 来运行容器)以及对应的命令行工具(如
-
生产环境安装(有多种方式,以基于云服务商提供的 Kubernetes 服务为例,如云原生的 Google Kubernetes Engine(GKE)、Amazon Elastic Kubernetes Service(EKS)、阿里云的容器服务 Kubernetes 版等)
- 以 GKE 为例的步骤:
- 登录 Google Cloud 平台账号,在控制台中选择创建 Kubernetes 引擎集群,按照提示配置集群的相关参数,如节点数量、机器类型、网络配置等。
- 完成配置后,点击创建,平台会自动完成集群的创建和初始化工作,创建完成后同样可以使用
kubectl get nodes
命令(前提是在本地配置好与 GKE 集群连接的kubectl
)来查看节点信息,确认集群状态。
- 以 GKE 为例的步骤:
创建和管理资源
- 创建 Pod
- 使用 YAML 文件定义 Pod(推荐方式,便于版本控制和复用):创建一个例如名为
my-pod.yaml
的文件,内容示例如下:apiVersion: v1 kind: Pod metadata:name: my-podlabels:app: my-app spec:containers:- name: my-containerimage: nginx:latestports:- containerPort: 80
- 使用 YAML 文件定义 Pod(推荐方式,便于版本控制和复用):创建一个例如名为
这个 YAML 文件定义了一个名为 my-pod
的 Pod,它包含一个基于 nginx:latest
镜像的容器,并且容器暴露了 80
端口。
- 创建 Pod:在命令行执行
kubectl create -f my-pod.yaml
命令,Kubernetes 就会根据这个 YAML 文件创建对应的 Pod。可以通过kubectl get pods
命令查看 Pod 的状态。
- 创建 Deployment
- 同样使用 YAML 文件定义(例如
my-deployment.yaml
):apiVersion: apps/v1 kind: Deployment metadata:name: my-deploymentlabels:app: my-app spec:replicas: 3selector:matchLabels:app: my-apptemplate:metadata:labels:app: my-appspec:containers:- name: my-containerimage: nginx:latestports:- containerPort: 80
- 同样使用 YAML 文件定义(例如
这里定义了一个名为 my-deployment
的 Deployment,它会创建 3
个副本(由 replicas
参数指定)的 Pod,Pod 中的容器基于 nginx:latest
镜像且暴露 80
端口。
- 创建 Deployment:执行
kubectl create -f my-deployment.yaml
命令,通过kubectl get deployments
和kubectl get pods
命令可以分别查看 Deployment 和其创建的 Pod 的状态。
- 创建 Service
- 使用 YAML 文件定义服务(例如
my-service.yaml
),以下是创建一个ClusterIP
类型服务的示例:apiVersion: v1 kind: Service metadata:name: my-servicelabels:app: my-app spec:type: ClusterIPselector:app: my-appports:- protocol: TCPport: 80targetPort: 80
- 使用 YAML 文件定义服务(例如
这个服务会选择所有带有 app: my-app
标签的 Pod,将它们的 80
端口(targetPort
)映射到服务的 80
端口(port
)上,并且服务类型为 ClusterIP
,意味着只能在集群内部访问。
- 创建 Service:执行
kubectl create -f my-service.yaml
命令,通过kubectl get services
命令可以查看服务的相关信息。
应用更新与回滚
- 更新 Deployment 中的容器镜像(实现应用版本升级):
执行kubectl set image deployment/my-deployment my-container=nginx:new-version
命令(这里假设nginx:new-version
是要更新的新镜像版本),Kubernetes 会自动进行滚动更新,逐个替换旧版本的 Pod 为新版本的 Pod,在更新过程中可以通过kubectl rollout status deployment/my-deployment
命令查看更新进度。 - 回滚 Deployment:
如果更新后出现问题,可以执行kubectl rollout undo deployment/my-deployment
命令进行回滚操作,将 Deployment 回滚到上一个版本的状态。
资源删除
要删除之前创建的资源,可以执行以下命令:
- 删除 Pod:
kubectl delete pod my-pod
(不过通常更建议通过管理 Deployment 等上层资源来间接管理 Pod,直接删除 Pod 可能会被重新创建,如果是由 Deployment 管理的话)。 - 删除 Deployment:
kubectl delete deployment my-deployment
,这会同时删除它管理的所有 Pod。 - 删除 Service:
kubectl delete service my-service
。
以上只是 Kubernetes 的一个非常基础的使用教程,实际应用中它还有很多高级的功能和配置选项,比如配置存储卷、网络策略、资源配额等,需要进一步深入学习和实践来掌握。
相关文章:
K8S简介、使用教程
以下是关于 Kubernetes(通常缩写为 K8S)的简介和使用教程: 一、Kubernetes 简介 定义与作用 Kubernetes 是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它最初由谷歌开发,后捐赠给云原生计算基…...
Scala—Map用法详解
Scala—Map用法详解 在 Scala 中,Map 是一种键值对的集合,其中每个键都是唯一的。Scala 提供了两种类型的 Map:不可变 Map 和可变 Map。 1. 不可变集合(Map) 不可变 Map 是默认的 Map 实现,位于 scala.co…...
2024御网杯信息安全大赛个人赛wp(misc方向)
目录 一.信息安全大赛的通知二、编码转换1. 第一部分2. 第二部分3. 第三部分 三、1.txt四、buletooth 题目附件以及工具链接: 通过网盘分享的文件:御网杯附件 链接: https://pan.baidu.com/s/1LNA6Xz6eZodSV0Io9jGSZg 提取码: jay1 –来自百度网盘超级会…...
DeepSpeed 配置文件(DeepSpeed Configuration Files)详解:中英文解释
中文版 本文详细介绍 DeepSpeed 配置文件,结合 4 卡 3090 的实际使用场景,重点解释各个参数的含义,并提供应对爆显存的方案。 DeepSpeed 配置文件详解:从基础到实战 DeepSpeed 是用于加速大规模分布式训练的重要工具,…...
AI 助力开发新篇章:云开发 Copilot 深度体验与技术解析
本文 一、引言:技术浪潮中的个人视角1.1 AI 和低代码的崛起1.2 为什么选择云开发 Copilot? 二、云开发 Copilot 的核心功能解析2.1 自然语言驱动的低代码开发2.1.1 自然语言输入示例2.1.2 代码生成的模块化支持 2.2 实时预览与调整2.2.1 实时预览窗口功能…...
QTableWidget使用代理绘制分行显示
在这里插入代码片# 创建主窗口类: 使用 QTableWidget 作为核心控件。 设置表头及行列信息。 自定义代理: 继承 QStyledItemDelegate,实现代理模式。 重写 paint 和 sizeHint 方法,支持多行文本绘制。 设置行高以适应多行显示。 …...
Linux系统之fuser命令的基本使用
Linux系统之fuser命令的基本使用 一、fuser命令介绍二、fuser命令使用帮助2.1 help帮助信息2.1 基本语法①通用选项②文件/设备相关选项③网络相关选项④进程操作选项⑤其他选项 三、fuser命令的基本使用3.1 查找挂载点的进程3.2 查看指定设备进程信息3.3 查找监听特定端口的进…...
解决`-bash: ./configure:/bin/sh^M:解释器错误: 没有那个文件或目录`的问题
解决`-bash: ./configure:/bin/sh^M:解释器错误: 没有那个文件或目录`的问题 一、错误原因分析二、解决方法方法一:使用`dos2unix`工具方法二:使用`sed`命令方法三:使用`tr`命令方法四:在文本编辑器中转换方法五:在Windows系统中使用适当的工具三、预防措施四、总结在使…...
【时时三省】(C语言基础)结构体的声明
山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 结构的基础知识 结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。 数组是一组相同类型的元素的集合 结构体也是一些值的集合,结构的每…...
群聊前选择患者功能的实现
和普通群聊不同,开启一个图文会话聊天,必须先选择患者、团队、医生。 原来是集成到腾讯IM当中,现在需要单独写一个页面 原来的代码在这里: const handleShow () > {uni.navigateTo({url: /pageB/active-home/active-home})}…...
目标检测,图像分割,超分辨率重建
目标检测和图像分割 目标检测和图像分割是计算机视觉中的两个不同任务,它们的输出形式也有所不同。下面我将分别介绍这两个任务的输出。图像分割又可以分为:语义分割、实例分割、全景分割。 语义分割(Semantic Segmentation)&…...
关于 EKS Bottlerocket AMI 版本与 Karpenter 配置的说明
问题1: Bottlerocket AMI 版本问题 之前,后端团队发现在使用 Bottlerocket v1.26.2 AMI 版本时,存在某些问题。经过 Bottlerocket 团队调查,此行为是罕见的 race condition 导致的结果。 我们在环境中重现了此状况,并且关注到由于 kubelet device manager 的启动时间晚于 NVI…...
安全设备-日志审计-网络路由配置
1 网络设置 菜单项‘网络’‘网络设置’子项。进入网卡列表展示页面。点击操作列‘编辑’图标,可编辑对应网卡信息。 图11-1 网卡信息 设备接口的 GE0/1 接口IP:192.168.0.1子网掩码:255.255.255.0 图11-2 配置网卡 1 IP地址2 子网掩码3 主机DNS4 备份DNS 2 通…...
Linux服务器生成SSH 密钥对与 GitLab 仓库进行交互
目录 生成 SSH 密钥对 将公钥添加到 GitLab 测试 SSH 连接 生成 SSH 密钥对 在执行脚本的机器上打开终端,执行以下命令(假设使用默认的 RSA 算法,一路回车使用默认设置即可,也可以根据需要指定其他算法和参数)&…...
react 的路由功能
1. 安装依赖 pnpm add react-router-dom 2. 基本的路由设置(BrowserRouter) 在 main.tsx 入口文件中使用BrowserRouter组件来包裹整个应用。它会监听浏览器的 URL 变化。 import { StrictMode } from "react";import { createRoot } from …...
vscode python code runner执行乱码
打开vscode code runner插件配置,如图所示: 然后在setting.json修改运行python的默认命令: 将原来 替换成 "python":"set PYTHONIOENCODINGutf8 && python", 参考:Vscode——python环境输出中文乱…...
Element UI 打包探索【3】
目录 第九个命令 node build/bin/gen-cssfile gulp build --gulpfile packages/theme-chalk/gulpfile.js cp-cli packages/theme-chalk/lib lib/theme-chalk 至此,dist命令完成。 解释why Element UI 打包探索【1】里面的why Element UI 打包探索【2】里面…...
windows使用docker安装centos7
参考文章:docker容器安装CentOS7.9 需要指出来的步骤 2.5 安装常用工具及ssh服务 由于centos7不维护,需要更换镜像源才能正常使用yum install命令安装 更换镜像源文章:CentOS 7配置yum镜像源 2.9Xshell远程连接docke_centos7.9 文章没有指…...
写一个流程,前面的圆点和线,第一个圆上面没有线,最后一个圆下面没有线
上图 最近写类似于这种的还挺多的,记录一下css方法 遍历列表之后 <div class"item" v-for"(item,index) in recordList"> 加这样一个盒子 <div class"timeline"> <div class"line1" v-if"index ! 0&…...
Javascript Insights: Visualizing Var, Let, And Const In 2024
11/2024 出版 MP4 |视频:h264, 19201080 |音频:AAC,44.1 KHz 语言:英语 |大小: 2.96 GB |时长: 5 小时 34 分钟 为所有认真的 JavaScript 开发人员可视化与 VAR、LET、CONST 和 EXECUTON CONTE…...
【工具】AI 工具集整理推荐
ai工具集 我私人使用了一段时间,效果不错,有很多AI工具,可以提升工作的效率。...
如何通过终端连接无线网
1 先连接对方服务器 ssh root192.168.3.219 # root是用户名字 192.168.3.219是对方的ip地址2 开启 WiFi:输入sudo nmcli r wifi on,开启系统的无线网络功能 sudo nmcli r wifi on3 扫描附近的 WiFi 热点:执行sudo nmcli dev wifi&#x…...
elasticsearch报错fully-formed single-node cluster with cluster UUID
1.问题描述 k8s集群内部署的es中间件起不来,查看日志发现如下警告,节点发现功能开启,但是目前我是单节点服务,所以尝试编辑sts将节点发现功能去掉或者在部署时将你的sts的yaml文件和chart文件修改重新部署以去掉该功能 {"t…...
前端 vue3 + element-plus + ts 对话框示例
【父组件】:SampleInput.vue,局部代码片段 引入子组件 ApplyItemChooseDialog.vue,定义变量,用于渲染和显示标识 <script>片段代码 import ApplyItemChooseDialog from "/views/accept/ApplyItemChooseDialog.vue&q…...
南京移动“智慧+关怀”服务体系助力老年群体生活安全有保障
在数字化浪潮汹涌澎湃的当下,江苏移动南京分公司秉持“人民邮电为人民”的服务理念,推出一系列创新服务举措,为社区老年群体提供贴心、便捷的数字服务,让老人在享受科技发展成果的同时,感受到社会的温暖与关怀。 贴心…...
Elasticsearch 安全特性讲解与使用
Elasticsearch安全特性讲解与使用指南 1. Elasticsearch概览1.1 简介1.2 应用场景1.3 核心特性2. Elasticsearch安全特性2.1 安全性的重要性2.2 权限控制用户身份验证角色管理访问控制列表(ACL)2.3 数据加密数据传输加密数据静态加密2.4 审计日志2.5 IP筛选2.6 案例分析案例背景…...
第12章 手写Spring MVC
第十二章 手写Spring MVC 12.1 基本结构搭建 12.1.1 创建Maven模块 12.1.2 引入Servlet依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XM…...
C#基础31-35
31.已知学生的记录由学号和学习成绩构成,N名学生的数据已存入student数组中。找出成绩最低的学生记录(假定最低成绩的记录是唯一的)并输出。 32.在键盘上任意输入一个字符串,该字符串全部由英文字母组成,把字符串中的最后一个字符的ASCII值右移4位后加最后第二个字符的ASCII…...
GPT相关的学术库——收藏更新自用
GOT-OCR2.0 General OCR Theory: Towards OCR-2.0 via a Unified End-to-end Model https://github.com/Ucas-HaoranWei/GOT-OCR2.0/tree/main ChatPaper 工具名称工具作用是否在线?在线预览备注ChatPaper通过ChatGPT实现对论文进行总结,帮助科研人进…...
速度革命:esbuild如何改变前端构建游戏 (1)
什么是 esbuild? esbuild 是一款基于 Go 语言开发的 JavaScript 构建打包工具,以其卓越的性能著称。相比传统的构建工具(如 Webpack),esbuild 在打包速度上有着显著的优势,能够将打包速度提升 10 到 100 倍…...
AR商业化的“AI转身”
AI会不会是AR厂商良药? 作者|周立青 编辑|杨舟 11月,国内“AR四小龙”之一的Rokid举办了新品发布会,在发布会的同步直播间,出现了一条不合时宜的“什么时候发去年的工资”的评论。 “公司确实没有给我们发2023年的十三薪和年终…...
Python 中的装饰器是什么?
装饰器是Python中一种非常强大的功能,它允许你在不修改原始函数代码的前提下,增加额外的功能或改变函数的行为。 装饰器本质上是一个接受函数作为参数的函数,并返回一个新的函数。 通过装饰器,我们可以轻松地实现诸如日志记录、…...
jupyter notebook的 markdown相关技巧
目录 1 先选择为markdown类型 2 开关技巧 2.1 运行markdown 2.2 退出markdown显示效果 2.3 注意点:一定要 先选择为markdown类型 3 一些设置技巧 3.1 数学公式 3.2 制表 3.3 目录和列表 3.4 设置各种字体效果:加粗,斜体&#x…...
oracle 创建只可以查询权限用户+sqldeveloper如何看到对应表
声明 申明部分是从其他csdn用户哪里复制的,只是自己操作后发现无法达到我最后的预期,所以关闭忘记是看的那篇了,如果有侵权请见谅,联系我删除谢谢。 好了,故事的开始是我最近删投产表了。没错职业黑点,清…...
化工行业 FMEA 与安全生产的关系
【大家好,我是唐Sun,唐Sun的唐,唐Sun的Sun。】 在化工行业这个充满复杂性和潜在危险的领域中,确保安全生产是至关重要的目标。失效模式及影响分析(FMEA)作为一种有效的风险管理工具,在保障化工行…...
前端node.js
一.什么是node.js 官网解释:Node.js 是一个开源的、跨平台的 JavaScript 运行时环境。 二.初步使用node.js 需要区分开的是node.js和javascript互通的只有console和定时器两个API. 三.Buffer Buffer 是一个类似于数组的 对象,用于表示固定长度的字节序列。Buffer…...
深度学习:GPT-2的MindSpore实践
GPT-2简介 GPT-2是一个由OpenAI于2019年提出的自回归语言模型。与GPT-1相比,仍基于Transformer Decoder架构,但是做出了一定改进。 模型规格上: GPT-1有117M参数,为下游微调任务提供预训练模型。 GPT-2显著增加了模型规模&…...
Java线程池详解:从基础到实践
Java线程池详解:从基础到实践 在现代多线程编程中,线程池是一个非常重要的工具。它能帮助开发者更高效地管理线程资源,避免频繁创建和销毁线程导致的性能损耗,并提供更灵活的任务调度机制。本文将详细讲解线程池相关知识…...
A*(A-star)算法
概述 A*(A-star)算法是一种在图中寻找从初始节点到目标节点最短路径的启发式搜索算法。它结合了Dijkstra算法的确保性(保证找到一条最短路径)和贪心算法的高效性(快速找到目标)。A*算法通过评估函数f(n) …...
计算机类大厂实习春招秋招开发算法面试问答练习题
计算机类大厂实习春招秋招开发算法面试问答练习题 下面有十个非常重要且常问,面试者却注意不到的问题,我们一个个来看,一个个来学。 线程创建到删除过程中,底层是怎么实现的 1.线程创建 线程创建是线程生命周期的起点。在操作系统中,线程可以通过多种方式创建,但无论哪…...
C++ 11重点总结1
智能指针 智能指针: C11引入了四种智能指针: auto_ptr(已弃用)、unique_ptr、shared_ptr和weak_ptr。智能指针可以更有效地管理堆内存,并避免常见的内存泄漏问题。 shared_ptr: 自定义删除器。 shared_ptr使用引用计数来管理它指向的对象的生命周期。多个shared_ptr实例可以指向…...
Java异常
目录 一、异常的层次结构 1.1、Throwable 1.2、Error(错误) 1.3、Exception(异常) 运行时异常 非运行时异常 (编译异常) 1.4、可查的异常(checked exceptions)和不可查的异常…...
《热带气象学报》
《热带气象学报》创刊于1984年,前身为《热带气象》,1993年更名为《热带气象学报》,是广东省气象局主管,中国气象局广州热带海洋气象研究所主办的中文学术期刊。 本刊坚持“热带气象”的办刊特色,主要刊登:…...
解决docker不加载 /etc/docker/daemon.json文件的问题
文章目录 问题起源解决方案问题反思 问题起源 如题,最近在ubuntu24.04-LTS-server安装docker时,安装成功后设置源来设置镜像。 设置完成功拉取镜像,我就关机下次使用。 但是当我重启发现呢,镜像都不在了,但是由于网络…...
数据结构(初阶7)---七大排序法(堆排序,快速排序,归并排序,希尔排序,冒泡排序,选择排序,插入排序)(详解)
排序 1.插入排序2.希尔排序3.冒泡排序4.选择排序(双头排序优化版)5.堆排序6.快速排序1). 双指针法2).前后指针法3).非递归法 7.归并排序1).递归版本(递归的回退就是归并)2).非递归版本(迭代版本) 计算机执行的最多的操作之一就有排序,排序是一项极其重要的技能 接下…...
题解 洛谷 Luogu P1182 数列分段 Section II 二分答案 C/C++
题目传送门: P1182 数列分段 Section II - 洛谷 | 计算机科学教育新生态https://www.luogu.com.cn/problem/P1182思路: 二分答案,每次以区间 [l, r] 中点 m 为每段和的阈值 判断在此前提下,划分段数是否不大于 M 是就记录答案…...
鸿蒙心路旅程:从实践到创新——开发者的深度技术分享
目录 1. 引言:成为HarmonyOS NEXT开发者的动机 2. 项目初始化与架构设计:从零开始的技术规划 2.1 DevEco Studio的配置与项目初始化 2.2 分层架构设计 3. 分布式应用设计:挑战与解决方案 3.1 分布式架构设计:分布式软总线 …...
elementUI非常规数据格式渲染复杂表格(副表头、合并单元格)
效果 数据源 前端代码 (展示以及表格处理/数据处理) 标签 <el-table :data"dataList" style"width: 100%" :span-method"objectSpanMethod"><template v-for"(item, index) in headers"><el-table-column prop"…...
mysl数据库(八)事务、三种读现象
事务、三种读现象 文章目录 事务、三种读现象一、事务介绍二、事务的使用三、三种读现象 一、事务介绍 事务是mysql的一种机制,一个事务里可以包含多条sql语句。执行事务相当于拍了一张快照,在事务执行完提交以前可以回滚至最初的状态,当然事…...
【DVWA】File Inclusion文件包含实战
安能有术无道有道无心,乐得仁心仁义正心行道。 1.File Inclusion(Low) 相关代码分析 <?php// The page we wish to display $file $_GET[ page ];?>可以看到,服务器端对page参数没有做任何的过滤跟检查。 服务器期望用户的操作是点击下面的…...