云原生Istio安装和使用1

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 云原生Istio安装和使用1

1 Kubernetes集群环境

Istio支持在不同的平台下安装其控制平面,例如Kubernetes、Mesos和虚拟机等。

课程上以 Kubernetes 为基础讲解如何在集群中安装 Istio (Istio 1.0.6 要求Kubernetes的版本在1.11及以上)。

可以在本地或公有云上搭建Istio环境,也可以直接使用公有云平台上已经集成了Istio的托管服务。

目前有许多软件提供了在本地搭建Kubernetes集群的能力,例如Minikube/kubeadm都可以搭建kubernetes集群,我这边所选用的是kubeadm来安装Kubernetes集群。
Kubeadm 是一个工具,它提供了 kubeadm init 以及 kubeadm join 这两个命令作为快速创建 kubernetes 集群的最佳实践。

准备机器

两台centos7的虚拟机,地址分别为

192.168.187.137

192.168.187.138

大家根据自己的情况来准备centos7的虚拟机。
虚拟机要保证彼此之间能够ping通,也就是处于同一个网络中。
Kubernets官网推荐虚拟机的配置最低要求:2核2G(这边建议最低2核3G配置)

Docker环境

在每一台机器上都安装好Docker,我这边使用的版本为18.09.0
# docker查看版本命令
  docker --version

修改hosts文件

(1)设置master角色,在192.168.187.138打开hosts文件

# 打开hosts文件
vi /etc/hosts
# 设置192.168.187.138为master的hostname,用m来表示
192.168.187.138 m
# 设置192.168.187.137为worker的hostname,用w1来表示
192.168.187.137 w1

(2)设置worker角色,在192.168.187.137打开hosts文件

# 打开hosts文件
vi /etc/hosts
# 设置192.168.187.138为master的hostname,用m来表示
192.168.187.138 m
# 设置192.168.187.137为worker的hostname,用w1来表示
192.168.187.137 w1

(3)使用ping测试一下

ping m

ping w1

kubeadm安装版本

安装的版本是1.14.0

kubernetes集群网络插件-calico

calico网络插件:https://docs.projectcalico.org/v3.9/getting-started/kubernetes/

calico,同样在master节点上操作

Calico为容器和虚拟机工作负载提供一个安全的网络连接。

验证 Kubernetes安装

1)在master节点上检查集群信息

命令:kubectl get nodes

2)监控 w1节点的状态 :kubectl get nodes -w

监控成 ready状态

3)查询pod 命令:kubectl get pods -n kube-system

注意:Kubernetes集群安装方式有很多,大家可以安装自己熟悉的方式搭建Kubernetes, 这里只是介绍本次课程上使用的kubernets集群环境

2 安装Istio

在Istio的版本发布页面https://github.com/istio/istio/releases/tag/1.0.6下载安装包并解压(我用的是一个比较稳定的版本1.0.6版本,放到master上面,以Linux平台的istio-1.0.6-linux.tar.gz为例)

1.解压tar -xzf istio-1.0.6-linux.tar.gz

2.进入istio目录cd istio-1.0.6/

Istio的安装目录及其说明


文件/文件夹 说明
bin 包含客户端工具,用于和Istio APIS交互
install 包含了Consul和Kubernetes平台的Istio安装脚本和文件,在Kubernetes平台上分为YAML资源文件和Helm安装文件
istio.VERSION 配置文件包含版本信息的环境变量
samples 包含了官方文档中用到的各种应用实例如bookinfo/helloworld等等,这些示例可以帮助读者理解Istio的功能以及如何与Istio的各个组件进行交互
tools 包含用于性能测试和在本地机器上进行测试的脚本文件和工具

有以下几种方式安装Istio:

  • 使用install/kubernetes文件夹中的istio-demo.yaml进行安装;
  • 使用Helm template渲染出Istio的YAML安装文件进行安装;
  • 使用Helm和Tiller方式进行安装。

课程中使用的是使用install/kubernetes文件夹中的istio-demo.yaml进行安装

2.1 快速部署Istio

Kubernetes CRD介绍

比如Deployment/Service/etc等资源是kubernetes本身就支持的类型,除了这些类型之外kubernetes还支持资源的扩展,说白了就是可以自定义资源类型,如果没有CRD的支持的话,istio一些资源类型是创建不成功的

#crds.yaml路径:
istio-1.0.6/install/kubernetes/helm/istio/templates/crds.yaml
# 执行
kubectl apply -f crds.yaml
# 统计个数
kubectl get crd -n istio-system | wc -l

Kubernetes平台对于分布式服务部署的很多重要的模块都有系统性的支持,借助如下一些平台资源可以满足大多数 分布式系统部署和管理的需求,但是在不同应用业务环境下,对于平台可能有一些特殊的需求,这些需求可以抽象为Kubernetes的扩展资源,而 Kubernetes的CRD(CustomResourceDefifinition)为这样的需求提供了轻量级的机制

执行安装命令

(1)根据istio-1.0.6/install/kubernetes/istio-demo.yaml创建资源

kubectl apply -f istio-demo.yaml
# 会发现有这么多的资源被创建了,很多很多 ,里面的命名空间用的是istio-system

2)查看核心组件资源

kubectl get pods -n istio-system 
kubectl get svc -n istio-system

可以看到有3个是completed,其它的组件都必须是running, completed表示的是用的是k8s里面JOB资源,表示这个任务已经执行结束了可以看到比如citadel有了,pilot有了,sidecar也有了,其它的比如ingress网关都有了,监控也有了

2.2 回顾K8S组件以及使用

回顾课程涉及到的kubernetes组件

2.2.1 Deployment

一旦运行了 Kubernetes 集群,就可以在其上部署容器化应用程序。 为此,需要创建 Kubernetes Deployment 配置。
Deployment 负责 Kubernetes 如何创建和更新应用程序的实例。
创建 Deployment 后,Kubernetes master 将应用程序实例调度到集群中的各个节点上。

创建nginx_deployment.yaml文件

apiVersion: apps/v1 ## 定义了一个版本
kind: Deployment ##k8s资源类型是Deployment
metadata: ## metadata这个KEY对应的值为一个Maps
  name: nginx-deployment ##资源名字 nginx-deployment
  labels: ##将新建的Pod附加Label
    app: nginx ##一个键值对为key=app,valuen=ginx的Label。
spec: #以下其实就是replicaSet的配置
  replicas: 3 ##副本数为3个,也就是有3个pod
  selector: ##匹配具有同一个label属性的pod标签
    matchLabels: ##寻找合适的label,一个键值对为key=app,value=nginx的Labe
      app: nginx
  template: #模板
    metadata:
      labels: ##将新建的Pod附加Label
        app: nginx
    spec:
      containers:  ##定义容器
      - name: nginx ##容器名称
        image: nginx:1.7.9 ##镜像地址
        ports:
        - containerPort: 80 ##容器端口

(1)执行资源文件命令

kubectl apply -f nginx_deployment.yaml

(2)查看pod

kubectl get pods
查看pod详情
kubectl get pods -o wide

(3)查看deployment命令

kubectl get deployment

(4)查看deployment详情命令

kubectl get deployment -o wide

2.2.2 Labels and Selectors

顾名思义,就是给一些资源打上标签的

labels

当资源很多的时候可以用可以用labels标签来对资源分类

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
 # 表示名称为nginx-pod的pod,有一个label,key为app,value为nginx。
 #我们可以将具有同一个label的pod,交给selector管理

selectors

如果我想使用这个标签里面的k8s资源,那么需要用到k8s里面selector组件,用selector来匹配到特定的的label

apiVersion: apps/v1
kind: Deployment
metadata: 
  name: nginx-deployment
  labels:  # 定义了一个labels,key=app,value=nginx
    app: nginx
spec:
  replicas: 3
  selector:             # 用selector匹配具有同一个label属性的pod标签
    matchLabels:
      app: nginx         

查看pod的label标签命令:

kubectl get pods --show-labels

2.2.3 Namespace

命名空间就是为了隔离不同的资源。比如:Pod、Service、Deployment等。可以在输入命令的时候指定命名空间`-n`,如果不指定,则使用

查看一下当前的所用命名空间:kubectl get namespaces/ns

查看一下kube-system命名空间:kubectl get pods -n kube-system

(1)创建自己的namespace

my-namespace.yaml

apiVersion: v1
kind: Namespace
metadata:
    name: myns

(2)执行命令:kubectl apply -f my-namespace.yaml

(3)查看命令

kubectl get ns

删除命名空间

kubectl delete namespaces 空间的名字

注意:
删除一个namespace会自动删除所有属于该namespace的资源。
default和kube-system命名空间不可删除。


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
11月前
|
Cloud Native
云盾·数据库审计中d100适用于自建和云原生的统一日志审计吗? 客户端或APP端安装Agent是否必要?
云盾·数据库审计中d100适用于自建和云原生的统一日志审计吗? 客户端或APP端安装Agent是否必要?
63 1
|
25天前
|
Kubernetes 监控 容器
Istio安装及Bookinfo环境部署
文章详细介绍了如何在Kubernetes集群上安装和配置Istio服务网格,并通过部署Bookinfo示例应用来演示Istio的核心功能,如流量管理、服务监控和故障注入等。
34 1
Istio安装及Bookinfo环境部署
|
2月前
|
Cloud Native 关系型数据库 Java
云原生数据仓库使用问题之如何安装PL/Java插件
阿里云AnalyticDB提供了全面的数据导入、查询分析、数据管理、运维监控等功能,并通过扩展功能支持与AI平台集成、跨地域复制与联邦查询等高级应用场景,为企业构建实时、高效、可扩展的数据仓库解决方案。以下是对AnalyticDB产品使用合集的概述,包括数据导入、查询分析、数据管理、运维监控、扩展功能等方面。
|
4月前
|
Ubuntu Linux Docker
【云原生|Docker系列第2篇】Docker的安装和配置
【云原生|Docker系列第2篇】Docker的安装和配置
398 1
|
4月前
|
Kubernetes Cloud Native Linux
云原生|kubernetes|rancher-2.6.4安装部署简明手册
云原生|kubernetes|rancher-2.6.4安装部署简明手册
1015 0
云原生|kubernetes|rancher-2.6.4安装部署简明手册
|
4月前
|
Kubernetes Cloud Native 虚拟化
云原生|kubernetes|minikube的部署安装完全手册(修订版)
云原生|kubernetes|minikube的部署安装完全手册(修订版)
1074 1
|
4月前
|
缓存 Cloud Native 应用服务中间件
云原生 Nginx安装&配置解析
【1月更文挑战第8天】云原生 Nginx安装&配置解析
|
4月前
|
Prometheus Cloud Native Unix
prometheus|云原生|kubernetes内部安装prometheus
prometheus|云原生|kubernetes内部安装prometheus
130 0
|
4月前
|
Prometheus Cloud Native 关系型数据库
prometheus|云原生|prometheus项目安装postgres-exporter监视组件的部署简介
prometheus|云原生|prometheus项目安装postgres-exporter监视组件的部署简介
242 0
|
4月前
|
Kubernetes Cloud Native Linux
云原生|kubernetes|kubernetes的网络插件calico和flannel安装以及切换
云原生|kubernetes|kubernetes的网络插件calico和flannel安装以及切换
1106 0