服务网格Istio入门-详细记录Kubernetes安装Istio并使用
我最新最全的文章都在 南瓜慢说 www.pkslow.com ,文章更新也只在官网,欢迎大家来喝茶~~1 服务网格Istio Istio是开源的Service Mesh实现,一般用于Kubernetes集群容器中的连接、监控和保护。它的核心特性有:
- 流量管理
- 通过简单配置实现服务之间的流量;
- 简化服务级属性如熔断、超时、重试;
- 支持A/B测试、金丝雀发布等。
- 安全
- 通信层面的安全控制;
- 开发人员只需要专注于应用程序开发。
- 可观察性
- Metrics;
- Logging;
- Tracing。
- 平台支持
- Kubernetes;
- 各种云平台。
文章图片
Istio的架构分为数据平台和控制平面,数据平面通过Sidecar代理工作,如下:
文章图片
2 Kubernetes安装istio 2.1 创建服务器 为了避免出现镜像下载慢或无法下载的问题,我们使用阿里云香港的服务器来做示例。为了省钱,我使用的是抢占式实例,8CPU 16GB内存,大概是0.28/小时,用完即删就可以了。
- CPU:8核
- 内存:16GB
- 系统:Ubuntu 20.04 64位
- 价格:0.28/时
- 分配公网IP:是
- 带宽计费模式:按使用流量
- 带宽峰值:最大
ssh root@xx.xxx.xxx.xxx$ free -h
totalusedfreesharedbuff/cacheavailable
Mem:15Gi153Mi15Gi2.0Mi325Mi15Gi
正常连接,可以开始使用了。
2.2 安装Kubernetes 我这里不打算创建一个Kubernetes集群,所以只用了一台机,如果有兴趣的可查看之间的文章《详细记录用kubeadm在Ubuntu上安装Kubernetes集群》。
这里通过minikube来启动kubernetes,我们一步一步来安装吧:
# 必要的更新
$ apt-get update -y
$ apt-get upgrade -y# 下载kubectl命令行工具
$ curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"# 执行权限
$ chmod a+x kubectl
$ mv ./kubectl /usr/local/bin/kubectl# 安装Docker
$ apt-get install -y docker.io# 检测Docker安装情况
$ docker --version
Docker version 20.10.7, build 20.10.7-0ubuntu1~20.04.1# 下载minikube
$ curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64# 执行权限
$ chmod +x minikube
$ mv minikube /usr/local/bin# 安装conntrack依赖
$ apt-get install -y conntrack# 启动kubernetes,需要等待一小段时间,因为要下载镜像,启动kubernetes
$ minikube start --driver=none# 检测启动成功
kubectl version
Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.0", GitCommit:"c2b5237ccd9c0f1d600d3072634ca66cefdf272f", GitTreeState:"clean", BuildDate:"2021-08-04T18:03:20Z", GoVersion:"go1.16.6", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.2", GitCommit:"092fbfbf53427de67cac1e9fa54aaa09a28371d7", GitTreeState:"clean", BuildDate:"2021-06-16T12:53:14Z", GoVersion:"go1.16.5", Compiler:"gc", Platform:"linux/amd64"}
我们看到对应的Pod也起来了:
文章图片
2.3 安装istio 安装完Istio后,我们就可以开始安装Istio了,过程如下:
# 下载安装包:
$ curl -L https://istio.io/downloadIstio | sh -# 添加到Path
$ export PATH="$PATH:/root/istio-1.10.3/bin"# 检测是否可以正常安装
$ istioctl x precheck
? No issues found when checking the cluster. Istio is safe to install or upgrade!# 执行安装
$ istioctl install
安装成功后,会出现如下界面:
文章图片
查看命名空间,会多出一个istio-system:
文章图片
3 使用istio 我们通过安装官方的示例来看如何使用。先要给对应的命令空间加标签,这样istio才会识别,才会注入代理:
$ kubectl label namespace default istio-injection=enabled
接着我们安装对应的示例代码:
kubectl apply -f istio-1.10.3/samples/bookinfo/platform/kube/bookinfo.yaml
可以看到所有应用都起来了,而且每个Pod是有两个Container的:
文章图片
为了更好地监控我们的应用,我们来添加一些组件或插件:
$ kubectl apply -f istio-1.10.3/samples/addons
这样,我们就多了许多新的组件,如Grafana、Jaeger、Kiali、Prometheus等:
文章图片
我们以Kiali以例,暴露服务出来,来看看它给我们带来了什么:
# 添加NodePort
$ kubectl expose deployment kiali --type=NodePort --name=kiali-nodeport -n istio-system# 找到对应的端口
kubectl get service -n istio-system | grep kiali# 在其它外部访问,注意IP为服务器的公网IP
$ curl 47.242.151.110:31015
Found.
打开:http://47.242.151.110:31015/k... ,不要用Chrome打开,对于非https的网页,Chrome会打开失败。我用Safari可以正常打开:
文章图片
我们来模拟一些请求:
kubectl get svc
NAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGE
detailsClusterIP10.101.63.999080/TCP77m
kubernetesClusterIP10.96.0.1443/TCP132m
productpageClusterIP10.110.126.609080/TCP77m
ratingsClusterIP10.104.252.1239080/TCP77m
reviewsClusterIP10.104.41.1049080/TCP77m# 循环发送请求
for i in $(seq 1 100);
do curl -s -o /dev/null "http://10.101.63.99:9080";
done
for i in $(seq 1 100);
do curl -s -o /dev/null "http://10.110.126.60:9080";
done
for i in $(seq 1 100);
do curl -s -o /dev/null "http://10.104.252.123:9080";
done
for i in $(seq 1 100);
do curl -s -o /dev/null "http://10.104.41.104:9080";
done
查看Graph,就可以看到一些请求的线,红色是失败的,绿色是健康正常的:
文章图片
当然还有其它更多的功能,这里就不一一讲解了。
4 总结 【服务网格Istio入门-详细记录Kubernetes安装Istio并使用】这篇为入门体验,以后更多细节我们再一一道来吧。
推荐阅读
- 社保代缴公司服务费包含哪些
- 私有化轻量级持续集成部署方案--03-部署web服务(下)
- 探索免费开源服务器tomcat的魅力
- [源码解析]|[源码解析] NVIDIA HugeCTR,GPU版本参数服务器---(3)
- Dubbo引用服务
- 第六章|第六章 Sleuth--链路追踪
- 云原生微服务技术趋势解读
- K8S|K8S 生态周报| Istio 即将发布重大安全更新,多个版本受影响
- Pytorch学习|sklearn-SVM 模型保存、交叉验证与网格搜索
- mac|mac 链接linux服务器 如何在Mac上连接服务器