在k8s集群中使用istioctl安装istio

版本对照

Istio版本

K8s版本

1.15

1.22, 1.23, 1.24, 1.25

1.14

1.21, 1.22, 1.23, 1.24

1.13

1.20, 1.21, 1.22, 1.23

我是用的版本是(istio 1.15.4 k8s 1.23.0)

1 安装istioctl

前置条件 docker、k8s安装正常

k8s的安装可以参考:


官方给出了很多安装的方式,推荐istioctl。operator的方式比较简单,但是官方不在优先支持。

k8s与istio版本 k8s安装istio_istio

官网采用的命令大概率会超时。

$ curl -L https://istio.io/downloadIstio | sh -

# 指定具体版本
$ curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.15.4 sh -

这里直接去github上下载压缩文件

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

直接选istio,不要选istioctl。

k8s与istio版本 k8s安装istio_k8s与istio版本_02


下载完成后在linux上解压。

tar -xvf istio-1.15.4-linux-amd64.tar.gz

k8s与istio版本 k8s安装istio_linux_03


进入istio-1.15.4文件夹,将bin临时添加到环境变量。

按变量的生存周期来划分,Linux变量可分为两类:

1.永久的:需要修改配置文件,变量永久生效

2.临时的:使用export命令声明即可,变量在关闭shell时失效

export PATH=$PWD/bin:$PATH

测试istioctl是否正常运行。

istioctl version

k8s与istio版本 k8s安装istio_kubernetes_04

2 安装istio(多节点集群)

通过 -f 传递配置文件

新建yaml文件或通过vi创建。

vi my-demo-config.yaml
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  profile: demo

k8s与istio版本 k8s安装istio_ide_05

apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  profile: demo
istioctl install -f istio-deploy.yaml

k8s与istio版本 k8s安装istio_istio_06

kubectl get pod -nistio-system

k8s与istio版本 k8s安装istio_linux_07

3 单节点k8s集群(仅有一个master)

安装istio时出错,Istiod encountered an error: failed to wait for resource: resources not ready after 5m0s: timed out waiting for the condition

这里的timeout除了网络问题,在单节点k8s集群还有可能是因为:
  1. 这个timeout是假的,其实是机器内存要16G以上试下
  2. 如果k8s是只有master节点的话要开启允许master节点调度
3.1 允许master调度pod
查看节点调度

可以看到master节点存在污点(也有的安装后master没有污点就应该可以正常安装)。

kubectl describe node|grep -E "Name:|Taints:"

k8s与istio版本 k8s安装istio_kubernetes_08

删除污点
kubectl taint node master node-role.kubernetes.io/master-
设置为尽量不调度
kc taint node master node-role.kubernetes.io/master=:PreferNoSchedule

k8s与istio版本 k8s安装istio_kubernetes_09

重新执行
istioctl install -f istio-deploy.yaml

k8s与istio版本 k8s安装istio_k8s与istio版本_10

4 启用 Istio,注入sidecar

注入前,每个pod里面只有一个镜像

k8s与istio版本 k8s安装istio_kubernetes_11

Istio 默认自动注入 Sidecar. 为命名空间打上标签 istio-injection=enabled
kubectl label namespace ctt istio-injection=enabled
# 覆盖
# kubectl label namespace default istio-injection=enabled --overwrite

k8s与istio版本 k8s安装istio_linux_12

删除pod(会重新启动达到deployment中定义的数量)或重新apply deployment。
kubectl delete pod -n ctt eureka-client-7c84cb577c-h8mng eureka-server-74ffd79d64-7768x service-provider-v1-b4bcc65fc-jdn6k service-provider-v2-95fd56fcf-z54jd
变成2/2说明sidecar注入成功。

k8s与istio版本 k8s安装istio_linux_13

5 卸载

可选的 --purge 参数将移除所有 Istio 资源,包括可能被其他 Istio 控制平面共享的、集群范围的资源。

#删除所有资源
istioctl uninstall --purge