保健励志美文体育育儿作文
投稿投诉
作文动态
热点娱乐
育儿情感
教程科技
体育养生
教案探索
美文旅游
财经日志
励志范文
论文时尚
保健游戏
护肤业界

开发和运维对K8S中的应用都做了什么?

  在应用的整个生命周期里,开发和运维都和它密不可分。一个塑造它,一个保养它。
  如果应用需要部署到K8S中,开发和运维在其中都做了什么呢?
  开发侧
  从开发侧来说,我们的应用应该具备以下能力:
  具有健康检测接口
  具有优雅退出能力
  具有metrics接口
  能够接入链路追踪系统
  日志输出标准统一
  定义健康检测接口
  健康检测接口用于检测应用的健康状态,在K8S中,使用Readiness和Liveness分别来探测应用是否就绪和是否存活,如果未就绪或者未存活,K8S会采取相应的措施来确保应用可用。
  如果我们应用未定义好相应的健康检测接口,K8S就无法判断应用是否正常可用,整个应用对我们来说就是黑匣子,也就谈不上应用稳定性了。
  定义一个简单的健康检测接口如下:packagerouter
  import(
  github。comgingonicgin
  v1gohelloworldapphttpcontrollersv1
  )
  strongtoutiaooriginspanfuncstrongstrongtoutiaooriginspanSetupRouterstrong(routergin。Engine){
  ruc:new(v1。RootController)
  router。GET(,ruc。Root)
  huc:new(v1。HealthController)
  router。GET(health,huc。HealthCheck)
  }
  packagev1
  import(
  github。comgingonicgin
  gohelloworldapphttpcontrollers
  gohelloworldpkgresponse
  nethttp
  )
  typeHealthControllerstruct{
  controllers。BaseController
  }
  strongtoutiaooriginspanfuncstrong(hHealthController)strongtoutiaooriginspanHealthCheckstrong(cgin。Context){
  response。WriteResponse(c,http。StatusOK,nil,gin。H{
  result:ahrefhttps:www。q578。coml160targetblankclassinfotextkey健康a检测页面,
  status:OK,
  })
  }
  如上我们定义了health接口,当应用启动后,只需要探测这个接口,如果返回OK,表示应用是正常的。
  当然,上面的接口是非常简单的,在实际情况下,应用本身也许还依赖起来应用,比如redis,mysql,mq等,如果它们异常,应用是不是异常的呢?那我们的应用健康检测需不需要检测其他应用的健康状态呢?
  既然我们定义好了健康检测接口,那我们的YAML模板就可以增加健康检测功能,如下:readinessProbe:
  httpGet:
  path:health
  port:http
  timeoutSeconds:3
  initialDelaySeconds:20
  livenessProbe:
  httpGet:
  path:health
  port:http
  timeoutSeconds:3
  initialDelaySeconds:30
  定义优雅下线功能
  应用发版是常规不能再常规的操作,通常情况下都是滚动更新的方式上线,也就是先起一个新应用,再删一个老应用。
  如果这时候老应用有部分的流量,突然把老应用的进程杀了,这部分流量就无法得到正确的处理,部分用户也会因此受到影响。
  怎么才会不受影响呢?
  假如我们在停止应用之前先告诉网关或者注册中心,等对方把我们应用摘除后再下线,这样就不会有任何流量受到影响了。
  在K8S中,当我们要删除Pod的时候,Pod会变成Terminating状态,kubelet看到Pod的状态如果为Terminating,就会开始执行关闭Pod的流程,给Pod发SIGTERM信号,如果达到宽限期Pod还未结束就给Pod发SIGKILL信号,从Endpoints中摘除Pod等。
  从上面可知,Pod在停止之前会收到SIG信号,如果应用本身没有处理这些信号的能力,那应用如果知道什么时候该结束呢?
  下面简单定义一个处理SIG信号的功能。packageshutdown
  import(
  context
  fmt
  nethttp
  os
  ossignal
  time
  )
  优雅退出
  typeShutdownstruct{
  chchanos。Signal
  timeouttime。Duration
  }
  funcNew(ttime。Duration)Shutdown{
  returnShutdown{
  ch:make(chanos。Signal),
  timeout:t,
  }
  }
  strongtoutiaooriginspanfuncstrong(sShutdown)strongtoutiaooriginspanAddstrong(signals。。。os。Signal){
  signal。Notify(s。ch,signals。。。)
  }
  strongtoutiaooriginspanfuncstrong(sShutdown)strongtoutiaooriginspanStartstrong(serverhttp。Server){
  s。ch
  fmt。Println(startexist。。。。。。)
  ctx,cannel:context。WithTimeout(context。Background,s。timeouttime。Second)
  defercannel
  iferr:server。Shutdown(ctx);err!nil{
  fmt。Println(Gracefulexitfailed。err:,err)
  }
  fmt。Println(Gracefulexitsuccess。)
  }
  packagemain
  import(
  github。comgingonicgin
  gohelloworldpkgshutdown
  gohelloworldrouter
  log
  nethttp
  syscall
  time
  )
  strongtoutiaooriginspanfuncstrongstrongtoutiaooriginspanmainstrong{
  r:gin。New
  注册路由
  router。SetupRouter(r)
  server:http。Server{
  Addr::8080,
  Handler:r,
  }
  运行服务
  gostrongtoutiaooriginspanfuncstrong{
  err:server。ListenAndServe
  iferr!nilerr!http。ErrServerClosed{
  log。Fatalf(server。ListenAndServeerr:v,err)
  }
  }
  优雅退出
  quit:shutdown。New(10)
  quit。Add(syscall。SIGINT,syscall。SIGTERM)
  quit。Start(server)
  }
  当接收到SIG信号的时候,就会调用Shutdown方法做应用退出处理。
  除此,还要结合K8S的PreStopHook来定义结束前的钩子,如下:lifecycle:
  preStop:
  exec:
  command:
  binsh
  c
  sleep30
  如果使用注册中心,比如nacos,我们可以在PreStopHook中先告诉nacos要下线,如下:lifecycle:
  preStop:
  exec:
  command:
  binsh
  c
  curlXDELETEyournacosip:8848nacosv1nsinstance?serviceNamenacos。test。1ip{PODIP}port8880clusterNameDEFAULTsleep30
  定义Metrics接口
  Metrics主要用来暴露应用指标,可以根据实际情况自定义指标,以便于监控工具Prometheus进行数据收集展示。
  有些语言有现成的exporter,比如java的jmxexporter,没有的就需要自己在应用中集成。
  比如:packagemain
  import(
  github。comSkyAPMgo2sky
  v3github。comSkyAPMgo2skypluginsginv3
  github。comSkyAPMgo2skyreporter
  github。comgingonicgin
  github。comprometheusclientgolangprometheuspromhttp
  gohelloworldpkgshutdown
  gohelloworldrouter
  log
  nethttp
  syscall
  time
  )
  varSKYWALKINGENABLEDfalse
  strongtoutiaooriginspanfuncstrongstrongtoutiaooriginspanmainstrong{
  r:gin。New
  注册路由
  router。SetupRouter(r)
  server:http。Server{
  Addr::8080,
  Handler:r,
  }
  启动metrics服务
  gostrongtoutiaooriginspanfuncstrong{
  http。Handle(metrics,promhttp。Handler)
  iferr:http。ListenAndServe(:9527,nil);err!nil{
  log。Printf(metricsportlistenfailed。err:s,err)
  }
  }
  运行服务
  gostrongtoutiaooriginspanfuncstrong{
  err:server。ListenAndServe
  iferr!nilerr!http。ErrServerClosed{
  log。Fatalf(server。ListenAndServeerr:v,err)
  }
  }
  优雅退出
  quit:shutdown。New(10)
  quit。Add(syscall。SIGINT,syscall。SIGTERM)
  quit。Start(server)
  }
  这种会暴露默认的Http指标,可以通过curl127。0。0。1:9527metrics获取指标。。。。。。。
  strongtoutiaooriginspanclasshighlighttextHELPpromhttpmetrichandlerrequeststotalTotalnumberofscrapesbyHTTPstatuscode。strong
  strongtoutiaooriginspanclasshighlighttextTYPEpromhttpmetrichandlerrequeststotalcounterstrong
  promhttpmetrichandlerrequeststotal{code200}0
  promhttpmetrichandlerrequeststotal{code500}0
  promhttpmetrichandlerrequeststotal{code503}0
  如果需要自定义指标的话,只需按规则定义即可,如下:packagemetrics
  import(
  github。comprometheusclientgolangprometheus
  nethttp
  time
  )
  var(
  HttpserverRequestTotal表示接收http请求总数
  HttpserverRequestTotalprometheus。NewCounterVec(prometheus。CounterOpts{
  Name:httpserverrequesttotal,
  Help:TheTotalnumberofhttpserverrequests,
  },
  设置标签:请求方法和路径
  〔〕string{method,endpoint})
  HttpserverRequestDurationprometheus。NewHistogramVec(prometheus。HistogramOpts{
  Name:httpserverrequestdurationseconds,
  Help:httpserverrequestdurationdistribution,
  Buckets:〔〕float64{0。1,0。3,0。5,0。7,0。9,1},
  },
  〔〕string{method,endpoint})
  )
  注册监控指标
  strongtoutiaooriginspanfuncstrongstrongtoutiaooriginspaninitstrong{
  prometheus。MustRegister(HttpserverRequestTotal)
  prometheus。MustRegister(HttpserverRequestDuration)
  }
  funcNewMetrics(routerhttp。HandlerFunc)http。HandlerFunc{
  returnstrongtoutiaooriginspanfuncstrong(whttp。ResponseWriter,rhttp。Request){
  start:time。Now
  router(w,r)
  duration:time。Since(start)
  httpserverRequestTotal记录
  HttpserverRequestTotal。With(prometheus。Labels{method:r。Method,endpoint:r。URL。Path})。Inc
  httpserverRequestDuration记录
  HttpserverRequestDuration。With(prometheus。Labels{method:r。Method,endpoint:r。URL。Path})。Observe(duration。Seconds)
  }
  }
  这样就定义了httpserverrequesttotal和httpserverrequestdurationseconds指标,引用过后就能在metrics中看到对应的数据。
  定义好了指标,下面就是收集了。既可以通过自定义收集规则收集,也可以通过自动发现的方式收集,为了方便,主要采用自动发现的方式。
  我们只需要在deployment的templates中定义好annotation,prometheeus就会自动添加采集目标,如下:apiVersion:appsv1
  kind:Deployment
  metadata:
  labels:
  app:httpserver
  name:httpserver
  namespace:default
  spec:
  replicas:2
  selector:
  matchLabels:
  app:httpserver
  template:
  metadata:
  annotations:
  prometheus。ioscrape:true
  prometheus。ioport:metrics
  labels:
  app:httpserver
  spec:
  containers:
  image:baidjayhttpserver:ubuntuv3metrics
  imagePullPolicy:IfNotPresent
  lifecycle:
  preStop:
  exec:
  command:
  binsh
  c
  sleep15
  livenessProbe:
  failureThreshold:3
  httpGet:
  path:healthz
  port:http
  scheme:HTTP
  initialDelaySeconds:30
  periodSeconds:10
  successThreshold:1
  timeoutSeconds:3
  name:httpserver
  ports:
  containerPort:8080
  name:http
  protocol:TCP
  name:metrics
  protocol:TCP
  containerPort:9527
  readinessProbe:
  failureThreshold:3
  httpGet:
  path:healthz
  port:http
  scheme:HTTP
  initialDelaySeconds:20
  periodSeconds:10
  successThreshold:1
  timeoutSeconds:3
  定义Trace功能
  Trace用于跟踪,每个请求都会生成一个TraceID,这个ID会伴随请求的整个生命周期,我们也可以根据这个ID查询请求的整个链路情况。
  链路追踪,目前市面上有很多开源系统,比如Skywalking,Jeager,Zipkin等,它们各有各的特点,如下。
  PinpointZipkinJaegerSkywalkingOpenTracing兼容否是是是客户端支持语言javaphpjavagophp等javagophp等javaodejsphp等存储hbaseesmysql内存等eskafka内存等esmysqlh2等传输协议支持thrifthttpmqudphttpgrpcUI丰富程度高低中中实现方式字节码注入拦截请求拦截请求字节码注入扩展性低高高中Trace查询不支持支持支持支持告警支持支持不支持不支持支持JVM监控支持不支持不支持支持性能损失高中中低
  我比较推荐使用Jaeger,它是CNCF的毕业项目,成长空间和云原生的系统架构兼容性比较好。
  不过,我这里采用的Skywalking。
  Skywalking有许多现成的客户端,比如Java、Python等,可以直接使用,它们都会自动埋点,但是对于Go来说就只有自己手动埋点了,需要我们自己去写代码。
  比如:packagemain
  import(
  github。comSkyAPMgo2sky
  v3github。comSkyAPMgo2skypluginsginv3
  github。comSkyAPMgo2skyreporter
  github。comgingonicgin
  github。comprometheusclientgolangprometheuspromhttp
  gohelloworldpkgshutdown
  gohelloworldrouter
  log
  nethttp
  syscall
  time
  )
  varSKYWALKINGENABLEDfalse
  strongtoutiaooriginspanfuncstrongstrongtoutiaooriginspanmainstrong{
  r:gin。New
  配置skywalking
  ifSKYWALKINGENABLED{
  rp,err:reporter。NewGRPCReporter(skywalkingoap:11800,reporter。WithCheckInterval(time。Second))
  iferr!nil{
  log。Printf(creategoskyreporterfailed。err:s,err)
  }
  deferrp。Close
  tracer,:go2sky。NewTracer(gohelloworld,go2sky。WithReporter(rp))
  r。Use(v3。Middleware(r,tracer))
  }
  注册路由
  router。SetupRouter(r)
  server:http。Server{
  Addr::8080,
  Handler:r,
  }
  启动metrics服务
  gostrongtoutiaooriginspanfuncstrong{
  http。Handle(metrics,promhttp。Handler)
  iferr:http。ListenAndServe(:9527,nil);err!nil{
  log。Printf(metricsportlistenfailed。err:s,err)
  }
  }
  运行服务
  gostrongtoutiaooriginspanfuncstrong{
  err:server。ListenAndServe
  iferr!nilerr!http。ErrServerClosed{
  log。Fatalf(server。ListenAndServeerr:v,err)
  }
  }
  优雅退出
  quit:shutdown。New(10)
  quit。Add(syscall。SIGINT,syscall。SIGTERM)
  quit。Start(server)
  }
  定义reporter用于上报数据给Skywalking,这就是一个简单的集成Trace的例子。
  定义标准的日志
  应用的可观测性主要来源日志、监控、链路追踪,标准的日志有利于日志收集以及排查问题。
  原则上,不论是什么类型的日志输出,什么格式的日志内容,都能收集。但是为了方便友好,建议把日志输出到标准输出,这样收集更方便。
  我个人理解,在K8s中,完全没必要把日志输出到文件,浪费不说,没多大意义,因为所有的日志我们都会收集到日志系统,而输出到文件的日志也会随着应用发版而丢失,所以输出到文件的意义是什么呢?
  运维侧
  开发把系统开发完,就会交付给运维部署。为了保障应用的稳定性,运维在部署应用的时候应该考虑以下几点。
  应用尽可能保持无状态
  应用尽可能保持高可用
  应该具备优雅上线能力
  应该具备异常自愈能力
  可以使用HTTPS访问
  应用尽可能保持无状态
  K8S中可以部署有状态应用,也可以部署无状态应用。对于有状态应用,我其实很少部署到K8S中,大部分还是部署的无状态应用,至于为什么,用多了就晓得了。
  对于业务应用,强烈建议使其保持无状态,就算有需要持久化的东西,要么保存到数据库,要么保存到对象存储或者其他单独的文件系统中,不要挂载到应用Pod上。
  这样的好处是,应用和数据是分开的,应用可以随意启停、扩展、迁移等。
  应用尽可能的保持高可用
  保持高可用应该是每个运维人员的使命。
  在K8S中,我们应该怎么配置呢?(1)应用Pod应该是多副本
  (2)应用Pod之间做反亲和性,避免同一应用调度到同一台主机,如下。。。。。。。
  spec:
  affinity:
  podAntiAffinity:
  requiredDuringSchedulingIgnoredDuringExecution:
  labelSelector:
  matchExpressions:
  key:app
  operator:In
  values:〔httpserver〕
  topologyKey:kubernetes。iohostname
  。。。。。。
  (3)为了避免应用因为节点维护等原因驱逐Pod,导致全部Pod被驱逐,特别配置了PodDisruptionBudget,保障应用至少有一个可用,如下。apiVersion:policyv1beta1
  kind:PodDisruptionBudget
  metadata:
  name:httpserver
  spec:
  minAvailable:1
  selector:
  matchLables:
  app:httpserver
  (4)如果某个节点因为一些原因需要驱逐一些Pod,为了避免重要应用被驱逐,应该给应用配置较高的QoS,如下:resources:
  limits:
  cpu:1
  memory:2Gi
  requests:
  cpu:1
  memory:2Gi
  应用具备优雅上线能力
  所谓优雅上线能力,就是要确保应用能够提供服务了,再接入外界流量,不能在还没完全启动的情况下就提供服务。
  在K8S中,应用在启动后会加入endpoints中,然后通过service接入流量,那在什么情况下才算启动成功呢?主要是通过K8S的ReadinessProbe来进行检测。这时候开发的健康检测接口就派上用场了,如下:。。。
  readinessProbe:
  failureThreshold:3
  httpGet:
  path:health
  port:http
  scheme:HTTP
  initialDelaySeconds:20
  periodSeconds:10
  successThreshold:1
  timeoutSeconds:3
  。。。
  所以我们K8S的YAML文件应该加上如上的配置。
  应该具备异常自愈能力
  所谓异常自愈,就是应用本身在出现Crash,或者应用Pod所在节点出现异常的情况,应用能够自动重启或者迁移。这时候就需要通过K8S的LivenessProbe来进行检测了,如下。。。。。。。
  livenessProbe:
  failureThreshold:3
  httpGet:
  path:health
  port:http
  scheme:HTTP
  initialDelaySeconds:30
  periodSeconds:10
  successThreshold:1
  timeoutSeconds:3
  。。。。。。
  当K8S的YAML清单加上如上配置过后,就会定时去探测应用是否正常,如果异常,就会触发重启的动作。如果是节点异常,K8S会对Pod进行重新调度。
  可以使用HTTPS进行访问
  应用通过HTTPS访问是比较常见的,企业级应用建议自己购买相应的SSL证书,然后进行配置即可。
  比如。strongtoutiaooriginspanclasshighlighttext创建证书secretstrong
  kubectlcreatesecrettlshttpservertlssecretcertpathtotls。certkeypathtotls。key
  strongtoutiaooriginspanclasshighlighttext在ingress中引用strong
  。。。。。。
  spec:
  tls:
  hosts:
  httpserver。coolops。cn
  secretName:httpservertlssecret
  rules:
  host:httpserver。coolops。cn
  。。。。。。
  总结
  上面介绍了开发和运维对于应用上线应该做的工作,不全但够用。
  在不同的企业都有不同的尿性,但是作为运维,我们都要牢牢记住稳定永远是第一尿性。通过上面的梳理,我们的应用模板就整理如下:apiVersion:appsv1
  kind:Deployment
  metadata:
  labels:
  app:httpserver
  name:httpserver
  namespace:default
  spec:
  progressDeadlineSeconds:600
  replicas:2
  revisionHistoryLimit:10
  selector:
  matchLabels:
  app:httpserver
  strategy:
  rollingUpdate:
  maxSurge:25
  maxUnavailable:25
  type:RollingUpdate
  template:
  metadata:
  annotations:
  prometheus。ioscrape:true
  prometheus。ioport:metrics
  labels:
  app:httpserver
  spec:
  affinity:
  podAntiAffinity:
  requiredDuringSchedulingIgnoredDuringExecution:
  labelSelector:
  matchExpressions:
  key:app
  operator:In
  values:〔httpserver〕
  topologyKey:kubernetes。iohostname
  containers:
  env:
  name:TZ
  value:AsiaShanghai
  name:PODNAME
  valueFrom:
  fieldRef:
  apiVersion:v1
  fieldPath:metadata。name
  name:PODNAMESPACE
  valueFrom:
  fieldRef:
  apiVersion:v1
  fieldPath:metadata。namespace
  image:baidjayhttpserver:ubuntuv3metrics
  imagePullPolicy:IfNotPresent
  lifecycle:
  preStop:
  exec:
  command:
  binsh
  c
  sleep15
  livenessProbe:
  failureThreshold:3
  httpGet:
  path:healthz
  port:http
  scheme:HTTP
  initialDelaySeconds:30
  periodSeconds:10
  successThreshold:1
  timeoutSeconds:3
  name:httpserver
  ports:
  containerPort:8080
  name:http
  protocol:TCP
  name:metrics
  protocol:TCP
  containerPort:9527
  readinessProbe:
  failureThreshold:3
  httpGet:
  path:healthz
  port:http
  scheme:HTTP
  initialDelaySeconds:20
  periodSeconds:10
  successThreshold:1
  timeoutSeconds:3
  resources:
  limits:
  cpu:1
  memory:2Gi
  requests:
  cpu:1
  memory:2Gi
  securityContext:{}
  terminationMessagePath:devterminationlog
  terminationMessagePolicy:File
  dnsPolicy:ClusterFirst
  restartPolicy:Always
  schedulerName:defaultscheduler
  strongtoutiaooriginspanclasshighlighttextstrong
  apiVersion:v1
  kind:Service
  metadata:
  name:httpserver
  spec:
  ports:
  name:http
  port:8080
  protocol:TCP
  targetPort:http
  name:metrics
  port:9527
  protocol:TCP
  targetPort:metrics
  selector:
  app:httpserver
  sessionAffinity:None
  type:ClusterIP
  strongtoutiaooriginspanclasshighlighttextstrong
  apiVersion:networking。k8s。iov1
  kind:Ingress
  metadata:
  annotations:
  nginx。ingress。kubernetes。ioproxybodysize:100m
  nginx。ingress。kubernetes。ioproxyconnecttimeout:600
  nginx。ingress。kubernetes。ioproxyreadtimeout:600
  nginx。ingress。kubernetes。ioproxysendtimeout:600
  nginx。ingress。kubernetes。ioserviceweight:
  nginx。orgclientmaxbodysize:100m
  name:httpservertls
  spec:
  tls:
  hosts:
  httpserver。coolops。cn
  secretName:httpservertlssecret
  rules:
  host:httpserver。coolops。cn
  http:
  paths:
  pathType:Prefix
  path:
  backend:
  service:
  name:httpserver
  port:
  number:8080
  strongtoutiaooriginspanclasshighlighttextstrong
  apiVersion:policyv1
  kind:PodDisruptionBudget
  metadata:
  name:httpserver
  spec:
  minAvailable:1
  selector:
  matchLabels:
  app:httpserver
  为了凑字数,写了一大堆,大家凑合看,觉得有用就点个赞!
  最后,求关注。如果你还想看更多优质原创文章,欢迎关注我们的公众号运维开发故事。
  如果我的文章对你有所帮助,还请帮忙一下,你的支持会激励我输出更高质量的文章,非常感谢!
  你还可以把我的公众号设为星标,这样当公众号文章更新时,你会在第一时间收到推送消息,避免错过我的文章更新。

写亲情的精选作文导语:亲情如一本不可捉摸的书,需要你去细细阅读,仔细地去感悟。下面是小编整理的一些关于亲情的优秀作文,欢迎查阅,谢谢!篇一:亲情。母爱母爱似一缕阳光,让你在寒冷的冬……追逐着那渐远的背影夕阳西下,一个似曾相识的背影出现在我眼前。我大喜过望,急忙跑了上去,却发现那只不过是虚无飘渺的幻觉而已。那个背影,似乎并不是一个人的,而是许许多多在我生命中出现过的人拼凑……初二诗歌少年懂事了懂事,也许就是一瞬间的事情在不经意间看到了爹娘鬓角的39;银丝,木屋下落英缤纷的情景在惋惜中,便懂事了。在睡意朦胧之际听到了……送给妈妈的礼物今天,我做了十年中一次都没有做过的事情!想知到是什么吗!请往下看哎哟,哎哟,哎别叫了!这点小事都忍不住,将来怎么办哪!啊?哎,这个妈妈,我真是恨得不能再恨了!你说吧!上次……壁虎五年级作文有一天晚上,我正在看动画片。无意间我往墙壁上一看,看到墙壁上有一只壁虎在爬来爬去。我想那只壁虎在干什么?咦,这比动画片里的内容更加精彩有趣。好,我暂停看动画片,还是先看看这一只……小猴子上学记作文500字在一片茂盛的大森林里,住着成千上万只动物,他们自由自的在大森林里安居乐业。自从来了一群猎人,许多动物被捕杀,小动物生活在水深火热之中。今天,大森林里要举行一场比赛,如果谁……英语作文过年感想Wintervacationiscoming。We39;rehappytowelcometheholidays。Usually,wintervacationisfunnybec……童年的相册200字日记童年,是欢乐的海洋。在回忆的海边,有无数的贝壳,有灰暗的,勾起一段伤心的往事;有灿烂的,使人想起童年趣事。我在那回忆的海岸,寻觅着最美丽的贝壳,啊,找到了那是我五岁的时候……精品中秋节的作文500字3篇无论是身处学校还是步入社会,大家最不陌生的就是作文了吧,作文是通过文字来表达一个主题意义的记叙方法。你知道作文怎样写才规范吗?下面是小编收集整理的中秋节的作文500字3篇,仅供……特斯拉加码上游合作!巴西淡水河谷确认与其签署长期供镍协议周五,巴西矿商淡水河谷公司(ValeS。A。)确认,它已经与特斯拉公司签署了一项长期协议,为特斯拉提供来自淡水河谷加拿大矿山的镍,这些矿山去年生产了7。6万吨镍。淡水河谷没有提……英语老师作文英语老师是所有老师中语言不同的一位老师,别的课就算听不懂也都是中文,英语课你听不懂英文那真是要命。下面是小编为您带来的是英语老师作文相关内容,希望对您有所帮助。同学们都在……我的左眼为题的作文眼,是五官之一,是一个很重要的器官,它也极其脆弱,容易受伤。星期日,我就受到了一次差点让我的左眼失明的打击。当时,事情是这样的:那天晚上,妈妈让我抄语文课本。我拿着笔,专……
关于雨的作文450字近来雨水降临频繁,雨时而凶猛,时而温柔,真是变幻无常。小编整理了几篇关于雨文章,希望对你有帮助。关于雨的作文450字ldquo;轰隆隆rdquo;一阵雷响,蓝色闪电……知乎港股上市首日再次破发,股价下跌23。58,回应被美列入预红星资本局4月22日消息,知乎(02390。HK)今日登陆港交所实现双重上市,再次经历开盘破发。知乎港股开盘价为24。3港元股,较其32。06港元股的发行价下跌24。2。截至收……美好的春天品学网专稿未经允许不得转载是谁为我们送来春的消息?是谁为我们吹来了春的气息?又是谁为我们谱写了春的乐章?是她,是她,原来她就是美丽的春姑娘。春姑娘就像一位画家,它挥……青春的飞逝E度网专稿未经允许不得转载无论是谁,内心细腻或是粗糙的谁,或许都曾因为迷茫而深感失意过吧。关于青春的飞逝,似乎我们只能站在原地看着它的离去,望尘莫及。同样因为生活的……诚信名言遵守诚信的名言(五)21、思量恶事,化为地狱;思量善事,化为天堂。惠能22、诚信比一切智谋更好。23、您务必持续诚实人的立场,这时常是冒险的人需要的勇气。奥斯特洛夫斯基24、人而……关于愤怒的400字作文导语:如今的圆明园已失去了昔日的辉煌,我感到无比的愤怒。下面是小编整理的一些关于愤怒的优秀作文,欢迎查阅,谢谢!那一天我愤怒了一个星期五的晚上,我在宁静的图书馆里看书。正……诸葛亮,我一生追崇的偶像诸葛亮,您是一位近似神的人。您的一举一动都留给后世一种震惊。纵观您的历史舞台,是从三顾茅庐开始展开的。不经意间,那刘备将您这条深藏多年的巨龙给引了出来。ldquo;未出茅……描写水果的作文500字篇一:我最喜欢的水果在我爱吃的水果中,草莓是我的最爱,现在正是草莓成熟的时节,我每天都可以大饱口福啰!草莓小姐戴着一顶小巧可爱的绿色太阳帽,身穿一件大红袍,红袍上镶……有关牡丹花的作文300字春天来了,牡丹花开了。我和小伙伴来到公园,只见一簇簇牡丹花在阳光下显得格外美丽。我走着走着来到了牡丹花最茂盛的地方,突然一阵风吹来,一阵沁人心脾的香味钻进了我的鼻子里我和……制作冰淇淋小学生作文今天即是国庆节,又是妈妈的生日,所以大家要好好地庆祝一下,我和小姨也准备露一手。翻阅了许多食谱,最后我们决定制作一种冰淇淋。我们之所以要选择这种冰淇淋,是因为吃了它后人不……学好Python第一步运用Python解释器Python解释器的主要作用是运行文件,下面就给大家介绍一下最常见的五种解释器。五种常见的Python解释器CPython官方版本的解释器,这个解释器是用C语……三部门严厉打击快递空包刷单等违法犯罪行为来源:中国新闻网中新财经4月22日电据国家邮政局网站消息,21日,国家邮政局、公安部、国家互联网信息办公室联合召开电视电话会议,部署开展为期半年的邮政快递领域个人信息安全治理专……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网