一次成功:搭建K8S集群以及ISTIO环境

一、概述

本文主要讲述在centos7环境下如何使用kubeadm工具快速搭建一个k8s集群。同时也讲述了如何安装Istio

k8s版本:1.20.6

istio版本:1.5.1

二、准备工作

2.1 机器环境

  • 操作系统:centos7 64位

  • 硬件配置:2g RAM 2个cpu 硬盘40g

主机名角色IP
mastermaster192.168.0.19
node1node1192.168.0.20
node2node2192.168.0.21

分别在每台机器上执行

1# 关闭防火墙 2systemctl stop firewalld 3systemctl disable firewalld 4 5# 关闭selinux 6sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久 7setenforce 0 # 临时 8 9# 关闭swap 10swapoff -a # 临时 11sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久 12 13# 根据规划设置主机名 14hostnamectl set-hostname <hostname> 15 16# 在master添加hosts 17cat >> /etc/hosts << EOF 18192.168.44.146 k8smaster 19192.168.44.145 k8snode1 20192.168.44.144 k8snode2 21EOF 22 23# 将桥接的IPv4流量传递到iptables的链 24cat > /etc/sysctl.d/k8s.conf << EOF 25net.bridge.bridge-nf-call-ip6tables = 1 26net.bridge.bridge-nf-call-iptables = 1 27EOF 28sysctl --system # 生效 29 30# 时间同步 31yum install ntpdate -y 32ntpdate time.windows.com

2.2 软件环境

安装docker

Kubernetes默认CRI(容器运行时)为Docker,因此先安装Docker。

1$ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo 2$ yum -y install docker-ce-18.06.1.ce-3.el7 3$ systemctl enable docker && systemctl start docker 4$ docker --version 5Docker version 18.06.1-ce, build e68fc7a
1$ cat > /etc/docker/daemon.json << EOF 2{ 3 "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"] 4} 5EOF

添加阿里云YUM软件源

1$ cat > /etc/yum.repos.d/kubernetes.repo << EOF 2[kubernetes] 3name=Kubernetes 4baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 5enabled=1 6gpgcheck=0 7repo_gpgcheck=0 8gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg 9EOF

安装kubeadm,kubelet和kubectl

1$ yum install -y kubelet-1.20.6 kubeadm-1.20.6 kubectl-1.20.6 2$ systemctl enable kubelet

三、安装

3.1 部署k8s Master

在 192.168.0.19(Master)执行。

1$ kubeadm init \ 2 --apiserver-advertise-address=192.168.0.19 \ 3 --image-repository registry.aliyuncs.com/google_containers \ 4 --kubernetes-version v1.20.6 \ 5 --service-cidr=10.96.0.0/12 \ 6 --pod-network-cidr=10.244.0.0/16

注:

  • apiserver-advertise-address 需要修改为自己的ip地址
  • kubernetes-version 这里的版本号要和上面安装的版本号一致
  • image-repository 手动配置阿里云镜像地址,国内网络环境,你懂的

安装完成后,会看到successful 字样的提示,同时也会给你一段提示,按照提示执行以下命令

1mkdir -p $HOME/.kube 2sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config 3sudo chown $(id -u):$(id -g) $HOME/.kube/config 4$ kubectl get nodes

同时需要copy下 最后输出的kuadm join那段文字,如下

1$ kubeadm join 192.168.0.19:6443 --token esce21.q6hetwm8si29qxwn \ 2 --discovery-token-ca-cert-hash sha256:00603a05805807501d7181c3d60b478788408cfe6cedefedb1f97569708be9c5

3.2 部署node节点

把刚刚copy 的kuadm join那段文字,粘贴到node节点执行

默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,操作如下:

1kubeadm token create --print-join-command

3.3 部署CNI网络插件

如果不安装则集群间的网络会不通

1kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

查看是否安装完成

1kubectl get pods -n kube-system

image-20211103235353917

出现图中红框(因为我有3个机器,所以是3个)且状态均为Running,则表示安装成功

使用get node查看节点信息

1kubectl get nodes

image-20211103235537643

状态均为Ready,则表示K8S 集群安装成功

四、安装istio

首先 下载安装包,因为我们要安装1.5.1版本,所以需要指定版本

1curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.5.1 TARGET_ARCH=x86_64 sh -

之后,会多出一个istio-1.5.1的目录 ,

istio-1.5.1/bin 配置到 path 中

1vim /etc/profile 2### 将下面这个内容添加到文件末尾 3export PATH=$PATH:/root/istio-1.5.1/bin

之后就可以使用istioctl命令行工具了,该命令行工具具有用户输入校验功能,可以防止错误的安装和自定义选项。

我们使用demo的配置进行安装

1istioctl manifest apply --set profile=demo

安装命令运行成功后,检查 Kubernetes 服务是否部署正常,检查除 jaeger-agent 服务外的其他服务,是否均有正确的 CLUSTER-IP

1$ kubectl get svc -n istio-system 2NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE 3grafana ClusterIP 10.108.112.31 <none> 3000/TCP 24s 4istio-egressgateway ClusterIP 10.106.157.7 <none> 80/TCP,443/TCP,15443/TCP 26s 5istio-ingressgateway LoadBalancer 10.110.57.34 <pending> 15020:31817/TCP,80:30733/TCP,443:31910/TCP,15029:32168/TCP,15030:31733/TCP,15031:31981/TCP,15032:30531/TCP,31400:31169/TCP,15443:31131/TCP 26s 6istio-pilot ClusterIP 10.110.196.147 <none> 15010/TCP,15011/TCP,15012/TCP,8080/TCP,15014/TCP,443/TCP 46s 7istiod ClusterIP 10.104.27.234 <none> 15012/TCP,443/TCP 46s 8jaeger-agent ClusterIP None <none> 5775/UDP,6831/UDP,6832/UDP 24s 9jaeger-collector ClusterIP 10.103.156.147 <none> 14267/TCP,14268/TCP,14250/TCP 24s 10jaeger-collector-headless ClusterIP None <none> 14250/TCP 24s 11jaeger-query ClusterIP 10.110.109.206 <none> 16686/TCP 24s 12kiali ClusterIP 10.96.182.125 <none> 20001/TCP 24s 13prometheus ClusterIP 10.104.167.86 <none> 9090/TCP 24s 14tracing ClusterIP 10.102.230.151 <none> 80/TCP 24s 15zipkin ClusterIP 10.111.66.10 <none> 9411/TCP 24s

检查相关 pod 是否部署成功:

1$ kubectl get pods -n istio-system 2NAME READY STATUS RESTARTS AGE 3grafana-5cc7f86765-jxdcn 1/1 Running 0 4m24s 4istio-egressgateway-598d7ffc49-bdmzw 1/1 Running 0 4m24s 5istio-ingressgateway-7bd5586b79-gnzqv 1/1 Running 0 4m25s 6istio-tracing-8584b4d7f9-tq6nq 1/1 Running 0 4m24s 7istiod-646b6fcc6-c27c7 1/1 Running 0 4m45s 8kiali-696bb665-jmts2 1/1 Running 0 4m24s 9prometheus-6c88c4cb8-xchzd 2/2 Running 0 4m24s

如果所有组件对应的 PodSTATUS都变为Running,则说明 Istio 已经安装完成了。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )