让我们来看看回到单体的Istio到底该怎么部署
让我们来看看回到单体的Istio到底该怎么部署
点击 "阅读原⽂" 可以获得更好的阅读体验。
前⾔
没错,Istio 架构⼜换了。。。北京时间 2020 年 3 ⽉ 6 ⽇ 凌晨发布了 1.5 版本,该版本最⼤的变化是将控制平⾯的所有组件组合成⼀个单体结构叫 istiod。
从架构图可以看出,在 Istio 1.5 中,饱受诟病的 Mixer 终于被废弃了,新版本的 HTTP 遥测默认基于 in-proxy Stats filter,同时可使⽤WebAssembly[1] 开发 in-proxy 扩展。更详细的说明请参考 Istio 1.5 发布公告[2]。
官⽅⽂档的部署⽅法⽐较笼统,不利于快速上⼿,为了帮助⼤家快速上⼿,本⽂将重点介绍 Istio 1.5 的部署⽅法。为了更⽅便地管理 Istio 各个组件的⽣命周期,推荐使⽤ Operator 进⾏部署。
在部署 Istio 之前,⾸先需要确保 Kubernetes 集(kubernetes 版本建议在 1.14 以上)已部署并配置好本地的 kubectl 客户端。
01
Kubernetes 环境准备
为了快速准备 kubernetes 环境,我们可以使⽤ sealos 来部署,步骤如下:前提条件
下载kubernetes 离线安装包[3]
下载最新版本sealos[4]
务必同步服务器时间
主机名不可重复
安装 kubernetes 集
$ sealos init --master 192.168.0.2 \
--node 192.168.0.3 \
--node 192.168.0.4 \
-
-node 192.168.0.5 \
--user root \
--passwd your-server-password \
--version v1.16.3 \
--pkg-url /root/kube1.16.
检查安装是否正常:
湖光水月人留恋打一字$ kubectl get node
NAME      STATUS  ROLES    AGE  VERSION
sealos01  Ready    master  18h  v1.16.3
sealos02  Ready    <none>  18h  v1.16.3
sealos03  Ready    <none>  18h  v1.16.3
sealos04  Ready    <none>  18h  v1.16.3
02
下载 Istio 部署⽂件
你可以从 GitHub 的 release[5] 页⾯下载 istio,或者直接通过下⾯的命令下载:$ curl -L istio.io/downloadIstio | sh -
下载完成后会得到⼀个 istio-1.5.0 ⽬录,⾥⾯包含了:
install/kubernetes : 针对 Kubernetes 平台的安装⽂件
samples : ⽰例应⽤
bin : istioctl ⼆进制⽂件,可以⽤来⼿动注⼊ sidecar proxy
进⼊ istio-1.5.0 ⽬录。
$ cd istio-1.5.0
$ tree -L 1 ./
./
├── bin
tcpip协议├── install
├── LICENSE
├── manifest.yaml
├── README.md
├── samples
└── tools
4 directories, 4 files
将 istioctl 拷贝到 /usr/local/bin/ 中:
$ cp bin/istioctl /usr/local/bin/
开启 istioctl 的⾃动补全功能
bash
将 tools ⽬录中的 istioctl.bash 拷贝到 $HOME ⽬录中:
$ cp tools/istioctl.bash ~/
在 ~/.bashrc 中添加⼀⾏:
source ~/istioctl.bash
应⽤⽣效:
$ source ~/.bashrc
zsh
将 tools ⽬录中的 _istioctl 拷贝到 $HOME ⽬录中:
$ cp tools/_istioctl ~/
在 ~/.zshrc 中添加⼀⾏:
source ~/_istioctl
应⽤⽣效:
$ source ~/.zshrc查个人档案
03
部署 Istio
istioctl 提供了多种安装配置⽂件,可以通过下⾯的命令查看:
$ ll install/kubernetes/operator/profiles
-rw-r--r-- 1 root root  18K 3⽉  4 20:40 default.yaml
-rw-r--r-- 1 root root 3.2K 3⽉  4 20:40 demo.yaml
-rw-r--r-- 1 root root  964 3⽉  4 20:40 empty.yaml
-
rw-r--r-- 1 root root  913 3⽉  4 20:40 minimal.yaml
-rw-r--r-- 1 root root  579 3⽉  4 20:40 remote.yaml
-rw-r--r-- 1 root root  554 3⽉  4 20:40 separate.yaml
它们之间的差异如下:
default demo minimal remote
核⼼组件
istio-egressgateway X
istio-ingressgateway X X
istio-pilot X X X
附加组件
Grafana X
istio-tracing X剪映如何加字幕和配音
kiali X
prometheus X X X
其中标记 X 表⽰该安装该组件。
如果只是想快速试⽤并体验完整的功能,可以直接使⽤配置⽂件 demo 来部署。
在正式部署之前,需要先说明两点:
Istio CNI Plugin
腾讯qq客服当前实现将⽤户 pod 流量转发到 proxy 的默认⽅式是使⽤ privileged 权限的 istio-init 这个 init container 来做的(运⾏脚本写⼊iptables),需要⽤到 NET_ADMIN capabilities。对 linux capabilities 不了解的同学可以参考我的 。
Istio CNI 插件的主要设计⽬标是消除这个 privileged 权限的 init container,换成利⽤ Kubernetes CNI 机制来实现相同功能的替代⽅案。具体的原理就是在 Kubernetes CNI 插件链末尾加上 Istio 的处理逻
辑,在创建和销毁 pod 的这些 hook 点来针对 istio 的 pod 做⽹络配置:写⼊ iptables,让该 pod 所在的 network namespace 的⽹络流量转发到 proxy 进程。
详细内容请参考官⽅⽂档[6]。
绝地求生配置
使⽤ Istio CNI 插件来创建 sidecar iptables 规则肯定是未来的主流⽅式,不如我们现在就尝试使⽤这种⽅法。
Kubernetes 关键插件(Critical Add-On Pods)
众所周知,Kubernetes 的核⼼组件都运⾏在 master 节点上,然⽽还有⼀些附加组件对整个集来说也很关键,例如 DNS 和 metrics-server,这些被称为关键插件。⼀旦关键插件⽆法正常⼯作,整个集就有可能会⽆法正常⼯作,所以 Kubernetes 通过优先级(PriorityClass)来保证关键插件的正常调度和运⾏。要想让某个应⽤变成 Kubernetes 的关键插件,只需要其 priorityClassName 设为system-cluster-critical 或 system-node-critical,其中 system-node-critical 优先级最⾼。
注意:关键插件只能运⾏在 kube-system namespace 中!
详细内容可以参考官⽅⽂档[7]。
接下来正式安装 Istio,⾸先部署 Istio operator:
→ istioctl operator init
该命令会创建⼀个 namespace istio-operator,并将 Istio operator 部署在此 namespace 中。
→ kubectl -n istio-operator get pod
NAME                              READY  STATUS    RESTARTS  AGE
istio-operator-7c69599466-bz8lp  1/1    Running  0          3h29m
然后创建⼀个 CR IstioOperator:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。