我们将根据一个仅集成了Kubernetes和Docker的镜像,逐步进行istio的安装。这样做有两个好处:一方面,你可以直接练习Kubernetes的命令;另一方面,你能够更深入地理解Kubernetes的各种概念和问题。好的,我们开始吧。
首先,你需要确保已经成功安装了Oracle VM VirtualBox(关于这个安装过程我就不详细解释了)。安装完成后,我们需要进行第一步,即处理你的NAT网络设置,因为这个镜像需要通过NAT模式进行联网。请按照以下图示进行设置:
在创建时,你无需填写任何内容,因为系统会自动为你生成IP地址。你只需要记住这个NAT网络的名称即可。
好的,现在你可以开始直接导入基于k8s的基础镜像。如下图所示:
在导入选择K8s的基础镜像后,需要注意的是MAC地址设定这个方面。除此之外,没有其他需要特别注意的地方。接下来就是等待过程。
当你完成操作之后,请务必进行虚拟机网络的设置。
好的,现在让我们来启动你的虚拟机吧!k8s的大门已经为你打开了。然而,在建立istio服务网格的过程中,你可能会遇到各种报错。不用担心,我撰写本文的目的就是为了帮助你解决这些报错,并成功建立起istio服务网格。此外,你还能学到一些常用命令。
istio手动安装
当你准备登录虚拟机时,请使用以下账户信息:用户名为root,密码为123456。如果你安装了xshell,你可以通过使用IP地址192.168.56.5直接进行连接。无需担心IP地址与你本地设备的地址不同,因为它已被设定为固定值。
由于我已经完成了所有的环境配置工作,因此可以直接利用k8s的命令进行操作。
kubectl get cs
为了查看所有的命名空间,你可以使用以下命令:kubectl get namespaces 或者 kubectl get ns。通过执行这个命令,你可以轻松地确定istio是否安装在名为istio-system的命名空间中。通常情况下,我们会在默认的命名空间default下进行操作。
kubectl get pods -n
为了查看istio-system命名空间下的pod状态,你可以使用以下命令:kubectl get pods -n istio-system。通过添加"-n"参数并指定命名空间,你可以在不切换命名空间的情况下,轻松地查看指定命名空间下的pod状态。当然,如果你希望切换到其他命名空间,你可以使用以下命令::kubectl config set-context $(kubectl config current-context) --namespace=istio-system
kubectl describe pod
好的,我们注意到pod的状态异常,因此我们首先查看pod的描述以确定是否有异常情况。执行命令kubectl describe pod -n istio-system后,我们发现确实有提示信息如下:
kubectl taint nodes
错误信息可以轻松查看真正的错误原因。通常情况下,Kubernetes的Master节点是不可调度的,以防止在Master节点上运行用户Pod。然而,考虑到我们的虚拟环境只是用于学习,我们可以直接运行Pod而不管它们是否可以调度。因此,我们需要对配置进行调整。
命令是:kubectl taint nodes node-role.kubernetes.io/master-请将替换为你的Master节点的名称。这将允许Pod在Master节点上调度。
kubectl get nodes
如果你不知道你的node-name的话,可以使用kubectl get nodes获取。
当你执行完后,我们再来重新安装一次istio,经过优化。然而,我们发现问题仍然存在,因此我们再次执行describe命令时仍然遇到了错误。具体错误信息如下:
我看完日志后的第一反应是感到困惑,因为我对日志中出现的内容不太理解。于是我决定找AI帮忙,让它来分析一下。AI给出的接口看起来很可信,它指出缺少了POD network Flannel网络插件,我看了一下报错信息果然如此。既然找到了问题,那就着手解决吧。
kubectl apply -f
经过一番搜索看来是需要:wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yaml执行命令下载一个文件。但是一看就是需要代理的,所以我也提前准备好了kube-flannel.yaml。当你往你的虚拟机中传输完之后,可以直接使用命令启动kubectl apply -f kube-flannel.yaml
然而,我执行完毕后,令人惊讶的是,Istio仍然无法正常工作。从启动日志中可以看出,它被安装在了kube-flannel命名空间中。现在,我们来查看一下它的Pod情况。
k get pod -n kube-flannel执行完后查看到pod没启动成功,我们再看下他的描述信息。
kubectl logs -n