kubernetes学习之路--Pod配置学习

news2024/11/19 5:39:13

写在前面:上篇文章提供了两种简单搭建一个k8s集群的方法,其中两种方式的区别是:kubeadm是直接在主机上进行k8s搭建,kind是在docker中搭建。本文主要分享新建pod等方法。(想了想,对于像我这刚入门的人来说,认识全所有的k8s组件的功能暂时用处也不大,所以还是学习到哪个再查吧,毕竟不总用它真不会用啊!)

补充:各位自行安装docker,k8s中每个pod都是用docker镜像运行的,可以认为就是docker容器。

目录

一.使用kind创建一个具有两个节点(node)的集群

二.组件及名称介绍

三.pod配置文件学习

3.1 yaml文件中必须包含的字段

3.2. 主要参数对象

3.2.1 spec.containers

3.2.2 spec.volumes

3.2.3 额外参数对象


一.使用kind创建一个具有两个节点(node)的集群

问题:①节点干什么用的?②为什么要创建两个?

①: 集群分为一个Master节点和若干Node节点。

Master节点上面主要由四个模块组成:etcd、api server、controller manager、scheduler。

Node上运行着Master分配的pod,当一个Node宕机,其上的pod会被自动转移到其他Node上。每一个Node节点都安装了Node组件,包括kubelet、kube-proxy、container runtime。

②:我们昨天创建的集群就只有一个master节点,如果运行一些镜像,就会出现将系统程序和应用程序搞混了,主要它也不好管理操作,而且出于安全性考虑这样做也不安全。

1.1 使用kind搭建一个具有两个节点的kubernetes集群

首先删除原来建的k8s集群

#如果想要删除某个集群可以使⽤
kind delete cluster --name k8s

新建一个集群配置文件:multi-node-config.yaml

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker

运行命令根据配置文件创建集群

kind create cluster --config multi-node-config.yaml \
--image=kindest/node:v1.22.0 --name=k8s

此时我们便可以使用kubectl工具了,查看node

kubectl get nodes -o wide 

 查看kubenetes自带的一些pod

kubectl get pods --all-namespaces

二.组件及名称介绍

首先我们现在能接触到组件有:pod,deployment,node

相关名词:namespace

pod:可以理解为一个docker容器。(员工)

deployment:让一堆pod(docker)稳定运行的东西。咱们能感受到的直观功能就是,随便添加一个pod进去,它都能安排的明明白白的,让这个pod稳定运行,比如说分配网络啊,分配多大内存啊等等,如果这个pod的程序挂了,它还会自动给你拉起来。(主管)

node:使pod稳定运行和负责通信的。(大区主管)

namespace:主要是为了利用  RBAC(基于角色的访问控制)。(部门)

 master:运行着k8s的系统配置。(总经理)

描述一下我所知道的渗透思路:

一般来说是从员工出发,终极目标是成为总经理,就目前的技术而言,主要有三种思路:

1.针对性的社工钓鱼:就是钓有k8smaster权限的主机。(理想情况)

2.利用K8S中的提权漏洞:CVE-2018-1002105。

3.利用配置不当:RBAC权限滥用,污点等。

三.pod配置文件学习

记不住,到时候查,下篇文章做badpods靶场练习

举个例子:everything-allowed-exec-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: everything-allowed-exec-pod
  labels:
    app: pentest
spec:
  hostNetwork: true
  hostPID: true
  hostIPC: true
  containers:
  - name: everything-allowed-pod
    image: ubuntu
    securityContext:
      privileged: true
    volumeMounts:
    - mountPath: /host
      name: noderoot
    command: [ "/bin/sh", "-c", "--" ]
    args: [ "while true; do sleep 30; done;" ]
  #nodeName: k8s-control-plane-node # Force your pod to run on the control-plane node by uncommenting this line and changing to a control-plane node name
  volumes:
  - name: noderoot
    hostPath:
      path: /

主要关注spec中的参数,这其中的配置是对容器造成影响,配置不当会出现严重的问题。 

3.1 yaml文件中必须包含的字段

参数名

字段类型

说明

version

String

这里是指的是K8S API的版本,目前基本上是v1,可以用kubectl api-versions命令查询

kind

String

这里指的是yaml文件定义的资源类型和角色,比如:Pod

metadata

Object

元数据对象,固定值就写metadata

metadata.name

String

元数据对象的名字,这里由我们编写,比如命名Pod的名字

metadata.namespace

String

元数据对象的命名空间,由我们自身定义

Spec

Object

详细定义对象,固定值就写Spec

spec.containers[]

list

这里是Spec对象的容器列表定义,是个列表

spec.containers[].name

String

这里定义容器的名字

spec.containers[].image

String

这里定义要用到的镜像名称

3.2. 主要参数对象

3.2.1 spec.containers

spec.containers:代表的是描述container容器方面的参数。所以它下面的参数是非常多的,具体参数看如下表格:

参数名

字段类型

说明

spec.containers[].name

String

定义容器的名字

spec.containers[].image

String

定义要用到的镜像名称

spec.containers[].imagePullPolicy

String

定义镜像拉取策略,有Always、Never、IfNotPresent三个值可选(1)Always:意思是每次都尝试重新拉取镜像 (2)Never:表示仅使用本地镜像 (3)IfNotPresent:如果本地有镜像就使用本地镜像,没有就拉取在线镜像。 上面三个值都没设置的话,默认是Always。

spec.containers[].command[]

List

指定容器启动命令,因为是数组可以指定多个,不指定则使用镜像打包时使用的启动命令。

spec.containers[].args[]

List

指定容器启动命令参数,因为是数组可以指定多个。

spec.containers[].workingDir

String

指定容器的工作目录

spec.containers[].volumeMounts[]

List

指定容器内部的存储卷配置

spec.containers[].volumeMounts[].name

String

指定可以被容器挂载的存储卷的名称

spec.containers[].volumeMounts[].mountPath

String

指定可以被容器挂载的存储卷的路径

spec.containers[].volumeMounts[].readOnly

String

设置存储卷路径的读写模式,ture 或者false,默认为读写模式

spec.containers[].ports[]

List

指定容器需要用到的端口列表

spec.containers[].ports[].name

String

指定端口名称

spec.containers[].ports[].containerPort

String

指定容器需要监听的端口号

spec.containers[].ports[].hostPort

String

指定容器所在主机需要监听的端口号,默认跟上面containerPort相同,注意设置了hostPort 同一台主机无法启动该容器的相同副本(因为主机的端口号不能相同,这样会冲突)

spec.containers[].ports[].protocol

String

指定端口协议,支持TCP和UDP,默认值为TCP

spec.containers[].env[]

List

指定容器运行前需设置的环境变量列表

spec.containers[].env[].name

String

指定环境变量名称

spec.containers[].env[].value

String

指定环境变量值

spec.containers[].resources

Object

指定资源限制和资源请求的值(这里开始就是设置容器的资源上限)

spec.containers[].resources.limits

Object

指定设置容器运行时资源的运行上限

spec.containers[].resources.limits.cpu

String

指定CPU的限制,单位为core数,将用于 docker run --cpu-shares参数(这里前面文章Pod资源限制有讲过)

spec.containers[].resources.limits.memory

String

指定MEM内存的限制,单位为MIB、GiB

spec.containers[].resources.requests

Object

指定容器启动和调度时的限制设置

spec.containers[].resources.requests.cpu

String

CPU请求,单位为core数,容器启动时初始化可用数量

spec.containers[].resources.requests.memory

String

内存请求,单位为MIB、GiB,容器启动的初始化可用数量

3.2.2 spec.volumes

spec.volumes参数:定义同步存储方面的参数。

参数名

字段类型

说明

spec.volumes[].name

String

定义Pod的共享存储卷的名称,容器定义部分的spec.containers[].volumeMounts[].name的值跟这里是一样的。

spec.volumes[].emptyDir

Object

指定Pod的临时目录,值为一个空对象:emptyDir:{}

spec.volumes[].hostPath

Object

指定挂载Pod所在宿主机的目录

spec.volumes[].hostPath.path

String

指定Pod所在主机的目录,将被用于容器中mount的目录

spec.volumes[].secret

Object

指定类型为secret的存储卷,secret意为私密、秘密的意思,很容易理解,它存储一些密码,token或者秘钥等敏感安全文件。挂载集群预定义的secret对象到容器内部。

spec.volumes[].configMap

Object

指定类型为configMap的存储卷,表示挂载集群预定义的configMap对象到容器内部。

spec.volumes[].livenessProbe

Object

指定Pod内容器健康检查的设置,当探测无响应几次后,系统将自动重启该容器。这个在前面的文章中有说,具体可以设置:exec、httpGet、tcpSocket。

spec.volumes[].livenessProbe.exec

Object

指定Pod内容器健康检查的设置,确定是exec方式

spec.volumes[].livenessProbe.exec.command[]

String

指定exec方式后需要指定命令或者脚本,用这个参数设置

spec.volumes[].livenessProbe.httpGet

Object

指定Pod内容器健康检查的设置,确定是httpGet方式

spec.volumes[].livenessProbe.tcpSocket

Object

指定Pod内容器健康检查的设置,确定是tcpSocket方式

spec.volumes[].livenessProbe.initialDelaySeconds

Number

容器启动完成后手册探测的时间设置,单位为s

spec.volumes[].livenessProbe.timeoutSeconds

Number

对容器健康检查的探测等待响应的超时时间设置,单位为S,默认为1s。若超过该超时时间设置,则认为该容器不健康,会重启该容器。

spec.volumes[].livenessProbe.periodSeconds

Number

对容器健康检查的定期探测时间设置,单位为S,默认10s探测一次。

3.2.3 额外参数对象

参数名

字段类型

说明

spec.restartPolicy

String

定义Pod的重启策略,可选值为Always、OnFailure,默认值为Always。 1.Always:Pod一旦终止运行,则无论容器是如何终止的,kubelet服务都将重启它。 2.OnFailure:只有Pod以非零退出码终止时,kubelet才会重启该容器。如果容器正常结束(退出码为0),则kubelet将不会重启它。 3. Never:Pod终止后,kubelet将退出码报告给Master,不会重启该Pod。

spec.nodeSelector

Object

定义Node的Label过滤标签,以key:value格式指定

spec.imagePullSecrets

Object

定义pull镜像时使用secret名称,以name:secretkey格式指定

spec.hostNetwork

Boolean

定义是否使用主机网络模式,默认值为false。设置true表示使用宿主机网络,不使用docker网桥,同时设置了true将无法在同一台宿主机上启动第二个副本。

参考:Kubernetes系列学习文章 - Pod YAML文件如何写(五) - 腾讯云开发者社区-腾讯云


总结:本文对Pod配置进行了基本讲解。

如果不是运维人员其实不需要所有Pod参数进行了解,搞安全的话只需要了解一些关键的配置参数以便利用即可,比如说设置特权容器,挂载主机根目录,控制到挂载到某节点等等,在下篇文章的BadPods练习中慢慢学习,主要就是收集危险配置,如果我们有拿到具有create pod权限的账号,那么我们就可以利用危险配置拿下master节点。

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

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

相关文章

面试常问的《进程创建—进程终止—进程等待—进程替换》!

送给正在努力前行的你一句话:要努力,但不要着急,繁花锦簇,硕果累累都需要过程! 博主主页 目录 1.进程创建 fork函数初识 fork函数返回值 写时拷贝 2.进程终止 进程退出场景 进程如何退出 3.进程等待 进程等待的必要性 …

Java泛型简介

参考博客:https://www.jb51.net/article/192850.htm 泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的…

vuex持久化

下载: vuex-persistedstate npm install --save vuex-persistedstate 或者: npm install --save vuex-persistedstate --legacy-peer-deps 引入使用:在store文件夹下的index文件中,也就是放vuex的js代码中引入: i…

周末福利 | 21天学通Python完整版,豆瓣评分9.6!

前言 又到了周末啦,小编例行给大家发福利! 今天福利的内容是21天学通Python完整版,这是一本豆瓣评分9.6的人工智能入门书籍!全面、系统、深入地讲解了Python编程基础语法与高级应用。在讲解过程中,通过大量实际操作的…

mac m1 安装docker docker 安装php 5.6 和 7.2 避坑指南

通过该link可以下载兼容mac m1核心的docker-desktop: Docker Desktop - Docker 所有基于amd64架构核心的都加上--platform linux/amd64来运行,这样就能愉快的玩耍了: docker search centos7 php56 #搜索 docker images #显示所有镜像 docker pull sglim2/centos7 建议使用ln…

如何让青少年在AI时代抢占先机

点击蓝字关注我们AI TIME欢迎每一位AI爱好者的加入!11月17日,由智谱AI支持,北京市科委、中关村管委会科普专项经费资助的系列栏目“科普大佬说”很荣幸邀请到国家科技部“新一代人工智能创新发展与应用研究”项目、中小学人工智能教育服务平台…

在VSCode中用Markdown自动生成PPT详细使用指南,支持多种风格和排版,支持ppt转为pdf等

在VSCode中用Markdown自动生成PPT详细使用指南,支持多种风格和排版,支持ppt转为pdf等。 Marp 官网: https://marp.app/ 这款软件也能在 Windows 或 Linux 系统上使用,并不局限于 macOS 系统。 今天要介绍的是 Marp 推出的 VS Cod…

PLC-Recorder实现速度高达0.24ms准确周期采集的方法(带时间戳采集)

目录 1、PLC的发送程序 2、PLC连接配置 3、PLC-Recorder侧的通讯设置 4、PLC-Recorder的通道配置 5、PLC-Recorder的变量配置 6、正常通讯情况的界面 7、记录数据的情况 8、小结 如果要以非常高的速度高速采集各种控制器(典型的是PLC)的数据&…

【Linux】gcc/g++

目录 Linux编译器-gcc/g使用 No.1 背景知识 No.2 预处理(进行宏替换) No.3 编译(生成汇编) No.4 汇编(生成机器可识别代码) No.5 动态链接过程 No.6 gcc选项 Linux编译器-gcc/g使用 No.1 背景知识 预处理(进行…

什么是Serverless?

Serverless 无服务器;无主机; Serverless ,按中文翻译,称为「无服务器」。被认为是新一代的云计算发展方向。 在某些场景可以解读为一种软件系统架构方法,通常称为 Serverless 架构 关于 Serverless 的定义&#xf…

留学Assignment写作怎么注意论证方法?

Assignment的论证方法,对于一篇Assignment而言,学会如何论证,对Assignment的逻辑和内容,有一定的作用。掌握常用的论证方法,了解Assignment要求,在Assignment写作的过程中,学会加以应用&#xf…

VMware 安装、移除Ubuntu系统

目录 前言 安装虚拟机 1. 新建虚拟机 2. 进入向导 3. 选择系统镜像 4. 添加系统设置&#xff0c;用户名主机名密码 <实际没啥用...在系统安装过程中才设置的> 5. 设置虚拟机名称&#xff0c;存放位置 6. 磁盘容量 7. 设置虚拟机硬件配置 8. 自定义硬件 9. 开机…

如何实现jwt鉴权机制?

一、是什么 JWT&#xff08;JSON Web Token&#xff09;&#xff0c;本质就是一个字符串书写规范&#xff0c;如下图&#xff0c;作用是用来在用户和服务器之间传递安全可靠的信息 在目前前后端分离的开发过程中&#xff0c;使用token鉴权机制用于身份验证是最常见的方案&…

Unity 发布安卓包的配置

unity版本是&#xff1a;unity5.6.7&#xff0c;主要是我现在工作中只会在一些工业软件中会用到3d部分&#xff0c;所以版本低了一些&#xff0c;感觉低版本打开unity的速度反而更快一些。发布这个帖子主要目的是 Android SDK 可选项太多了&#xff0c;不熟悉的话&#xff0c;根…

数据技术篇之数据同步

第3章 数据同步 1.数据同步基础 直连同步 &#xff08;1&#xff09;什么是直连同步&#xff1f;直连同步是指通过定义好的规范接口 API 和基于动态链接库的方式直接连接业务库&#xff0c;如 ODBC/JDBC 等规定了统 一规范的标准接口&#xff0c;不同的数据库基于这套标准接口…

gnulib源码安装

接上文《autoconf-archive源码安装》&#xff0c; 链接如下&#xff1a; autoconf-archive源码安装_蓝天居士的博客-CSDN博客 上篇文章在构建autoconf-archive的时候&#xff0c;第一步引导构建就出现了错误&#xff0c;如下所示&#xff1a; $ ./bootstrap.sh ./bootstrap…

SSM+Mysql实现的大学校园兼职系统(功能包含注册登录,发布兼职、个人中心、论坛交流、系统公告、查看兼职信息、查看用户信息、私聊等)

博客目录SSMMysql实现的大学校园兼职系统实现功能截图系统功能使用技术代码完整源码SSMMysql实现的大学校园兼职系统 本系统是一个在线的大学校园兼职系统&#xff0c;商家可以在上面发布自己的兼职&#xff0c;学生可以根据自己的需要&#xff0c;联系兼职&#xff0c;给学生…

JavaScript 中如何实现并发控制?

一、并发控制简介 在日常开发过程中&#xff0c;你可能会遇到并发控制的场景&#xff0c;比如控制请求并发数。那么在 JavaScript 中如何实现并发控制呢&#xff1f;在回答这个问题之前&#xff0c;我们来简单介绍一下并发控制。 假设有 6 个待办任务要执行&#xff0c;而我们…

Kubernetes HPA 动态弹性扩缩容

1.HPA 1.1HPA介绍 1.在Kubernetes中&#xff0c;HPA自动更新工作负载资源&#xff08;例如&#xff1a;Deployment或者StatefulSet&#xff09;&#xff0c;目的是自动扩缩工作负载以满足需求&#xff0c;水平扩缩意味着对增加的负载的响应是部署更多的 Pod&#xff0c;与垂直…

算法工程师深度解构ChatGPT技术

引言 | 本栏目特邀腾讯知名语言文本项目算法工程师冉昱、薛晨&#xff0c;用专业视野带你由浅入深了解ChatGPT技术全貌。它经历了什么训练过程&#xff1f;成功关键技术是什么&#xff1f;将如何带动行业的变革&#xff1f;开发者如何借鉴ChatGPT思路和技术&#xff0c;投入到日…