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: nginxnamespace: dev
spec:containers:- image: nginx:1.17.1name: podports:- name: nginx-portcontainerPort: 80protocol: 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: nginx2namespace: devlabels:version: "3.0"env: "test"
spec:containers:- image: nginxname: podports:- name: nginx-portcontainerPort: 80protocol: 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: nginxnamespace: dev
spec:replicas: 3selector:matchLabels:run: nginxtemplate:metadata:labels:run: nginxspec:containers:- name: nginximage: nginxports:- containerPort: 80protocol: 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-nginxnamespace: dev
spec:clusterIP: 10.109.179.231ports:- port: 80protocol: TCPtargetPort: 80selector:run: nginxtype: ClusterIP
kubectl get svc svc-nginx -n dev -o wide

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

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

相关文章

巧妙利用数据结构优化部门查询

目录 一、出现的问题 部门树接口超时 二、问题分析 源代码分析 三、解决方案 具体实现思路 四、优化的效果 一、出现的问题 部门树接口超时 无论是在A项目还是在B项目中,都存在类似的页面,其实就是一个部门列表或者叫组织列表。 从页面的展示形式…

【数据分析】案例04:豆瓣电影Top250的数据分析与Web网页可视化(numpy+pandas+matplotlib+flask)

豆瓣电影Top250的数据分析与Web网页可视化(numpy+pandas+matplotlib+flask) 豆瓣电影Top250官网:https://movie.douban.com/top250写在前面 实验目的:实现豆瓣电影Top250详情的数据分析与Web网页可视化。电脑系统:Windows使用软件:PyCharm、NavicatPython版本:Python 3.…

【线程】基于环形队列的生产者消费者模型

1 环形队列 环形队列采用数组来模拟,用取模运算来模拟环状特性。 1.如何判断环形队列为空或者为满? 当环形队列为空时,头和尾都指向同一个位置。当环形队列为满时,头和尾也都指向同一个位置。 因此, 可以通过加计数器或者标记…

Vue指令v-html

目录 一、Vue中的v-html指令是什么?二、v-html指令与v-text指令的区别? 一、Vue中的v-html指令是什么? v-html指令的作用是:设置元素的innerHTML,内容中有html结构会被解析为标签。 二、v-html指令与v-text指令的区别…

OPENGLPG第九版学习 - 着色器基础

文章目录 2.1 着色器与OpenGL2.2 0penGL的可编程管线2.3 OpenGL着色语言GLSL概述2.3.1 使用GLSL构建着色器变量的声明变量的作用域变量的初始化构造函数 、 类型转换聚合类型访问向量和矩阵中的元素结构体数组多维数组 2.3.2 存储限制符const 存储限制符in 存储限制符out 存储限…

路径规划之启发式算法之二十九:鸽群算法(Pigeon-inspired Optimization, PIO)

鸽群算法(Pigeon-inspired Optimization, PIO)是一种基于自然界中鸽子群体行为的智能优化算法,由Duan等人于2014年提出。该算法模拟了鸽子在飞行过程中利用地标、太阳和磁场等导航机制的行为,具有简单、高效和易于实现的特点,适用于解决连续优化问题。 更多的仿生群体算法…

Docker Compose的使用

文章首发于我的博客:https://blog.liuzijian.com/post/docker-compose.html 目录 Docker Compose是什么Docker Compose安装Docker Compose文件Docker Compose常用命令案例:部署WordPress博客系统 Docker Compose是什么 Docker Compose是Docker官方的开源…

AP单类平均准确率

P_true N_true P_pred TP Fp N_pred FN TNP NTP(真正样本,与真实框IoU大于阈值的框) FP(假正样本,与真实框IoU小于阈值的框) TN(真负样本,背景)…

Leetcode—1427. 字符串的左右移【简单】Plus

2025每日刷题&#xff08;206&#xff09; Leetcode—1427. 字符串的左右移 实现代码 class Solution { public:string stringShift(string s, vector<vector<int>>& shift) {// shift[i] [dir, amount]// dir 0(左) or 1(右)// 左表示正, 右表示负int len…

机器学习10

自定义数据集 使用scikit-learn中svm的包实现svm分类 代码 import numpy as np import matplotlib.pyplot as pltclass1_points np.array([[1.9, 1.2],[1.5, 2.1],[1.9, 0.5],[1.5, 0.9],[0.9, 1.2],[1.1, 1.7],[1.4, 1.1]])class2_points np.array([[3.2, 3.2],[3.7, 2.9],…

股票入门知识

股票入门&#xff08;更适合中国宝宝体制&#xff09; 股市基础知识 本文介绍了股票的基础知识&#xff0c;股票的分类&#xff0c;各板块发行上市条件&#xff0c;股票代码&#xff0c;交易时间&#xff0c;交易规则&#xff0c;炒股术语&#xff0c;影响股价的因素&#xf…

Golang 并发机制-3:通道(channels)机制详解

并发编程是一种创建性能优化且响应迅速的软件的强大方法。Golang&#xff08;也称为 Go&#xff09;通过通道&#xff08;channels&#xff09;这一特性&#xff0c;能够可靠且优雅地实现并发通信。本文将揭示通道的概念&#xff0c;解释其在并发编程中的作用&#xff0c;并提供…

C#,入门教程(11)——枚举(Enum)的基础知识和高级应用

上一篇&#xff1a; C#&#xff0c;入门教程(10)——常量、变量与命名规则的基础知识https://blog.csdn.net/beijinghorn/article/details/123913570 不会枚举&#xff0c;就不会编程&#xff01; 枚举 一个有组织的常量系列 比如&#xff1a;一个星期每一天的名字&#xf…

读书笔记--分布式架构的异步化和缓存技术原理及应用场景

本篇是在上一篇的基础上&#xff0c;主要对分布式应用架构下的异步化机制和缓存技术进行学习&#xff0c;主要记录和思考如下&#xff0c;供大家学习参考。大家知道原来传统的单一WAR应用中&#xff0c;由于所有数据都在同一个数据库中&#xff0c;因此事务问题一般借助数据库事…

【C++】继承(下)

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解C的继承&#xff08;下&#xff09;&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 5.继承与友元6.继承与静态成员7.复杂的菱形继承及菱形虚拟继承8.继…

基于LLM的路由在专家混合应用:一种新颖的交易框架,该框架在夏普比率和总回报方面提升了超过25%

“LLM-Based Routing in Mixture of Experts: A Novel Framework for Trading” 论文地址&#xff1a;https://arxiv.org/pdf/2501.09636 摘要 随着深度学习和大语言模型&#xff08;LLMs&#xff09;的不断进步&#xff0c;混合专家&#xff08;MoE&#xff09;机制在股票投资…

Med-R2:基于循证医学的检索推理框架:提升大语言模型医疗问答能力的新方法

Med-R2 : Crafting Trustworthy LLM Physicians through Retrieval and Reasoning of Evidence-Based Medicine Med-R2框架Why - 这个研究要解决什么现实问题What - 核心发现或论点是什么How - 1. 前人研究的局限性How - 2. 你的创新方法/视角How - 3. 关键数据支持How - 4. 可…

【Blazor学习笔记】.NET Blazor学习笔记

我是大标题 我学习Blazor的顺序是基于Blazor University&#xff0c;然后实际内容不完全基于它&#xff0c;因为它的例子还是基于.NET Core 3.1做的&#xff0c;距离现在很遥远了。 截至本文撰写的时间&#xff0c;2025年&#xff0c;最新的.NET是.NET9了都&#xff0c;可能1…

C++ Primer 迭代器

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…

2 [GitHub遭遇严重供应链投毒攻击]

近日&#xff0c;有黑客针对 Discord Top.gg 的GitHub 账户发起了供应链攻击&#xff0c;此次攻击导致账户密码、凭证和其他敏感信息被盗&#xff0c;同时也影响到了大量开发人员。 Checkmarx 在一份技术报告中提到&#xff0c;黑客在这次攻击中使用了多种TTP&#xff0c;其中…