k8s有哪些资源_k8s资源类型

k8s有哪些资源_k8s资源类型k8sNamespacePodLabelDeploymentServiceNamespace概述Namespace是kubernetes系统中一种非常重要的资源,它的主要作用是用来实现多套系统的资源隔离或者多租户的资源隔离。默认情况下,kubernetes集群中的所有Pod都是可以相互访问的。但是在实际中,可能不想让两个Pod之间进行互相的访问,那么此时就可以将两个Pod划分到不同的Namespace下。kubernetes通过将集群内部的资源分配到不同的Namespace中,可以形成逻辑上的“组

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

Namespace

概述

  1. Namespace是kubernetes系统中一种非常重要的资源,它的主要作用是用来实现多套系统的资源隔离或者多租户的资源隔离。
  2. 默认情况下,kubernetes集群中的所有Pod都是可以相互访问的。但是在实际中,可能不想让两个Pod之间进行互相的访问,那么此时就可以将两个Pod划分到不同的Namespace下。kubernetes通过将集群内部的资源分配到不同的Namespace中,可以形成逻辑上的“组”,以方便不同的组的资源进行隔离使用和管理。
  3. 可以通过kubernetes的授权机制,将不同的Namespace交给不同租户进行管理,这样就实现了多租户的资源隔离。此时还能结合kubernetes的资源配额机制,限定不同租户能占用的资源,例如CPU使用量、内存使用量等等,来实现租户可用资源的管理。
    kubernetes在集群启动之后,会默认创建几个namespace。
kubectl get namespace

• default:所有未指定的Namespace的对象都会被分配在default命名空间。
• kube-node-lease:集群节点之间的心跳维护,v1.13开始引入。
• kube-public:此命名空间的资源可以被所有人访问(包括未认证用户)。
• kube-system:所有由kubernetes系统创建的资源都处于这个命名空间。

应用示例

# 示例:查看所有的命名空间
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 json
kubectl get ns default -o yaml

# 示例:查看命名空间的详情
kubectl describe namespace default
kubectl describe ns default

# 示例:创建命名空间
kubectl create namespace dev
kubectl create ns dev

# 示例:删除命名空间
kubectl delete ns dev

# 示例:命令式对象配置
# 新建ns-dev.yaml:
apiVersion: v1
kind: Namespace
metadata:
  name: dev
  
# 通过命令式对象配置进行创建和删除:
kubectl create -f ns-dev.yaml
kubectl delete -f ns-dev.yaml

Pod

概述

  1. Pod是kubernetes集群进行管理的最小单元,程序要运行必须部署在容器中,而容器必须存在于Pod中。
  2. Pod可以认为是容器的封装,一个Pod中可以存在一个或多个容器。
  3. kubernetes在集群启动之后,集群中的各个组件也是以Pod方式运行的,可以通过下面的命令查看:
    在这里插入图片描述
    pause 是 根容器 Pod中的其他容器都共享根容器的端口和数据卷
kubectl get pods -n kube-system
**语法及应用示例**
  • 语法:创建并运行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 10.244.2.7:80

# 语法:删除指定的Pod
kubectl delete pod pod的名称 [-n 命名空间]

# 示例:删除Nginx的Pod
kubectl delete pod nginx -n dev
#不能删除成功 因为此Pod被控制器管理 删除之后还会被控制器重新创建
#只有把控制器删除 Pod才会被删除

# 示例:命令式对象配置
# ①新建pod-nginx.yaml:
apiVersion: v1
kind: Pod
metadata:
  name: nginx	#此Pod指的是Pod名称不是Pod控制器
  namespace: dev
spec:
  containers:
  - image: nginx:1.17.1
    imagePullPolicy: IfNotPresent
    name: pod
    ports: 
    - name: nginx-port
      containerPort: 80
      protocol: TCP
      
# 执行创建和删除命令:
kubectl create -f pod-nginx.yaml
kubectl delete -f pod-nginx.yaml

Pod每次重启都会重新生成一个新的ip

Label

不通的namespace 之间不能通信,所以可是使用标签分组
概述
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=“name”并且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。

语法及应用示例

• 语法:为资源打标签
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.17.1
    imagePullPolicy: IfNotPresent
    name: pod
    ports: 
    - name: nginx-port
      containerPort: 80
      protocol: TCP
• ②执行创建和删除命令:
kubectl create -f pod-nginx.yaml
kubectl delete -f pod-nginx.yaml

Deployment

概述
在kubernetes中,Pod是最小的控制单元,但是kubernetes很少直接控制Pod,一般都是通过Pod控制器来完成的。
Pod控制器用于Pod的管理,确保Pod资源符合预期的状态,当Pod的资源出现故障的时候,会尝试进行重启或重建Pod。
在kubernetes中Pod控制器的种类有很多,本章节只介绍一种:Deployment。
语法及应用示例

特别注意:在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容器实例。
在这里插入图片描述
Deployment是根据label与Pod进行绑定的
一旦删除Deployment 对应的Pod也会被删除

# 语法:创建指定名称的deployement
kubectl create deployment xxx [-n 命名空间]
kubectl create deploy xxx [-n 命名空间]

# 示例:在名称为test的命名空间下创建名为nginx的deployment
kubectl create deployment nginx --image=nginx:1.17.1 -n test

# 语法:根据指定的deplyment创建Pod
kubectl scale deployment xxx [--replicas=正整数] [-n 命名空间]

# 示例:在名称为test的命名空间下根据名为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.17.1
        name: nginx
        ports:
        - containerPort: 80
          protocol: TCP
          
# ②执行创建和删除命令:
kubectl create -f deploy-nginx.yaml
kubectl delete -f deploy-nginx.yaml

# 语法:查看创建的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

Service

IP地址+端口号可以访问对应pod
Pod重建后对应的ip地址会变
概述
我们已经能够利用Deployment来创建一组Pod来提供具有高可用性的服务,虽然每个Pod都会分配一个单独的Pod的IP地址,但是却存在如下的问题:

  • Pod的IP会随着Pod的重建产生变化。
  • Pod的IP仅仅是集群内部可见的虚拟的IP,外部无法访问。

这样对于访问这个服务带来了难度,因此,kubernetes设计了Service来解决这个问题。
Service可以看做是一组同类的Pod对外的访问接口,借助Service,应用可以方便的实现服务发现和负载均衡。
在这里插入图片描述
service也是根绝label选择对应的Pod的
service只要不删除 则在整个生命周期中都是不可变的

语法及应用示例
创建集群内部可访问的Service

# 语法:暴露Service
kubectl expose deployment xxx --name=服务名 --type=ClusterIP --port=暴露的端口 --target-port=指向集群中的Pod的端口 [-n 命名空间]
#service 去查找deployment对应的pod
# 会产生一个CLUSTER-IP,这个就是service的IP,在Service的生命周期内,这个地址是不会变化的

# 示例:暴露名为test的namespace下的名为nginx的deployment,并设置服务名为svc-nginx1
kubectl expose deployment nginx --name=nginx --type=ClusterIP --port=80 --target-port=80 -n dev

# 语法:查看Service
[root@hadoop102 ~]# kubectl get service -n dev
NAME    TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
nginx   ClusterIP   10.103.38.69   <none>        80/TCP    25s

# 测试service 此service的类型为ClusterIP只能在集群内访问
curl 10.103.38.69:80

创建集群外部可访问的Service
语法:暴露Service

kubectl expose deployment xxx --name=服务名 --type=NodePort --port=暴露的端口 --target-port=指向集群中的Pod的端口 [-n 命名空间]

# 会产生一个外部也可以访问的Service
# 示例:暴露名为test的namespace下的名为nginx的deployment,并设置服务名为svc-nginx2
kubectl expose deploy nginx --name=svc-nginx2 --type=NodePort --port=80 --target-port=80 -n test

# 语法:查看Service
[root@hadoop102 ~]# kubectl get service -n dev
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
nginx        ClusterIP   10.103.38.69     <none>        80/TCP         8m43s
svc-nginx2   NodePort    10.106.104.155   <none>        80:32123/TCP   11s
#注意此时创建的service类型是NodePort 外部网路可以通过主机地址+32123端口号 映射成svc-nginx2 的 10.106.104.155 + 80端口号 从而访问内部网络


# 示例:查看名为test的命名空间的所有Service
kubectl get service -n test


# 语法:删除服务
kubectl delete service xxx [-n 命名空间]

# 示例:删除服务
kubectl delete service svc-nginx1 -n test

#对象配置方式
# 示例:对象配置方式
# ①新建svc-nginx.yaml,内容如下:
apiVersion: v1
kind: Service
metadata:
  name: svc-nginx
  namespace: dev
spec:
  clusterIP: 10.109.179.231
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    run: nginx
  type: ClusterIP
  
• ②执行创建和删除命令:
kubectl  create  -f  svc-nginx.yaml
kubectl  delete  -f  svc-nginx.yaml
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168530.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • react根据json配置创建表单_关于web页的叙述不正确

    react根据json配置创建表单_关于web页的叙述不正确我是一个新手,MVC3和剃刀和我需要结合/加载的WebGrid一旦数据从AJAX后返回的帮助。任何帮助将真正理解(项目截止日期即将到来之际);)我的情况是这样的:我有两个级联的下拉列表。第一个列表包含从数据库中的区域。一旦一个区域中,选择它填充第二个下拉用的设备的清单。一旦设备被选中,我需要填充的WebGrid有建筑物清单。我有级联下拉菜单正常工作Index.cshtml:@u…

    2022年10月5日
    0
  • docker基础:私库系列:再探Harbor:(4) https方式的私库管理

    docker基础:私库系列:再探Harbor:(4) https方式的私库管理在前面的介绍中,缺省使用了http的方式,而考虑安全的角度,容器的仓库在生产环境中往往被设定为https的方式,而harbor将这些证书的创建和设定都进行了简单的集成,这篇文章来看一下在harbor下如何使用https的方式。

    2022年7月18日
    21
  • phpstorm2021永久激活 3月最新注册码

    phpstorm2021永久激活 3月最新注册码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    154
  • BREW的COM属性

    BREW的COM属性

    2021年8月2日
    64
  • HTML 有序列表 字母,HTML有序列表| HTML编号列表

    HTML 有序列表 字母,HTML有序列表| HTML编号列表本文概述HTML排序列表或编号列表以编号格式显示元素。HTMLol标签用于有序列表。我们可以使用有序列表以数字顺序格式或字母顺序格式或强调顺序的任何格式来表示项目。编号列表可以有不同类型:数值(1,2,3)大写罗马数字(IIIIII)小罗马数字(iiiiii)大写字母(ABC)小写字母(abc)为了表示不同的有序列表,标记中有5种类型的属性。类型描述输入“1”这是默认类…

    2022年6月17日
    23
  • java 转发与重定向_Java 转发和重定向的区别

    java 转发与重定向_Java 转发和重定向的区别转发是服务器行为,重定向是客户端行为1.转发在服务器端完成的;重定向是在客户端完成的2.转发的速度快;重定向速度慢3.转发的是同一次请求;重定向是两次不同请求4.转发不会执行转发后的代码;重定向会执行重定向之后的代码5.转发地址栏没有变化;重定向地址栏有变化6.转发必须是在同一台服务器下完成;重定向可以在不同的服务器下完成在servlet中调用转发、重定向的语句如下:request.getRequ…

    2022年9月4日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号