企业级运维之云原生与Kubernetes实战课程 - 第二章第7讲 实验二:应用部署进阶

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 该实验是“云原生与Kubernates基础课程”的配套实验。 涉及ACK集群上ingress、pod,以及日志服务、hpa的应用部署。 进行该实验的前提:需熟悉上述理论概念,建议完成配套理论课程学习。

企业级运维之云原生与Kubernetes实战课程

第二章第7讲 实验二:应用部署进阶

 

 

视频地址:https://developer.aliyun.com/learning/course/913/detail/14611

 

一、实验简介

 

该实验是“云原生与Kubernetes基础课程”的配套实验。 涉及ACK集群上ingresspod,以及日志服务、hpa的应用部署。 进行该实验的前提:需熟悉上述理论概念,建议完成配套理论课程学习。

 

二、实验内容

 

  • 通过 Ingress 服务来暴露 pod,让应用可以通过统一的入口访问;
  • 通过 pod 亲和性调度,让 web pod redis pod 尽量调度到一个节点上,提高 web redis 之间的网络质量;
  • 将应用的标准输出日志采集到日志服务,监控日志中的特殊字段内容,如果出现对应字段的日志,通过日志服务进行告警,通知到邮件;
  • 通过创建 hpa 来保证业务高峰期能够自动调整 pod 副本数,来增加架构弹性;

 

三、实验目标

 

  • 通过 Ingress 暴露服务;
  • 使用 pod 亲和性调度;
  • 应用日志采集;
  • 掌握应用日志分析和告警;
  • 实现 pod 水平伸缩。

 

实验地址:https://developer.aliyun.com/adc/scenario/17ffed0540f340a2949f5d18d57d2bcd

 

四、实验步骤

 

1.  了解实验架构

 

客户端通过 ingress 的入口 slb 访问,slb 将请求转发到nginx-ingress-controller,然后 nginx-ingress-controller 将代理请求发到后端 pod;同时,hpa 来控制台 pod数量的变化。

 

2.  环境准备

 

注:后台已创建好了对应的云产品资源,这里仅核实环境和相关配置。

 

a.  证书下载地址 :http://xiniao-ceshi.oss-cn-beijing.aliyuncs.com/4211665_xiniao.aliyuntest.xyz_nginx.zip

b.  使用ack里面的Cloud Shell进行连接以配置管理集群;

 image.png

 

c.  确认集群具有公网能力,保证可以拉去实验镜像。

 

3.  创建 deploy 文件

 

a.  touch myweb.yaml; 输入以下内容:

 

apiVersion: apps/v1

kind: Deployment

metadata:

 name: httpbin

spec:

 replicas: 1

 selector:

   matchLabels:

     app: httpbin

 template:

   metadata:

     labels:

       app: httpbin

   spec:

     containers:

     - image: 'docker.io/kennethreitz/httpbin:latest'

       imagePullPolicy: IfNotPresent

       env:

       # env 会指定 采集该Pod 标准输出和标准出错的内容

       # 到名为 log-stdout logstore 中,配置参考

       - name: aliyun_logs_log-stdout

         value: stdout

       name: httpbin

       ports:

       - containerPort: 80

         protocol: TCP

       resources:

         limits:

           cpu: 500m

           memory: 100Mi

         requests:

           cpu: 250m

           memory: 32Mi

 

b.  使用命令创建 deploy kubectl create -f myweb.yaml

 

4.  创建 service 暴露服务

 

a.  touch myservice.yaml; 输入以下内容:

 

apiVersion: v1

kind: Service

metadata:

 name: myweb

 namespace: default

spec:

 ports:

   - name: http80

     port: 80

     protocol: TCP

     targetPort: 80

 selector:

   app: httpbin

 type: ClusterIP

 

b.  执行:kubectl create -f myservice.yaml

 

5.  创建 secret 文件

 

a.  CloudShell上下载证书,并将证书文件解压;

 

wget http://xiniao-ceshi.oss-cn-beijing.aliyuncs.com/4211665_xiniao.aliyuntest.xyz_nginx.zip

 

unzip 4211665_xiniao.aliyuntest.xyz_nginx.zip

 

b.  执行命令:

 

kubectl create secret tls mysecret --key 4211665_xiniao.aliyuntest.xyz.key --cert

 

4211665_xiniao.aliyuntest.xyz.pem

 

6.  创建 Ingress 规则

 

a.  touch Ingress.yaml; 输入如下内容:

 

apiVersion: extensions/v1beta1

kind: Ingress

metadata:

 name: httpbin

 namespace: default

spec:

 ingressClassName: nginx

 rules:

 - host: xiniao.aliyuntest.xyz

   http:

     paths:

     - backend:

         serviceName: myweb

         servicePort: 80

       path: /

 tls:

 - hosts:

   - xiniao.aliyuntest.xyz

   secretName: mysecret

 

b.  创建 Ingresskubectl create -f Ingress.yaml

 

7.   hosts 里绑定域名和 IP

 

a.  kubectl get ingress httpbin 得到 ingress 的域名和 ip(域名在“HOSTS”字段下, ip 在 “ADDRESS”字段下)

 

b.  编辑客户端(这里可以用个人的windows-pc)的C:\Windows\System32\drivers\etc\hosts 文件,添加一行:

 

121.196.13.XX xiniao.aliyuntest.xyz

 

8.  验证网站访问

 

浏览器访问测试:https://xiniao.aliyuntest.xyz/delay/1,能正常显示页面内容返回结果。

 

9.  亲和性调度

 

任务:将 httpbin 这个 deployment 尽可能调度到与 redis pod 相同的节点。

 

a.  创建 redis deploymenttouch redis.yaml,文件内容如下:

 

apiVersion: apps/v1

kind: Deployment

metadata:

 labels:

   app: redis

 name: redis

spec:

 replicas: 1

 selector:

   matchLabels:

     app: redis

 template:

   metadata:

     labels:

       app: redis

   spec:

     containers:

     - image: 'redis:latest'

       imagePullPolicy: IfNotPresent

       name: redis

       resources:

         requests:

           cpu: 250m

           memory: 512Mi

 

b.  执行 kubectl create -f redis.yaml 创建。

 

c.  编辑 httpbin 这个deployment kubectl edit deployment httpbin 添加如下字段:

 

apiVersion: apps/v1

kind: Deployment

metadata:

 name: httpbin

spec:

 replicas: 1

 selector:

   matchLabels:

     app: httpbin

 template:

   metadata:

     labels:

       app: httpbin

   spec:

     # 添加亲和性配置

     affinity:

       podAffinity:

        requiredDuringSchedulingIgnoredDuringExecution:

         - labelSelector:

             matchExpressions:

             - key: app

               operator: In

              values:

               - redis

           topologyKey: kubernetes.io/hostname

      # 结束添加

     containers:

     - image: 'docker.io/kennethreitz/httpbin:latest'

       imagePullPolicy: IfNotPresent

       env:

       - name: aliyun_logs_log-stdout

         value: stdout

       name: httpbin

       ports:

       - containerPort: 80

         protocol: TCP

       resources:

         limits:

           cpu: 500m

           memory: 100Mi

         requests:

           cpu: 250m

           memory: 32Mi

 

d.  保存后,验证 redis httpbin pod 在同一个节点:

 image.png

 

10. 实现 httpbin 水平伸缩

 

a.  创建 hpatouch httpbin-hpa.yaml,输入以下内容:

 

apiVersion: autoscaling/v2beta1

kind: HorizontalPodAutoscaler

metadata:

 name: httpbin-hpa

 namespace: default

spec:

 scaleTargetRef:

   apiVersion: apps/v1

   kind: Deployment

   name: httpbin

 minReplicas: 1

 maxReplicas: 5

 metrics:

 - type: Resource

   resource:

     name: cpu

     targetAverageUtilization: 80

 

b.  执行 kubectl create -f httbpin-hpa.yaml,创建HPA, 然后使用,kubectl get hpa 查看 HPA

 image.png

 

c.  使用jmeter进行压测(JMeter下载安装及入门教程,或者可选使用阿里云pts压测)。

jmeter配置参考附件中的配置文件,xiniaotest.jmx

打开jmeter,导入xiniaotest.jmx配置(配置下载地址):

 image.png

 

修改 http 请求,,输入要访问的域名和端口,参考:

 image.png

 

d.  点击“start”按钮运行jmeter 压测:

 image.png

 

e.  再次查看 hpa

 image.png

 

可以看到,通过水平伸缩,副本数已经变成 5 了。但此时 targets 还很大,因为此时达到了 hpa 设定的最大副本数限制。

 

 

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
28天前
|
Kubernetes 网络协议 应用服务中间件
K8S二进制部署实践-1.15.5
K8S二进制部署实践-1.15.5
34 0
|
1月前
|
运维 Kubernetes 监控
构建高效自动化运维体系:基于Docker和Kubernetes的实践指南
【2月更文挑战第30天】 在当今快速发展的云计算时代,传统的IT运维模式已难以满足业务的敏捷性和稳定性需求。本文深入探讨了如何通过Docker容器化技术和Kubernetes集群管理工具构建一个高效、可靠的自动化运维体系。文章首先概述了容器化技术和微服务架构的基本概念,随后详细阐述了基于Docker的应用打包、部署流程,以及Kubernetes在自动化部署、扩展和管理容器化应用中的关键作用。最后,文中通过案例分析,展示了如何在实际场景中利用这些技术优化运维流程,提高系统的整体效率和可靠性。
|
29天前
|
Kubernetes 流计算 Perl
在Rancher K8s上部署Flink时,TaskManager连接不上并不断重启可能是由多种原因导致的
在Rancher K8s上部署Flink时,TaskManager连接不上并不断重启可能是由多种原因导致的
34 7
|
1天前
|
存储 运维 Kubernetes
构建高效自动化运维体系:Ansible与Kubernetes的协同策略
【4月更文挑战第25天】 在当今快速迭代的软件开发过程中,自动化运维已成为提升效率、保证一致性和降低人为错误的关键。本文将探讨如何利用Ansible作为配置管理工具,以及Kubernetes作为容器编排系统,共同构建一个高效、可靠的自动化运维体系。文章首先概述了自动化运维的基本概念及其重要性,随后详细分析了Ansible与Kubernetes在自动化流程中的作用与优势,并通过一系列实践案例,展示了两者如何协同工作以优化部署、扩缩容和灾难恢复等关键运维任务。最后,文中还讨论了在实际应用中可能遇到的挑战及相应的解决策略,为读者提供了一套完整的自动化运维解决方案参考。
|
13天前
|
Kubernetes 监控 Cloud Native
构建高效云原生应用:基于Kubernetes的微服务治理实践
【4月更文挑战第13天】 在当今数字化转型的浪潮中,企业纷纷将目光投向了云原生技术以支持其业务敏捷性和可扩展性。本文深入探讨了利用Kubernetes作为容器编排平台,实现微服务架构的有效治理,旨在为开发者和运维团队提供一套优化策略,以确保云原生应用的高性能和稳定性。通过分析微服务设计原则、Kubernetes的核心组件以及实际案例,本文揭示了在多变的业务需求下,如何确保系统的高可用性、弹性和安全性。
17 4
|
12天前
|
Kubernetes 搜索推荐 Docker
使用 kubeadm 部署 Kubernetes 集群(二)k8s环境安装
使用 kubeadm 部署 Kubernetes 集群(二)k8s环境安装
58 17
|
24天前
|
Kubernetes Ubuntu 应用服务中间件
Ubuntu 22.04 利用kubeadm方式部署Kubernetes(v1.28.2版本)
Ubuntu 22.04 利用kubeadm方式部署Kubernetes(v1.28.2版本)
103 0
|
27天前
|
运维 Kubernetes 持续交付
构建高效自动化运维体系:基于Docker和Kubernetes的最佳实践
在现代云计算环境中,自动化运维成为保障系统稳定性与提升效率的关键。本文深入探讨了如何利用Docker容器化技术和Kubernetes容器编排工具构建一个高效、可靠的自动化运维体系。文中不仅介绍了相关的技术原理,还结合具体案例分析了实施过程中的常见问题及解决方案,为读者提供了一套行之有效的最佳实践指南。
|
27天前
|
人工智能 监控 Serverless
如何基于ACK Serverless快速部署AI推理服务
通过上述步骤,可以在ACK Serverless上快速部署AI推理服务,实现高可用、弹性扩展的服务架构。
20 1
|
1月前
|
Kubernetes Cloud Native Docker
【云原生】kubeadm快速搭建K8s集群Kubernetes1.19.0
Kubernetes 是一个开源平台,用于管理容器化工作负载和服务,提供声明式配置和自动化。源自 Google 的大规模运维经验,它拥有广泛的生态支持。本文档详细介绍了 Kubernetes 集群的搭建过程,包括服务器配置、Docker 和 Kubernetes 组件的安装,以及 Master 和 Node 的部署。此外,还提到了使用 Calico 作为 CNI 网络插件,并提供了集群功能的测试步骤。
219 0

推荐镜像

更多