本章我们将学习如何使用快速安装istio及控制台naftis,其中,naftis是小米开源的一款dashboard。
helm repo add istio.io https://storage.googleapis.com/istio-release/releases/1.3.3/charts/
打开网址 https://github.com/istio/istio/releases/tag/1.3.3,进入下载页面,我们这里下载的是istio-1.3.3-linux.tar.gz。
解压,并进入主目录。
[root@master ~]# ls
calico-3.9.2.yaml helm-v2.15.2-linux-amd64.tar.gz init_master.sh install_kubelet.sh istio-1.3.3-linux.tar.gz kubeadm-config.yaml linux-amd64 nginx-ingress.yaml
[root@master ~]# tar zxvf istio-1.3.3-linux.tar.gz
[root@master ~]# cd istio-1.3.3/
[root@master istio-1.3.3]# ls
bin install istio.VERSION LICENSE README.md samples tools
创建命名空间。
kubectl create namespace istio-system
安装istio-init chart,以启动所有istio 自定义的资源。
helm install install/kubernetes/helm/istio-init --name istio-init --namespace istio-system
通过执行下面的命令在Kubernetes中安装部署istio。
helm install install/kubernetes/helm/istio --name istio --namespace istio-system
查看各组件是否都正常。
watch kubectl get all -n istio-system
下载地址为:https://github.com/XiaoMi/naftis/releases,我这里下载的是0.1.4-rc6版本。
下载完成后解压:
tar zxvf manifest.tar.gz
创建命名空间。
kubectl create namespace naftis
部署mysql服务。
kubectl apply -n naftis -f mysql.yaml
此时会报错:
[root@master ~]# kubectl apply -n naftis -f mysql.yaml
persistentvolume/naftis-pv created
secret/naftis-mysql created
configmap/naftis-mysql-initialization created
configmap/naftis-mysql-test created
persistentvolumeclaim/naftis-mysql created
service/naftis-mysql created
pod/naftis-mysql-test created
error: unable to recognize "mysql.yaml": no matches for kind "Deployment" in version "extensions/v1beta1"
这是因为我们的k8s集群是v1.16.xx版本,Deployment的版本已经改成了apps/v1。
修改mysql.yaml,先把刚才安装的东西删除掉。
[root@master ~]# kubectl delete -n naftis -f mysql.yaml
注意,要修改apiVersion和spec.template.metadata.labels两个地方,另外,还要添加spec.selector标签。
apiVersion: apps/v1
kind: Deployment
metadata:
name: naftis-mysql
labels:
app: naftis-mysql
chart: "mysql-0.8.2"
release: "naftis"
heritage: "Tiller"
spec:
selector:
matchLabels:
app: naftis-mysql
chart: "mysql-0.8.2"
release: "naftis"
heritage: "Tiller"
template:
metadata:
labels:
app: naftis-mysql
chart: "mysql-0.8.2"
release: "naftis"
heritage: "Tiller"
# 省略...
重新安装mysql.yaml。
[root@master ~]# kubectl apply -n naftis -f mysql.yaml
persistentvolume/naftis-pv created
secret/naftis-mysql created
configmap/naftis-mysql-initialization created
configmap/naftis-mysql-test created
persistentvolumeclaim/naftis-mysql created
service/naftis-mysql created
pod/naftis-mysql-test created
deployment.apps/naftis-mysql created
在Kubernetes中部署 Naftis API 和 UI 服务。
kubectl apply -n naftis -f naftis.yaml
会遇到跟上面一样的问题,按同样的方式去修改就可以了。
查看各服务是否正常。
[root@master ~]# kubectl get all -n naftis
NAME READY STATUS RESTARTS AGE
pod/naftis-api-5f9cdbf4b6-2ws7s 1/1 Running 0 65s
pod/naftis-mysql-fbd86d4cf-pn4kc 1/1 Running 0 5m23s
pod/naftis-mysql-test 0/1 Error 0 5m23s
pod/naftis-ui-866cdb6f9c-tctm8 1/1 Running 0 65s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/naftis-api ClusterIP 10.96.197.105 <none> 50000/TCP 4m25s
service/naftis-mysql ClusterIP 10.96.178.112 <none> 3306/TCP 5m23s
service/naftis-ui LoadBalancer 10.96.172.162 <pending> 80:31682/TCP 4m25s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/naftis-api 1/1 1 1 65s
deployment.apps/naftis-mysql 1/1 1 1 5m23s
deployment.apps/naftis-ui 1/1 1 1 65s
NAME DESIRED CURRENT READY AGE
replicaset.apps/naftis-api-5f9cdbf4b6 1 1 1 65s
replicaset.apps/naftis-mysql-fbd86d4cf 1 1 1 5m23s
replicaset.apps/naftis-ui-866cdb6f9c 1 1 1 65s
mysql-test Error先跳过。
修改service/naftis-ui暴露端口的方式为NodePort。
kubectl edit service/naftis-ui -n naftis
将LoadBalancer修改为NodePort。
查看生成的端口:
[root@master ~]# kubectl get svc -n naftis
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
naftis-api ClusterIP 10.96.197.105 <none> 50000/TCP 23m
naftis-mysql ClusterIP 10.96.178.112 <none> 3306/TCP 23m
naftis-ui NodePort 10.96.172.162 <none> 80:31682/TCP 23m
使用任意一个worker节点的ip加上生成的端口号31682即可访问naftis。
用户名/密码为:admin/admin。
通过naftis可以查看服务的状态等信息。
默认情况,在Istio上部署安装应用使用自动Sidecar 注入。
使用以下命令将托管应用程序的名称空间(此处为docker-test)的标记为istio-injection=enabled:
kubectl label namespace docker-test istio-injection=enabled
通过kuboard删除一个容器组(pod),查看自动新建的pod。
可以看到istio的proxy注入成功了。
本章我们一起学习了使用istio及其控制台naftis的安装,只要修改了命名空间的label属性,后面部署的服务就会自动注入istio的proxy了。