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哪个手机才是性价比最…...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化
iOS 应用的发布流程一直是开发链路中最“苹果味”的环节:强依赖 Xcode、必须使用 macOS、各种证书和描述文件配置……对很多跨平台开发者来说,这一套流程并不友好。 特别是当你的项目主要在 Windows 或 Linux 下开发(例如 Flutter、React Na…...
yaml读取写入常见错误 (‘cannot represent an object‘, 117)
错误一:yaml.representer.RepresenterError: (‘cannot represent an object’, 117) 出现这个问题一直没找到原因,后面把yaml.safe_dump直接替换成yaml.dump,确实能保存,但出现乱码: 放弃yaml.dump,又切…...
aardio 自动识别验证码输入
技术尝试 上周在发学习日志时有网友提议“在网页上识别验证码”,于是尝试整合图像识别与网页自动化技术,完成了这套模拟登录流程。核心思路是:截图验证码→OCR识别→自动填充表单→提交并验证结果。 代码在这里 import soImage; import we…...



