安装 #
前提条件 #
在开始之前,请您检查以下条件是否满足要求:
- 您需要一个标准Kubernetes集群来部署solarmesh,如果还没有Kubernetes集群可以使用,可以使用kind来安装一个Kubernetes的测试集群。
- 集群须运行Istio支持的Kubernetes版本。对于Istio 1.6,它们是Kubernetes 1.15 ~ 1.18。
- 确保您的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文件使用主集群的文件即可
使用solarctl接管集群 (方法二) #
如果您的集群包含内部负载平衡器(
LoadBalancer
) 请参照internal-load-balancer后执行以下命令 ⚠️ 样例仅供参考 详情请见参考/solarctl/attach
字段解释
solarctl attach --kube-config ~/.kube/config --name cluster01 --set demo
如果您的集群不包含内部负载平衡器,可以通过
NodePort
把流量暴露出去(不建议使用),则需要执行以下命令 ⚠️ 样例仅供参考 详情请见参考/solarctl/attach字段解释
- 在远程集群获取 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}')
- 添加集群
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
暂无