【云原生Kubernetes系列第七篇】一文掌握k8s之YAML文件(少攀谈,多沉潜,清醒而独立)(二)

简介: 【云原生Kubernetes系列第七篇】一文掌握k8s之YAML文件(少攀谈,多沉潜,清醒而独立)(二)

二、k8s中的yaml


kubernetes支持YAML和JSON格式管理资源对象


JSON格式:主要用于api接口之间消息的传递


YAML格式:用于配置和管理,YAML是一种简洁的非标记性语言,内容格式人性化,较易读


#查看资源配置清单
[root@master01 opt]# kubectl get deployment nginx -o yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "1"
  creationTimestamp: "2022-07-17T11:55:25Z"
  generation: 2
  labels:
    app: nginx
  managedFields:
  ......
 #解释资源配置清单
kubectl explain deployment.metadata
kubectl get service nginx -o yaml
kubectl explain service.metadata
#删除资源配置清单
#陈述式删除:
kubectl delete service nginx
#声明式删除:
kubectl delete -f nginx-svc.yaml


2.1 查看 api 资源版本标签

#查看每个资源的api版本号
三种方法
kubectl api-versions
kubectl api-resources 
kubectl explain deployment




2.2 yaml案例1

mkdir /opt/demo
cd demo/
vim nginx-deployment.yaml
apiVersion: apps/v1  #指定api版本标签
kind: Deployment  #定义资源的类型/角色,deployment为副本控制器,此处资源类型可以是Deployment、Job、Ingress、Service等
metadata:     #定义资源的元数据信息,比如资源的名称、namespace、标签等信息
  name: nginx-deployment  #定义资源的名称,在同一个namespace空间中必须是唯一的
  labels:    #定义Deployment资源标签
    app: nginx
  namespace: test  #可以定义命令空间,但必须是存在的,不写就是默认命令空间
spec:     #定义deployment资源需要的参数属性,诸如是否在容器失败时重新启动容器的属性
  replicas: 3   #定义副本数量
  selector:    #定义标签选择器
    matchLabels:  #定义匹配标签
      app: nginx  #需与 .spec.template.metadata.labels 定义的标签保持一致
#以上是Deployment自己的配置及属性,以下是Deployment创建的pod的属性
  template:    #定义业务模板,如果有多个副本,所有副本的属性会按照模板的相关配置进行匹配
    metadata:  #pod的元信息
      labels:           #定义Pod副本将使用的标签,需与 .spec.selector.matchLabels 定义的标签保持一致
        app: nginx
    spec:
      containers:    #定义容器属性
      - name: nginx    #定义一个容器名,一个 - name: 定义一个容器
        image: nginx:1.15.4  #定义容器使用的镜像以及版本
        ports:  #代表容器可以有两个端口
        - name: https
          containerPort: 443
        - name: http
          containerPort: 80  #定义容器的对外的端口


#创建service服务对外提供访问并测试
vim nginx-service.yaml
apiVersion: v1  
kind: Service  
metadata:
  name: nginx-service
  labels:
    app: nginx  
spec:
  type: NodePort  
  ports:
  - port: 80
    targetPort: 80  
  selector:
    app: nginx



此时在浏览器输入 nodeIP:nodePort 即可访问


http://192.168.109.133:32761/


http://192.168.109.132:32761/



2.3 yaml案例2

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-stevelu
  namespace: default
  labels:
    app: myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: soscscs/myapp:v1
        ports:
        - name: http
          containerPort: 80



#定义service的yaml文件
vim demo1-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: myapp-svc
  namespace: default
spec:
  type: NodePort
  ports:
  - port: 8080
    targetPort: 80
    nodePort: 31234
  selector:
    app: myapp


[root@master01 demo]# curl 10.96.222.48:8080
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>


2.4 yaml案例3

通过现有模板生成

#通过现有模板生成
kubectl get deployments.apps myapp-stevelu -o yaml > demo2.yaml
vim demo2.yaml 
#通过模板生成的yaml文件有很长一段我们将没有用的删掉,只留下有用信息
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: myapp
  name: myapp-stevelu
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - image: soscscs/myapp:v1
        name: myapp
        ports:
        - containerPort: 80
          name: http
          protocol: TCP


2.5 yaml案例4

根据陈述式命令导出一个yaml配置文件,俗称空跑,并不会正在生成deployment,再根据生成的yaml文件进行修改成自己想要的

[root@master01 demo]# kubectl create deploy myapp --image=soscscs/myapp:v1 --replicas=3 --dry-run=client -o yaml>demo3.yaml
[root@master01 demo]# ls
demo1-svc.yaml  demo1.yaml  demo2.yaml  demo3.yaml  nginx-deployment.yaml  nginx-service.yaml
[root@master01 demo]# vim demo3.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: myapp
  name: myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - image: soscscs/myapp:v1
        name: myapp


–dry-run=client的对象不是由apiserver验证的,只是由客户端验证


2.6 yaml案例5

资源类型:pod

资源名称:my-nginx

命名空间:test

容器镜像:nginx:1.14

容器端口:80

标签:app=nginx

创建Deployment资源,资源名称为nginx-deploy,命名空间为test,4个副本,nginx:1.14,镜像端口:80,标签:name=nginx-test1、service 关联上而创建的Pod,资源名称为nginx-deploy-sve

#根据陈述式命令导出一个配置文件
[root@master01 demo]# kubectl create -n test deployment nginx-deploy --image=nginx:1.14 --port=80 --replicas=4 --dry-run=client -oyaml >deploy.yaml
#创建test命名空间
[root@master01 demo]# kubectl create ns test
#根据需求修改
[root@master01 demo]# vim  deploy.yaml
apiVersion: apps/v1  #deployment版本号
kind: Deployment     #类型
metadata:            #资源的元信息
  labels:            #标签
    name: nginx-test1
  name: nginx-deploy  #资源名称
  namespace: test     #命名空间(一个命名空间下,同种类型下的资源名称是唯一的)
spec:                #下面设置资源属性
  replicas: 4        #副本数
  selector:          #标签选择器
    matchLabels:
      name: nginx-test1
  template:          #该控制器创建的pod副本的模板
    metadata:        #pod的元信息
      labels:        #pod的标签
        name: nginx-test1
    spec:            #pod的属性
      containers:    #容器的信息
      - image: nginx:1.14   #容器的信息
        name: nginx         #容器的名称
        ports:              #容器的端口
        - containerPort: 80
[root@master01 demo]# kubectl apply -f deploy.yaml 
deployment.apps/nginx-deploy created
#查看创建的资源
[root@master01 demo]# kubectl get all -n test
NAME                                READY   STATUS    RESTARTS   AGE
pod/nginx-deploy-5bbd7cdf77-69f7x   1/1     Running   0          4m39s
pod/nginx-deploy-5bbd7cdf77-8t6r8   1/1     Running   0          4m39s
pod/nginx-deploy-5bbd7cdf77-lx9vt   1/1     Running   0          4m39s
pod/nginx-deploy-5bbd7cdf77-znz5h   1/1     Running   0          4m39s
NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx-deploy   4/4     4            4           4m39s
NAME                                      DESIRED   CURRENT   READY   AGE
replicaset.apps/nginx-deploy-5bbd7cdf77   4         4         4       4m39s


#生成service资源的yaml文件,并修改
[root@master01 demo]# kubectl expose -n test deployment nginx-deploy --port=80 --target-port=80 --type=NodePort --dry-run=client -oyaml
apiVersion: v1         #service的版本号
kind: Service
metadata:
  labels:
    name: nginx-test1
  name: nginx-deploy
  namespace: test
spec:
  ports:          #service端口号
  - port: 80      #clusterIP
    protocol: TCP #端口协议
    targetPort: 80  #跟容器端口的对应关系
    nodePort: 31111  #nodeip的端口号
  selector:    #标签选择器
    name: nginx-test1
  type: NodePort   #service的类型
#将上面修改后的service资源写入文件
[root@master01 demo]# vim deploy-svc.yaml
[root@master01 demo]# kubectl apply -f deploy-svc.yaml 
service/nginx-deploy created
#查看service详细信息
[root@master01 demo]# kubectl describe svc -n test
Name:                     nginx-deploy
Namespace:                test
Labels:                   name=nginx-test1
Annotations:              <none>
Selector:                 name=nginx-test1
Type:                     NodePort
IP Families:              <none>
IP:                       10.96.77.82
IPs:                      10.96.77.82
Port:                     <unset>  80/TCP
TargetPort:               80/TCP
NodePort:                 <unset>  31111/TCP
Endpoints:                10.244.1.26:80,10.244.1.
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>



总结


编写service配置清单方法

1.根据现有的文件输出一个yaml格式的配置文件,再修改


2.根据陈述式命令导出一个配置文件(空跑)

kubectl create deploy myapp --image=soscscs/myapp:v1 --replicas=3 --dry-run=client -o json>demo4.yaml
kukectl run my=nginx --image=nginx:1.14 --port=80 --dry-run=client -oyaml > pod -my-nginx.yaml

3.从头到尾自己编写


查看某个资源对应的版本号

#法一
kubectl api-versions
#法二
kubectl api-resources
#法三
kubectl explain [资源名称]


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
26天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
84 2
|
26天前
|
Kubernetes 监控 负载均衡
深入云原生:Kubernetes 集群部署与管理实践
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其弹性、可扩展性成为企业IT架构的首选。本文将引导你了解如何部署和管理一个Kubernetes集群,包括环境准备、安装步骤和日常维护技巧。我们将通过实际代码示例,探索云原生世界的秘密,并分享如何高效运用这一技术以适应快速变化的业务需求。
60 1
|
1月前
|
运维 Kubernetes Cloud Native
Kubernetes云原生架构深度解析与实践指南####
本文深入探讨了Kubernetes作为领先的云原生应用编排平台,其设计理念、核心组件及高级特性。通过剖析Kubernetes的工作原理,结合具体案例分析,为读者呈现如何在实际项目中高效部署、管理和扩展容器化应用的策略与技巧。文章还涵盖了服务发现、负载均衡、配置管理、自动化伸缩等关键议题,旨在帮助开发者和运维人员掌握利用Kubernetes构建健壮、可伸缩的云原生生态系统的能力。 ####
|
1月前
|
存储 运维 Kubernetes
云原生之旅:Kubernetes的弹性与可扩展性探索
【10月更文挑战第32天】在云计算的浪潮中,云原生技术以其独特的魅力成为开发者的新宠。本文将深入探讨Kubernetes如何通过其弹性和可扩展性,助力应用在复杂环境中稳健运行。我们将从基础架构出发,逐步揭示Kubernetes集群管理、服务发现、存储机制及自动扩缩容等核心功能,旨在为读者呈现一个全景式的云原生平台视图。
32 1
|
3月前
|
JSON Kubernetes API
深入理解Kubernetes配置:编写高效的YAML文件
深入理解Kubernetes配置:编写高效的YAML文件
|
6月前
|
存储 运维 Serverless
函数计算产品使用问题之在YAML文件中配置了环境变量,但在PHP代码中无法读取到这些环境变量,是什么原因
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
2月前
|
Kubernetes 应用服务中间件 nginx
k8s学习--YAML资源清单文件托管服务nginx
k8s学习--YAML资源清单文件托管服务nginx
k8s学习--YAML资源清单文件托管服务nginx
|
2月前
|
Kubernetes Docker Perl
k8s常见故障--yaml文件检查没有问题 pod起不来(一直处于创建中)
k8s常见故障--yaml文件检查没有问题 pod起不来(一直处于创建中)
114 1
|
2月前
ingress相关yaml文件报错且相关资源一切正常解决方法
ingress相关yaml文件报错且相关资源一切正常解决方法
ingress相关yaml文件报错且相关资源一切正常解决方法
|
5月前
|
运维 Kubernetes Serverless
Serverless 应用引擎使用问题之s.yaml文件中如何使用外部环境变量
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。