首页 > 其他分享 >K8S各资源之间的关系

K8S各资源之间的关系

时间:2022-12-29 13:13:00浏览次数:33  
标签:关系 kubectl -- dev nginx Pod K8S pod 资源

在K8S中一切都是资源。而这些资源包含了很多,如Namespace、Pod、Label、Deployment、Service。这些资源之间又有相互的联系。

Namespace

Namespace是K8S中比较重要的资源,主要用于多套环境的资源隔离,如dev环境,test环境,prod环境等。
在默认情况下K8S中的Pod是可以相互访问的,在实际情况中,可能希望两个Pod之间不能进行通信,这个时候就需要使用Namespace进行环境隔离。

kubernetes在集群启动之后,会默认创建如下namespace

NAME 说明
default 所有未指定Namespace的对象都会被分配在default命名空间
kube-flannel Kubernetes网络配置
kube-node-lease 集群节点之间的心跳维护
kube-public 此命名空间下的资源可以被所有人访问
kube-system 所有由Kubernetes系统创建的资源都处于这个命名空间

查看

# 1 查看所有的ns  命令:kubectl get ns   

# 2 查看指定的ns   命令:kubectl get ns ns名称

# 3 指定输出格式  命令:kubectl get ns ns名称  -o 格式参数

# 4 查看ns详情  命令:kubectl describe ns ns名称

创建

# 创建namespace 命令:kubectl create ns dev

删除

# 删除namespace 命令:kubectl delete ns dev

配置方式

首先准备一个yaml文件:ns-dev.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: dev

然后就可以执行对应的创建和删除命令了:

​ 创建:kubectl create -f ns-dev.yaml

​ 删除:kubectl delete -f ns-dev.yaml

Pod

Pod是K8S集群管理的最小单元,程序运行在容器中,而容器运行在Pod中,一个Pod可以运行一个或者多个容器。K8S不直接操作Pod,而都是操作Pod控制器。K8S在集群启动之后,集群中的各个组件也都是以Pod方式运行的。

创建并运行

kubernetes没有提供单独运行Pod的命令,都是通过Pod控制器来实现的

# 命令格式: kubectl run (pod控制器名称) [参数] 
# --image  指定Pod的镜像
# --port   指定端口
# --namespace  指定namespace

示例:kubectl run nginx --image=nginx:1.17.1 --port=80 --namespace dev 

查看pod信息

# 查看Pod基本信息,命令:kubectl get pods -n dev

# 查看Pod的详细信息,使用describe ,命令:kubectl describe pod nginx -n dev

访问Pod

# 使用wide获取Pod额外信息,命令:kubectl get pods -n dev -o wide

删除指定Pod

# 删除指定Pod,命令:kubectl delete pod nginx -n dev
# 删除之后又会产生新的Pod
# 这是因为当前Pod是由Pod控制器创建的,控制器会监控Pod状况,一旦发现Pod死亡,会立即重建
# 此时要想删除Pod,必须删除Pod控制器

配置操作

创建一个pod-nginx.yaml,内容如下:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  namespace: dev
spec:
  containers:
  - image: nginx:1.17.1
    name: pod
    ports:
    - name: nginx-port
      containerPort: 80
      protocol: TCP

然后就可以执行对应的创建和删除命令了:

​ 创建:kubectl create -f pod-nginx.yaml

​ 删除:kubectl delete -f pod-nginx.yaml

Label

Label的作用是在资源上添加标识,用来对它们进行区分和选择。以key/value键值对的形式添加到各种资源上。一个资源可以多个标签。
Label用于给某个资源对象定义标识
Label Selector用于查询和筛选拥有某些标签的资源对象
Label Selector:
基于等式的Label Selector,如:name=salve,或者name!=salve
基于集合的Label Selector,如: name in (salve,master),或者name not in (salve,master)

命令方式

# 为pod资源打标签,示例:kubectl label pod nginx-pod version=1.0 -n dev

# 为pod资源更新标签,示例:kubectl label pod nginx-pod version=2.0 -n dev --overwrite

# 查看标签,示例:kubectl get pod nginx-pod  -n dev --show-labels

# 筛选标签,示例:kubectl get pod -n dev -l version=2.0  --show-labels

#删除标签,示例:kubectl label pod nginx-pod version- -n dev

配置方式

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  namespace: dev
  labels:
    version: "3.0" 
    env: "test"
spec:
  containers:
  - image: nginx:1.17.1
    name: pod
    ports:
    - name: nginx-port
      containerPort: 80
      protocol: TCP

然后就可以执行对应的更新命令了:kubectl apply -f pod-nginx.yaml

Deployment

在kubernetes中,Pod是最小的控制单元,但是kubernetes很少直接控制Pod,一般都是通过Pod控制器来完成的。Pod控制器用于pod的管理,pod的控制器分很多种,比如deployment.

命令操作

# 命令格式: kubectl run deployment名称  [参数] 
# --image  指定pod的镜像
# --port   指定端口
# --replicas  指定创建pod数量
# --namespace  指定namespace
示例:kubectl run nginx --image=nginx:1.17.1 --port=80 --replicas=3 -n dev 

在K8S 1.80.0版本之后没有replicas这个命令参数了,但是可以通过yaml文件的方式创建

配置操作

创建一个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

Deployment可用于创建一组Pod来提供具有服务,而一个控制器和pod之前的关联关系就是使用label标签进行关联的。Pod控制器会监控pod,如果pod发生异常,会重建pod,这导致了pod的Ip每次都会发生变化,而且Pod外部网络无法访问,故而出现了service.

Service

Service可以看作是一组同类Pod对外的访问接口
使用Service对外提供接口,请求走到Service,会到pod控制器,然后根据标签选择器负载均衡选择对应的pod提供程序。
Service提供的操作
操作一:创建集群内部可访问的Service
操作二:创建集群外部也可访问的Service
这两个的操作仅仅区分在type上。
Type=ClusterIP只能在集群内部访问,
Type=NodePort可以通过外部网络访问。
配置方式

创建一个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 #只能在集群内部访问,NodePort可以通过外部网络访问

然后就可以执行对应的创建和删除命令了:

​ 创建:kubectl create -f svc-nginx.yaml

​ 删除:kubectl delete -f svc-nginx.yaml

标签:关系,kubectl,--,dev,nginx,Pod,K8S,pod,资源
From: https://www.cnblogs.com/swayer/p/17012258.html

相关文章

  • 第二章《Java程序世界初探》第7节:关系运算符及条件语句
    ​关系运算符有==、!=、>、>=、<、<=。它们分别表示等于、不等于、大于、大于等于、小于和小于等于。关系运算符的作用是判断两个数据之间是否存在某种逻辑关系。既然是“判......
  • 5-资源限制,亲和反亲和,污点和容忍
    一KubernetesContainer、Pod、Namespace内存及CPU限制1.1限制单位介绍1如果运行的容器没有定义资源(memory,cpu)等限制,但是在namesapce定义了LimitRange限制,那么该容器......
  • 探索社区商业循环经济新模式,再生资源回收“变废为宝”
    变废为宝、循环利用是朝阳产业。在国家大力推行绿色、低碳、环保的发展理念下,越拉越多的行业和企业开始注重低碳、循环经济,很多科技企业也瞄准了循环经济的发展契机,纷纷加入......
  • 每天一点基础K8S--K8S种的secret
    secret1、背景secret是一种用于保存少量敏感信息例如密码、令牌或密钥的对象资源。这样的信息可能会被放在Pod规约中或者镜像中。使用Secret意味着你不需要在应用程......
  • 移位运算和乘除运算的关系
    在了解了二进制数的机制后,接下来我们来看一下运算。和十进制数一样,四则运算同样也可以使用在二进制数中,只要注意逢2进位即可。下面,我们就来重点看一下二进制数所特有的运算......
  • CMake梳理依赖关系
    梳理依赖关系的方法,通常是在cmake命令中追加参数graphviz,如cmake..--graphviz=../target_deps_graphviz,用来生成每个目标的依赖dot文件,再结合dot命令,如dot-Tpng-otar......
  • unity 资源打包,MD5值计算注意点
    仅作记录:unity3d在修改资源时,有些类型的资源修改的是源文件,比如:fbx,mp3,.jpg,.png等。这些资源是外部资源导入unity3d中,untiy3d导入编译时,生成相应的meta文件,meta文件中保存......
  • 跨域资源共享 CORS 详解
    CORS是一个W3C标准,全称是"跨域资源共享"(Cross-originresourcesharing)。它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。本文详细......
  • C++/Qt 系列推荐 - ORM(对象关系映射)
    教程目录以下是教程目录,从理论到实战,一步步深入ORM:​​快速认识ORM​​​​QxOrm介绍、下载、编译​​​​QxOrm快速上手​​​​在Ubuntu上安装MySQL​​​​QMYSQL......
  • Docker的资源管理控制
    一、CPU控制cgroups,是一个非常强大的linux内核工具,他不仅可以限制被namespace隔离起来的资源,还可以为资源设置权重、计算使用量、操控进程启停等等。所以cgroups(Contr......