k8s笔记1- 初步认识k8s
k8s简介:
kubernetes,俗称k8是,用于自动部署,扩缩和管理容器化应用程序的开源系统,它将组成应用程序的容器,组合成逻辑单元,便于管理和服务发现。
k8s的作用
自动化上线和回滚、存储编排、自动装箱、ipv4和ipv6双协议、自我修复、服务发现与负载均衡、secret和配置管理、批量执行、水平扩缩、为扩展性设计
k8s核心组件
- etcd:分布式高性能数据库,key-value的形式存储节点上部署的容器信息等
- api-server:资源操作入口,提供认证、授权、访问控制、api注册和发现等机制
- controller manager:负责维护集群状态、故障检测、自动扩展、滚动更新等
- scheduler:负责资源的调度,按照预定的调度策略将pod调度到相应的节点上
- kubelet:负责维护容器的生命周期和CVI、CNI的管理
- kubectl:在master节点上对k8s集群运行命令
Pod:
k8s本身是以容器运行在目标机器上,每个k8s节点被称为Node,k8s集群是一组node机器组成的,k8s不直接无操作容器,而是提供了一个pod组件,封装了一组容器,容器都被pod管理。
Pod是 K8s的最小的可部署的计算单元,它是Kubernetes创建和管理的。一个Pod通常包含一个或者多个容器,这些容器会共享存储、网络资源和运行配置
可以通过一个YAML或JSON格式的配置文件定义Pod属性,包括容器镜像、环境变量、存储卷等。然后使用Kubernetes API或命令行工具(如kubectl)来创建和管理Pods。
k8s组件创建pod流程
- 在master节点写yaml,描述对容器的运行要求,创建pod的要求
- 使用kubectl命令创建应用这个资源的描述文件,开始k8s组件交互,把命令发给api-server
- api-server 利用本地https证书验证 kubectl请求是否被允许
- api-server 将pod创建信息记录到etcd数据库中,如应用的镜像版本、容器名、端口等
- api-server通知scheduler准备pod的调度
- scheduler调度从etcd中获取pod的部署信息,判断出一个合适的node节点准备部署pod
- scheduler告知api-server决定部署pod的node节点
- apiserver将部署信息写入etcd中
- api-server通知远程具体的机器去读取etcd中的信息,根据这些信息创建pod
YAML语言介绍:
YAML语言是一个类似xml、json的标志性语言,以数据为中心。
格式如下:
#yml格式
user:age: 18address: zhengzhou
YMAL语法:
- 大小写敏感
- 使用空格缩进表示层级关系,高版本可以使用tab
- 缩进空格数不重要,但是同层级的元素需要相同,左对齐
- # 表示注释
数据类型:
纯量:单个的不可再分的值(字符串、布尔、整数、浮点、null、时间、日期)
对象:键值对的集合,又称为映射(mapping)/哈希(hash)/字典(dictionary)
数组:一组按照次序排列的值,又称为序列(sequence)/列表(list)
纯量
布尔:true 或false
整型:整数,例如123、345等
浮点:小数,例如3.1415926
null:不写值 或者写~,建议~
日期:必须使用iso 8601格式,即yyyy-mm-dd
时间:必须使用iso 8601格式,即2024-01-03T14:47:00+08:00 时间和日期用T链接,+后边是时区
字符串:直接写值,如果有特殊符号,必须使用单/双引号包裹
对象:
#yml格式对象格式1 -- 推荐
user:age: 18address: zhengzhou#yml格式对象格式2
user: {age: 18,address: zhengzhou}
数组
格式1 -- 推荐
address: -zhengzhou-beijing
--格式2。
address: {zhengzhou,beijing}
一个yml文件如果想写两段yml内容,中间使用 --- 隔开
address: -zhengzhou-beijing---address: -zhengzhou-beijing
资源管理方式
1.命令式对象管理:直接使用命令操作Kubernetes资源
例如:kubectl run nginx-pod --image=nginx:1.17.1 --port=80
kubectl 固定写法 ,要执行的指令,--image=nginx:1.17.1 --port=80 要干的事
2.命令式对象配置:通过命令配置和配置文件去操作Kubernetes资源
例如:kubectl create/patch -f nginx-pod.yaml
kubectl固定写法 ,create/patch要执行的指令,nginx-pod.yaml通过配置文件执行
3.声明式对象配置:通过apply命令和配置文件去操作Kubernetes资源
kubectl apply -f nginx-pod.yaml
对比第二条,apply 只能更新或创建资源
| 类型 | 操作对象 | 适用环境 | 优点 | 缺点 |
|---|---|---|---|---|
| 命令式对象管理 | 对象 | 测试 | 简单 | 只能操作对象,无法审计跟踪 |
| 命令式对象配置 | 文件 | 开发 | 可以审计跟踪 | 项目较大时,配置文件会很多,操作麻烦 |
| 声明式对象配置 | 目录 | 开发 | 支持目录操作 | 意外情况下难以调试 |
命令式对象管理
kubectl是Kubernetes集群的命令行工具,通过它能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署
语法:kubectl [command] [type] [name] [flags]
- command:指定要对资源的操作,例如:create get delete
- type:指定资源类型,deployment、pod、service
- name:指定资源的名称,名称大小写敏感
- flags:指定额外可选参数
案例
#创建一个名为 dev的namespace 名称为
kubectl create ns dev
#查看已有namespace
kubectl get ns
#在dev中创建一个nginx 的应用(pod)
kubectl run pod --image=nginx:1.17.1 -n dev
#查看 dev中的pod
kubectl get pod -n dev
#查看创建过程
kubectl describe pods pod -n dev
#删除namespace dev
kubectl delete ns dev
命令式对象配置
1.创建一个nginxpod.yaml,内容如下
apiVersion: v1
#创建一个 namespcae
kind: Namespace
#namespcae 名称为dev
metadata: name: dev ---apiVersion: v1
#创建一个 pod
kind: Pod
#pod名称为 nginxpod ,在dev的namespace中
metadata: name: nginxpodnamespace: dev
# pod 中容器的名字是nginx-containers, 镜像为nginx:1.17.1
spac:
# 注意containers 是一个数组 name和image是一组数据,注意对齐containers:- name: nginx-containersimage: nginx:1.17.1
2.使用create 创建资源
kubectl create -f nginxpod.yaml

3.可以使用delete 和配置文件删除 namespace 和 pod
kubectl delete -f nginxpod.yaml

声明式对象配置
使用声明式对象配置就是使用apply描述一个资源的最终状态(yaml)中定义的状态
kubectl apply -f yaml文件
使用apply操作资源
如果资源不存在就创建,等同于 kubectl create
如果资源已存在,就更新,相当于 kubectl patch
root@***:/usr/local/k8code# kubectl delete -f nginxpod.yaml
namespace "dev" deleted
pod "nginxpod" deleted
root@***:/usr/local/k8code# kubectl get ns dev
Error from server (NotFound): namespaces "dev" not found
##资源不存在时会直接创建
root@***:/usr/local/k8code# kubectl apply -f nginxpod.yaml
namespace/dev created
pod/nginxpod created
##资源已存在,但是资源文件没有更新
root@***:/usr/local/k8code# kubectl apply -f nginxpod.yaml
namespace/dev unchanged
pod/nginxpod unchanged
##做了资源文件更新后可以看到 pod/nginxpod configured 配置有变更
root@***:/usr/local/k8code# vi nginxpod.yaml
root@***:/usr/local/k8code# kubectl apply -f nginxpod.yaml
namespace/dev unchanged
pod/nginxpod configured
##使用create 操作已存在资源,会抛出错误
root@***:/usr/local/k8code# kubectl create -f nginxpod.yaml
Error from server (AlreadyExists): error when creating "nginxpod.yaml": namespaces "dev" already exists
Error from server (AlreadyExists): error when creating "nginxpod.yaml": pods "nginxpod" already exists相关文章:
k8s笔记1- 初步认识k8s
k8s简介: kubernetes,俗称k8是,用于自动部署,扩缩和管理容器化应用程序的开源系统,它将组成应用程序的容器,组合成逻辑单元,便于管理和服务发现。 k8s的作用 自动化上线和回滚、存储编排…...
ARM CCA机密计算软件架构之内存加密上下文(MEC)
内存加密上下文(MEC) 内存加密上下文是与内存区域相关联的加密配置,由MMU分配。 MEC是Arm Realm Management Extension(RME)的扩展。RME系统架构要求对Realm、Secure和Root PAS进行加密。用于每个PAS的加密密钥、调整或加密上下文在该PAS内是全局的。例如,对于Realm PA…...
python基于flask实现一个文本问答系统
from flask import Flask, render_template, requestapp Flask(__name__)# 一个简单的问题-答案映射,实际中可以使用更复杂的存储结构(数据库等) qa_pairs {"什么是人工智能?": "人工智能是模拟人类智能的一种机…...
lambda表达式使用和示例
lambda表达式 什么是lambda 学习lamdba有两个结构十分关键,一个是lamdba自己,另一个是函数式接口 lamdba lamdba表达式本质上就是匿名方法,不能独立运行用于实现函数式接口定义的另一个方法,因此lamdba会产生一个匿名类lamdba…...
STM32学习笔记十八:WS2812制作像素游戏屏-飞行射击游戏(8)探索游戏多样性,范围伤害模式
前面我们的攻击手段比较单一,虽然已经分出了 EnemyT1 / EnemyT2 / EnemyT3, 但里面还是基本一样的。这回,我们尝试实现一些新的攻击方法,实现一些新的算法。 1、前面我们小飞机EnemyT1 的攻击方式是垂直向下发射子弹。 那么大飞机…...
C#获取windows系统资源使用情况
1.前言 之前有一篇博客介绍如何获取Linux服务器上的资源使用情况《Java 获取服务器资源(内存、负载、磁盘容量)》,这里介绍如何通过C#获取Window系统的资源使用。 2.获取服务器资源 2.1.内存 [DllImport("kernel32.dll")][retu…...
PE解释器之PE文件结构
PE文件是由许许多多的结构体组成的,程序在运行时就会通过这些结构快速定位到PE文件的各种资源,其结构大致如图所示,从上到下依次是Dos头、Nt头、节表、节区和调试信息(可选)。其中Dos头、Nt头和节表在本文中统称为PE文件头(因为SizeOfHeaders…...
Android—— MIPI屏调试
一、实现步骤 1、在kernel/arch/arm/boot/dts/lcd-box.dtsi文件中打开&dsi0节点,关闭其他显示面板接口(&edp_panel、&lvds_panel) --- a/kernel/arch/arm/boot/dts/lcd-box.dtsib/kernel/arch/arm/boot/dts/lcd-box.dtsi-5,14 …...
BLE协议—协议栈基础
BLE协议—协议栈基础 BLE协议栈基础通用访问配置文件层(Generic Access Profile,GAP)GAP角色设备配置模式和规程安全模式广播和扫描 BLE协议栈基础 蓝牙BLE协议栈包含三部分:主机、主机接口层和控制器。 主机:逻辑链路…...
yolov8知识蒸馏代码详解:支持logit和feature-based蒸馏
文章目录 1. 知识蒸馏理论2. yolov8 蒸馏代码应用2.1 环境配置2.2 训练模型(1) 训练教师模型(2) 训练学生模型baseline(3) 蒸馏训练3. 知识蒸馏代码详解3.1 蒸馏参数设置3.2 蒸馏损失代码讲解3.2.1 Feature based loss3.2.1 Logit loss3.3 获取蒸馏的feature map及channels...
03-微服务-Ribbon负载均衡
Ribbon负载均衡 1.1.负载均衡原理 SpringCloud底层其实是利用了一个名为Ribbon的组件,来实现负载均衡功能的。 那么我们发出的请求明明是http://userservice/user/1,怎么变成了http://localhost:8081的呢? 1.2.源码跟踪 为什么我们只输入…...
2023新年总结与展望
2023年总结 对Spring Cloud微服务更加熟悉,对consul、kafka、gateway的熟悉和掌握更近一步对docker和虚拟化部署更加熟悉对PostgreSQL数据库和JPA更加熟悉对clickhouse数据库和大数据分析更加熟悉对netty和socket网络通信更加熟悉 2024年flag 继续深入研究和学习…...
论文阅读——SG-Former
SG-Former: Self-guided Transformer with Evolving Token Reallocation 1. Introduction 方法的核心是利用显著性图,根据每个区域的显著性重新分配tokens。显著性图是通过混合规模的自我关注来估计的,并在训练过程中自我进化。直观地说,我们…...
常用环境部署(十三)——GitLab整体备份及迁移
一、GitLab备份 注意:由于我的GitLab是docker安装的,所以我的操作都是在容器内操作的,大家如果不是用docker安装的则直接执行命令就行。 1、Docker安装GitLab 链接:常用环境部署(八)——Docker安装GitLab-CSDN博客 2、GitLab备…...
海外数据中心代理与住宅代理:优缺点全面对比
数据中心代理和住宅代理是为了匿名而开发的,通过替换网站眼中您自己的 IP 地址。然而,它们在价格、功能、性能或最佳用例方面存在一些差异。那么,这些代理类型到底有什么相似点和不同点呢? 一、什么是数据中心代理? 1…...
springboot实现OCR
1、引入依赖 <dependency><groupId>net.sourceforge.tess4j</groupId><artifactId>tess4j</artifactId><version>4.5.4</version> </dependency> 2、config Configuration public class TessOcrConfiguration {Beanpublic …...
【Scala 】注解
在 Scala 中,你可以使用注解来为类、方法或字段添加元数据,影响它们的行为。Scala 的注解使用与 Java 类似,但是 Scala 也支持自定义注解。 文章目录 注解的常见使用方法自定义注解 注解的常见使用方法 以下是一些 Scala 中常见的注解以及它…...
数通基础知识总结
1. 基础概念 1.1. 通信基本原理 通信基本原理涉及信息的生成、编码、传输和解码的过程。在实际应用中,例如电话通信,信息通过话筒转换成模拟信号,经过传输线路传递到接收端,再由耳机解码还原为可理解的信息。 1.2. 信道和信号 …...
机器学习深度学习面试笔记
机器学习&深度学习面试笔记 机器学习Q. 在线性回归中,如果自变量之间存在多重共线性,会导致什么问题?如何检测和处理多重共线性?Q. 什么是岭回归(Ridge Regression)和Lasso回归(Lasso Regression)?它们与普通线性回…...
安卓和Android是两种不同的操作系统?
实际上,安卓和Android并不是同一种操作系统! Android是由Google开发并维护更新的一款操作系统,目前仅能运行在Pixel手机上。 Google Pixel 与 iPhone手机:哪个更好?Google Pixel 与 Apple iPhone哪个手机才是性价比最…...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...
9-Oracle 23 ai Vector Search 特性 知识准备
很多小伙伴是不是参加了 免费认证课程(限时至2025/5/15) Oracle AI Vector Search 1Z0-184-25考试,都顺利拿到certified了没。 各行各业的AI 大模型的到来,传统的数据库中的SQL还能不能打,结构化和非结构的话数据如何和…...
渗透实战PortSwigger靶场:lab13存储型DOM XSS详解
进来是需要留言的,先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码,输入的<>当成字符串处理回显到页面中,看来只是把用户输…...
Android写一个捕获全局异常的工具类
项目开发和实际运行过程中难免会遇到异常发生,系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler,它是Thread的子类(就是package java.lang;里线程的Thread)。本文将利用它将设备信息、报错信息以及错误的发生时间都…...



