ACK集群应用部署进阶

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 该实验是“云原生与Kubernates基础课程”的配套实验。涉及ACK集群上ingress、pod,以及日志服务、hpa的应用部署。进行该实验的前提:需熟悉上述理论概念,建议完成配套理论课程学习。

ACK集群应用部署进阶


1. 了解实验架构

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

2. 环境准备

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

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

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

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

3. 创建 deploy 文件

1. 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

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

4. 创建 service 暴露服务

1. 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

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

5. 创建 secret 文件

1、在CloudShell上下载证书,并将证书文件解压

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

unzip 4211665_xiniao.aliyuntest.xyz_nginx.zip

2. 执行命令:

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

4211665_xiniao.aliyuntest.xyz.pem

6. 创建 Ingress 规则

1. 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

2. 创建 Ingress: kubectl create -f Ingress.yaml

7. 在 hosts 里绑定域名和 IP

1. kubectl get ingress httpbin 得到 ingress 的域名和 ip(域名在“HOSTS”字段下, ip 在 “ADDRESS”字段下) 2、编辑客户端(这里可以用个人的windows-pc)的C:\Windows\System32\drivers\etc\hosts 文件,添加一行:

121.196.13.XX xiniao.aliyuntest.xyz

8. 验证网站访问

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

9. 亲和性调度

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

1. 创建 redis 的 deployment。touch 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

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

2. 编辑 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

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


10. 实现 httpbin 水平伸缩

1. 创建 hpa。touch 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

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

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

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

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

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

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

5. 再次查看 hpa:

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

实验链接https://developer.aliyun.com/adc/scenario/47fd1ae45fa347d893834b9a9274de2c

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
10天前
|
运维 Kubernetes 监控
Kubernetes 集群的持续性能优化实践
【4月更文挑战第26天】 在动态且不断增长的云计算环境中,维护高性能的 Kubernetes 集群是一个挑战。本文将探讨一系列实用的策略和工具,旨在帮助运维专家监控、分析和优化 Kubernetes 集群的性能。我们将讨论资源分配的最佳实践,包括 CPU 和内存管理,以及集群规模调整的策略。此外,文中还将介绍延迟和吞吐量的重要性,并提供日志和监控工具的使用技巧,以实现持续改进的目标。
|
2天前
|
运维 监控 Kubernetes
Kubernetes 集群的监控与维护策略
【5月更文挑战第4天】 在当今微服务架构盛行的时代,容器化技术已成为软件开发和部署的标准实践。Kubernetes 作为一个开源的容器编排平台,因其强大的功能和灵活性而广受欢迎。然而,随着 Kubernetes 集群规模的扩大,集群的监控和维护变得日益复杂。本文将探讨 Kubernetes 集群监控的重要性,分析常见的监控工具,并提出一套有效的集群维护策略,以帮助运维人员确保集群的健康运行和高可用性。
25 10
|
3天前
|
存储 运维 监控
Kubernetes 集群的持续监控与优化策略
【5月更文挑战第3天】在微服务架构和容器化部署日益普及的背景下,Kubernetes 已成为众多企业的首选容器编排平台。然而,随着集群规模的增长和业务复杂度的提升,有效的集群监控和性能优化成为确保系统稳定性和提升资源利用率的关键。本文将深入探讨针对 Kubernetes 集群的监控工具选择、监控指标的重要性解读以及基于数据驱动的性能优化实践,为运维人员提供一套系统的持续监控与优化策略。
|
6天前
|
运维 Kubernetes 监控
Kubernetes 集群的监控与维护策略
【4月更文挑战第30天】 在现代云计算环境中,容器化技术已成为应用程序部署和管理的重要手段。其中,Kubernetes 作为一个开源的容器编排平台,以其强大的功能和灵活性受到广泛欢迎。然而,随之而来的是对 Kubernetes 集群监控和维护的复杂性增加。本文将探讨针对 Kubernetes 集群的监控策略和维护技巧,旨在帮助运维人员确保集群的稳定性和高效性。通过分析常见的性能瓶颈、故障诊断方法以及自动化维护工具的应用,我们将提供一套实用的解决方案,以优化 Kubernetes 环境的性能和可靠性。
|
6天前
|
运维 Kubernetes 监控
Kubernetes集群的持续性能优化策略
【4月更文挑战第30天】 在动态且不断扩展的云计算环境中,保持应用性能的稳定性是一个持续的挑战。本文将探讨针对Kubernetes集群的持续性能优化策略,旨在为运维工程师提供一套系统化的性能调优框架。通过分析集群监控数据,我们将讨论如何诊断常见问题、实施有效的资源管理和调度策略,以及采用自动化工具来简化这一过程。
|
6天前
|
Prometheus 监控 Kubernetes
Kubernetes 集群的监控与日志管理策略
【4月更文挑战第30天】 在微服务架构日益普及的当下,容器化技术与编排工具如Kubernetes成为了运维领域的重要话题。有效的监控和日志管理对于保障系统的高可用性和故障快速定位至关重要。本文将探讨在Kubernetes环境中实施监控和日志管理的最佳实践,包括选用合适的工具、部署策略以及如何整合这些工具来提供端到端的可见性。我们将重点讨论Prometheus监控解决方案和EFK(Elasticsearch, Fluentd, Kibana)日志管理堆栈,分析其在Kubernetes集群中的应用,并给出优化建议。
|
7天前
|
Kubernetes 应用服务中间件 nginx
K8S二进制部署详解,一文教会你部署高可用K8S集群(二)
K8S二进制部署详解,一文教会你部署高可用K8S集群(二)
|
7天前
|
Kubernetes 网络安全 数据安全/隐私保护
K8S二进制部署详解,一文教会你部署高可用K8S集群(一)
K8S二进制部署详解,一文教会你部署高可用K8S集群(一)
|
7天前
|
Kubernetes 网络协议 Python
一文教会你,如何通过kubeadm,在生产环境部署K8S高可用集群(二)
一文教会你,如何通过kubeadm,在生产环境部署K8S高可用集群(二)
|
7天前
|
Kubernetes 应用服务中间件 开发工具
一文教会你,如何通过kubeadm,在生产环境部署K8S高可用集群(一)
一文教会你,如何通过kubeadm,在生产环境部署K8S高可用集群(一)

相关产品

  • 容器服务Kubernetes版
  • 推荐镜像

    更多