kubernetes基本概念和操作
基本概念和操作
- 1.Namespace
- 1.1概述
- 1.2应用示例
- 2.Pod
- 2.1概述
- 2.2语法及应用示例
- 3.Label
- 3.1概述
- 3.2语法及应用示例
- 4.Deployment
- 4.1概述
- 4.2语法及应用示例
- 5.Service
- 5.1概述
- 5.2语法及应用示例
- 5.2.1创建集群内部可访问的Service
- 5.2.2创建集群外部可访问的Service
- 5.2.3删除服务
- 5.2.4对象配置方式
1.Namespace
1.1概述
-
Namespace是kubernetes系统中一种非常重要的资源,它的主要作用是用来实现多套系统的
资源隔离
或者多租户的资源隔离
。 -
默认情况下,kubernetes集群中的所有Pod都是可以相互访问的。但是在实际中,可能不想让两个Pod之间进行互相的访问,那么此时就可以将两个Pod划分到
不同的Namespace
下。kubernetes通过将集群内部的资源分配到不同的Namespace中,可以形成逻辑上的“组”,以方便不同的组的资源进行隔离使用和管理。 -
可以通过kubernetes的授权机制,将不同的Namespace交给不同租户进行管理,这样就实现了多租户的资源隔离。此时还能结合kubernetes的
资源配额
机制,限定不同租户能占用的资源,例如CPU使用量、内存使用量等等,来实现租户可用资源的管理。 -
kubernetes在集群启动之后,会默认创建几个namespace
kubectl get namespace
● default:所有未指定的Namespace的对象都会被分配在
default
命名空间。
● kube-node-lease:集群节点之间的心跳维护,v1.13开始引入。
● kube-public:此命名空间的资源可以被所有人访问(包括未认证用户)。
● kube-system:所有由kubernetes系统创建的资源都处于这个命名空间。
1.2应用示例
查看所有名称空间
kubectl get namespace
或
kubectl get ns
查看指定名称空间
kubectl get namespace default
或
kubectl get ns default
指定命名空间的输出格式
kubectl get ns default -o wide
kubectl get ns default -o yaml # yaml格式输出
kubectl get ns default -o json # json格式输出
查看命名空间详情
kubectl describe ns default
或
kubectl describe namespace default
创建命名空间
kubectl create ns defult
或
kubectl create namespace default
删除命名空间
kubectl delete ns dev
或
kubectl delete namespace dev
命令式对象配置
- 新建ns-dev.yaml
apiVersion: v1
kind: Namespace
metadata:name: dev
- 通过命令式对象配置进行创建和删除
kubectl create -f ns-dev.yaml #创建名称空间
kubectl delete -f ns-dev.yaml #删除名称空间
2.Pod
2.1概述
- Pod是kubernetes集群进行管理的
最小单元
,程序要运行必须部署在容器
中,而容器必须存在于Pod中。 Pod可以认为是容器的封装,一个Pod中可以存在一个或多个容器
- kubernetes在集群启动之后,集群中的各个组件也是以Pod方式运行的,可以通过下面的命令查看
kubectl get pods -n kube-system
2.2语法及应用示例
创建并运行Pod
kubectl run (Pod的名称) [参数]
# --image 指定Pod的镜像
# --port 指定端口
# --namespace 指定namespace
示例:在名称为dev的namespace下创建一个Nginx的Pod
kubectl run nginx --image=nginx:1.17.1 --port=80 --namespace=dev
查看Pod的基本信息
kubectl get pods [-n 命名空间的名称]
示例:查看名称空间为dev的namespace下所有的Pod的信息
kubectl get pods -n dev
查看Pod的详细信息
kubectl describe pod pod的名称 [-n 命名空间名称]
示例:查看名称为dev的namespace下的Pod的名称为nginx的详细信息
kubectl describe pod nginx -n dev
Pod的访问
# 获取Pod的IP
kubectl get pods [-n dev] -o wide
# 通过curl访问
curl ip:端口
示例:访问nginx的Pod
kubectl get pods -n dev -o wide
curl ip地址
删除指定的Pod
kubectl delete pod pod的名称 [-n 命名空间]
示例:删除nginx的Pod
kubectl delete pod nginx -n dev
命令式对象配置
- 新建pod-nginx.yaml
apiVersion: v1
kind: Pod
metadata:name: nginxnamespace: dev
spec:containers:- image: nginx:1.20imagePullPolicy: IfNotPresent podname: podports: - name: nginx-portcontainerPort: 80protocol: TCP
- 创建和删除命令
kubectl create -f pod-nginx.yaml # 创建pod
kubectl delete -f pod-nginx.yaml # 删除pod
3.Label
3.1概述
-
Label是kubernetes的一个重要概念。它的作用就是在资源上添加标识,用来对它们进行区分和选择。
-
Label的特点:
- 一个Label会以key/value键值对的形式附加到各种对象上,如Node、Pod、Service等。
- 一个资源对象可以定义任意数量的Label,同一个Label也可以被添加到任意数量的资源对象上去。
- Label通常在资源对象定义时确定,当然也可以在对象创建后动态的添加或删除。
-
可以通过Label实现资源的多纬度分组,以便灵活、方便地进行资源分配、调度、配置和部署等管理工作。
一些常用的Label标签示例如下:
版本标签:“version”:”release”,”version”:”stable”。。。
环境标签:“environment”:”dev”,“environment”:”test”,“environment”:”pro”。。。
架构标签:“tier”:”frontend”,”tier”:”backend”。。。
- 标签定义完毕之后,还要考虑到标签的选择,这就要用到Label Selector,即:
- Label用于给某个资源对象定义标识。
- Label Selector用于查询和筛选拥有某些标签的资源对象。
- 当前有两种Label Selector:
- 基于等式的Label Selector。
- name=slave:选择所有包含Label中的key=“name”并且value=“slave”的对象。
- env!=production:选择所有包含Label中的key=“env”并且value!=“production”的对象。
- 基于集合的Label Selector。
- name in (master,slave):选择所有包含Label中的key=“name”并且value=“master”或value=“slave”的对象。
- name not in (master,slave):选择所有包含Label中的key=“name”并且value!=“master”和value!=“slave”的对象。
- 基于等式的Label Selector。
- 标签的选择条件可以使用多个,此时将多个Label Selector进行组合,使用逗号(,)进行分隔即可。
- name=salve,env!=production。
- name not in (master,slave),env!=production。
3.2语法及应用示例
为资源打标签
kubectl label pod xxx key=value [-n 命名空间]
示例:为Nginx的Pod打上标签
kubectl label pod nginx version=1.0 -n dev
更新资源的标签
kubectl label pod xxx key=value [-n 命名空间] --overwrite
示例:为Nginx的Pod更新标签
kubectl label pod nginx version=2.0 -n dev --overwrite
查看标签
kubectl get pod xxx [-n 命名空间] --show-labels
示例:显示Nginx的Pod的标签
kubectl get pod nginx -n dev --show-labels
筛选标签
kubectl get pod -l key=value [-n 命名空间] --show-labels
示例:筛选版本号是2.0的在名称为dev的namespace下的Pod
kubectl get pod -l version=2.0 -n dev --show-labels
删除标签
kubectl label pod xxx key- [-n 命名空间]
示例:删除名称为dev的namespace下的Nginx的Pod上的标签
kubectl label pod nginx version- -n dev
命令式对象配置
- 新建pod-nginx.yaml
apiVersion: v1
kind: Pod
metadata:name: nginxnamespace: devlabels:version: "3.0"env: "test"
spec:containers:- image: nginx:1.20imagePullPolicy: IfNotPresentname: podports: - name: nginx-portcontainerPort: 80protocol: TCP
- 创建和删除命令
kubectl create -f pod-nginx.yaml # 创建标签
kubectl delete -f pod-nginx.yaml # 删除标签
4.Deployment
4.1概述
- 在kubernetes中,Pod是最小的控制单元,但是kubernetes很少直接控制Pod,一般都是通过Pod控制器来完成的。
- Pod控制器用于Pod的管理,确保Pod资源符合预期的状态,当Pod的资源出现故障的时候,会尝试进行重启或重建Pod。
- 在kubernetes中Pod控制器的种类有很多,本章节只介绍一种:Deployment。
4.2语法及应用示例
特别注意:在v1.18版之后,kubectl run nginx --image=nginx --replicas=2 --port=80,会反馈Flag --replicas has been deprecated, has no effect and will be removed in the future,并且只会创建一个Nginx容器实例
创建指定名称的deployement
kubectl create deployment xxx [-n 命名空间]
或
kubectl create deploy xxx [-n 命名空间]
示例:在名称为dev的命名空间下创建名为nginx的deployment
kubectl create deployment nginx --image=nginx:1.17.1 -n dev
根据指定的deplyment创建Pod
kubectl scale deployment xxx [--replicas=正整数] [-n 命名空间]
示例:在名称为dev的命名空间下根据名为nginx的deployment创建4个Pod
kubectl scale deployment nginx --replicas=4 -n dev
命令式对象配置
- 创建一个deploy-nginx.yaml,内容如下
apiVersion: apps/v1
kind: Deployment
metadata:name: nginxnamespace: dev
spec:replicas: 3selector:matchLabels:run: nginxtemplate:metadata:labels:run: nginxspec:containers:- image: nginx:1.20name: nginxports:- containerPort: 80protocol: TCP
- 创建和执行命令
kubectl create -f deploy-nginx.yaml # 创建deployment
kubectl delete -f deploy-nginx.yaml # 删除deployment
查看创建的Pod
kubectl get pods [-n 命名空间]
查看名称为dev的namespace下通过deployment创建的3个Pod
kubectl get pods -n dev
查看deployment的信息
kubectl get deployment [-n 命名空间]
或
kubectl get deploy [-n 命名空间]
示例:查看名称为dev的namespace下的deployment
kubectl get deployment -n dev
查看deployment的详细信息
kubectl describe deployment xxx [-n 命名空间]
或
kubectl describe deploy xxx [-n 命名空间]
示例:查看名为dev的namespace下的名为nginx的deployment的详细信息
kubectl describe deployment nginx -n dev
删除deployment
kubectl delete deployment xxx [-n 命名空间]
或
kubectl delete deploy xxx [-n 命名空间]
示例:删除名为dev的namespace下的名为nginx的deployment
kubectl delete deployment nginx -n dev
5.Service
5.1概述
- 我们已经能够利用Deployment来创建一组Pod来提供具有高可用性的服务,虽然每个Pod都会分配一个单独的Pod的IP地址,但是却存在如下的问题:
- Pod的IP会随着Pod的重建产生变化。
- Pod的IP仅仅是集群内部可见的虚拟的IP,外部无法访问
- 这样对于访问这个服务带来了难度,因此,kubernetes设计了Service来解决这个问题。
- Service可以看做是一组同类的Pod对外的访问接口,借助Service,应用可以方便的实现服务发现和负载均衡。
5.2语法及应用示例
5.2.1创建集群内部可访问的Service
暴露Service
kubectl expose deployment xxx --name=服务名 --type=ClusterIP --port=暴露的端口 --target-port=指向集群中的Pod的端口 [-n 命名空间]
# 会产生一个CLUSTER-IP,这个就是service的IP,在Service的生命周期内,这个地址是不会变化的
示例:暴露名为test的namespace下的名为nginx的deployment,并设置服务名为svc-nginx1
kubectl expose deployment nginx --name=svc-nginx1 --type=ClusterIP --port=80 --target-port=80 -n dev
查看Service
kubectl get service [-n 命名空间] [-o wide]
示例:查看名为dev的命名空间的所有Service
kubectl get service -n dev
5.2.2创建集群外部可访问的Service
暴露Service
kubectl expose deployment xxx --name=服务名 --type=NodePort --port=暴露的端口 --target-port=指向集群中的Pod的端口 [-n 命名空间]
# 会产生一个外部也可以访问的Service
示例:暴露名为dev的namespace下的名为nginx的deployment,并设置服务名为svc-nginx2
kubectl expose deploy nginx --name=svc-nginx2 --type=NodePort --port=80 --target-port=80 -n dev
查看Service
kubectl get service [-n 命名空间] [-o wide]
示例:查看名为test的命名空间的所有Service
kubectl get service -n dev
5.2.3删除服务
删除服务
kubectl delete service xxx [-n 命名空间]
示例:删除服务
kubectl delete service svc-nginx1 -n dev
5.2.4对象配置方式
- 新建svc-nginx.yaml,内容如下
apiVersion: v1
kind: Service
metadata:name: svc-nginxnamespace: dev
spec:ports:- port: 80protocol: TCPtargetPort: 80selector:run: nginxtype: ClusterIP
- 创建和删除命令
kubectl create -f svc-nginx.yaml # 创建服务
kubectl delete -f svc-nginx.yaml # 删除服务
相关文章:

kubernetes基本概念和操作
基本概念和操作 1.Namespace1.1概述1.2应用示例 2.Pod2.1概述2.2语法及应用示例 3.Label3.1概述3.2语法及应用示例 4.Deployment4.1概述4.2语法及应用示例 5.Service5.1概述5.2语法及应用示例5.2.1创建集群内部可访问的Service5.2.2创建集群外部可访问的Service5.2.3删除服务5.…...
20240128周报-网络太杂,Tomcat太难
今天来做个小总结吧,之前说想用几个月的时间将Java生态给整理一遍,该工作已经进入第三周了。先和各位老老板汇报一下上一周的工作,然后说一下本周的计划和后面的计划。 1.上周工作 上周的计划是将网络和Tomcat的内容梳理一番,但…...

DES加密原理
DES加密算法综合运用了置换、代替、代数等多种密码技术,具有设计精 巧、实现容易、使用方便等特点。DES加密算法的明文、密文和密钥的分组长度 都是64位,详细的DES加密算法结构如图6-10所示。 图6-10 DES加密算法结构图 DES加密过程如下所示ÿ…...

react 之 useCallback
简单讲述下useCallback的使用方法,useCallback也是用来缓存的,只不过是用于做函数缓存 // useCallbackimport { memo, useCallback, useState } from "react"const Input memo(function Input ({ onChange }) {console.log(子组件重新渲染了…...

OfficeWeb365 Readfile 任意文件读取漏洞复现
0x01 产品简介 OfficeWeb365 是专注于 Office 文档在线预览及PDF文档在线预览云服务,包括 Microsoft Word 文档在线预览、Excel 表格在线预览、Powerpoint 演示文档在线预览,WPS 文字处理、WPS 表格、WPS 演示及 Adobe PDF 文档在线预览。 0x02 漏洞概述 OfficeWeb365 Rea…...
UnityShader(十三)Unity内置的函数
在计算光照模型时我们需要得到许多数据,比如光源方向、视角方向这种基本信息。 在之前的例子中都是自行在代码里计算的,比如: normalize(_WorldSpaceLight0Pos.xyz) 得到光源方向(这种方法实际只适用平行光) normaliz…...

【开源】基于Qt5的ROS1/ROS2人机交互软件(支持地图编辑/多点导航)
本项目基于Qt5开发,基于CMake进行构建,可以实现一套代码同时在ROS1/ROS2系统中使用(本项目已接入CI,保证多ROS版本/系统版本可用性) 项目地址: https://github.com/chengyangkj/Ros_Qt5_Gui_App 软件在编译时会自动识别环境变量中的ROS1/ROS…...
Spring和SpringBoot的区别是什么
Spring 和 Spring Boot 是 Java 开发领域内两个极其重要且紧密相关的框架,它们各自在企业级应用开发中扮演着不同的角色,并带来了一系列革新性的变化。以下是关于两者之间主要区别的详细分析: 一、设计理念与定位 Spring Framework Spring 是…...

布局技巧及CSS初始化
一,margin负值巧妙应用 二,文字围绕浮动元素 三,行内块 四,CSS三角强化 五,CSS初始化 一,margin负值巧妙应用 制作盒子的细线边框: 鼠标经过li后变色: 二,文字围绕…...

excel怎么设置密码?轻松保护您的工作表
在数字化时代,数据的安全性显得尤为重要。excel作为我们日常工作中广泛使用的办公软件,其中可能包含了大量的敏感数据。为了确保这些数据不被未授权的人访问,本文将为您详细介绍excel怎么设置密码,从而有效地保护您的数据安全。 方…...

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之TimePicker组件
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之TimePicker组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、TimePicker组件 TextClock组件通过文本将当前系统时间显示在设备上。支持不…...

Springboot集成Camunda并完成一条流程实例
💖专栏简介 ✔️本专栏将从Camunda(卡蒙达) 7中的关键概念到实现中国式工作流相关功能。 ✔️文章中只包含演示核心代码及测试数据,完整代码可查看作者的开源项目snail-camunda ✔️请给snail-camunda 点颗星吧😘 💖设计流程定…...

宠物用品/宠物自动饮水机方案
宠物自动饮水机方案原理 宠物自动饮水机,也叫做智能宠物饮水机,是一种为宠物设计的智能化饮水器。应用核心主要在于智能化水泵控制,以及外围传感器电路。 宠物自动饮水机使用方便,不用频繁的换水。另外,自来水的水质可…...

git小白进阶之路
git是最常用的版本控制工具,我对其进行了整理后续补充,这个文档欢迎大家来讨论,当前我的视频梳理: git小白进阶之路_哔哩哔哩_bilibili,非常希望大佬们能够批评指正,并多多交流。 目录 初始配置 配置账号…...
哈希表——C++
目录 一、首先使用拉链法: 二、开放寻址法 三、字符串哈希 1.具体如何使用进制的方式来存储字符前缀的可以看这个y总的这个图 2.接下来说一说算某个中间的区间的字符串哈希值 哈希表是一种数组之间互相映射的数据结构,比如举个简单的例子一个十个的数…...

LabVIEW叶片厚度远程监控
LabVIEW叶片厚度远程监控 随着网络技术的高速发展,远程监控广泛应用在各个领域。本文介绍了一种基于LabVIEW的植物叶片厚度远程监控系统,旨在实现对植物生长状况的精准监测和分析。 该系统利用LabVIEW软件开发工具,通过TCP网络协议实现数据…...

el-table动态合并
废话就不多说了,直接上代码!!! 合并行 // 方法一 <template><div class"container"><el-table :data"dataSource" :border"true":header-cell-style"{ font-weight: normal,…...

【DevOps】产品需求文档(PRD)与常见原型软件
文章目录 1、PRD介绍1.1、概述1.2、前提条件1.3、主要目的1.4、关键内容1.5、表述方式1.6、需求评审人员1.7、一般内容结构 2、需求流程3、常见原型软件3.1、Word3.2、Axure3.2.1、详细介绍3.2.2、应用分类3.2.3、优缺点 3.3、摹客RP3.4、蓝湖3.5、GUI Design Studio 1、PRD介绍…...
【QT+QGIS跨平台编译】之十八:【Expat+Qt跨平台编译】(一套代码、一套框架,跨平台编译)
文章目录 一、Expat介绍二、文件下载三、文件分析四、pro文件五、编译实践一、Expat介绍 Expat库最初由James Clark创建,已经成为许多编程语言中常用的XML解析工具。它以其简单、快速和可靠的特点而受到广泛的认可和使用。 Expat库的优点包括: 快速:Expat的解析速度非常快…...
20240203
1.项目经理正在为新项目制订进度计划,项目的成功取决于使用需要政府颁发特殊环境许可证的设备,在网络图的设计过程中,项目经理应该做什么以确保正确的活动排序? A.使用滚动式规划考虑项目不确定性 B.分析外部依赖关系,…...

高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
在 Spring Boot 项目里,MYSQL中json类型字段使用
前言: 因为程序特殊需求导致,需要mysql数据库存储json类型数据,因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...
k8s从入门到放弃之HPA控制器
k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率(或其他自定义指标)来调整这些对象的规模,从而帮助应用程序在负…...