Kubernetes 实战教学,手把手教您在 K8s 集群上部署 Istio Mesh(二)

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
可观测监控 Prometheus 版,每月50GB免费额度
简介: 在上一篇文章中,我们已经完成了安装 Istio 1.0.0 版本的所有准备。接下来,我将为大家带来 Istio 1.0.0 版本完整的安装过程,并在 Istio 1.0.0 中运行 BookInfo 演示示例。 ​

screenshot

出品丨Docker公司(ID:docker-cn)
编译丨小东
每周一、三、五,与您不见不散!


在上一篇文章《Kubernetes 实战教学,手把手教您在 K8s 集群上部署 Istio Mesh(一)》中,我们已经完成了安装 Istio 1.0.0 版本的所有准备。接下来,我将为大家带来 Istio 1.0.0 版本完整的安装过程,并在 Istio 1.0.0 中运行 BookInfo 演示示例。


安装 Istio 1.0.0

Istio 部署在单独的 Kubernetes 命名空间 istio-system 中。我们稍后会进行验证。到目前为止,您可以将以下内容复制到名为 install_istio.sh 的文件中并保存。 您可以使其可执行并运行它来安装 Istio 和相关工具。

#!/bin/bash
curl -L https://git.io/getLatestIstio | sh –
export PATH=$PWD/bin:$PATH
cd istio-1.0.0
kubectl apply -f install/kubernetes/helm/istio/templates/crds.yaml
kubectl apply -f install/kubernetes/istio-demo.yaml
kubectl get svc -n istio-system
kubectl get pods -n istio-system

您应该能够看到屏幕充斥着如下图所示的输出。

screenshot

如上所示,它将默认启用 Prometheus、ServiceGraph、Jaeger、Grafana 和 Zipkin。

请注意:在执行此脚本时,可能会出现以下错误消息“unable to recognize “install/kubernetes/istio-demo.yaml”: no matches for admissionregistration.k8s.io/, Kind=MutatingWebhookConfiguration”


错误消息是可预期的

screenshot

一旦命令完全执行,您应该能够看到在页面顶部中心显示的一长串端口。


验证服务

screenshot


公开的服务

要公开 Prometheus、Grafana 和 Servicegraph 服务,您需要删除现有服务,然后使用 NodePort 而不是 ClusterIP,以便使用实例页面顶部显示的端口访问服务,如下所示:

screenshot

您应该能够通过单击“30004”端口访问Grafana页面,通过单击“30003”端口访问Prometheus 页面。

screenshot

screenshot

您可以通过选择必要的选项来检查 Prometheus 指标,如下所示:

screenshot

在 Grafana 页面下,您可以为 Prometheus 添加“数据源”,并确保仪表板已经启动并运行:

screenshot

恭喜!您已经在 Kubernetes 群集上完成了 Istio 的安装。K8s playground 已安装了下列服务

  • Istio 控制器及相关 RBAC 规则;
  • Istio 定制资源定义;
  • 用于监控的 Prometheus 和 Grafana;
  • 用于分布式跟踪的 Jeager;
  • Istio Sidecar Injector(我们将在下一节介绍);

安装 Istioctl

screenshot

Istioctl 是 Istio 的配置命令行实用程序。它有助于在 Istio 系统中创建、列出、修改和删除配置资源。


部署 BookInfo 示例应用程序

现在安装并验证了 Istio,您可以部署安装附带的 BookInfo 示例应用程序。这是一个简单的模拟书店应用程序,由四个服务组成,提供 Web 产品页面、书籍详细信息、评论(具有多个版本的评论服务)和评级,所有这些都要使用 Istio 进行管理。


部署 BookInfo 服务

[node1 istio-1.0.0]$ kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
service “details” created
deployment “details-v1” created
service “ratings” created
deployment “ratings-v1” created
service “reviews” created
deployment “reviews-v1” created
deployment “reviews-v2” created
deployment “reviews-v3” created
service “productpage” created
deployment “productpage-v1” created
[node1 istio-1.0.0]$ istioctl create -f samples/bookinfo/networking/bookinfo-gateway.yaml
Created config gateway/default/bookinfo-gateway at revision 13436
Created config virtual-service/default/bookinfo at revision 13438

验证 BookInfo 应用程序

[node1 istio-1.0.0]$ kubectl get services
NAME         TYPE       CLUSTER-IP      EXTERNAL-IP  PORT(S)   AGE
details      ClusterIP  10.97.29.111           9080/TCP  1m
kubernetes   ClusterIP  10.96.0.1              443/TCP   1h
productpage  ClusterIP  10.106.144.171         9080/TCP  1m
ratings      ClusterIP  10.111.164.221         9080/TCP  1m
reviews      ClusterIP  10.99.195.21           9080/TCP  1m
[node1 istio-1.0.0]$ curl 10.106.144.171:9080
 
<!DOCTYPE html>
<html>
<head>
<title>Simple Bookstore App</title>
<meta charset=”utf-8″>
<meta http-equiv=”X-UA-Compatible” content=”IE=edge”>
<meta name=”viewport” content=”width=device-width, initial-scale=1″>
 
<!– Latest compiled and minified CSS –>
<link rel=”stylesheet” href=”https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css”>

<!– Optional theme –>
<link rel=”stylesheet” href=”https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap-theme.min.css”>

</head>
<body>
 
<p><h3>Hello! This is a simple bookstore application consisting of three services as shown below</h3></p>

<table class=”table table-condensed table-bordered table-hover”><tr><th>endpoint</th><td>details</td></tr><tr><th>name</th><td>http://details:9080</td></tr><tr><th>children</th><td><table class=”table table-condensed table-bordered table-hover”><tr><th>endpoint</th><th>name</th><th>children</th></tr><tr><td>details</td><td>http://details:9080</td><td></td></tr><tr><td>reviews</td><td>http://reviews:9080</td><td><table class=”table table-condensedtable-bordered table-hover”><tr><th>endpoint</th><th>name</th><th>children</th></tr><tr><td>ratings</td><td>http://ratings:9080</td><td></td></tr></table></td></tr></table></td></tr></table>

<p><h4>Click on one of the links below to auto generate a request to the backend as a real user or a tester

</h4></p>
<p><a href=”/productpage?u=normal”>Normal user</a></p>

<p><a href=”/productpage?u=test”>Test user</a></p>
 
<!– Latest compiled and minified JavaScript –>
<script src=”https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js”></script>
 
<!– Latest compiled and minified JavaScript –>
<script src=”https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js”></script>
 
</body>
</html>

通过 Web URL 访问它

[node1 istio-1.0.0]$ kubectl get services
NAME         TYPE       CLUSTER-IP      EXTERNAL-IP  PORT(S)   AGE
details      ClusterIP  10.97.29.111           9080/TCP  2m
kubernetes   ClusterIP  10.96.0.1              443/TCP   1h
productpage  ClusterIP  10.106.144.171         9080/TCP  2m
ratings      ClusterIP  10.111.164.221         9080/TCP  2m
reviews      ClusterIP  10.99.195.21           9080/TCP  2m
[node1 istio-1.0.0]$ kubectl delete svc productpage
service “productpage” deleted
[node1 istio-1.0.0]$ kubectl create service nodeport productpage –tcp=9080 –node-port=30010
service “productpage” created

您现在应该可以使用 BookInfo 示例了,如下所示:

screenshot


在下一篇 Kubernetes 实战教学系列文章中,我将展示如何在 Play with Kubernetes 平台上调出 Kubernetes Dashboard。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
6天前
|
存储 Kubernetes 对象存储
部署DeepSeek但GPU不足,ACK One注册集群助力解决IDC GPU资源不足
借助阿里云ACK One注册集群,充分利用阿里云强大ACS GPU算力,实现DeepSeek推理模型高效部署。
|
11天前
|
存储 Kubernetes 测试技术
企业级LLM推理部署新范式:基于ACK的DeepSeek蒸馏模型生产环境落地指南
本教程演示如何在ACK中使用vLLM框架快速部署DeepSeek R1模型推理服务。
|
12天前
|
存储 人工智能 弹性计算
NVIDIA NIM on ACK:优化生成式AI模型的部署与管理
本文结合NVIDIA NIM和阿里云容器服务,提出了基于ACK的完整服务化管理方案,用于优化生成式AI模型的部署和管理。
|
1天前
|
Kubernetes 持续交付 数据库
阿里云ACK+GitLab企业级部署实战教程
GitLab 是一个功能强大的基于 Web 的 DevOps 生命周期平台,整合了源代码管理、持续集成/持续部署(CI/CD)、项目管理等多种工具。其一体化设计使得开发团队能够在同一平台上进行代码协作、自动化构建与部署及全面的项目监控,极大提升了开发效率和项目透明度。 GitLab 的优势在于其作为一体化平台减少了工具切换,高度可定制以满足不同项目需求,并拥有活跃的开源社区和企业级功能,如高级权限管理和专业的技术支持。借助这些优势,GitLab 成为许多开发团队首选的 DevOps 工具,实现从代码编写到生产部署的全流程自动化和优化。
|
6天前
|
人工智能 Kubernetes 异构计算
大道至简-基于ACK的Deepseek满血版分布式推理部署实战
本教程演示如何在ACK中多机分布式部署DeepSeek R1满血版。
|
4月前
|
Kubernetes 持续交付 Docker
利用 Docker 和 Kubernetes 实现微服务部署
【10月更文挑战第2天】利用 Docker 和 Kubernetes 实现微服务部署
|
2月前
|
存储 Kubernetes 容器
K8S部署nexus
该配置文件定义了Nexus 3的Kubernetes部署,包括PersistentVolumeClaim、Deployment和服务。PVC请求20Gi存储,使用NFS存储类。Deployment配置了一个Nexus 3容器,内存限制为6G,CPU为1000m,并挂载数据卷。Service类型为NodePort,通过30520端口对外提供服务。所有资源位于`nexus`命名空间中。
|
4月前
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
309 62
|
4月前
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
180 60
|
3月前
|
Kubernetes Cloud Native 微服务
云原生入门与实践:Kubernetes的简易部署
云原生技术正改变着现代应用的开发和部署方式。本文将引导你了解云原生的基础概念,并重点介绍如何使用Kubernetes进行容器编排。我们将通过一个简易的示例来展示如何快速启动一个Kubernetes集群,并在其上运行一个简单的应用。无论你是云原生新手还是希望扩展现有知识,本文都将为你提供实用的信息和启发性的见解。

热门文章

最新文章