当前位置: 首页 > article >正文

kubernetes(二)

文章目录

    • Namespace
    • Pod
    • Label
    • Deployment
    • Service

Namespace

在Kubernetes系统中,Namespace是一种至关重要的资源类型,其主要功能在于实现多套环境的资源隔离或者多租户的资源隔离,默认情况下所有的Pod都能够相互访问,但如果不想让两个Pod之间存在互相访问,就可以把这两个Pod分别划分到不同的Namespace当中,Kubernetes可以把集群内部的资源分配至不同的Namespace,在逻辑上构建出一个个组,从而能够对不同组的资源进行隔离式的使用和管理。

在这里插入图片描述

查看所有命名空间

[root@k8s-master ~]# kubectl get namespace

在这里插入图片描述

  • default:未指定Namespace的pod对象都会被分配在default命名空间
  • dev:自己建的命令空间
  • kube-flannel:主要用于部署和管理Flannel网络插件,Flannel是Kubernetes集群中常用的网络解决方案,负责为Pod提供网络通信能力
  • kube-node-lease:用于集群节点之间的心跳维护
  • kube-public:该命名空间下的资源可以被所有人访问
  • kube-system:由Kubernetes系统创建的资源都处于这个命名空间

查看指定命令空间

kubectl get ns default

在这里插入图片描述
指定输出格式,kubernetes支持的格式有很多,比较常见的是wide、json、yaml
在这里插入图片描述
查看namespace详情 命令:kubectl describe ns ns名称

在这里插入图片描述
创建

kubectl create ns test

在这里插入图片描述

删除

kubectl delete ns test

操作配置文件

vim ns-test2.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: test2

在这里插入图片描述
创建

kubectl create -f ns-test2.yaml

删除

kubectl delete -f ns-test2.yaml

Pod

Pod是k8s集群管理的最小单元,Pod里面包含一个或多个容器,而程序运行部署在容器中,Pod可以认为是容器的封装。

在这里插入图片描述

查询指定namespace的pod

kubectl get pod -n kube-system

在这里插入图片描述
创建并运行

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

在这里插入图片描述查看pod的信息及详情

kubectl get pod -n dev
kubectl describe pod pod -n dev

在这里插入图片描述
删除指定的Pod

kubectl delete pod pod2 -n dev

在这里插入图片描述

配置文件操作pod

vim a.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

创建pod

kuebectl create -f a.yaml

删除pod

kubectl delete -f a.yaml

查看pod详情

kubectl describe pod nginx -n dev

在这里插入图片描述

Label

Label在Kubernetes中是标签,主要用于在各类资源上添加特定的标识,从而实现对这些资源的区分与选择。

Label具有以下特点:

  • Label是以键值对(key/value)的形式添加到各种不同的对象上的,像Node(节点)、Pod(容器组)、Service(服务)等对象都可以添加Label。
  • 一个资源对象可以定义多个Label,一个Label也能够被添加到多个资源对象上。
  • Label的标记通常是在资源对象定义的时候完成的,也可以在对象创建之后对其进行添加或者删除操作。
  • 通过Label能够实现资源的多维度分组,在进行资源的分配、调度、配置以及部署等一系列管理工作时,就可以更加灵活、便捷地操作。

在完成标签的定义后,还需要对标签进行选择,这时候就要用到Label Selector了。

Label的作用是给指定的资源对象打标记;而Label Selector的主要功能是查询和筛选那些具有特定标签的资源对象。

Label Selector主要有以下两种类型:

一、基于等式的Label Selector

  • 当使用“name = master”这种形式的表达式时,会挑选出键(key)为“name”并且值(value)为“master”的对象。
  • 若表达式为“env!= dev”,则会选择键(key)为“env”且值(value)不等于“dev”的对象。

二、基于集合的Label Selector

  • 对于“name in (master,slave)”这样的表达式,则会选取键(key)为“name”并且值(value)是“master”或者“slave”的对象。
  • 要是表达式为“name not in (master)”,就会选择键(key)为“name”且值(value)不等于“master”的对象。

给pod打标签

kubectl label pod nginx version=1.0 -n dev

查看pod标签

kubectl get pod nginx  -n dev --show-labels

在这里插入图片描述

更新pod标签

kubectl label pod nginx version=2.0 -n dev --overwrite

在这里插入图片描述
筛选标签

kubectl get pod -l version=2.0 -n dev --show-labels

在这里插入图片描述

删除标签

kubectl label pod nginx version- -n dev

在这里插入图片描述
配置文件方式

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

在这里插入图片描述

Deployment

在Kubernetes里,Pod是最小的控制单元,可以通过Pod控制器来对pod进行控制,Pod控制器的主要作用是对Pod进行管理,保证Pod资源处于预期的状态,一旦Pod资源出现问题,比如发生故障,Pod控制器就会尝试重启或者重新构建Pod。

Kubernetes中的Pod控制器有多种,较为常见的有以下几种:

  • ReplicationController:这是最早期的Pod控制器,如今已经被废弃,其功能由ReplicaSet代替。
  • ReplicaSet:能保证Pod的数量在期望的水平,同时,它还支持对Pod数量进行扩缩容操作以及镜像版本的升级。
  • Deployment:通过控制ReplicaSet来间接管理Pod,还具备滚动升级和回退版本的功能。
  • Horizontal Pod Autoscaler:可以根据集群的实际负载情况,自动对Pod的数量进行调整,能在集群负载高峰时增加Pod数量,低谷时减少Pod数量,从而实现削峰填谷的效果。
  • DaemonSet:会在集群中指定的Node节点上运行,并且每个指定节点上仅运行一个副本,通常用于执行守护进程类的任务。
  • Job:由它创建出来的Pod在完成任务后会立即退出,主要用于执行一次性任务。
  • Cronjob:它所创建的Pod主要负责周期性任务的执行。
  • StatefulSet:专门用于管理有状态的应用程序,能够为每个应用实例提供稳定的网络标识和持久化存储。

其中 Deployment 是最常用的pod控制器。

在这里插入图片描述

# 命令格式: kubectl run deployment [参数]
# --image 指定pod的镜像
# --port   指定端口
# --replicas 创建pod的数量
# --namespace 指定namespace

创建deployment

kubectl create deployment my-deploy  --image=nginx --port=80 --replicas=3 -n dev

在这里插入图片描述

查看创建的Pod以及deployment信息

kubectl get pod -n dev
kubectl get deploy -n dev

在这里插入图片描述

查看deployment的详细信息

kubectl describe deploy my-deploy -n dev

在这里插入图片描述
配置文件操作

vim 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:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
          protocol: TCP

创建deployment

kubectl create -f deploy-nginx.yaml

删除

kubectl delete deploy nginx -n dev

在这里插入图片描述

Service

可以通過Deployment来创建一组Pod,以提供高可用性的服务,但是每个Pod都会被分配一个独立的Pod IP,这会出现一些问题,比如当Pod进行重建时,其对应的Pod IP会发生变化;此外,Pod IP是仅在集群内部可见的虚拟IP,外部环境无法对其进行访问,针对以上问题,可以通过Service来解决。
Service可以为理解为是一组相同类型Pod对外提供服务的访问接口,通过Service应用程序能够实现服务发现以及负载均衡的功能。

在这里插入图片描述
创建集群内部可访问的Service

kubectl expose deploy my-deploy --name=svc-nginx1 --type=ClusterIP --port=80 --target-port=80 -n dev
kubectl get svc svc-nginx -n dev -o wide

CLUSTER-IP是service的IP,在Service的生命周期中该地址是不会变动的,可以通过这个IP访问当前service对应的pod
在这里插入图片描述
创建集群外部也可访问的Service

Service的type类型为ClusterIP,该ip地址只在集群内部可访问,如果需要创建外部可以访问的Service,需要修改type为NodePort。

kubectl expose deploy my-deploy --name=svc-nginx2 --type=NodePort --port=80 --target-port=80 -n dev
kubectl get svc svc-nginx2 -n dev -o wide

在这里插入图片描述此时可以通过集群外的主机访问 节点IP:30681访问服务了
在这里插入图片描述
删除service

kubectl delete svc svc-nginx2 -n dev

在这里插入图片描述
配置文件

vim 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 get svc svc-nginx -n dev -o wide

http://www.kler.cn/a/531164.html

相关文章:

  • 【零基础学JAVA】数据类型
  • DeepSeek-R1 低成本训练的根本原因是?
  • HTB:Alert[WriteUP]
  • 初入机器学习
  • Java小白入门教程:LinkedList
  • 【Elasticsearch】实现气象数据存储与查询系统
  • 对比JSON和Hessian2的序列化格式
  • 前端 | JavaScript中的reduce方法
  • 【14】WLC3504 HA配置实例
  • 【股票数据API接口49】如何获取股票实时交易数据之Python、Java等多种主流语言实例代码演示通过股票数据接口获取数据
  • 自动化构建-make/Makefile 【Linux基础开发工具】
  • 本地快速部署DeepSeek-R1模型——2025新年贺岁
  • relational DB与NoSQL DB有什么区别?该如何选型?
  • C++ Primer 迭代器
  • Unity特效插件GodFX
  • 力扣经典题目之14. 最长公共前缀
  • Alibaba开发规范_异常日志之日志规约:最佳实践与常见陷阱
  • 最新功能发布!AllData数据中台核心菜单汇总
  • Win11使用VMware提示:平台不支持虚拟化的 Intel VT-x/EPT
  • 【BUUCTF逆向题】[WUSTCTF2020]level1、[GUET-CTF2019]re
  • linux通过lvm调整分区大小
  • 【Leetcode 每日一题】81. 搜索旋转排序数组 II
  • 【ChatGPT:开启人工智能新纪元】
  • 嵌入式硬件篇---HAL库内外部时钟主频锁相环分频器
  • Leetcode面试高频题分类刷题总结
  • GESP2023年9月认证C++六级( 第三部分编程题(2)小杨的握手问题)