istio 1.8.2安装及可观测性配置

istio 1.8.2刚刚发布(4天前,2021年1月14日),今晚迫不及待的作了下安装测试,和1.7版本在安装上没太大差别。这里作一个安装记录。应该是中文全网第一份简单的安装配置文档。
假定你没有K8s集群,这里用k3s在一个虚拟机上测试的。

一,k3s简介

bbb.png

K3s,这是一个Kubernetes的发行版,它针对边缘进行了高度优化。虽然K3s是Kubernetes的简化版、迷你版,但API的一致性和功能并没有受到影响。从kubectl到Helm再到Kubernetes,几乎所有的云原生生态系统的工具都能与K3s无缝对接。实际上,K3s是一个经过CNCF认证的、符合要求的Kubernetes发行版,可以在生产环境中部署。几乎所有运行完整的Kubernetes集群的工作负载都能保证在K3s集群上工作。
K3s的魅力在于它的简单性。作为一个单一的二进制文件(约100MB)进行打包和部署,你只需几秒钟就可以得到一个完全成熟的Kubernetes集群。安装体验就像在集群的每个节点上运行一个脚本一样简单。
K3s二进制文件是一个自给自足的封装实体,它几乎运行了Kubernetes集群的所有组件,包括API server、scheduler和controller。默认情况下,每个K3s的安装都包括控制平面、kubelet和containerd运行时,这些已经足以运行Kubernetes工作负载。当然,也可以添加只运行kubelet agent和containerd运行时的专用worker节点,来调度和管理pod生命周期。
与传统的Kubernetes集群相比,K3s中的master节点和worker节点没有明显的区别。可以在任何节点上调度和管理Pod,不管它们扮演的是什么角色。所以,master节点和worker节点的命名方式不适用于k3s集群。
在k3s集群中,将运行控制平面组件与kubelet的节点称为server,而只运行kubelet的节点称为agent。server和agent都有容器运行时和一个kubeproxy,管理整个集群的tunnel和网络流量。


ccc.png

二,k3s下载

1,文档

https://rancher.com/docs/k3s/latest/en/

2,下载

http://mirror.cnrancher.com/
找最新版,1.20以上版本,主要包括3个文件。

  • k3s:k3s的可执行文件

  • k3s-airgap-images-amd64.tar:离线安装镜像包

  • k3s-install.sh:安装脚本(这个脚本在上一级目录)

三,k3s安装

1, 将k3s拷贝到可执行目录

cp k3s /usr/local/bin/

2,将离线包导入本地docker

docker load -i k3s-airgap-images-amd64.tar

3,设置环境变量

export INSTALL_K3S_SKIP_DOWNLOAD=true

export INSTALL_K3S_EXEC="--docker --bind-address=192.168.1.214 \
    kube-apiserver-arg service-node-port-range=30000-50000 \
    --no-deploy traefik \
    --no-deploy servicelb \
    --no-deploy local-storage \
    --no-deploy metrics-server  \
    --write-kubeconfig ~/.kube/config \
    --write-kubeconfig-mode 666"

(使用docker服务,无须部署servicelb, traefik, local-storage, metrics-server)

4,运行安装脚本

sh k3s-install.sh
[INFO]  Skipping k3s download and verify
[INFO]  Skipping installation of SELinux RPM
[INFO]  Creating /usr/local/bin/kubectl symlink to k3s
[INFO]  Skipping /usr/local/bin/crictl symlink to k3s, command exists in PATH at /usr/bin/crictl
[INFO]  Skipping /usr/local/bin/ctr symlink to k3s, command exists in PATH at /usr/bin/ctr
[INFO]  Creating killall script /usr/local/bin/k3s-killall.sh
[INFO]  Creating uninstall script /usr/local/bin/k3s-uninstall.sh
[INFO]  env: Creating environment file /etc/systemd/system/k3s.service.env
[INFO]  systemd: Creating service file /etc/systemd/system/k3s.service
[INFO]  systemd: Enabling k3s unit
[INFO]  systemd: Starting k3s

就这么简单,一个轻量的k8s集群安装完成

四,istio简介

dddd.png

Istio 是一个由谷歌、IBM 与 Lyft 共同开发的开源项目,旨在提供一种统一化的微服务连接、安全保障、管理与监控方式。Istio 项目能够为微服务架构提供流量管理机制,同时亦为其它增值功能(包括安全性、监控、路由、连接管理与策略等)创造了基础。这款软件利用久经考验的 Lyft Envoy 代理进行构建,可在无需对应用程序代码作出任何发动的前提下实现可视性与控制能力。
当整体应用程序向分布式微服务架构过渡时,Istio解决了开发人员和运营商面临的挑战。
服务网格术语用于描述组成此类应用程序的微服务网络及其之间的交互。随着服务网格的大小和复杂性的增长,它变得越来越难以理解和管理。 它的要求可以包括发现,负载平衡,故障恢复,指标和监控。 服务网格通常还具有更复杂的操作要求,例如A/B测试,金丝雀,网速限制,访问控制和端到端的身份验证。
Istio提供了整个服务网格上的行为洞察力和操作控制,从而提供了完整的解决方案来满足微服务应用程序的各种需求。
Istio可以轻松在已部署服务网络上创建带有负载平衡,服务到服务的身份验证,监控等功能,并且服务代码中的代码无需变动(或变动很少)。通过在整个环境中部署一个特殊的sidecar代理来拦截微服务之间的所有网络通信,然后使用其平台控制功能配置和管理Istio,包括:
• 自动为HTTP,gRPC,WebSocket和TCP流量负载平衡。
• 通过丰富的路由规则,重试,故障转移和故障注入对流量行为进行细粒度控制。
• 可插拔的策略层和配置API,支持访问控制,速率限制和配额。
• 集群内所有流量的自动度量,日志和跟踪,包括集群的入口和出口。
• 通过强大的基于身份的身份验证和授权,在集群中进行安全的服务之间通信。
Istio专为可扩展性而设计,可满足多种部署需求。
github项目地址:
https://github.com/istio/istio

五,istio下载及安装

1,下载istio-1.8.2-linux-amd64.tar.gz,并解压,然后进入解压后的istio-1.8.2目录
2,将bin/目录下的istioctl文件,cp到可执行的PATH路径,就可以使用istioctl命令了。
3,直接使用isctio install命令,控制力较弱,这里先使用istio manifest命令生成yaml,再修改yaml之后,应用到k8s集群

istioctl manifest generate --set profile=demo --set .values.global.imagePullPolicy=IfNotPresent > istio-demo.yaml

4,将istio-ingressgateway的service的type由LoadBalancer更改为NodePort。(因为没有云厂商支持LB功能,改为NodePort方便私有云部署访问。)

六, 将yaml文件应用到集群

1, 建立namespace

kubectl create ns istio-system

2, 应用yaml到k8s(k3s)集群

kubectl apply -f istio-demo.yaml
如果报错,就多运行两次这个命令,其中有警告,可以不用理会。
输出类似如下:


Warning: apiextensions.k8s.io/v1beta1 CustomResourceDefinition is deprecated in v1.16+, unavailable in v1.22+; use apiextensions.k8s.io/v1 CustomResourceDefinition
customresourcedefinition.apiextensions.k8s.io/authorizationpolicies.security.istio.io unchanged
customresourcedefinition.apiextensions.k8s.io/destinationrules.networking.istio.io unchanged
customresourcedefinition.apiextensions.k8s.io/envoyfilters.networking.istio.io unchanged
customresourcedefinition.apiextensions.k8s.io/gateways.networking.istio.io unchanged
customresourcedefinition.apiextensions.k8s.io/istiooperators.install.istio.io unchanged
customresourcedefinition.apiextensions.k8s.io/peerauthentications.security.istio.io unchanged
customresourcedefinition.apiextensions.k8s.io/requestauthentications.security.istio.io unchanged
customresourcedefinition.apiextensions.k8s.io/serviceentries.networking.istio.io unchanged
customresourcedefinition.apiextensions.k8s.io/sidecars.networking.istio.io unchanged
customresourcedefinition.apiextensions.k8s.io/virtualservices.networking.istio.io unchanged
customresourcedefinition.apiextensions.k8s.io/workloadentries.networking.istio.io unchanged
customresourcedefinition.apiextensions.k8s.io/workloadgroups.networking.istio.io unchanged
serviceaccount/istio-egressgateway-service-account unchanged
serviceaccount/istio-ingressgateway-service-account unchanged
serviceaccount/istio-reader-service-account unchanged
serviceaccount/istiod-service-account unchanged
clusterrole.rbac.authorization.k8s.io/istio-reader-istio-system unchanged
clusterrole.rbac.authorization.k8s.io/istiod-istio-system unchanged
clusterrolebinding.rbac.authorization.k8s.io/istio-reader-istio-system unchanged
clusterrolebinding.rbac.authorization.k8s.io/istiod-istio-system unchanged
Warning: admissionregistration.k8s.io/v1beta1 ValidatingWebhookConfiguration is deprecated in v1.16+, unavailable in v1.22+; use admissionregistration.k8s.io/v1 ValidatingWebhookConfiguration
validatingwebhookconfiguration.admissionregistration.k8s.io/istiod-istio-system configured
envoyfilter.networking.istio.io/metadata-exchange-1.6 unchanged
envoyfilter.networking.istio.io/metadata-exchange-1.7 unchanged
envoyfilter.networking.istio.io/metadata-exchange-1.8 unchanged
envoyfilter.networking.istio.io/stats-filter-1.6 unchanged
envoyfilter.networking.istio.io/stats-filter-1.7 unchanged
envoyfilter.networking.istio.io/stats-filter-1.8 unchanged
envoyfilter.networking.istio.io/tcp-metadata-exchange-1.6 unchanged
envoyfilter.networking.istio.io/tcp-metadata-exchange-1.7 unchanged
envoyfilter.networking.istio.io/tcp-metadata-exchange-1.8 unchanged
envoyfilter.networking.istio.io/tcp-stats-filter-1.6 unchanged
envoyfilter.networking.istio.io/tcp-stats-filter-1.7 unchanged
envoyfilter.networking.istio.io/tcp-stats-filter-1.8 unchanged
configmap/istio unchanged
configmap/istio-sidecar-injector unchanged
Warning: admissionregistration.k8s.io/v1beta1 MutatingWebhookConfiguration is deprecated in v1.16+, unavailable in v1.22+; use admissionregistration.k8s.io/v1 MutatingWebhookConfiguration
mutatingwebhookconfiguration.admissionregistration.k8s.io/istio-sidecar-injector configured
deployment.apps/istio-egressgateway configured
deployment.apps/istio-ingressgateway configured
deployment.apps/istiod configured
poddisruptionbudget.policy/istio-egressgateway unchanged
poddisruptionbudget.policy/istio-ingressgateway unchanged
poddisruptionbudget.policy/istiod unchanged
role.rbac.authorization.k8s.io/istio-egressgateway-sds unchanged
role.rbac.authorization.k8s.io/istio-ingressgateway-sds unchanged
role.rbac.authorization.k8s.io/istiod-istio-system unchanged
rolebinding.rbac.authorization.k8s.io/istio-egressgateway-sds unchanged
rolebinding.rbac.authorization.k8s.io/istio-ingressgateway-sds unchanged
rolebinding.rbac.authorization.k8s.io/istiod-istio-system unchanged
service/istio-egressgateway unchanged
service/istio-ingressgateway unchanged
service/istiod unchanged

3, 静候岁月

kubectl get pod -n istio-system
NAME                                    READY   STATUS    RESTARTS   AGE
istiod-6f77877456-4d9rp                 1/1     Running   0          5h50m
istio-egressgateway-5dbd54dc69-99g9d    1/1     Running   0          5h50m
istio-ingressgateway-7586bbb5f8-bmpkh   1/1     Running   0          5h50m

七, 应用bookinfo示例

1, 启动default命名空间的自动sidecar注入功能

kubectl label namespace default istio-injection=enabled

2, 应用bookinfo到k8s集群

kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml

3, 应用网关

kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml

4, 应用最宽松路由

kubectl apply -f samples/bookinfo/networking/destination-rule-all.yaml

5, 查询pod状态及访问端口

kubectl get pod
NAME                              READY   STATUS    RESTARTS   AGE
ratings-v1-7d99676f7f-vr8c4       2/2     Running   0          5h28m
details-v1-79c697d759-9zkll       2/2     Running   0          5h28m
reviews-v2-6c5bf657cf-mcrxs       2/2     Running   0          5h28m
reviews-v3-5f7b9f4f77-54lgw       2/2     Running   0          5h28m
reviews-v1-987d495c-pj87j         2/2     Running   0          5h28m
productpage-v1-65576bb7bf-qv4c7   2/2     Running   0          5h28m
kubectl get svc -n istio-system
NAME                   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                                                                      AGE
istio-egressgateway    ClusterIP   10.43.27.92     <none>        80/TCP,443/TCP,15443/TCP                                                     33m
istio-ingressgateway   NodePort    10.43.18.171    <none>        15021:31834/TCP,80:31226/TCP,443:32433/TCP,31400:30383/TCP,15443:30884/TCP   33m
istiod                 ClusterIP   10.43.185.25    <none>        15010/TCP,15012/TCP,443/TCP,15014/TCP                                        33m
grafana                NodePort    10.43.59.163    <none>        3000:32622/TCP                                                               24m
tracing                NodePort    10.43.22.172    <none>        80:31450/TCP                                                                 23m
zipkin                 ClusterIP   10.43.121.207   <none>        9411/TCP                                                                     23m
jaeger-collector       NodePort    10.43.253.67    <none>        14268:31906/TCP,14250:31621/TCP                                              23m
kiali                  NodePort    10.43.225.156   <none>        20001:32579/TCP,9090:31058/TCP                                               23m
prometheus             ClusterIP   10.43.147.39    <none>        9090/TCP                                                                     23m

http://192.168.1.214:31226/productpage
依旧是熟悉的配方和味道~~

2021-01-18 22_15_16-Simple Bookstore App.png

八,可观测性配置

samples/addons/目录下,包括了grafana.yaml,jaeger.yaml,kiali.yaml,prometheus.yaml这4个文件,用来在istio中实现可观测性的工具(extras子目录里,是实现prometheus的operator安装和zipkin的定制,暂不理会)。手工更改4个yaml文件的内容,将service的type更改为NodePort。
然后,将这些文件应用到集群。
kubectl apply -f samples/addons/
稍后,看到这些pod和svc都运行正常,即完成。

kubectl get pod -n istio-system
NAME                                    READY   STATUS    RESTARTS   AGE
istiod-5c5945ff68-rghn2                 1/1     Running   1          45m
istio-ingressgateway-68c86b9fc8-97sj5   1/1     Running   1          45m
istio-egressgateway-64d976b9b5-v29fn    1/1     Running   0          45m
jaeger-7f78b6fb65-pfgzb                 1/1     Running   0          35m
grafana-784c89f4cf-lrbc8                1/1     Running   0          35m
kiali-7476977cf9-2p6fr                  1/1     Running   0          35m
prometheus-7bfddb8dbf-knbmt             2/2     Running   0          35m

又是熟悉的kiali
http://192.168.1.214:32579/kiali/console/graph/namespaces/

2021-01-18 22_19_54-Istio 1.8.1离线安装及基本配置文档.docx - Word.png

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容