k8s笔记1- 初步认识k8s

news2025/5/22 22:56:13

k8s简介:       

         kubernetes,俗称k8是,用于自动部署,扩缩和管理容器化应用程序的开源系统,它将组成应用程序的容器,组合成逻辑单元,便于管理和服务发现。

k8s的作用

        自动化上线和回滚、存储编排、自动装箱、ipv4和ipv6双协议、自我修复、服务发现与负载均衡、secret和配置管理、批量执行、水平扩缩、为扩展性设计

k8s核心组件

  1.  etcd:分布式高性能数据库,key-value的形式存储节点上部署的容器信息等
  2.  api-server:资源操作入口,提供认证、授权、访问控制、api注册和发现等机制
  3.  controller manager:负责维护集群状态、故障检测、自动扩展、滚动更新等
  4.  scheduler:负责资源的调度,按照预定的调度策略将pod调度到相应的节点上
  5.  kubelet:负责维护容器的生命周期和CVI、CNI的管理
  6.  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流程

  1. 在master节点写yaml,描述对容器的运行要求,创建pod的要求
  2. 使用kubectl命令创建应用这个资源的描述文件,开始k8s组件交互,把命令发给api-server
  3. api-server 利用本地https证书验证 kubectl请求是否被允许
  4. api-server 将pod创建信息记录到etcd数据库中,如应用的镜像版本、容器名、端口等
  5. api-server通知scheduler准备pod的调度
  6. scheduler调度从etcd中获取pod的部署信息,判断出一个合适的node节点准备部署pod 
  7. scheduler告知api-server决定部署pod的node节点
  8. apiserver将部署信息写入etcd中
  9. api-server通知远程具体的机器去读取etcd中的信息,根据这些信息创建pod

    

YAML语言介绍:

        YAML语言是一个类似xml、json的标志性语言,以数据为中心。 

格式如下:

#yml格式
user:
  age: 18
  address: zhengzhou

     YMAL语法:

  1. 大小写敏感
  2. 使用空格缩进表示层级关系,高版本可以使用tab
  3.  缩进空格数不重要,但是同层级的元素需要相同,左对齐
  4.  # 表示注释                                    

数据类型:

        纯量:单个的不可再分的值(字符串、布尔、整数、浮点、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: 18
  address: 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: nginxpod
  namespace: dev 
# pod 中容器的名字是nginx-containers, 镜像为nginx:1.17.1
spac: 
# 注意containers 是一个数组 name和image是一组数据,注意对齐
  containers:
    - name: nginx-containers
      image: 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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

听GPT 讲Rust源代码--compiler(9)

File: rust/compiler/rustc_trait_selection/src/traits/select/mod.rs 在Rust源代码中,rust/compiler/rustc_trait_selection/src/traits/select/mod.rs文件的作用是实现Rust编译器的trait选择器。 首先,让我们逐个介绍这些struct的作用: Se…

Boost学习之深入理解asio库

Asio简介 Boost C 库 Asio,它是异步输入输出的核心。 名字本身就说明了一切:Asio 即异步输入/输出。该库可以让 C 异步地处理数据,且平台独立。 异步数据处理就是指,任务触发后不需要等待它们完成。 相反,Boost.Asio …

调用百度地图 API 的步骤详解

百度地图 Web 服务 API 为开发者提供 http/https 接口,即开发者通过 http/https 形式发起检索请求,获取返回 json 或 xml 格式的检索数据。用户可以基于此开发 JavaScript、C#、C、Java 等语言的地图应用。百度地图 API 在线地址为:baidumap.…

Gromacs make_ndx建组问题

1. 选择特定分子或原子: gmx make_ndx -f input.gro -o output.ndx这将打开交互式界面,您可以在其中选择要包含在索引文件中的分子和原子。按照提示进行操作,选择适当的分组。 2. 手动创建索引文件: 您还可以手动创建一个文本文件…

JavaWeb——后端之Mybatis

四、Mybatis 概念: Mybatis是一款持久层(Dao层)框架,用于简化JDBC(Sun操作数据库的规范,较繁琐)的开发 历史: Apache的一个开源项目iBatis,2010年由apache迁移到了goog…

常见位运算总结

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 前言 1.基础位运算 &运算 |运算 ^运算 >>运算 <<运算 ~运算 2.给一个数n&#xff0c;确定他的二进制表示中的第x位&#xff0c;是0还是1 3.将一个数n的二进制表示的第x位修改成1 4.将一个数…

QML 项目中使用 Qt Design Studio 生成的UI界面

作者&#xff1a;billy 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 前言 今天来和大家聊一下 Qt Design Studio 这个软件。这个软件的主要功能是用来快速完成 UI 界面&#xff0c;就和 widget 中的 desig…

Redis学习笔记(1)——感谢尚硅谷官方文档

Redis学习笔记&#xff08;1&#xff09;——感谢尚硅谷官方文档 1. NoSQL1.1 NoSQL数据库概述1.2 各种NoSQL数据库 2. Redis数据库安装2.1 安装条件2.2 Widows下如何安装Redis?2.3 Linux下如何安装Redis? 3. Redis介绍3.1 Redis 简介3.2 Redis 优势3.3 Redis与其他key-value…

HttpClient库与代理IP在爬虫程序中的应用

目录 前言 一、HttpClient库的基本使用方法 二、代理IP的使用方法 三、代理IP池的使用方法 四、总结 前言 在编写爬虫程序时&#xff0c;我们经常会使用HttpClient库来发送HTTP请求&#xff0c;获取网页内容。然而&#xff0c;有些网站可能会对频繁的请求进行限制&#x…

python的课后练习总结3之条件语句

1,简单点&#xff0c;只有IF IF 后面加入条件然后冒号: 条件成立执行的代码1 条件成立执行的代码2 条件是否成立都执行的代码 身高 float(input(请输入你的身高(米):)) if 身高 > 1.3:print(f您的身高是{身高}米,请您买票) print(祝您旅途愉快) 2,IF 加个else if 条件:…

[论文分享]TimesURL:通用时间序列表示学习的自监督对比学习

论文题目&#xff1a;TimesURL: Self-supervised Contrastive Learning for Universal Time Series Representation Learning 论文地址&#xff1a;https://arxiv.org/abs/2312.15709 代码地址&#xff1a;暂无 摘要 学习适用于各种下游任务的通用时间序列表示具有挑战性&…

无人机低空视角:针对人群密集场景的检测、跟踪和计数技术

无人机低空视角&#xff1a;针对人群密集场景的检测、跟踪和计数技术 DroneCrowdPaper简介数据集ECCV2020挑战DroneCrowd&#xff08;完整版&#xff09; DroneCrowd Paper 无人机在人群中的检测、跟踪和计数&#xff1a;基准研究。 简介 本文提出了一种时空多尺度注意力网络…

数据结构与算法——第一次大作业【考点罗列//错题修正//题解】

目录 一、选择题 ——绪论—— 1.【单选题】——数据结构的研究方向 2.【单选题】 ——数据结构的研究问题 3.【单选题】——数据结构的基本术语及概念 4.【单选题】 ——数据结构与算法 5.【单选题】 ——时间复杂度计算 ——顺序表与链表—— 6.【单选题】——顺序表…

算法训练营Day36(贪心-重叠区间)

都算是 重叠区间 问题&#xff0c;大家可以好好感受一下。 都属于那种看起来好复杂&#xff0c;但一看贪心解法&#xff0c;惊呼&#xff1a;这么巧妙&#xff01; 还是属于那种&#xff0c;做过了也就会了&#xff0c;没做过就很难想出来。 不过大家把如下三题做了之后&#…

多通道病虫害分子检测仪-百科科普知识

在农业科技日新月异的今天&#xff0c;病虫害防治已经成为现代农业的重要一环。为了更精准、更快速地检测和防治病虫害&#xff0c;多通道病虫害分子检测仪应运而生&#xff0c;成为守护绿色家园的"黑科技"。 WX-XC1多通道病虫害分子检测仪是一款集成了分子生物学、…

音频DAC,ADC,CODEC高性能立体声

想要让模拟信号和数字信号顺利“交往”&#xff0c;就需要一座像“鹊桥”一样的中介&#xff0c;将两种不同的语言转变成统一的语言&#xff0c;消除无语言障碍。这座鹊桥就是转换器芯片&#xff0c;也就是ADC芯片。ADC芯片的全称是Analog-to-Digital Converter, 即模拟数字转换…

webpack知识点总结(高级应用篇)

除开公共基础配置之外&#xff0c;我们意识到两点: 1. 开发环境(modedevelopment),追求强大的开发功能和效率&#xff0c;配置各种方便开 发的功能;2. 生产环境(modeproduction),追求更小更轻量的bundle(即打包产物); 而所谓高级应用&#xff0c;实际上就是进行 Webpack 优化…

linux 系统 kill 指令笔记

kill 名称 kill - send a signal to a process 向指定的线程或进程发送信号 描述 The default signal for kill is TERM. Use -l or -L to list availablesignals. Particularly useful signals include HUP, INT, KILL, STOP,CONT, and 0. Alternate signals …

C#: 和时间相关,延时、获取系统时间、时间格式转换、定时器 等

说明&#xff1a;本文记录C# 和时间相关&#xff0c;延时、获取系统时间、时间格式转换、定时器 等&#xff0c;应用和代码。 1.延时函数 System.Threading.Thread.Sleep(20); //毫秒 1.1 主线程不卡延时函数 /* 主线程不卡延时函数 */public static void Delay_ms(int mil…

【C语言期末】基于VS2022的学生成绩管理系统

诚接计算机专业编程任务(C语言、C、Python、Java、HTML、JavaScript、Vue等)10/15R&#xff0c;如有需要请私信我&#xff0c;或者加我的企鹅号&#xff1a;1404293476 本文资源&#xff1a;https://download.csdn.net/download/weixin_47040861/88702521https://download.csd…