【Kubernetes】声明式创建各种资源

news2024/11/14 3:45:30

k8s声明式创建

    • kubernetes陈述式创建与声明式创建
    • yaml各个字段含义
      • Pod yaml文件详解
      • deployment.yaml文件详解
      • server.yaml文件详解
    • k8s中port的区别
    • 1、声明式创建pod label包含app: zhangsan
    • 2、声明式创建deployment,包含3个nginx副本,label包含app: zhangsan
    • 3、创建一个service,对题2中的服务暴露到集群外部,可以通过nodeIP:nodePort访问,集群内部可以通过clusterIP:9001访问
    • 4、声明式部署tomcat集群
    • 5、创建一个pod包含两个initContainer和一个应用容器 ,该pod依赖于A和B两个service

kubernetes陈述式创建与声明式创建

Kubernetes支持两种方式来创建和管理资源:陈述式创建和声明式创建。

陈述式创建是指通过提供完整的资源配置来创建和管理资源。用户需要手动编写包含所有资源属性的配置文件,然后使用Kubernetes API将配置文件提交给Kubernetes集群。这种方式需要用户对资源的详细属性有较为全面的了解,并且需要手动处理资源的创建、更新和删除等操作。

声明式创建是指通过提供资源的期望状态来创建和管理资源。用户只需要编写包含资源的期望状态的配置文件,然后使用Kubernetes API将配置文件提交给Kubernetes集群。Kubernetes会根据用户提供的期望状态来自动创建、更新和删除资源,保持实际状态与期望状态的一致性。这种方式相对于陈述式创建更加简洁和高效,减少了用户的工作量。

声明式创建是Kubernetes的核心理念之一,它带来了很多好处。首先,声明式创建可以提高用户的生产力,用户只需要关注资源的期望状态,而不需要关注具体的创建细节。其次,声明式创建可以提供自愈能力,Kubernetes会自动检测资源的实际状态与期望状态之间的差异,并自动采取措施使它们保持一致。最后,声明式创建可以提供资源的可观察性,用户可以通过查看资源的期望状态来了解资源的状态和健康状况。

总之,Kubernetes的声明式创建是一种更加高效和可靠的资源管理方式,它使用户能够更轻松地创建和管理资源,并且能够提供自愈能力和可观察性。

yaml各个字段含义

Pod yaml文件详解

在Kubernetes中,Pod是Kubernetes的最小部署单元,是由一个或多个容器组成的,这些容器共享网络和存储资源。

Pod的YAML文件是描述Pod的配置文件。它使用YAML(Yet Another Markup Language)语法来定义Pod的各个字段。

下面详细解释Pod的YAML文件中各个字段的含义:

  1. apiVersion:指定使用的Kubernetes API版本。
  2. kind:指定对象的类型,这里是"Pod"。
  3. metadata:包含有关资源的元数据,如名称、标签、注释等。
    • name:指定Pod的名称。
    • labels:指定用于标识Pod的键值对标签。
  4. spec:指定Pod的规范。
    • containers:指定Pod中包含的容器的列表。
      • name:指定容器的名称。
      • image:指定容器使用的镜像。
      • ports:指定容器需要暴露的端口。
    • restartPolicy:指定容器重启的策略。
    • volumes:指定Pod使用的卷,用于在容器之间共享数据。
    • hostNetwork:设置为true时,Pod将使用主机网络,而不是独立的网络命名空间。
    • hostPath:指定Pod使用的主机路径。
    • nodeSelector:指定Pod将被调度到的节点。
    • affinity:指定Pod的亲和性规则。
    • tolerations:指定Pod的容忍规则,用于指定Pod能够容忍哪些污点。
    • resources:指定Pod使用的资源限制和请求。
    • volumes:指定Pod使用的卷。
    • initContainers:指定Pod中包含的初始化容器的列表。
    • serviceAccountName:指定Pod使用的服务帐户。
    • dnsPolicy:指定Pod使用的DNS策略。
    • imagePullSecrets:指定拉取私有镜像所需的密钥。

这些字段通常被组织在一起,形成一个完整的Pod的YAML文件。通过编辑Pod的YAML文件,可以定制Pod的配置,以满足特定的部署需求。

# yaml格式的pod定义文件完整内容:
apiVersion: v1           #必选,版本号,例如v1
kind: Pod                #必选,Pod
metadata:                #必选,元数据
  name: string           #必选,Pod名称
  namespace: string      #必选,Pod所属的命名空间
  labels:                #自定义标签
    - name: string       #自定义标签名字
  annotations:           #自定义注释列表
    - name: string
spec:                    #必选,Pod中容器的详细定义
  containers:            #必选,Pod中容器列表
  - name: string         #必选,容器名称
    image: string        #必选,容器的镜像名称
    imagePullPolicy: [Always | Never | IfNotPresent] #获取镜像的策略 Alawys表示下载镜像 IfnotPresent表示优先使用本地镜像,否则下载镜像,Nerver表示仅使用本地镜像
    command: [string]                  #容器的启动命令列表,如不指定,使用打包时使用的启动命令
    args: [string]                     #容器的启动命令参数列表
    workingDir: string                 #容器的工作目录
    volumeMounts:                      #挂载到容器内部的存储卷配置
    - name: string                     #引用pod定义的共享存储卷的名称,需用volumes[]部分定义的的卷名
      mountPath: string               #存储卷在容器内mount的绝对路径,应少于512字符
      readOnly: boolean               #是否为只读模式
    ports:                           #需要暴露的端口库号列表
    - name: string                   #端口号名称
      containerPort: int             #容器需要监听的端口号
      hostPort: int                  #容器所在主机需要监听的端口号,默认与Container相同
      protocol: string               #端口协议,支持TCP和UDP,默认TCP
    env:                             #容器运行前需设置的环境变量列表
    - name: string                   #环境变量名称
      value: string                  #环境变量的值
    resources:                       #资源限制和请求的设置
      limits:                        #资源限制的设置
        cpu: string                  #Cpu的限制,单位为core数,1000m代表一个核心,100m代表0.1核心,将用于docker run --cpu-shares参数
        memory: string               #内存限制,单位可以为Mib/Gib,将用于docker run --memory参数
      requests:                       #资源请求的设置
        cpu: string                   #Cpu请求,容器启动的初始可用数量
        memory: string                #内存请求,容器启动的初始可用数量
    livenessProbe:                    #对Pod内个容器健康检查的设置,当探测无响应几次后将自动重启该容器,检查方法有exec、httpGet和tcpSocket,对一个容器只需设置其中一种方法即可
      exec:                           #对Pod容器内检查方式设置为exec方式
        command: [string]             #exec方式需要制定的命令或脚本
      httpGet:                        #对Pod内个容器健康检查方法设置为HttpGet,需要制定Path、port
        path: string
        port: number
        host: string
        scheme: string
        HttpHeaders:
        - name: string
          value: string
      tcpSocket:                       #对Pod内个容器健康检查方式设置为tcpSocket方式
         port: number
       initialDelaySeconds: 0       #容器启动完成后首次探测的时间,单位为秒
       timeoutSeconds: 0            #对容器健康检查探测等待响应的超时时间,单位秒,默认1秒
       periodSeconds: 0             #对容器监控检查的定期探测时间设置,单位秒,默认10秒一次
       successThreshold: 0
       failureThreshold: 0
       securityContext:
         privileged:false
    restartPolicy: [Always | Never | OnFailure] #Pod的重启策略,Always表示一旦不管以何种方式终止运行,kubelet都将重启,OnFailure表示只有Pod以非0退出码退出才重启,Nerver表示不再重启该Pod
    nodeSelector: obeject          #设置NodeSelector表示将该Pod调度到包含这个label的node上,以key:value的格式指定
    imagePullSecrets:              #Pull镜像时使用的secret名称,以key:secretkey格式指定
    - name: string
    hostNetwork:false     #是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络
    volumes:                    #在该pod上定义共享存储卷列表
    - name: string              #共享存储卷名称 (volumes类型有很多种)
      emptyDir: {}              #类型为emtyDir的存储卷,与Pod同生命周期的一个临时目录。为空值
      hostPath: string         #类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录
        path: string           #Pod所在宿主机的目录,将被用于同期中mount的目录
      secret:                  #类型为secret的存储卷,挂载集群与定义的secre对象到容器内部
        scretname: string  
        items:     
        - key: string
          path: string
      configMap:             #类型为configMap的存储卷,挂载预定义的configMap对象到容器内部
        name: string
        items:
        - key: string
          path: string

deployment.yaml文件详解

deployment.yaml文件是Kubernetes中用来定义Deployment资源的配置文件。以下是一个示例的deployment.yaml文件的详解:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: my-image:1.0
        ports:
        - containerPort: 8080
  • apiVersion: 定义了使用的Kubernetes API版本,这里使用的是apps/v1版本。
  • kind: 定义了资源的类型,这里是Deployment。
  • metadata: 定义了Deployment的元数据,包括名称(name)等信息。
  • spec: 定义了Deployment的规格,包括副本数(replicas),选择器(selector)和模板(template)等信息。
  • replicas: 指定了期望的副本数,这里是3个副本。
  • selector: 指定了Deployment通过标签选择器来选择Pod的方式。这里的选择器是匹配标签为app=my-app的Pod。
  • template: 定义了创建Pod的模板,包括元数据(metadata)和规格(spec)。
  • labels: 定义了Pod的标签,这里的标签为app=my-app。
  • containers: 定义了Pod中的容器,包括名称(name),镜像(image)和端口(ports)等信息。
  • containerPort: 定义了容器监听的端口,这里是8080端口。

以上是一个简单的deployment.yaml文件的详解,它定义了一个Deployment资源,指定了副本数、选择器和模板等信息,用于创建和管理Pod。

server.yaml文件详解

server.yaml文件是一个配置文件,用于配置服务器的各种属性和行为。

以下是server.yaml文件中可能包含的一些常见配置项:

  1. server_name: 指定服务器的名称或标识符。

  2. server_address: 指定服务器的IP地址或域名。

  3. port: 指定服务器监听的端口号。

  4. ssl_certificate: 指定服务器使用的SSL证书文件路径。

  5. ssl_key: 指定服务器使用的SSL私钥文件路径。

  6. access_log: 指定访问日志文件的路径。

  7. error_log: 指定错误日志文件的路径。

  8. root: 指定服务器的根目录,即网站文件的存放路径。

  9. index: 指定默认的首页文件名。

  10. gzip: 指定是否启用gzip压缩。

  11. proxy_pass: 指定反向代理的目标地址。

  12. location: 指定不同URL路径的配置。

  13. upstream: 指定负载均衡的服务器列表。

  14. timeout: 指定服务器的超时时间。

  15. max_body_size: 指定允许的请求体大小。

  16. try_files: 指定服务器查找文件的顺序。

  17. auth_basic: 指定是否启用HTTP基本身份验证。

k8s中port的区别

在Kubernetes (k8s)中,port具有不同的含义和用途。以下是port在k8s中的不同概念和区别:

  1. Port:在k8s中,port用于定义服务或者Pod暴露给集群内部或外部的端口。它是一个整数值,并且是一个抽象的概念,通常用于定义访问服务或Pod的端口号。

  2. NodePort:NodePort是一种服务类型,通过NodePort方式将服务暴露给集群外部。NodePort是一个范围在30000-32767之间的整数,它将集群中的某个端口映射到Pod的端口,从而使得外部可以通过访问Node的IP地址和NodePort访问到服务。

  3. HostPort:HostPort是一种将Pod中的容器端口直接映射到Node主机上的端口的方式。通过使用HostPort,容器的端口将直接绑定到Node主机的物理网卡上,从而可以通过Node主机的IP地址和端口直接访问容器。需要注意的是,使用HostPort会有一些安全和网络隔离的考虑。

  4. ContainerPort:在k8s中,ContainerPort是一个容器内的端口,它定义了容器内的应用程序暴露的端口号。容器中的应用程序可以通过ContainerPort进行监听,并接受来自其他容器或服务的请求。

  5. TargetPort:TargetPort是一个服务端口,它指向Pod中的ContainerPort。当服务将请求转发给后端Pod时,将使用TargetPort来指定请求应该转发到Pod中的哪个ContainerPort。TargetPort和ContainerPort通常是相同的,但也可以不同,这取决于服务和Pod的具体配置。

总结:在k8s中,Port是一个抽象的概念,用于定义服务或Pod暴露的端口号。NodePort是一种服务类型,将服务暴露给集群外部。HostPort是一种将Pod中的容器端口直接映射到Node主机上的端口的方式。ContainerPort定义了容器内应用程序暴露的端口号。TargetPort指向Pod中的ContainerPort,用于指定请求转发的目标端口。

1、声明式创建pod label包含app: zhangsan

apiVersion: v1
kind: Pod
metadata:
  name: httpd # Name of the Pod
  namespace: default # Namespace where the Pod will be deployed
  labels: # Labels to identify the Pod
    app: zhangsan
spec: # Specification of the Pod
  containers: # List of containers in the Pod
  - name: httpd # Name of the container
    image: httpd # Image to run in the container
    ports: # List of ports to expose
    - name: httpdport # Name of the port
      containerPort: 80 # Port number exposed by the container

在这里插入图片描述

在这里插入图片描述

2、声明式创建deployment,包含3个nginx副本,label包含app: zhangsan

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: zhangsan
      type: nginx-deployment
  template:
    metadata:
      labels:
        app: zhangsan
        type: nginx-deployment
    spec:
      containers:
      - name: my-container
        image: nginx
        ports:
        - containerPort: 80

在这里插入图片描述

在这里插入图片描述

3、创建一个service,对题2中的服务暴露到集群外部,可以通过nodeIP:nodePort访问,集群内部可以通过clusterIP:9001访问

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  type: NodePort
  ports:
  - port: 9001
    targetPort: 80
    nodePort: 31111

  selector:
    app: zhangsan
    type: nginx-deployment
kubectl apply -f nginx-service-test.yaml 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、声明式部署tomcat集群

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mytomcat
spec:
  replicas: 3
  selector:
    matchLabels:
      app: mytomcat
  template:
    metadata:
      labels:
        app: mytomcat
    spec:
      containers:
      - name: mytomcat
        image: tomcat:8
        ports:
        - containerPort: 8080
        volumeMounts:
        - name: yun-config
          mountPath: /etc/localtime
      volumes:
      - name: yun-config
        hostPath:
          path: /usr/share/zoneinfo/Asia/Shanghai

在这里插入图片描述

5、创建一个pod包含两个initContainer和一个应用容器 ,该pod依赖于A和B两个service

test_init.yaml

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image: busybox:1.28
    command: ['sh', '-c', 'echo The app is running! && sleep 3600']
  initContainers:
  - name: init-myservice
    image: busybox:1.28
    command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;']
  - name: init-mynginx
    image: busybox:1.28
    command: ['sh', '-c', 'until nslookup mynginx; do echo waiting for mynginx; sleep 2; done;']

在这里插入图片描述

mysevice.yaml

apiVersion: v1
kind: Service
metadata:
  name: myservice
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 80

kubectl apply -f myservice.yaml

在这里插入图片描述

mynginx.yaml

apiVersion: v1
kind: Service
metadata:
  name: mynginx
spec:
  type: NodePort
  ports:
  - port: 81
    targetPort: 80

kubectl apply -f mynginx.yaml

在这里插入图片描述

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

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

相关文章

【MyBatis】MyBatis的一级缓存和二级缓存简介

目录 1、一级缓存 1.1 我们在一个 sqlSession 中,对 User 表根据id进行两次查询,查看他们发出sql语句的情况。 1.2 同样是对user表进行两次查询,只不过两次查询之间进行了一次update操作。 1.3 一级缓存查询过程 1.4 Mybatis与Spring整…

Windows10上安装PostgreSQL 16

PostgreSQL是一个先进的、开源的、免费的、功能强大的关系型数据库,它使用并扩展了SQL语言,并结合了许多功能,可以安全地存储和扩展复杂的数据工作负载。PostgreSQL可在Windows、Linux、macOS等多个平台上运行,License使用Postgre…

hive学习(五)

一、hive的DML操作 1.load(向表中装载数据) hive> load data [local] inpath 路径 [overwrite] into table 表名 [partition (partcol1val1,…)];特殊说明 1)local:标识从本地加载数据到Hive表,若没有local的话从…

Linux系统下KubeSphere3.4.1离线安装包制作及部署过程

一、概述 KubeSphere 是 GitHub 上的一个开源项目,是成千上万名社区用户的聚集地。很多用户都在使用 KubeSphere 运行工作负载。对于在 Linux 上的安装,KubeSphere 既可以部署在云端,也可以部署在本地环境中,例如 AWS EC2、Azure…

JS设计模式之“幽灵工厂” - 抽象工厂模式

image.png 一. 了解带头模范 - 抽象类 JavaScript中并没有原生的抽象类的概念,但可以通过一些方式来模拟实现抽象类的效果。 抽象类是一种不能被直接实例化的类,只能作为其他类的基类使用。它定义了一组抽象方法,子类必须实现这些抽象方法。…

【函数模板】函数模板的类型推导

一、类型的自动推导 当函数模板的返回值被指定或与传入的参数的类型一致&#xff0c;那么可以直接调用函数模板&#xff0c;而不需要显式的指定参数。 //函数推导 template<typename T, typename R> T Add(T a, R b) {return a b; }void Test1() {//自动推导int x 1;…

【MySQL】索引使用规则——(覆盖索引,单列索引,联合索引,前缀索引,SQL提示,数据分布影响,查询失效情况)

前言 大家好吖&#xff0c;欢迎来到 YY 滴MySQL系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的《Lin…

【初出江湖】剖析软件架构发展之路

目录标题 架构发展历程单体架构&#xff08;Monolithic&#xff09;垂直拆分分布式服务微服务架构 SOAESB分布式微服务SOA&#xff0c;ESB&#xff0c;微服务的区别和关系分布式与微服务之间的区别于关系 架构发展历程 单体架构&#xff08;Monolithic&#xff09; 单体应用时…

Django 第十一课 -- ORM - 多表实例

目录 一. 前言 二. 创建模型 三. 插入数据 四. ORM - 添加数据 4.1. 一对多(外键 ForeignKey) 4.2. 多对多(ManyToManyField)&#xff1a;在第三张关系表中新增数据 4.3. 关联管理器(对象调用) 五. ORM 查询 5.1. 一对多 5.2. 一对一 5.3. 多对多 六. 基于双下划线…

eNSP-交换机的广播域和冲突域

一、广播域、冲突域 冲突域&#xff1a;一台电脑发送消息&#xff0c;其他电脑不能发送所影响的范围&#xff0c;就是冲突域。 广播域&#xff1a;一台电脑发送广播&#xff0c;所能广播到的范围。 二、举例 1.总线结构 广播域是整个总线的网络范围&#xff0c;冲突域也是整…

uniapp+vue3+setup返回上一页传参

huilderx 版本 list function getId(data) {// console.log(接收到的参数, data)if (data) {buildObj.value JSON.parse(data);} }onShow((options) > {getBuild() })// 暴露方法 defineExpose({getId })detail import { ref, onMounted, onUnmounted } from vue import…

ElasticSearch和Kibana的安全设置以及https设置

&#x1f468;‍&#x1f4bb;本文专栏&#xff1a;ElasticSearch和Kibana的安全设置以及https设置 &#x1f468;‍&#x1f4bb;本文简述&#xff1a;跟着猿灰灰一起学Java&#xff01; &#x1f468;‍&#x1f4bb;上一篇文章&#xff1a; &#x1f468;‍&#x1f4bb;有任…

3D打印透气钢与传统透气钢的差异

透气钢作为一种集金属强度与透气性能于一体的特殊材料&#xff0c;在注塑模具领域扮演着关键角色&#xff0c;通过有效排除模具内困气&#xff0c;显著提升制品成型质量与生产效率。当前&#xff0c;市场上主流的透气钢产品多源自日本、美国&#xff0c;其高昂成本与技术壁垒限…

【国铁采购平台-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

vue项目安装pnpm和无法加载pnpm,已解决

vue3安装pnpm命令&#xff1a; 1.提升依赖安装速度&#xff1a;npm config set registry https://registry.npmjs.org 2.安装pnpm:npm install -g pnpm 3.安装pnpm依赖&#xff1a;pnpm install 4…windows电脑&#xff0c;无法安装pnpm&#xff0c;pnpm install命令&#xff0…

C++基础知识七

1.对象拷贝时编译器优化 现代编译器为了尽快提高程序的效率&#xff0c;不影响正确性的情况下会尽可能减少一些传参和传参过程中可以省略的拷贝 例子&#xff1a; 先调用f&#xff08;&#xff09;函数&#xff0c;则应该先触发构造函数初始化a&#xff0c;return a时先拷贝a…

机器学习之监督学习(一)线性回归、多项式回归、算法优化[巨详细笔记]

机器学习之监督学习&#xff08;一&#xff09;线性回归、多项式回归、算法优化 1.监督学习定义2.监督学习分类2.1回归 regression2.2 分类 classification 3.线性回归 linear regression3.1 单特征线性回归模块一&#xff1a;梯度下降 3.2 多特征线性回归模块二&#xff1a;正…

CohereForAI更新企业级开源模型 c4ai-command-r-08-2024和c4ai-command-r-plus-08-2024

C4AI Command R 08-2024 是一个 350 亿参数高性能生成模型的研究版本。 Command R 08-2024 是一个大型语言模型&#xff0c;采用开放式权重&#xff0c;针对推理、总结和问题解答等各种用例进行了优化。 Command R 08-2024 具备多语言生成功能&#xff0c;曾在 23 种语言上进行…

nginx平滑升级与回滚

华子目录 升级实验环境准备测试内容准备实验要求实验步骤1.解压包2.检测1.26版本的环境3.make编译4.备份之前的nginx启动脚本5.将1.26中的nginx启动脚本覆盖掉1.24中的6.kill -USR2 旧主进程pid7.kill -WINCH 旧主进程pid 实验测试 回滚1.kill -HUP 旧主进程pid2.kill -WINCH 新…

【MySQL】索引性能分析工具详解——>为sql优化(select)做准备

前言 大家好吖&#xff0c;欢迎来到 YY 滴MySQL系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的《Lin…