上次我跟大家简单介绍了一下Kubernetes的各个组件及其含义,本期本来计划带领大家一起学习一些常用命令,但我认为这种方式可能无法达到学习的效果。有可能你们会直接忘记,甚至可能没有兴趣去学。我也理解,心想这跟我有什么关系,我本地又搭建不起来K8s。

我一直坚持让大家亲自动手敲命令解决问题,因为只有这样才能真正理解命令的作用。所以我一直秉持着让大家能够直接学习命令,我也不想去写什么安装教程,直接给你们封装好环境了,但是这个环境是我自己站在巨人的肩膀上一步一步搭建起来的。我本地进行测试是没有问题的。这个环境仅供大家本地学习使用,如果因此造成任何损失,我概不负责哦。

如果你想获取Kubernetes的学习环境,请关注我的主页,然后在微信中搜索我的公众号即可后台回复: k8s。由于不能进行广告宣传,我就不在这里提及公众号的名字了。现在,我们继续正式话题,开始快速安装istio。

K8s直接安装

前提是你需要先获取一个适用于Kubernetes学习环境的安装包。我的分享链接将提供五个文件,它们分别是:

oracle VM visualbox 类似于你的vmware一样是一个运行虚拟机的软件,你总不能去买一台高配置的云服务器去搞吧。也没有资金。

k1215-centos81-docker-1.20.6-56.5.ova是只集成了k8s和docker的镜像,可以直接学习各种k8s的命令

k8s-istio-centos81-docker-1.20.6-56.ova是在k1215-centos81-docker-1.20.6-56.5.ova版本基础上集成好了istio的镜像,你可以直接导入到visualbox 中启动运行即可。剩下的就可以学习服务网格了。

istio-1.11.1-linux-amd64.tar.gz是istio的离线安装包,因为需要代理,所以我也提前下载下来了。

kube-flannel.yaml是网络组件,因为需要代理,所以我也提前下载下来了。

一旦你下载完成。助你快速学习k8s的命令用法以及其他知识,省去安装这种费劲的无用耗时。

导入基础K8s镜像

我们将根据一个仅集成了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

好的,让我们开始执行第一个命令,用于查看各个组件的状态。这个命令的缩写是"cs",代表"component status"。我已经在之前的文章中讲解了有哪些组件了。所以我不会再重复告诉你。然而,令人意外的是,执行命令后出现了错误。

至于为什么会报出这个错误,关于这个问题在网上有很多不同的说法。幸运的是,我找到了一个解决方案。首先,我需要先卸载一下相关的内容。

卸载:
kubeadm reset
ifconfig cni0 down && ip link delete cni0
ifconfig flannel.1 down && ip link delete flannel.1
rm -rf /var/lib/cni/
rm -rf /etc/kubernetes
rm -rf /root/.kube/config
rm -rf /var/lib/etcd 重新安装:
kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.21.5 --pod-network-cidr=10.10.0.0/16 --service-cidr=10.20.0.0/16 --apiserver-advertise-address=192.168.56.5 安装完之后,在执行一下,kubeadm让我们执行的语句:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

再次执行查看组件状态后,仍然无法正常工作。然而,其中一个组件成功运行了:

这时候,为了完成任务,我们需要对一些文件进行修改。我已经准备好了命令,我们需要做的是注释掉两个文件中的port这一行。

vim /etc/kubernetes/manifests/kube-scheduler.yaml
vim /etc/kubernetes/manifests/kube-controller-manager.yaml

一旦你完成了操作,你就能够观察到我们的k8s正常运行了。

好的,现在我们开始安装istio吧。由于istio需要使用代理,所以我已经提前准备好了相应版本的istio安装包。接下来,只需将安装包直接复制到虚拟机中即可开始安装。

使用tar -zxvf istio-1.11.1-linux-amd64.tar.gz命令解压成功后,需要你修改到etc/profile中。

export ISTIO_HOME=/root/istio-1.11.1/bin
export PATH=$ISTIO_HOME:$PATH

在执行完相应的操作后,记得使用命令 "source /etc/profile" 来使其生效。接下来,你就可以开始安装了。

安装命令:istioctl install --set profile=demo -y

在等待了大约几分钟后,不出所料,还是遇到了错误。我们的第一反应肯定是上网搜索解决方案。然而,尽管我尝试了所有的解决方案,例如网络代理等,但都没有成功解决我的问题。答案众多,但都不是我所需要的正确答案。

然而,我知道当安装istio时,它会在k8s中启动一个pod。于是,我决定直接查看后台启动日志,这样或许能找到问题的所在。因此,现在我们可以开始学习一些关于k8s命令的知识了。

首先,我们需要检查一下istio是否安装在特定的命名空间中。命名空间可以被理解为一种隔离机制,类似于进行分组操作,将同一命名空间下的pod视为一组。

kubectl get ns

为了查看所有的命名空间,你可以使用以下命令: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 <pod的名称> -n istio-system后,我们发现确实有提示信息如下:

kubectl taint nodes

错误信息可以轻松查看真正的错误原因。通常情况下,Kubernetes的Master节点是不可调度的,以防止在Master节点上运行用户Pod。然而,考虑到我们的虚拟环境只是用于学习,我们可以直接运行Pod而不管它们是否可以调度。因此,我们需要对配置进行调整。

命令是:kubectl taint nodes <node-name> 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

这次的描述信息似乎很正常,没有明显的错误提示,只有一个提示信息。为了更进一步了解情况,我们可以再次查看它的启动日志,以下是相应的命令:kubectl logs -n kube-flannel kube-flannel-ds-h47f6

在查看日志后,我们发现问题居然是由于网络段的设置引起的,这真是个坑啊。不过好消息是,这似乎是最后一个问题了。我就不在此处详述了,我希望你能够自行解决。解决完毕后,你将进入istio的训练天地,如果你真的遇到困难,可以在我的公众号中回复k8s,我将会给你回复并提供答案。

当你安装成功后,所有的服务都将启动

总结

以上所有的问题,我都是自己解决的。如果你觉得我提供的帮助不错,可以给我一个赞。对于初学者来说,我建议从基础版镜像开始慢慢构建istio,这样可以更好地学习k8s的命令。当然,如果你已经是k8s的老手,除了别跳过visualBox的过程外,你可以直接下载已经搭建好的istio虚拟机镜像。好的,这一章就到此结束了。记得关注我的公众号,我的宗旨是让你用最小的成本学习到最多的技术内容。

5分钟安装Kubernetes+带你轻松安装istio服务网格指南的更多相关文章

  1. PHP5不重新编译,如何安装自带的未安装过的扩展,如soap扩展?

    在虚拟机的CentOS5.5中,一键安装了PHP运行环境,但发现并没有 soap 扩展,而近期项目用需要用到 webservice. 上述的一键安装(lamp0.4),其实是源码编译安装,PHP配置文 ...

  2. 二进制安装 kubernetes 1.12(二) - 安装docker, 部署Flannel网络

    在 node 节点上安装 docker 参考 https://www.cnblogs.com/klvchen/p/8468855.html Flannel 工作原理: 部署Flannel网络 在 ma ...

  3. 二进制安装 kubernetes 1.12(一) - 安装 ETCD

    软件环境 软件 版本 操作系统 CentOS 7.4 Docker 18-ce Kubernetes 1.12 服务器角色 角色 IP 组件 k8s-master 192.168.0.205 kube ...

  4. 【译文连载】 理解Istio服务网格(第二章 安装)

    全书目录 第一章 概述 本文目录 1.命令行工具安装 2. Kubernetes/OpenShift安装 3. Istio安装 4.示例Java微服务安装 4.1 源码概览 4.2 编译和部署cust ...

  5. 使用kubeadm 安装 kubernetes 1.15.1

    简介: Kubernetes作为Google开源的容器运行平台,受到了大家的热捧.搭建一套完整的kubernetes平台,也成为试用这套平台必须迈过的坎儿.kubernetes1.5版本以及之前,安装 ...

  6. 安装Kubernetes集群时遇到的问题及解决方法

    在搭建Kubernetes集群时遇到一些问题,记录在这里. 搭建过程在另一篇文章:VirtualBox上使用kubeadm安装Kubernetes集群 1. 虚拟机安装完CentOS7登录时遇到war ...

  7. linux(centos8):安装kubernetes worker节点并加入到kubernetes集群(kubernetes 1.18.3)

    一,安装kubernetes前的准备工作      安装前的准备工作(master\worker都要进行)      参见: https://www.cnblogs.com/architectfore ...

  8. CentOS6.3 编译安装LAMP(2):编译安装 Apache2.2.25

    所需源码包: /usr/local/src/Apache-2.2.25/httpd-2.2.25.tar.gz 编译安装 Apache2.2.25 #切换到源码目录 cd /usr/local/src ...

  9. CentOS6.3 编译安装LAMP(2):编译安装 Apache2.4.6

    Apache官方说: 与Apache 2.2.x相比,Apache 2.4.x提供了很多性能方面的提升,包括支持更大流量.更好地支持云计算.利用更少的内存处理更多的并发等.除此之外,还包括性能提升.内 ...

  10. CentOS6.3 编译安装LAMP(3):编译安装 MySQL5.5.25

    所需源码包: /usr/local/src/MySQL-5.5.25/cmake-2.8.8.tar.gz /usr/local/src/MySQL-5.5.25/mysql-5.5.25.tar.g ...

随机推荐

  1. arthas的安装及使用

    arthas的安装及使用 官方文档 安装 #1.下载 https://arthas.aliyun.com/download/latest_version?mirror=aliyun #2.将下载文件上 ...

  2. Linux 内核设备驱动程序的IO寄存器访问 (下)

    Linux 内核设备驱动程序通过 devm_regmap_init_mmio() 等函数获得 struct regmap 结构对象,该对象包含可用于访问设备寄存器的全部信息,包括定义访问操作如何执行的 ...

  3. 使用API接口获取商品数据

    ​ 在当今的数字化时代,商品数据的获取对于各种规模的企业来说都至关重要.这些数据可以帮助企业进行市场分析,制定销售策略,优化库存管理,以及实现精准营销.API(应用程序编程接口)是一种便捷的方式来获取 ...

  4. 数据api接口就是应用集成吗?

    ​ 数据 API 接口和应用集成是两个不同的概念,但是它们之间有一定的联系.数据 API 接口是一种用于访问和传输数据的标准化接口,而应用集成则是将不同的应用程序和系统整合在一起,实现数据和业务流程的 ...

  5. Redis系列22:Redis 的Pub/Sub能力

    Redis系列1:深刻理解高性能Redis的本质 Redis系列2:数据持久化提高可用性 Redis系列3:高可用之主从架构 Redis系列4:高可用之Sentinel(哨兵模式) Redis系列5: ...

  6. JSTL fn函数使用总结

    首先,我们要在页面的最上方引用: <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/function ...

  7. Spark入门系列视频教程

     视频目录: Spark入门| 01 Spark概念架构 Spark入门| 02 Spark集群搭建 Spark入门| 03 Spark Shell算子操作 Spark入门| 04 Spark单词计数 ...

  8. [Python] 今天开始学习Python3了, 纪念一下

    #! /usr/bin/env python3 import time print("你好, 请告诉我你的名字.") name = input("名前: ") ...

  9. C++ bitset 用法和应用

    C++的 bitset 在 bitset 头文件中,它是一种类似数组的结构,它的每一个元素只能是0或1,每个元素仅用1bit空间. 下面是具体用法 构造函数 bitset常用构造函数有四种,如下 bi ...

  10. Vue源码学习(十二):列队处理(防抖优化,多次调用,只处理一次)

    好家伙, 本篇讲的是数据更新请求列队处理 1.一些性能问题 数据更新的核心方法是watcher.updata方法 实际上也就是vm._updata()方法, vm._updata()方法中的patch ...