k8s之使用yaml创建pod

news2024/11/29 10:58:22

写在前面

本文一起看下如何通过声明式的yaml文件来创建pod。

1:命令式和声明式

命令式就是具体告诉计算机做什么,比如我们写的Java代码,Dockerfile定义FROM,COPY,CMD,RUN,Expose等语句,这都是命令式。那么什么是声明式呢,声明式与命令式刚好相反,不需要具体每一步怎么做怎么做,只需要告知要什么就行了。以打车作为例子,你要到东单逛街,但是出租车师傅不熟悉路况,告知目的地后,其就要跟着导航,导航让他左拐他左拐,导航让他右拐,他右拐,这就是命令式的,导航一直在命令出租车师傅,但是如果是出租车师傅是一个本地通,我们只需要告知目的地,这个过程就变成了,司机自己一路走小道,走红灯最少的路,用最少的时间把我们送到东单,这对应的就是声明式,我们只是声明了目的地,具体的执行就完全交给出租车师傅了。

2:yaml

因为k8s的声明文件是通过yaml来定义的,所以我们简单来看下yaml的基础内容。yaml 是2001创建的,比xml晚了3年,但是其要比xml更加简单清晰,不管是对人类还是对于计算机都更加友好。支持常见的数据类型,如整数,浮点数,布尔,数组等,简单说明如下:

使用空白与缩进表示层次(有点类似 Python),可以不使用花括号和方括号。
可以使用 # 书写注释,比起 JSON 是很大的改进。
对象(字典)的格式与 JSON 基本相同,但 Key 不需要使用双引号。
数组(列表)是使用 - 开头的清单形式(有点类似 MarkDown)。
表示对象的 : 和表示数组的 - 后面都必须要有空格。
可以使用 --- 在一个文件里分隔多个 YAML 对象。

下面看些实际的例子。

  • 数组
# YAML数组(列表)
OS:
  - linux
  - macOS
  - Windows

转换为json如下图:

在这里插入图片描述

  • 对象
    声明了1个master node,3个worker node:
# YAML对象(字典)
Kubernetes:
  master: 1
  worker: 3

转换为json如下图:

在这里插入图片描述

  • 数组和对象
# 复杂的例子,组合数组和对象
Kubernetes:
  master:
    - apiserver: running
    - etcd: running
  node:
    - kubelet: running
    - kube-proxy: down
    - container-runtime: [docker, containerd, cri-o]

转换 为json如下图:

在这里插入图片描述

关于yaml详细可参考下图:

在这里插入图片描述

3:k8s的yaml中都可以定义哪些内容

我们知道可通过在yaml配置文件中以声明式的方式来定义一些内容,从而让k8s执行某些工作(其中创建Pod就是其中的一个,也可通过kubectl run ngx --image=nginx:alpine),那么都能声明哪些内容呢?可以声明的内容我们可以通过命令kubectl api-resources来查看,如下:

在这里插入图片描述

这一行一行的内容都是啥?这些是k8s提供给我对其进行运维的资源,比如Pod,就是来创建Pod的资源,而因为这些信息最终都需要通过apiserver来发送到k8s集群中,所以k8s给这些项目起了一个名字,叫做API 对象,即要在apiserver接口中用到的对象。

4:基于yaml启动Pod

接下来我们就以启动Pod为例来看下如何定义yaml,比如定义如下文件:

apiVersion: v1
kind: Pod
metadata:
  name: ngx-pod
  labels:
    env: demo
    owner: chrono

spec:
  containers:
  - image: nginx:alpine
    name: ngx1111
    ports:
    - containerPort: 80

其对应的json如下图:

在这里插入图片描述

我们先来看apiVersion,kind,metadata,apiVersion定义当前API的版本,kind定义API的类型,metadata定义元信息,这些信息也可以在kubectl api-resources命令的结果中获取,如下图:

在这里插入图片描述

接着看下spec部分,这部分定义了要启动的容器数组,都定义完毕之后,我们就可以通过kubectl apply -f fielname.yml命令来启动容器了,如下:

在这里插入图片描述

到这里基于yaml定义Pod我们就成功了,但是我想此时你肯定有一个疑问,我已经知道了我要定义的API对象类型是Pod,我怎么知道可以定义什么呢?我怎么知道要定义spec,又怎么知道spec下要定义什么呢?接下来我们就一起看下这部分内容。

5:如何确定可以定义的内容

我们依然还是以定义Pod为例来看下。

5.1:通过官方文档

在这里 有管理API对象的详细内容,比如定义Pod,我们就可以点击下图位置:

在这里插入图片描述

进入之后就可以看Pod中可以定义的内容,与我们前面已经完成的yaml对比如下图:

在这里插入图片描述

如果想要继续查看metadata可以定义的内容,则可点击其右侧的(ObjectMeta)超链接,同样对比yaml如下:

在这里插入图片描述

其他的API对象也都可按照这种方式来查找。

5.2:kubectl explain

这是k8s提供的命令行方式API对象使用说明,比如要查看Pod,则执行如下命令:

在这里插入图片描述

如果想要继续查看metadata可以定义的内容,则执行kubectl explain po.spec,同样对比yaml如下:

在这里插入图片描述

5.3:生成模板

通过kubectl run ngx --image=nginx:alpine --dry-run=client -o yaml直接生成模板,--dry-run=client代表空执行,只生成yaml结果但是不发送到apiserver,如下:

dongyunqi@dongyunqi-virtual-machine:~$ kubectl run ngx --image=nginx:alpine --dry-run=client -o yaml
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: ngx
  name: ngx
spec:
  containers:
  - image: nginx:alpine
    name: ngx
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

接着我们就可以在模板额基础上来修改了。

写在后面

小结

本文我们在分析了命令式和声明式之后,又看了什么是yaml,并在此基础上看了使用yaml如何定义k8s提供的各种API对象,并重点通过Pod API对象进行了详细的说明,最后分析了编写k8s yaml文件可以参考的方法。由于在k8s的实际使用中,一般都是通过yaml的方式来对k8s进行各种运维工作的,所以这部分内容是我们必须要重点进行掌握的。

多知道一点

查看kubectl和apiserver的交互过程

通过增加--v=9,如下:
在这里插入图片描述

参考文章列表

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

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

相关文章

CVE-2017-12615 Tomcat PUT方法任意写文件漏洞复现

今天继续给大家介绍渗透测试相关知识,本文主要内容是CVE-2017-12615 Tomcat PUT方法任意写文件漏洞复现。 免责声明: 本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负! 再次…

ModelForm实践--新建用户

Django组件Form&ModelForm_Neo_21的博客-CSDN博客 Django ModelForm用法详解 前面基本了解ModelForm,使用ModelForm添加用户 一.回顾ModelForm 基于 Model 的定义自动生成表单,这就大大简化了根据 Model 生成表单的过程。 简单的ModelForm class BookMode…

jdk、jmeter安装配置流程以及 双jdk配置和切换(自用)

文章目录一、jdk安装配置1.1 java8配置流程1.2 jdk17配置1.3 jdk没有jre怎么生成1.4 双jdk配置2、Jmeter安装配置电脑重装系统了,重新配下jdk和jmeter。一、jdk安装配置 配jmeter首先得有java。 1.1 java8配置流程 ① java8安装路径 下完直接安装就行 ② 配置环境…

Mysql单表查询30个经典案例

单表查询(30个例子) 单表查询30个例子新建一个数据表gradegrade表中插入数据1、查询1945班的成绩信息2,查询1945班,语文成绩大于60小于90的成绩信息3,查询学生表中1到5行的数据4,显示1945班英语成绩为80&am…

LeetCode题解 17(55,198) 跳跃游戏,打家劫舍<动态规划>

文章目录跳跃游戏(55)代码解答:打家劫舍(198)代码解答:跳跃游戏(55) 这道题是让我们从数组的头部看能不能跳到数组的尾部,每次可跳的最大距离也就是目前所在的索引处的值。 思路: 这…

P3375 【模板】KMP字符串匹配——KMP

【模板】KMP字符串匹配 题目描述 给出两个字符串 s1s_1s1​ 和 s2s_2s2​,若 s1s_1s1​ 的区间 [l,r][l, r][l,r] 子串与 s2s_2s2​ 完全相同,则称 s2s_2s2​ 在 s1s_1s1​ 中出现了,其出现位置为 lll。 现在请你求出 s2s_2s2​ 在 s1s_1s1…

Spring中的@Value注解

文章目录**概述****使用方式**基于配置文件的注入基于非配置文件的注入注入普通字符串注入操作系统属性注入表达式结果注入其他bean属性注入URL资源概述 本文配置文件为yml文件 在使用spring框架的项目中,Value是经常使用的注解之一。其功能是将与配置文件中的键对应…

MANA OASIS加持,毫末算力极致优化,训练成本降低100倍

2023年1月5日,第七届HAOMO AI DAY在北京举办。正值岁末年初,中国自动驾驶届开年盛会精彩来袭。本届AI DAY上,毫末分享了2022年三大战役稳健收官成果,展望2023年全球自动驾驶发展趋势,并发布毫末技术、产品最新成果。 &…

基于java ssm springboot选课推荐交流平台系统设计和实现

基于java ssm springboot选课推荐交流平台系统设计和实现 博主介绍:5年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式 文章目录基于java ss…

docker 看懂这一篇文章就够了

docker就像是手机的应用商店,有了应用商店,就不用自己一个app一个app(微服务开发所需要的中间件)去百度搜索下载,可以在应用商店里面一键下载(使用简单的docker命令即可) 总之就是一句话,docker pull 镜像…

ubuntu20.04安装4090驱动

实验室配置了一台新主机,现在安装好了20.04,为了安装4090的驱动查找了很多资料。接下来记录一下安装4090驱动的过程,为方便未来安装其他的显卡驱动。 首先推荐一个视频,在为查找了很多资料后,发现这个视频讲的实在是太…

【SQL】无列名查询表中数据

目录 【SQL】无列名查询表中数据 拓展 如果mysql中 information_schema 使用不了,怎么查询所有的数据库名,表名? 【SQL】无列名查询表中数据 有些时候,我们可能获取不了mysql数据库,表中的字段名称,那么…

基于Java+SpringBoot+vue+element实现扶贫助农政策平台系统

基于JavaSpringBootvueelement实现扶贫助农政策平台系统 博主介绍:5年java开发经验,专注Java开发、定制、远程、文档编写> 博主介绍:5年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术…

0基础快速入门Python数据挖掘

推荐教程:4天快速入门Python数据挖掘 课程简介 该阶段主要是介绍一些数据科学领域用Python语言实现的基础库,如简洁、轻便的数据可视化展示工具Matplotlib,高效的运算工具Numpy,方便的数据处理工具Pandas,为人工智能阶…

疑难杂症之anaconda虚拟环境安装还有anaconda无数次的卸载重装

教训:使用虚拟环境无数次重装& 卸载彻底删除命令:打开cmd --> 输入一下命令conda install anaconda -cleananaconda -clean --yes生成的备份文件夹可以删除**手动删除anaconda环境路径下的envs 和pkgs文件**然后从卸载界面点击正常卸载anaconda即…

Anaconda下载库(安装包)、创建虚拟环境等

conda install pak # 安装包,pak代表包名,可依次安装多个包或指定版本,包名之间空格分开; conda remove pak # 移除指定包 conda update pak # 更新包 conda upgrade --all # 更新所以包 conda search pak # …

【数组】leetcode59.螺旋矩阵II(C/C++/Java/Js)

leetcode59.螺旋矩阵II1 题目2 思路3 代码3.1 C版本3.2 C版本3.3 Java版本3.4 JavaScript版本4 总结:1 题目 题源链接 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1…

shell脚本之sed练习题

把/etc/passwd 复制到/root/test.txt,用sed打印所有行 #使用cp命令将/etc/passwd的内容复制到/root/test.txt中 [rootWilliam ~]# cp /etc/passwd /root/test.txt#采用sed命令将其打印出来 [rootWilliam ~]# sed -n p test.txt打印test.txt的3到10行 [rootWilliam…

都2023年了,还不知道怎么学习网络安全?来看看吧,很难找全的

前言 最近收到不少关注朋友的私信和留言,大多数都是零基础小友入门网络安全,需要相关资源学习。其实看过的铁粉都知道,之前的文里是有过推荐过的。新来的小友可能不太清楚,这里就系统地叙述一遍。 01.简单了解一下网络安全 说白…

逆向-还原代码之little-or-big (Interl 64)

// 源代码 #include <stdio.h> /* * 2016/9/29 yu liang. */ int test_one(void) { int i1; char *p(char *)&i; if(*p1) printf("Little_endian\n"); // Little_endian else printf("B…