作者丨Mitsuyuki Shiiba

原文链接:

https://dev.to/bufferings/tried-k8s-istio-in-my-local-machine-with-k3d-52gg

在之前的文章里我们介绍了如何使用k3d创建k3s集群,并且了解到k3d能为我们搭建本地k3s环境提供非常大的便利。本文将探索k3d的另一种使用方式,将Istio安装在k3d上,并在本地环境中使用。

本文为社区用户一个简短的实践记录,其需求是在本地机器上运行Kubernetes以方便检查某些东西。他之前一直在使用minikube和Docker Desktop的方案,偶然发现了k3d这个工具,于是将其实践过程记录了下来。

也欢迎大家向我们踊跃投稿自己的相关实践,添加k3s小助手微信(k3s2019)即可投稿。

安装并配置k3d

Github链接:https://github.com/rancher/k3d

正如之前的文章所介绍的,k3d的原理就是在容器里面运行k3s。接下来,我就开始进行操作了。我的笔记本电脑使用的是Ubuntu系统。首先,我先使用以下命令安装k3d:

$ curl -s https://raw.githubusercontent.com/rancher/k3d/master/install.sh | bash

然后创建一个集群并为kubectl设置配置:

$ k3d create
$ export KUBECONFIG=$(k3d get-kubeconfig)

成功了!

$ kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system local-path-provisioner-58fb86bdfd-kvmdh 1/1 Running 0 3m40s
kube-system coredns-57d8bbb86-grbbr 1/1 Running 0 3m40s
kube-system helm-install-traefik-4qr7t 0/1 Completed 0 3m40s
kube-system svclb-traefik-j8c49 3/3 Running 0 3m5s
kube-system traefik-65bccdc4bd-vtk9r 1/1 Running 0 3m5s $ kubectl get svc -A
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 5m57s
kube-system kube-dns ClusterIP 10.43.0.10 <none> 53/UDP,53/TCP,9153/TCP 5m56s
kube-system traefik LoadBalancer 10.43.80.235 192.168.48.2 80:30107/TCP,443:31822/TCP,8080:31373/TCP 5m5s

由上面的代码可以看出来,k3d使用的是traefik来进行LoadBalancer服务。

在k3d上可以安装Istio吗?

此时,我脑袋里冒出了一个想法,是否能将Istio运行在上面呢。然后,我找到了这个issue:

https://github.com/rancher/k3d/issues/104

根据这个issue的描述,在关闭了traefik以避免端口冲突之后,即可在上面成功运行Istio。

接下来,我来试试看。

创建没有traefik的k3d集群

# Delete the previous cluster
$ k3d delete # Create a cluster without traefik
$ k3d create --server-arg --no-deploy --server-arg traefik # Generate config
$ export KUBECONFIG=$(k3d get-kubeconfig) # Check
$ kubectl get pod,svc -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system pod/local-path-provisioner-58fb86bdfd-h6npn 1/1 Running 0 13m
kube-system pod/coredns-57d8bbb86-zkjkq 1/1 Running 0 13m NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default service/kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 13m
kube-system service/kube-dns ClusterIP 10.43.0.10 <none> 53/UDP,53/TCP,9153/TCP 13m

现在,我已经准备好在上面安装Istio了。

安装Istio

在本文成文时Istio 1.4刚刚发布不久,因此我先使用Istio 1.3进行尝试。

从下方链接中可以下载Istio:

https://github.com/istio/istio/releases/tag/1.3.5

我根据官网文档上的步骤来安装Istio:

https://istio.io/docs/setup/install/helm/

因为我已经在我的笔记本上安装了Helm,所以在安装过程中我选择helm template的选项:

# Create a namespace for Istio
$ kubectl create namespace istio-system # Install CRDs
$ helm template install/kubernetes/helm/istio-init --name istio-init --namespace istio-system | kubectl apply -f - # Wait for the generation of the CRDs
$ kubectl -n istio-system wait --for=condition=complete job --all

我发现命令已经更改。之前,要检查是否创建了23个CRD通常使用wc命令,但现在它使用的是kubectl wait –for

$ helm template install/kubernetes/helm/istio --name istio --namespace istio-system | kubectl apply -f -

出乎意料的是,在整个过程中没有出现error。这也许是我第一次如此顺利地安装Istio。

kubectl get svc,pod -n istio-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/istio-galley ClusterIP 10.43.10.191 <none> 443/TCP,15014/TCP,9901/TCP 2m21s
service/istio-policy ClusterIP 10.43.86.131 <none> 9091/TCP,15004/TCP,15014/TCP 2m21s
service/istio-telemetry ClusterIP 10.43.11.107 <none> 9091/TCP,15004/TCP,15014/TCP,42422/TCP 2m21s
service/istio-pilot ClusterIP 10.43.126.19 <none> 15010/TCP,15011/TCP,8080/TCP,15014/TCP 2m21s
service/prometheus ClusterIP 10.43.41.148 <none> 9090/TCP 2m21s
service/istio-citadel ClusterIP 10.43.91.217 <none> 8060/TCP,15014/TCP 2m21s
service/istio-sidecar-injector ClusterIP 10.43.117.133 <none> 443/TCP,15014/TCP 2m21s
service/istio-ingressgateway LoadBalancer 10.43.69.0 192.168.96.2 15020:30845/TCP,80:31380/TCP,443:31390/TCP,31400:31400/TCP,15029:31842/TCP,15030:32247/TCP,15031:32685/TCP,15032:31093/TCP,15443:30499/TCP 2m21s NAME READY STATUS RESTARTS AGE
pod/istio-init-crd-10-1.3.5-28hj7 0/1 Completed 0 5m40s
pod/istio-init-crd-11-1.3.5-vmwmw 0/1 Completed 0 5m40s
pod/istio-init-crd-12-1.3.5-84q77 0/1 Completed 0 5m40s
pod/istio-security-post-install-1.3.5-jb66j 0/1 Completed 0 2m21s
pod/svclb-istio-ingressgateway-ww22d 9/9 Running 0 2m21s
pod/istio-citadel-5c67db5cb-hmhvb 1/1 Running 0 2m20s
pod/prometheus-6f74d6f76d-tpjpc 1/1 Running 0 2m20s
pod/istio-policy-66d87c756b-hf4wx 2/2 Running 3 2m21s
pod/istio-galley-56b9fb859d-7jmsq 1/1 Running 0 2m21s
pod/istio-sidecar-injector-5d65cfcd79-lhh6k 1/1 Running 0 2m20s
pod/istio-pilot-64478c6886-9xm7b 2/2 Running 0 2m20s
pod/istio-telemetry-5d4c4bfbbf-g4ccz 2/2 Running 4 2m20s
pod/istio-ingressgateway-7b766b6685-5vwg5 1/1 Running 0 2m21s

接下来,我将尝试在Istio上运行一个示例应用程序。

部署bookinfo示例应用程序

为了能够检查其能否正常运行,我部署了一个bookinfo示例应用程序到Istio中:

https://istio.io/docs/examples/bookinfo/

# Enable automatic sidecar injection
$ kubectl label namespace default istio-injection=enabled # Deploy apps
$ kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml # Wait for the deployment finished for example using watch
$ kubectl get pods -w
NAME READY STATUS RESTARTS AGE
details-v1-78d78fbddf-5db8b 0/2 PodInitializing 0 37s
reviews-v1-7bb8ffd9b6-rdgjc 0/2 PodInitializing 0 37s
ratings-v1-6c9dbf6b45-p7567 0/2 PodInitializing 0 36s
productpage-v1-596598f447-nj6wx 0/2 PodInitializing 0 36s
reviews-v3-68964bc4c8-qrhc4 0/2 PodInitializing 0 37s
reviews-v2-d7d75fff8-65f4q 0/2 PodInitializing 0 37s # Create ingress gateway for bookinfo
$ kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml

然后,确认LoadBalancer服务的外部IP:

$ kubectl get svc  -n istio-system istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}'
192.168.96.2

并使用该IP打开以下URL:

http://{The IP Address}/productpage

成功了!

Bookinfo容器的内存使用量约为2GB:

$ docker stats --no-stream
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
598bd6d07c85 k3d-k3s-default-server 52.24% 1.909GiB / 15.4GiB 12.40% 819MB / 21.7MB 1.41MB / 818MB 899

经过以上实践可知,使用k3d在本地运行Kubernetes极为方便,它为研发侧提供了极为便捷的Kubernetes基础设施。

正如你所知,k3d是k3s周边工具中的一个,通过本文我们已经体会到其带来的便捷之处。如果你还想更深入地了解k3d或了解k3s其他周边工具,欢迎预约今天晚上的直播课程。预约链接:http://z-mz.cn/Pmxd

在k3d上快速安装Istio,助你在本地灵活使用K8S!的更多相关文章

  1. 在 Windows 上快速安装并运行 Laravel 5.x

    安装 PHP 注意一:Laravel 5.0 开始对 PHP 版本的要求是 >=5.4,Laravel 5.1 要求 PHP 版本>=5.5.9,所以,建议大家尽量安装 5.5.x 的最新 ...

  2. 中国用户mac上快速安装nodejs

    mac nodejs 安装 1.http://npm.taobao.org/mirrors/node/latest/ 进入这个域名,然后找到最新的pkg包下载过来 2.双击pkg包,下一步下一步安装 ...

  3. CentOS上快速安装saltstack

    查看当前centos版本号 cat /etc/redhat-release 查看内核版本 uname -r 主机 1.安装master(在第一台机器上安装master) 执行: wget -O /et ...

  4. ES--在windows上快速安装

    环境准备 java环境部署: Java下载路径:http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a ...

  5. 图例演示在Linux上快速安装软RAID的详细步骤

    物理环境:虚拟机centos6.4 配置:8G内存.2*2核cpu.3块虚拟硬盘(sda,sdb,sdc,sdb和sdc是完全一样的)        在实际生产环境中,系统硬盘与数据库和应用是分开的, ...

  6. laravel5.2/laravel5.3入门指南 Windows 上快速安装并运行 Laravel 5.x

    1 首先要搭建本地服务器环境推荐phpstudy2016及wampServer3.0.6 下载链接可参考 http://www.cnblogs.com/zzcit/p/5823742.html 注意一 ...

  7. 15分钟在阿里云Kubernetes服务上快速建立Jenkins X Platform并运用GitOps管理应用发布

    本文主要介绍如何在阿里云容器服务Kubernetes上快速安装部署Jenkins X Platform并结合demo实践演示GitOps的操作流程. 注意:本文中使用的jx工具.cloud-envir ...

  8. Windows上快速编译caffe CPU版本

    windows上快速安装配置Caffe的 cpu_only环境. 一:安装环境: 1.windows10: 2.Visual Studio2013: 3.Caffe版本:http://github.c ...

  9. WAMP Server助你在Windows上快速搭建PHP集成环境

    WAMP Server助你在Windows上快速搭建PHP集成环境 原文地址 我想只要爬过几天网的同学都会知道PHP吧,异次元的新版本就是基于PHP的WordPress程序制造出来的,还有国内绝大部分 ...

随机推荐

  1. Vue axios 跨域访问Session,两次得到的Session不是同一个Session

    这个问题是因为,后台无法确认你是同一个“人”访问服务器,两次访问都给了你一个全新的Session,所以第一次保存的信息第二次请求无法得到,我的理解是,在跨域中,携带Cookie信息访问,即可让服务器确 ...

  2. js Array 中的 map, filter 和 reduce

    原文中部分源码来源于:JS Array.reduce 实现 Array.map 和 Array.filter Array 中的高阶函数 ---- map, filter, reduce map() - ...

  3. 《软件自动化测试开发-Java和Python测试开发实用指南》出版了

    1.关于书中下载链接的问题:出现404,页面不存在 解答:大小写要区分,l和1不能弄错了 2.关于勘误,出现极个别漏子少字错字 解答:后续版本会改进,目前能理解就好了 ---------------- ...

  4. Mybatis--映射器注解

    因为最初设计时,MyBatis 是一个 XML 驱动的框架.配置信息是基于 XML 的,而且 映射语句也是定义在 XML 中的.而到了 MyBatis 3,有新的可用的选择了.MyBatis 3 构建 ...

  5. Drools 7.15.0 docker容器方式部署

    关于drools的相关介绍就不再赘述了,关于drools网上的资料都很少,或者都有些老了,最近折腾了一下,记录下安装部署的过程,希望能节省下大家的时间. 一.快速部署 1.拉取基础镜像,命令如下: d ...

  6. 方兴未艾的云计算:SoCC 2015大会

    ACM 云计算研讨会(ACM Symposium on Cloud Computing, 以下简称SoCC)是由SIGMOD(Special Interest Group on Management ...

  7. python设置检查点简单实现

    说检查点,其实就是对过去历史的记录,可以认为是log.不过这里进行了简化.举例来说,我现在又一段文本.文本里放有一堆堆的链接地址.我现在的任务是下载那些地址中的内容.另外因为网络的问题或者网站的问题, ...

  8. gcc编译器常用选项的含义

    -w: 关闭编译时的警告, 也就是编译后不显示任何warning,因此有时编译中会出现一些诸如数据转换之类的可忽略警告, -Wall: 显示编译后所有警告 -W: 显示警告,但是只是显示编译器认为的会 ...

  9. flume install

    flume install flume 安装 123456 [root@10 app][root@10 app]# mv apache-flume-1.7.0-bin /mnt/app/flume[r ...

  10. 【最简单的vim教程】vim学习笔记-基础操作

    说明 C-字母 = Ctrl + 字母 char = 任意字符 开始编辑 insert 按键 功能 说明 i(I) insert 当前位置插入(当前行前) a(A) append 当前字符后面插入(当 ...