【云原生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搭建和管理企业级网站应用
目录
相关文章
|
5天前
|
Cloud Native Serverless 数据中心
阿里云ACK One:注册集群支持ACS算力——云原生时代的计算新引擎
ACK One注册集群已正式支持ACS(容器计算服务)算力,为企业的容器化工作负载提供更多选择和更强大的计算能力。
|
1月前
|
存储 运维 Kubernetes
正式开源,Doris Operator 支持高效 Kubernetes 容器化部署方案
飞轮科技推出了 Doris 的 Kubernetes Operator 开源项目(简称:Doris Operator),并捐赠给 Apache 基金会。该工具集成了原生 Kubernetes 资源的复杂管理能力,并融合了 Doris 组件间的分布式协同、用户集群形态的按需定制等经验,为用户提供了一个更简洁、高效、易用的容器化部署方案。
正式开源,Doris Operator 支持高效 Kubernetes 容器化部署方案
|
2月前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
172 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
2月前
|
存储 Kubernetes Docker
Kubernetes(k8s)和Docker Compose本质区别
理解它们的区别和各自的优势,有助于选择合适的工具来满足特定的项目需求。
228 19
|
2月前
|
Kubernetes 应用服务中间件 nginx
二进制安装Kubernetes(k8s)v1.32.0
本指南提供了一个详细的步骤,用于在Linux系统上通过二进制文件安装Kubernetes(k8s)v1.32.0,支持IPv4+IPv6双栈。具体步骤包括环境准备、系统配置、组件安装和配置等。
637 10
|
2月前
|
存储 Kubernetes 关系型数据库
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
本文源自2024云栖大会苏雅诗的演讲,探讨了K8s集群业务为何需要灾备及其重要性。文中强调了集群与业务高可用配置对稳定性的重要性,并指出人为误操作等风险,建议实施周期性和特定情况下的灾备措施。针对容器化业务,提出了灾备的新特性与需求,包括工作负载为核心、云资源信息的备份,以及有状态应用的数据保护。介绍了ACK推出的备份中心解决方案,支持命名空间、标签、资源类型等维度的备份,并具备存储卷数据保护功能,能够满足GitOps流程企业的特定需求。此外,还详细描述了备份中心的使用流程、控制台展示、灾备难点及解决方案等内容,展示了备份中心如何有效应对K8s集群资源和存储卷数据的灾备挑战。
|
3月前
|
Kubernetes Cloud Native API
深入理解Kubernetes——容器编排的王者之道
深入理解Kubernetes——容器编排的王者之道
70 1
|
2月前
|
运维 Cloud Native 持续交付
深入理解云原生架构及其在现代企业中的应用
随着数字化转型的浪潮席卷全球,企业正面临着前所未有的挑战与机遇。云计算技术的迅猛发展,特别是云原生架构的兴起,正在重塑企业的IT基础设施和软件开发模式。本文将深入探讨云原生的核心概念、关键技术以及如何在企业中实施云原生策略,以实现更高效的资源利用和更快的市场响应速度。通过分析云原生架构的优势和面临的挑战,我们将揭示它如何助力企业在激烈的市场竞争中保持领先地位。
|
2月前
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
|
3月前
|
Cloud Native Devops 云计算
云计算的未来:云原生架构与微服务的革命####
【10月更文挑战第21天】 随着企业数字化转型的加速,云原生技术正迅速成为IT行业的新宠。本文深入探讨了云原生架构的核心理念、关键技术如容器化和微服务的优势,以及如何通过这些技术实现高效、灵活且可扩展的现代应用开发。我们将揭示云原生如何重塑软件开发流程,提升业务敏捷性,并探索其对企业IT架构的深远影响。 ####
82 3

热门文章

最新文章