Install

安装 #

前提条件 #

在开始之前,请您检查以下条件是否满足要求:

  1. 您需要一个标准Kubernetes集群来部署solarmesh,如果还没有Kubernetes集群可以使用,可以使用kind来安装一个Kubernetes的测试集群。
  2. 集群须运行Istio支持的Kubernetes版本。对于Istio 1.6,它们是Kubernetes 1.15 ~ 1.18
  3. 确保您的Kubernetes群集具有足够的资源。如果您尝试使用我们的演示应用程序的所有功能,推荐 8 CPUs 和 16 GiB RAM,最低要求是 6 CPUs 和 8 GiB RAM

完成前提条件之后,您可以通过 solarctl 工具在单个群集上安装solarmesh,也可以在多群集环境中部署solarmesh。

获取solarctl #

# OS: linux-amd64
wget http://release.solarmesh.cn/solar/v1.7.1/solar-v1.7.1-linux-amd64.tar.gz
tar -xvf solar-v1.7.1-linux-amd64.tar.gz
export PATH=$PATH:$PWD/solar/bin/
chmod +x $PWD/solar/bin/solarctl

使用solarctl安装solarmesh #

使用默认配置安装solarmesh到主集群

solarctl install solar-mesh

安装solarmesh的网关

solarctl install traefik --hub registry.cn-shenzhen.aliyuncs.com/solarmesh --tag v1.7

如果安装成功,可以打开控制页面,通过命令返回的IP可以访问solarmesh。

kubectl get po -n kube-system -o wide |grep traefik|awk '{print $6}'

配置登录账号 #

设置用于登录SolarMesh的身份验证策略。下面会提到的安装说明 如何设置身份验证策略,anonymous该策略允许任何人无需提供任何凭据即可访问SolarMesh UI。

在控制集群执行以下命令为用户设置用户名和密码 --from-literal=username=<username> --from-literal=password=<password>

kubectl create secret generic admin --from-literal=username=admin --from-literal=password=admin -n service-mesh
kubectl label secret admin app=solar-controller -n service-mesh

使用 solar-operator 接管集群 (方法一) #

export ISTIOD_REMOTE_EP=$(kubectl get nodes|awk '{print $1}' |awk 'NR==2'|xargs -n 1 kubectl get nodes  -o jsonpath='{.status.addresses[0].address}')

安装 solar-operator

solarctl operator init --external-ip $ISTIOD_REMOTE_EP

使用operator安装istio,请运行以下命令:

创建namespace

kubectl create ns service-mesh

apply SolarOperator 资源

kubectl apply -f - <<EOF
apiVersion: install.solar.io/v1alpha1
kind: SolarOperator
metadata:
  namespace: service-mesh
  name: cluster01 # 记住这里的集群名称
spec:
  namespace: service-mesh
  profile: default
EOF

查看 solar-operator 的日志

kubectl logs -f -n solar-operator -l app=solar-operator

如果看到 install solar mesh : ✔ 则代表 SolarMesh 安装完成

not ready :[Deployment/service-mesh/solar-graph]
2021-02-19T08:18:29.848376Z	info	not ready :[Deployment/service-mesh/solar-graph]
not ready :[Deployment/service-mesh/solar-graph]
2021-02-19T08:18:31.851434Z	info	not ready :[Deployment/service-mesh/solar-graph]
not ready :[Deployment/service-mesh/solar-graph]
2021-02-19T08:18:33.864782Z	info	not ready :[Deployment/service-mesh/solar-graph]
not ready :[Deployment/service-mesh/solar-graph]
2021-02-19T08:18:35.858885Z	info	not ready :[Deployment/service-mesh/solar-graph]
install SolarGraph : ✔
install solar mesh  : ✔

注册业务集群 #

ISTIOD_REMOTE_EP 是根据之前选择的远程控制平面配置选项设置环境变量。

若集群有内部负载均衡(Internal Load Balancer),在远程集群执行以下命令获取ISTIOD_REMOTE_EP

export ISTIOD_REMOTE_EP=$(kubectl get svc -n istio-system --context=${MAIN_CLUSTER_CTX} istiod -o jsonpath='{.status.loadBalancer.ingress[0].ip}')

若没有内部负载均衡,则执行以下命令获取ISTIOD_REMOTE_EP

export ISTIOD_REMOTE_EP=$(kubectl get svc -n istio-system istio-ingressgateway |awk ‘{print $4}'|awk ‘NR==2’)

验证 ISTIOD_REMOTE_EP:

echo "ISTIOD_REMOTE_EP is ${ISTIOD_REMOTE_EP}" 

若 ISTIOD_REMOTE_EP不存在,请参考 kubernetes官方文档 允许控制集群能够访问业务集群istio-ingressgateway

注册业务集群,操作成功后,solarmesh页面将显示集群的服务。

–kube-config 为添加从集群的kube config文件

solarctl register --kube-config <path/to/config> --name cluster01 # 这里的集群名称与安装istio的时候声明的名称一致

⚠️ 主集群也可以注册成为业务集群,kube config文件使用主集群的文件即可

&hellip;

使用solarctl接管集群 (方法二) #

如果您的集群包含内部负载平衡器(LoadBalancer) 请参照internal-load-balancer后执行以下命令 ⚠️ 样例仅供参考 详情请见 参考/solarctl/attach 字段解释

solarctl attach --kube-config ~/.kube/config  --name cluster01 --set demo 

如果您的集群不包含内部负载平衡器,可以通过 NodePort 把流量暴露出去(不建议使用),则需要执行以下命令 ⚠️ 样例仅供参考 详情请见参考/solarctl/attach字段解释

  1. 在远程集群获取 ISTIOD_REMOTE_EP 变量集群接入IP
export ISTIOD_REMOTE_EP=$(kubectl get nodes|awk '{print $1}' |awk 'NR==2'|xargs -n 1 kubectl get nodes  -o jsonpath='{.status.addresses[0].address}')
  1. 添加集群
solarctl attach --kube-config ~/.kube/config --name cluster01 --external-ip $ISTIOD_REMOTE_EP --set demo

配置跨集群访问 (当 solarctl attach 多个集群时使用) #

如果从集群需要互相访问的话, 要在远程集群(通常是每个集群)中调用服务的每个集群,根据DNS实现方式创建以下ConfigMap,或更新现有的ConfigMap:

kubedns #

apiVersion: v1
kind: ConfigMap
metadata:
  name: kube-dns
  namespace: kube-system
data:
  stubDomains: |
        {"global": ["$(kubectl get svc -n istio-system istiocoredns -o jsonpath={.spec.clusterIP})"]}

CoreDNS(> = 1.4.0) #

apiVersion: v1
kind: ConfigMap
metadata:
  name: coredns
  namespace: kube-system
data:
  Corefile: |
    .:53 {
        errors
        health
        ready
        kubernetes cluster.local in-addr.arpa ip6.arpa {
           pods insecure
           upstream
           fallthrough in-addr.arpa ip6.arpa
        }
        prometheus :9153
        forward . /etc/resolv.conf
        cache 30
        loop
        reload
        loadbalance
    }

    global:53 {
        errors
        cache 30
        forward . $(kubectl get svc -n istio-system istiocoredns -o jsonpath={.spec.clusterIP}):53
    }    

使用solarctl安装示例项目 #

使用solarctl安装bookinfo示例项目

solarctl install bookinfo

使用solarctl为bookinfo示例项目注入流量

⚠️ 由于安装bookinfo过程中使用到了gw、vs资源,则需要给bookinfo注入sidecar,注入方法见 接管服务

solarctl load bookinfo

如何卸载solarmesh? #

⚠️ uninstall命令会卸载掉整个solarmesh

暂无