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搭建和管理企业级网站应用
相关文章
|
16天前
|
存储 Kubernetes 容器
K8S部署nexus
该配置文件定义了Nexus 3的Kubernetes部署,包括PersistentVolumeClaim、Deployment和服务。PVC请求20Gi存储,使用NFS存储类。Deployment配置了一个Nexus 3容器,内存限制为6G,CPU为1000m,并挂载数据卷。Service类型为NodePort,通过30520端口对外提供服务。所有资源位于`nexus`命名空间中。
|
2月前
|
Kubernetes Cloud Native 微服务
云原生入门与实践:Kubernetes的简易部署
云原生技术正改变着现代应用的开发和部署方式。本文将引导你了解云原生的基础概念,并重点介绍如何使用Kubernetes进行容器编排。我们将通过一个简易的示例来展示如何快速启动一个Kubernetes集群,并在其上运行一个简单的应用。无论你是云原生新手还是希望扩展现有知识,本文都将为你提供实用的信息和启发性的见解。
|
2月前
|
存储 Kubernetes Devops
Kubernetes集群管理和服务部署实战
Kubernetes集群管理和服务部署实战
62 0
|
3月前
|
NoSQL 关系型数据库 Redis
高可用和性能:基于ACK部署Dify的最佳实践
本文介绍了基于阿里云容器服务ACK,部署高可用、可伸缩且具备高SLA的生产可用的Dify服务的详细解决方案。
|
11天前
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。
|
8天前
|
Kubernetes Ubuntu 网络安全
ubuntu使用kubeadm搭建k8s集群
通过以上步骤,您可以在 Ubuntu 系统上使用 kubeadm 成功搭建一个 Kubernetes 集群。本文详细介绍了从环境准备、安装 Kubernetes 组件、初始化集群到管理和使用集群的完整过程,希望对您有所帮助。在实际应用中,您可以根据具体需求调整配置,进一步优化集群性能和安全性。
44 12
|
13天前
|
Kubernetes 网络协议 应用服务中间件
Kubernetes Ingress:灵活的集群外部网络访问的利器
《Kubernetes Ingress:集群外部访问的利器-打造灵活的集群网络》介绍了如何通过Ingress实现Kubernetes集群的外部访问。前提条件是已拥有Kubernetes集群并安装了kubectl工具。文章详细讲解了Ingress的基本组成(Ingress Controller和资源对象),选择合适的版本,以及具体的安装步骤,如下载配置文件、部署Nginx Ingress Controller等。此外,还提供了常见问题的解决方案,例如镜像下载失败的应对措施。最后,通过部署示例应用展示了Ingress的实际使用方法。
29 2
|
25天前
|
存储 Kubernetes 关系型数据库
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
本文源自2024云栖大会苏雅诗的演讲,探讨了K8s集群业务为何需要灾备及其重要性。文中强调了集群与业务高可用配置对稳定性的重要性,并指出人为误操作等风险,建议实施周期性和特定情况下的灾备措施。针对容器化业务,提出了灾备的新特性与需求,包括工作负载为核心、云资源信息的备份,以及有状态应用的数据保护。介绍了ACK推出的备份中心解决方案,支持命名空间、标签、资源类型等维度的备份,并具备存储卷数据保护功能,能够满足GitOps流程企业的特定需求。此外,还详细描述了备份中心的使用流程、控制台展示、灾备难点及解决方案等内容,展示了备份中心如何有效应对K8s集群资源和存储卷数据的灾备挑战。
|
2月前
|
Kubernetes 监控 Cloud Native
Kubernetes集群的高可用性与伸缩性实践
Kubernetes集群的高可用性与伸缩性实践
79 1
|
3月前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景

热门文章

最新文章