zoukankan      html  css  js  c++  java
  • 云原生

    作者:justmine
    头条号:大数据与云原生
    微信公众号:大数据与云原生
    创作不易,在满足创作共用版权协议的基础上可以转载,但请以超链接形式注明出处。
    为了方便大家阅读,可以关注头条号或微信公众号,后续所有的文章将在移动端首发,想学习更多云原生知识,请关注我。

    前言

    随着微服务架构的流行,服务网格技术获得了业界的广泛关注,作为实现云原生的重要积木,各大厂商也纷纷开始布局,Amazon在2019年4月份推出了App Mesh;Google、IBM、Lyft联合开发了Istio。

    Istio作为下一代服务网格的整体解决方案,得到了业界的普遍认可,站在kubernetes巨人的肩膀上,极大地提高了分布式应用的研发和运维效率。

    2020是云原生普及的一年,如何部署、使用、运维Istio又是必须要学习知识,本篇希望带给大家一个完美的入门体验。

    一、安装环境

    • 本地环境:Linux ubuntu
    • kubernetes版本:1.15.2

    二、准备工作

    1、下载最新版本

    从Istio最新发布列表下载最新发布版本1.4.3压缩包,及其命令行工具(Istioctl),如下:

    # 创建工作目录
    mkdir -p /root/service-mesh/istio && cd /root/service-mesh/istio;
    # 下载
    wget https://github.com/istio/istio/releases/download/1.4.3/istioctl-1.4.3-linux.tar.gz;
    ## istio也可以演示的时候在下载
    wget https://github.com/istio/istio/releases/download/1.4.3/istio-1.4.3-linux.tar.gz;
    

    话外音:请下载相同版本的Istioctl和Istio,避免无法预料的问题。

    2、安装命令行工具

    tar -vxzf istioctl-1.4.3-linux.tar.gz && cp istioctl /usr/local/bin;
    

    三、安装Istio

    为了满足不同的安装需求,Istio内置了一系列的安装配置文件,生产环境建议以default安装配置文件为起点。

    话外音:可以使用istioctl profile list命令查看内置配置文件列表,然后使用istioctl profile dump [配置文件名称]打印配置文件内容。

    # 安装 default
    # istioctl manifest apply --set profile=default
    - Applying manifest for component Base...
    ✔ Finished applying manifest for component Base.
    - Applying manifest for component Galley...
    - Applying manifest for component IngressGateway...
    - Applying manifest for component Citadel...
    - Applying manifest for component Kiali...
    - Applying manifest for component Prometheus...
    - Applying manifest for component Policy...
    - Applying manifest for component Pilot...
    - Applying manifest for component Injector...
    - Applying manifest for component Telemetry...
    ✔ Finished applying manifest for component IngressGateway.
    ✔ Finished applying manifest for component Citadel.
    ✔ Finished applying manifest for component Prometheus.
    ✔ Finished applying manifest for component Policy.
    ✔ Finished applying manifest for component Galley.
    ✔ Finished applying manifest for component Injector.
    ✔ Finished applying manifest for component Pilot.
    - Finished applying manifest for component Kiali.
    ✔ Finished applying manifest for component Telemetry.
    # 验证
    # kubectl get pod -n istio-system
    NAME                                      READY   STATUS    RESTARTS   AGE
    istio-citadel-7c959c8d59-hssf4            1/1     Running   0          100m
    istio-galley-5479df66b5-tr5hf             2/2     Running   0          100m
    istio-ingressgateway-7c95796d59-s5sc2     1/1     Running   0          100m
    istio-pilot-656556b575-7zzht              2/2     Running   0          100m
    istio-policy-5b9b9f5cd9-788rg             2/2     Running   6          100m
    istio-sidecar-injector-7dbcc9fc89-554vg   1/1     Running   0          100m
    istio-telemetry-7d5b5947db-tgbmg          2/2     Running   6          100m
    prometheus-685585888b-5f77l               1/1     Running   0          100m
    

    等待几分钟,当所有的组件状态都为Running时,表示安装成功。

    四、安装kiali

    通过将基础设施转移到Istio,使得应用开发者无需重复建设基础设施,只需专注于业务逻辑。Istio负责管理整个应用服务集合,这些服务集合组成的网络拓扑就叫服务网格,Istio提供了kiali来可视化整个服务网格。

    1、创建登录凭证

    # KIALI_USERNAME=$(read -p 'Kiali Username: ' uval && echo -n $uval | base64);
    Kiali Username: 用户名
    # KIALI_PASSPHRASE=$(read -sp 'Kiali Passphrase: ' pval && echo -n $pval | base64);
    Kiali Passphrase: 密码
    # cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: Secret
    metadata:
      name: kiali
      namespace: istio-system
      labels:
        app: kiali
    type: Opaque
    data:
      username: $KIALI_USERNAME
      passphrase: $KIALI_PASSPHRASE
    EOF
    

    2、使用Istioctl安装

    # istioctl manifest apply --set values.kiali.enabled=true
    [...]
    ✔ Finished applying manifest for component Kiali.
    [...]
    

    3、联网

    使用NodePort方式暴露kiali服务到互联网,如下:

    话外音:应该根据k8s环境选择不同联网方式,生产环境建议暴露为LoadLalancer

    # kubectl -n istio-system edit svc kiali
    [...]
    spec:
      ports:
      - name: http-kiali
        [...]
        nodePort: 9527
      type: NodePort
    [...]
    

    4、访问

    浏览器键入地址http://[ip]:9527/kiali,键入上面创建的凭证,登录成功,如下:

    五、演示

    本节将部署一个多语言异构化的微服务示例(Bookinfo),让大家对服务网格有一个清晰的认识。

    Bookinfo - 在线图书商店

    • productpage微服务

      调用detailsreviews微服务,提供图书单品完整信息。

    • details微服务

      提供图书详细信息。

    • reviews微服务

      提供图书评论信息。

      一共有三个版本。v1版本不会调用ratings微服务;v2版本调用ratings服务,并将每个等级显示为1到5个黑色星号;v3版本调用ratings服务,并将每个等级显示为1到5个红色星号。

    • ratings微服务

      提供图书星级评分信息。

    一图胜千言,整体架构如下:

    部署Bookinfo到Istio

    将Bookinfo部署到k8s默认命名空间,即default。

    1、启动边车自动注入

    kubectl label namespace default istio-injection=enabled
    

    2、部署到k8s

    # 进入工作目录,解压刚刚下载的Istio
    root@just: cd /root/service-mesh/istio && tar -vxzf istio-1.4.3-linux.tar.gz 
    # 使用kubectl部署到k8s
    root@just: kubectl apply -f istio-1.4.3/samples/bookinfo/platform/kube/bookinfo.yaml
    service/details created
    serviceaccount/bookinfo-details created
    deployment.apps/details-v1 created
    service/ratings created
    serviceaccount/bookinfo-ratings created
    deployment.apps/ratings-v1 created
    service/reviews created
    serviceaccount/bookinfo-reviews created
    deployment.apps/reviews-v1 created
    deployment.apps/reviews-v2 created
    deployment.apps/reviews-v3 created
    service/productpage created
    serviceaccount/bookinfo-productpage created
    deployment.apps/productpage-v1 created
    

    3、联网

    # 为Bookinfo部署入口网关
    root@just: kubectl apply -f istio-1.4.3/samples/bookinfo/networking/bookinfo-gateway.yaml
    gateway.networking.istio.io/bookinfo-gateway created
    virtualservice.networking.istio.io/bookinfo created
    # 获取网关地址
    root@just: export INGRESS_HOST=$(kubectl get po -l istio=ingressgateway -n istio-system -o jsonpath='{.items[0].status.hostIP}')
    root@just: export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')
    root@just: export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
    # 获取图书单品页地址
    echo http://${GATEWAY_URL}/productpage
    

    备注:生产环境一般使用istio-ingressgateway作为联网的唯一出入口。

    4、访问

    5、查看服务网格

    不停地刷新图书单品页,kiali会实时地绘制服务网格,如下:

    基于权重流量的实时控制,如下:

    对于服务的可观察性,kiali还提供了很多其他的功能,这也是Istio相较于其他服务网格框架的优势,这里就不展示了。

    六、总结

    本篇使用Istioctl搭建了一套完整的Istio系统,先从战略上鸟瞰Istio,进一步从战术上学习Istio将更加容易,作为一个完整解决方案,后面系列将一步步学习如何运用Istio的连接、安全、控制、可观察性全面地治理分布式应用。

    话外音:到目前为止,大家应该明白Istio是个什么东东了吧。

    七、参考

    https://github.com/istio/istio/releases

    https://istio.io/docs/setup/additional-setup/config-profiles

    https://istio.io/docs/setup/getting-started

    https://istio.io/docs/setup/install/istioctl/#customizing-the-configuration

    https://istio.io/docs/reference/commands/istioctl

    https://istio.io/docs/ops/diagnostic-tools/istioctl

    https://istio.io/news/releases/1.4.x/announcing-1.4.3

    https://istio.io/docs/examples/bookinfo

    https://istio.io/docs/tasks/traffic-management/ingress/ingress-control/#determining-the-ingress-ip-and-ports

    最后

    如果有什么疑问和见解,欢迎评论区交流。

    如果你觉得本篇文章对您有帮助的话,感谢您的【推荐】。

    如果你对云原生感兴趣的话可以【关注我】

  • 相关阅读:
    win7桌面的文件路径是否可以更改
    win10怎么更新flash到最新版本【系统天地】
    centos7 lnmp环境部署
    thinkphp5 部署注意事项
    linux下导入、导出mysql数据库命令的实现方法
    Centos7 系统下怎么更改apache默认网站目录
    centos7 配置lamp 环境
    Redis笔记(4)独立功能的实现
    Redis笔记(3)多数据库实现
    Redis笔记(2)单机数据库实现
  • 原文地址:https://www.cnblogs.com/justmine/p/12210389.html
Copyright © 2011-2022 走看看