zoukankan      html  css  js  c++  java
  • Istio读书笔记-03-安装

    《Istio实战指南》 by 马若飞 2019年9月第1版

    书中的 Istio 为 1.1版

    ---

    听说 Istio的官网是 https://istio.io ,只是还没能成功访问过。

    后来发现了Istio中文社区:https://istio.cn/ ,其下还有 官方文档镜像 http://docs.istio.cn/

    Github地址:https://github.com/istio/istio

    索引

    本地安装

    云平台安装

    安装Istio,本以为只是安装Istio,结果,还需要安装(准备工作):

    1. GO
    2. Docker
    3. 搭建Kubernetes平台

    Kubernetes是Istio的 首推部署平台。

    复杂的依赖关系》使用Helm安装

    Helm:K8S下的包管理工具。

    英文:heml——n.  舵,舵柄; 掌舵,掌管; (国家,企业等的)机要部门,领; 头盔;

    除了在自己的计算机安装Istio,一些云平台也提供了K8S服务,比如:

    1. Amazon AWS的EKS
    2. Google Cloud的GKE
    3. 腾讯云的CIS
    4. 阿里云的Kubernetes容器服务

    2、4 内置了Istio组件,可以使安装集成工作更简单。

    本地安装

    (书中 第3章)

    安装GO

    Istio是使用GO语言实现的

    Linux安装

    golang官网:https://golang.org/ ,访问不了

    golang中文:https://golang.google.cn/

    2021-10-05最新版本1.17.1

    下载源码、解压;

    Ubuntu中:sudo apt-get install golang-go

    PATH环境变量,$HOME/.bash_profile 或 /etc/profile

    GOPATH环境变量:$HOME/go

    验证:go version

    安装Docker

    容器和镜像的相关操作都需要Docker支持

    最新的Docker(什么版本?)桌面版已经集成了K8S环境》方便进行本地集群环境的搭建

    Ubuntu安装:sudo apt-get install docker-ce 安装的是最新版本吗?

    CentOS安装:sudo yum install docker-ce 安装的是最新版本吗?

    验证:docker version

    搭建Kubernetes平台

    Istio被设计为支持多平台运行,但它目前只适用于K8S环境。

    限制:完整的K8S环境》要求高》计算机配置不高的话,无法启动或正常运行一个集群

    两种简单方法在 个人计算机 上启动一个 极简K8S集群:1)Docker桌面版自带的K8S环境,2)Minikube。适合本地开发。

    Istio要求 K8S版本 1.9及以上

    最新K8S:Latest Release: 1.22.2 (released: 2021-09-15)

    安装:

    命令行工具:Linux》kubectl;Mac》使用Homebrew安装。

    启用Docker桌面版中的K8S:Docker 17.02的Edge版,2018年7月,Docker 18.06的稳定版提供K8S集成。

    Docker图标》菜单-Kubernetes》Kubernetes is running;

    查看K8S节点状况:kubectl get nodes

    安装Minikube

    推荐。更成熟和统一的集群操作方式。Linux系统。

    Minikube使用Docker管理K8S虚拟机》虚拟机相关驱动》建议使用VirtualBox。

    注意,由于网络环境问题,可能无法下载,可以选择我国大陆的镜像地址(是什么?

    安装好后,启动一个K8S集群:minikube start

    查看启动情况:minikube status

    查看K8S运行状况

    K8S的可视化仪表板(Dashboard)》对集群进行监控和管理

    Minikube方式,启动仪表板:minikube dashboard

    Docker桌面版:复杂一些,略

    查看仪表板是否已运行:kubectl get pods  --namespace kube-system

    访问链接:好长!略,,开头——http://localhost:8001...

    K8S集群环境构建完成,准备工作结束。

    安装Istio

    Istio每个组件都是K8S集群中的Deployment,并以Pod的形式运行。

    Helm安装

    下载安装包:curl -L  https://git.io/getLatestIstio | sh -

    注,浏览器中 git.io 访问失败

    安装包内容:bin, install, samples, Istio.VERSION

    istioctl命令 添加到 PATH:export PATH=$PWD/bin:$PATH

    安装Helm

    Istio官方推荐使用Helm安装:定制的方式灵活配置安装选项

    Helm:客户端Helm、服务端Tiller。

    为简单,只安装客户端。

    curl安装 略

    检查:helm version

    使用Helm安装Istio

    Istio的CRD(K8S的CRD,Custom Resource Definition),K8S API的扩展方法。

    CRD初始化、注册、对象,Istio的初始化工作

    Istio初始化了大约50个CRD,4大类:

    *.authentication.Istio.io

    *.config.Istio.io

    *.networking.Istio.io

    *.rbac.Istio.io

    安装这些CRD:kubectl apply -f .../crds.yaml

    Helm两种安装Istio的方式:helm template, helm install(需要服务端Tiller)。

    Istio的Helm chart安装目录结构

    --set key=value:自定义安装选项,附录A

    helm template:

    生成部署的清单文件——非常长

    Istio-system命令空间

    创建命名空间:kubectl create namespace Istio-system

    查看Pod的状态:kubectl get pods -n Istio-system

    helm install:

    不用生成安装清单,但需要 服务端Tiller支持。

    Tiller安装步骤繁琐,略。

    确认安装结果

    $ kubectl get svc -n Istio-system

    $ kubectl get pods -n Istio-system

    问题处理

    1)Minikube虚拟机驱动

    minikube start --vm-driver=none

    2)Pilot启动失败

    内存不够?默认需要2GB!

    至少分配8GB内存!

    调小内容需求:helm参数 --set pilot-resources.requests.memory="512Mi"

    3)镜像获取错误

    ImagePullBackOff这样的信息

    我国大陆网络环境问题倒是无法下载镜像,需要搜索可用镜像

    云平台安装

    (书中 第9章)

    理论上,任何云平台的K8S产品都可以部署Istio,只要导入Istio的CRD,并使用官方提供的Helm进行安装即可

    需要花钱的

    在Google Cloud GKE(Google Kubernetes Engine)上启用Istio

    内置了Istio

    注册Google账号(需要绑定信用卡)

    下载Cloud SDK

    安装gcloud命令

    创建Istio集群:至少4个节点的集群

    图形化界面安装、验证安装

    ……

    使用阿里云Kubernetes容器服务

    可视化方式搭建K8S集群

    提供Istio作为组件

    阿里云账号》支付宝账号

    容器服务Kubernetes版,,当前为:服务网格 ASM

    创建集群、添加Istio组件,DONE

    都是图形化安装,方便快捷,就是,费钱(阿里云这个 是不是有 试用版呢?)。

    其它(书中 第9章):

    高级流量控制

    故障注入:延迟故障——fault标记,中断故障——abort关键字;

    流量镜像;

    调试和故障排查

    通过日志和内置的命令来调试和排查问题

    Istio的日志框架

    范围:adapters, api, attributes, default, grpcAdapter

    基本:none, error, warning, info, debug

    通过ControlZ来进行日志设置:Istio ControlZ

    调试(istioctl):proxy-status命令(网格状态),proxy-config命令(代理配置),使用GDB

    故障排查:

    Istio对Pod和服务的要求(端口命名、Pod端口、关联服务、Deployment标签、Applicatin UID、NET_ADMIN功能)

    请求被Envoy拒绝:检查Envoy日志

    设置目标规则后出现503:DestinationRule,服务的TLS冲突

    Headless TCP服务连接丢失:如果部署了Istio-citadel,则Envoy会每隔15min重启一次,来完成证书的刷新任务——造成长连接以及TCP流中断。禁止TLS。(哇~)

    Envoy崩溃:高并发大流量下Envoy有可能崩溃。ulimit -a检查。提高ulimit上限(ulimit -n 16384)。

    Envoy无法连接HTTP/1.0服务:Nginx、proxy_http_version为1.1

    ---

  • 相关阅读:
    Django框架简介
    Django初识
    web前端 html
    python基础概念
    线程
    进程线程区别,和线程初识
    Nginx配置多个服务共用80端口
    Supervisor重新加载配置
    Gunicorn-Django部署
    django.db.utils.OperationalError: (1193, "Unknown system variable 'storage_engine'")
  • 原文地址:https://www.cnblogs.com/luo630/p/15368563.html
Copyright © 2011-2022 走看看