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: nginx
  namespace: dev
spec:
  containers:
  - image: nginx:1.20
    imagePullPolicy: IfNotPresent pod
    name: pod
    ports: 
    - name: nginx-port
      containerPort: 80
      protocol: 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: nginx
  namespace: dev
  labels:
    version: "3.0"
    env: "test"        
spec:
  containers:
  - image: nginx:1.20
    imagePullPolicy: IfNotPresent
    name: pod
    ports: 
    - name: nginx-port
      containerPort: 80
      protocol: 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: nginx
  namespace: dev
spec:
  replicas: 3
  selector:
    matchLabels:
      run: nginx
  template:
    metadata:
      labels:
        run: nginx
    spec:
      containers:
      - image: nginx:1.20
        name: nginx
        ports:
        - containerPort: 80
          protocol: 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-nginx
  namespace: dev
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    run: nginx
  type: ClusterIP
  • 创建和删除命令
kubectl  create  -f  svc-nginx.yaml  # 创建服务
kubectl  delete  -f  svc-nginx.yaml  # 删除服务

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Go语言成长之路】创建Go模块

文章目录 创建Go模块一、包、模块、函数的关系二、创建模块2.1 创建目录2.2 跟踪包2.3 编写模块代码 三、其它模块调用函数3.1 修改hello.go代码3.2 修改go.mod文件3.3 运行程序 四、错误处理4.1 函数添加错误处理4.2 调用者获取函数返回值4.4 执行错误处理代码 五、单元测试5.…

R语言分析任务:

有需要实验报告的可CSDN 主页个人私信 《大数据统计分析软件(R语言)》 实 验 报 告 指导教师: 专 业: 班 级: 姓 名: 学 …

【Pg数据库】删除数据库失败,提示有session正在连接

目录 问题现象原因分析处理方法1.断开所有连接2. 查找相关连接数据库的主机信息3. 再次删除 总结 问题现象 Navicat 删除 PostgreSQL 数据库时失败,提示:正在被其他用户访问(有session正在连接)如何处理? 如下所示&am…

【七】【C++】模版初阶

泛型编程 C中的泛型编程是一种编程范式&#xff0c;它强调代码的重用性和类型独立性。通过泛型编程&#xff0c;你可以编写与特定数据类型无关的代码&#xff0c;使得相同的代码可以用于多种数据类型。 利用重载实现泛型编程 /*利用重载实现泛型编程*/ #include<iostream&…

python中的可变与不可变、深拷贝和浅拷贝

个人猜想&#xff08;很遗憾失败了&#xff09; 在硬盘或者系统中存在一个字符集 如果存在硬盘中&#xff0c;那么硬盘出厂的时候他的字符集所占用的空间就已经确定了。 如果存在于系统的话&#xff0c;硬盘应该在出厂的时候为系统设置一个存储系统字符集的地方。在安装系统…

js获取文件名或文件后缀名(扩展名)的几种方法

有时候我们需要通过含有文件名和后缀名的一个字符串中提取出该文件的文件名或文件后缀名&#xff08;扩展名&#xff09;&#xff0c;可以通过如下几种方式进行截取。 例如文件名为: var fileName"12345.txt"; 方式一&#xff1a;subtring() 用法参考博文 【js截取字…

灵伴科技(Rokid)借助 Knative 实现 AI 应用云原生 Serverless 化

作者&#xff1a;朱炜栋、元毅、子白 公司介绍 Rokid 创立于 2014 年&#xff0c;是一家专注于人机交互技术的产品平台公司&#xff0c;2018 年即被评为国家高新技术企业。Rokid 作为行业的探索者、领跑者&#xff0c;目前致力于 AR 眼镜等软硬件产品的研发及以 YodaOS 操作系…

K8s 集群可观测性-数据分流最佳实践

简介 在微服务架构下&#xff0c;一个 k8s 集群中经常会部署多套业务&#xff0c;同时也意味着不同团队、不同角色、不同的业务会在同一集群中&#xff0c;需要将不同业务的数据在不同的空间进行管理和查看。 在传统的主机环境下&#xff0c;这个是可以通过不同的主机部署 Da…

力扣每日一题 ---- 1906. 查询差绝对值的最小值

本题中&#xff0c;我们的题目求的是差值的最小值&#xff0c;我们考虑一个因素&#xff0c;当前题目中给出的数组是没有排序过的&#xff0c;那么想要求的差值&#xff0c;是不是要两两配对进行判断差值最小值。这里我们就很费时间了&#xff0c; O(N^2)的时间复杂度&#xf…

学习笔记:超详解换根法(换根DP)(匠心之作)

一.换根DP的概念 1.换根DP是什么&#xff1f; 换根DP&#xff0c;又叫二次扫描&#xff0c;是树形DP的一种。 2.换根DP能解决什么问题&#xff1f; 换根DP能解决不指定根结点&#xff0c;并且根节点的变化会对一些值产生影响的问题。例如子结点深度和、点权和等。如果要 暴力…

【数据库】分区的优点和缺点

​ &#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;数据库 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 优点&#xff1a; 缺点&#xff1a; 结语 我的其他博客 ​ 前言 数据库中的分区技术为处理大规模数据提供了一种有效的手段…

C++:输入流/输出流

C流类库简介 C为了克服C语言中的scanf和printf存在的缺点。&#xff0c;使用cin/cout控制输入/输出。 cin&#xff1a;表示标准输入的istream类对象&#xff0c;cin从终端读入数据。cout&#xff1a;表示标准输出的ostream类对象&#xff0c;cout向终端写数据。cerr&#xff…

如何远程操控vm虚拟机(finalshell版)

你是否因为虚拟机命令行操作不便而头疼&#xff1f;是否因为难以复制粘贴而烦恼&#xff1f;是否因为无法快速上传文件而烦躁&#xff1f; 别急&#xff01;现在有一个简单便捷的软件能够实现上述你所述说的所有烦恼&#xff0c;请听我细细道来~ 一、查看虚拟机的ip地址 a.首…

Unity C#高级特性 Partial 详细使用案例

文章目录 实例 1&#xff1a;分隔UI逻辑实例 2&#xff1a;Unity编辑器自动生成代码实例 3&#xff1a;数据模型分割实例 4&#xff1a;序列化扩展实例 5&#xff1a;多视图架构实例 6&#xff1a;Unity编辑器自定义 inspectors 在Unity中&#xff0c;部分类&#xff08;Partia…

Java多线程--生产者与消费者问题

文章目录 一、生产者与消费者问题&#xff08;1&#xff09;概要&#xff08;2&#xff09;案例1、案例描述及需要明确的问题2、整体框架构思3、生产者和消费者的数据共享问题4、对Clerk类里面方法的设计5、测试6、唤醒机制7、两个消费者 二、是否释放锁的操作&#xff08;1&am…

PMP备考的三个阶段及学习方法分享

PMP证书是项目管理必备的关键技能证书&#xff0c;是具备进行项目管理的重要技能体现。无论升职加薪&#xff0c;还是从事项目管理工作&#xff0c;都非常重要。 个人主要从事产品开发工作&#xff0c;开始逐渐承担一些项目经理角色&#xff0c;但目前项目管理知识薄弱&#x…

探讨深浅拷贝在js加密中的运用

深浅拷贝是JavaScript中常用的概念&#xff0c;用于复制对象或数组。它们在处理数据时有不同的用途&#xff0c;适用于不同的场景。在本文中&#xff0c;我们将详细介绍深浅拷贝的概念&#xff0c;提供案例代码&#xff0c;并探讨它们在JavaScript中的应用场景&#xff0c;以及…

@JsonFormat 和 @@DateTimeFormat 时间格式化注解详解(一篇带你解决问题)

前后数据交互过程中&#xff0c;Date类型的数据经常会出现类型映射转换的错误&#xff0c;为了达到业务的目标时间格式&#xff0c;通常会使用JsonFormat 和 DateTimeFormat&#xff0c;但是这两者有什么区别呢&#xff1f; 一、示例代码 先准备一个POJO&#xff0c;拥有Date类…

PPT录屏功能在哪?一键快速找到它!

在现代办公环境中&#xff0c;ppt的录屏功能日益受到关注&#xff0c;它不仅能帮助我们记录演示文稿的播放过程&#xff0c;还能将操作过程、游戏等内容完美录制下来。可是很多人不知道ppt录屏功能在哪&#xff0c;本文将为您介绍ppt录屏的打开方法&#xff0c;以帮助读者更好地…

本体论(ontology)在工业4.0中的应用

信息技术中的本体与哲学的本体论是不同的&#xff0c;它代表了某个专业领域的基本概念&#xff0c;它们在智能制造和工业4.0 中具有不可或缺的作用&#xff0c;为了实现人与机器&#xff0c;机器与机器之间的确定性操作。一个标准化的&#xff0c;精确定义的本体服务是非常重要…