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进行组合,使用逗号(,)进行分隔即可。
    • 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  # 删除服务

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

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

相关文章

Deepin如何开启与配置SSH实现无公网ip远程连接

文章目录 前言1. 开启SSH服务2. Deppin安装Cpolar3. 配置ssh公网地址4. 公网远程SSH连接5. 固定连接SSH公网地址6. SSH固定地址连接测试 前言 Deepin操作系统是一个基于Debian的Linux操作系统,专注于使用者对日常办公、学习、生活和娱乐的操作体验的极致&#xff0…

【JavaScript】前端攻击

前端攻击 1. CSRF的基本概念、缩写、全称 CSRF(Cross-site request forgery):跨站请求伪造。 从上图可以看出,要完成一次CSRF攻击,受害者必须满足两个必要的条件: 登录受信任网站A,并在本地生…

09.领域驱动设计:深入学习6本经典推荐书籍

目录 前言 1、《领域驱动设计:软件核心复杂性应对之道》 1.作者简介 2.内容简介 3.推荐理由 4.豆瓣链接 ​编辑 2、《实现领域驱动设计》 1.作者简介 2.内容简介 3.推荐理由 4.豆瓣链接 ​编辑 3、《领域驱动设计精粹》 1.作者简介 2.内容简介 3.推…

深度学习和大数据技术的进步在自然语言处理领域的应用

文章目录 每日一句正能量前言一、深度学习在NLP中的应用二、大数据技术在NLP中的应用三、深度学习和大数据技术的影响四、应用场景后记 每日一句正能量 努力学习,勤奋工作,让青春更加光彩。 前言 随着深度学习和大数据技术的迅猛发展,自然语…

Qt加载网页崩溃 ASSERT:“m_adapterClient“ in file ...

1、软件启动后加载网页无异常,点击按钮,加载新网页时崩溃 崩溃代码: QWebEngineView *createWindow(QWebEnginePage::WebWindowType type) { Q_UNUSED(type); return this; } 2、原因 Qt只是调用谷歌的浏览器引擎&#xff…

iPad“粘贴自”字样不消失解决办法

iPad“粘贴自”字样不消失解决办法 好无语,写论文主要就靠iPad看资料,复制粘帖的时候卡死搞得我无敌焦躁,问了🍎支持的客服才解决,方法如下:1.音量上键按一下 2.音量下键按一下 3.一直按开关机键直到出现苹…

031 递归

何为递归 示例 public static void main(String[] args) {System.out.println(fn(5)); }static int fn(int a){return a 1 ? 1 : a * fn(a - 1); }

浅析Redis③:命令处理之数据返回Client(下)

写在前面 Redis作为我们日常工作中最常使用的缓存数据库,其重要性不言而喻,作为普通开发者,我们在日常开发中使用Redis,主要聚焦于Redis的基层数据结构的命令使用,很少会有人对Redis的内部实现机制进行了解&#xff0c…

华为鸿蒙系统第三方桌面手机管家版本号12.0.1.330

起因 放假在家,准备把自己的旧手机给家里老人看小视频,但是老人不懂智能手机的复杂操作,就想换成《极简桌面》这个软件,在“设置->默认应用->桌面”,但是华为为了“保护用户的隐私以及合法权益”禁用了第三方启…

202417读书笔记|《画•大师 阿尔丰斯•穆夏》——在明亮大胆的色调中熠熠生辉

202417读书笔记|《画•大师 阿尔丰斯•穆夏》——在明亮大胆的色调中熠熠生辉 这是读完的第二本或者第三本穆夏的画集。很赞,他的绘画风格,构图,元素,取大自然的月桂树,常青藤,🌙的不同形态&…

链表与二叉树-数据结构

链表与二叉树-数据结构 创建叶子node节点建立二叉树三元组:只考虑稀疏矩阵中非0的元素,并且存储到一个类(三元组)的数组中。 创建叶子node节点 class Node{int no;Node next;public Node(int no){this.nono;} } public class Lb…

Fink CDC数据同步(三)Flink集成Hive

1 目的 持久化元数据 Flink利用Hive的MetaStore作为持久化的Catalog,我们可通过HiveCatalog将不同会话中的 Flink元数据存储到Hive Metastore 中。 利用 Flink 来读写 Hive 的表 Flink打通了与Hive的集成,如同使用SparkSQL或者Impala操作Hive中的数据…

流畅的Python(七)-函数装饰器和闭包

一、核心要义 主要解释函数装饰器的工作原理,包括最简单的注册装饰器和较复杂的参数化装饰器。同时,因为装饰器的实现依赖于闭包,因此会首先介绍闭包存在的原因和工作原理。 二、代码示例 1、变量作用域规则 #!/usr/bin/env python # -*-…

前端学习笔记 | HTML5+CSS3静态网页制作的技巧(持续更新)

注:本文的css样式均使用less写法 1、字体居中 (1)先text-align:center;行内元素水平居中 (2)再line-heigh:(盒子高度);行内元素垂直居中 text-align: center;line-height: ( 30 / vw ); 2、盒子居中 情景1&#…

【课程作业_01】国科大2023模式识别与机器学习实践作业

国科大2023模式识别与机器学习实践作业 作业内容 从四类方法中选三类方法,从选定的每类方法中 ,各选一种具体的方法,从给定的数据集中选一 个数据集(MNIST,CIFAR-10,电信用户流失数据集 )对这…

【大数据技术攻关专题】「Apache-Flink零基础入门」手把手+零基础带你玩转大数据流式处理引擎Flink(基础加强+运行原理)

手把手零基础带你玩转大数据流式处理引擎Flink(运行机制原理加深) 前提介绍运行Flink应用运行机制Flink的两大核心组件JobManagerTaskManagerTaskSlot Flink分层架构Stateful Stream ProcessingDataStream和DataSetDataStream(数据流&#xf…

GPIO中断

1.EXTI简介 EXTI是External Interrupt的缩写,指外部中断。在嵌入式系统中,外部中断是一种用于处理外部事件的机制。当外部事件发生时(比如按下按钮、传感器信号变化等),外部中断可以立即打断正在执行的程序&#xff0…

大红喜庆版UI猜灯谜小程序源码/猜字谜微信小程序源码

今天给大家带来一款UI比较喜庆的猜灯谜小程序,大家看演示图的时候当然也是可以看得到那界面是多么的喜庆,而且新的一年也很快就来了,所以种种的界面可能都比较往喜庆方面去变吧。 这款小程序搭建是免服务器和域名的,只需要使用微信开发者工具…

Linux一键部署telegraf 实现Grafana Linux 图形展示

influxd2前言 influxd2 是 InfluxDB 2.x 版本的后台进程,是一个开源的时序数据库平台,用于存储、查询和可视化时间序列数据。它提供了一个强大的查询语言和 API,可以快速而轻松地处理大量的高性能时序数据。 telegraf 是一个开源的代理程序,它可以收集、处理和传输各种不…

Linux开发工具

前言:哈喽小伙伴们,经过前边的学习我们已经掌握了Linux的基本指令和权限,相信大家学完这些之后都会对Linux有一个更加深入的认识,但是Linux的学习可以说是从现在才刚刚开始。 这篇文章,我们将讲解若干个Linux的开发工…