从头开始搭建kubernetes集群+istio服务网格(1)—— 前期准备、安装docker、kubernetes_kubernetes docker 18.09.8-程序员宅基地

技术标签: 微服务  服务网格  kuernetes  istio  

(win10 + virtualbox6.0 + centos7.6.1810 + docker18.09.8 + kubernetes1.15.1 + istio1.2.3)

本文参考网址:
https://www.jianshu.com/p/e43f5e848da1
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
https://www.jianshu.com/p/1aebf568b786
https://blog.csdn.net/donglynn/article/details/47784393
https://blog.csdn.net/MC_CodeGirl/article/details/79998656
https://blog.csdn.net/andriy_dangli/article/details/85062983
https://docs.projectcalico.org/v3.8/getting-started/kubernetes/installation/calico
https://www.jianshu.com/p/70efa1b853f5
https://blog.csdn.net/weixin_44723434/article/details/94583457
https://preliminary.istio.io/zh/docs/setup/kubernetes/download/
https://www.cnblogs.com/rickie/p/istio.html
https://blog.csdn.net/lwplvx/article/details/79192182
https://blog.csdn.net/qq_36402372/article/details/82991098
https://www.cnblogs.com/assion/p/11326088.html
http://www.lampnick.com/php/823
https://blog.csdn.net/ccagy/article/details/83059349
https://www.jianshu.com/p/789bc867feaa
https://www.jianshu.com/p/dde56c521078

本系列分为三章,第一章是创建虚拟机、docker、kubernetes等一些基础设施;第二章是在此基础上创建一个三节点的kubernetes集群;第三章是再在之上搭建istio服务网格。
本文参考了大量其他优秀作者的创作(已经在开头列出),自己从零开始,慢慢搭建了istio服务网格,每一步都在文章中详细地列出了。之所以要自己重新从头搭建,一方面是很多CSDN、简书或其他平台的教程都已经离现在(2019.8.14)太过遥远,变得不合时宜,单纯地照着别人的路子走会遇到非常多的坑;另一方面是实践出真知。
由于我也是刚开始学习istio服务网格,才疏学浅,难免有不尽如人意的地方,还请见谅。

1 系统CentOS 下载

官网下载
DVD ISO:标准安装版,一般下载这个就可以了(推荐)
Minimal ISO:迷你版,小巧、安装快速、自带的软件少
DVD ISO:标准安装版,一般下载这个就可以了(推荐)Everything ISO:对完整版安装盘的软件进行补充,集成所有软件。(包含CentOS7的一套完整的软件包,可以用来安装系统或者填充本地镜像)Minimal ISO:迷你版,小巧、安装快速、自带的软件少
点进去之后选择阿里云
在这里插入图片描述然后就是正常的下载

2 虚拟机 virtualbox 下载

官网下载
之所以选择virtualbox 而不是vmware,是因为另一个教程上这样做的,所以…,等搭建完熟悉流程后就可以随心所欲啦。
在这里插入图片描述正常下载
在这里插入图片描述

3 创建虚拟机

打开安装好的VirtualBox,新建
在这里插入图片描述控制→新建
如下图进行设置
在这里插入图片描述内存至少2G
在这里插入图片描述默认
在这里插入图片描述在这里插入图片描述在这里插入图片描述虚拟硬盘至少20G
在这里插入图片描述创建成功
在这里插入图片描述接下来安装操作系统
点击设置
在这里插入图片描述如图

在这里插入图片描述选择之前下载好的 .iso 文件,正常安装 。
开启虚拟机,安装CentOS。
一些注意选项如下:
在这里插入图片描述如下图正在安装
在这里插入图片描述重启完成安装。
在这里插入图片描述

4 将xshell和虚拟机连接起来

接下来进行虚拟机的配置。由于直接在VirtualBox里操作bash是一件非常恶心的事情,我们使用第三方的终端模拟软件来控制虚拟机,本文选择的是xshell,当然其他的也可以。
返回virtualbox的控制界面,点开设置。
在这里插入图片描述

由于VirtualBox
默认使用NAT网络转换,宿主机无法直接访问虚拟机,但我们只要简单的在NAT网卡上添加端口转发,即可访问虚拟机。这里,我们通过端口转发暴露虚拟机的SSH端口(22),就可以远程连接到虚拟机。
在设置中,选择“网络”=>“网卡1”>=“高级”>=“端口转发”:

在这里插入图片描述

在我们真实的物理机上,可以利用Xshell,通过端口9000连接到虚拟机终端上。打开Xshell,新建一个连接。注意,因为端口是映射到宿主机上的,所以主机地址要填写为127.0.0.1:

打开Xshell如下配置新建会话。
在这里插入图片描述登陆成功(这里折腾了一会)
在这里插入图片描述

关闭图形界面 CentOS 7
安装好后,登录时默认启用了很占资源的图形界面,若启动三个虚拟机更会卡的飞起。因此,我们可以通过如下命令切换默认的登录方式:

命令模式 systemctl set-default multi-user.target

图形模式 systemctl set-default graphical.target
这里,强烈建议切换为命令模式,所有的操作都通过Xshell进行足以。注意,上面的命令执行后重启生效。

试了很多次一直失败,如下
在这里插入图片描述然后发现是需要需要进入root,使用su直接进入继续失败。

[centos_master@localhost ~]$ su
密码:
su: 鉴定故障

继续查资料,修改成

[centos_master@localhost ~]$ sudo su root

我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:

    #1) 尊重别人的隐私。
    #2) 输入前要先考虑(后果和风险)。
    #3) 权力越大,责任越大。

[sudo] centos_master 的密码:
[root@localhost centos_master]# ^C
[root@localhost centos_master]# systemctl set-default multi-user.target
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target.
[root@localhost centos_master]# 

成功!
重启虚拟机,已经成功从图形界面变成命令模式。

备注:之后基本使用xshell连接虚拟机之后的第一件事就是sudo su root

在这里插入图片描述

5 虚拟机的一些基础配置

5.1 配置yum源

不建议使用CentOS 7自带的yum源,因为安装软件和依赖时会非常慢甚至超时失败。这里,我们使用阿里云的源予以替换,执行如下命令,替换文件/etc/yum.repos.d/CentOS-Base.repo:

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 
yum makecache

5.2 关闭防火墙

防火墙一定要提前关闭,否则在后续安装K8S集群的时候是个trouble maker。执行下面语句关闭,并禁用开机启动:

[root@localhost centos_master]# systemctl stop firewalld & systemctl disable firewalld
[1] 4223
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

5.3 关闭Swap

类似ElasticSearch集群,在安装K8S集群时,Linux的Swap内存交换机制是一定要关闭的,否则会因为内存交换而影响性能以及稳定性。这里,我们可以提前进行设置。

临时关闭swap分区, 重启失效:

swapoff -a

永久关闭swap分区:

sed -ri 's/.*swap.*/#&/' /etc/fstab

建议永久关闭,之后如下图即为正常:
在这里插入图片描述

6 安装docker

安装kubernetes前,必须要先安装Docker。

6.1 添加阿里云的Docker仓库

[root@localhost centos_master]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@localhost centos_master]# yum makecache

6.2 执行以下命令,安装最新版Docker

[root@localhost centos_master]# yum install docker-ce -y

6.3 安装成功后,如下图所示

在这里插入图片描述

运行docker --version,可以看到安装了截止目前最新的18.09.8版本:

[root@localhost centos_master]# docker --version
Docker version 18.09.8, build 0dd43dd87f

6.4 启动Docker服务并激活开机启动

[root@localhost centos_master]# systemctl start docker & systemctl enable docker

6.5 验证

[root@localhost centos_master]# docker run hello-world

在这里插入图片描述成功~

7 安装kubernrtes

建议使用阿里源的仓库,执行以下命令添加kubernetes.repo仓库

[root@localhost centos_master]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# vim kubernetes.repo

出现如图
在这里插入图片描述

7.1 关闭swap、防火墙(之前已经关闭),可忽视。

7.2 关闭SeLinux

执行

setenforce 0

7.3 安装kubelet、kubeadm、kubectl

两种方式,因为我用的时候是1.15.1的版本,所以如果想完全跟着我的教程走的话,推荐第二种。
1.执行以下命令(安装最新版)

yum install -y kubelet kubeadm kubectl

2.执行以下命令(安装指定版本1.15.1)

yum install -y kubelet-1.15.1 kubeadm-1.15.1 kubectl-1.15.1

emmmm报错
在这里插入图片描述重新尝试,清一下缓存

yum clean all
yum makecache

接着顺手升级一下yum

yum -y update

重新安装kubelet、kubeadm、kubectl
在这里插入图片描述成功~

7.4 判断docker 的cgroup drive和kubelet的cgroup drive是否一样

在这里插入图片描述首先解决这两个警告

vim /etc/sysctl.conf

接着添加如下内容

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

最后执行

sysctl -p

接下来重启虚拟机
在这里插入图片描述警告消失~
备注:这里有个坑,虽然我们这里cgroup drive两者都是cgroupfs,是一样的。但是!在后面我们需要把这两者都改成systemd。不过现在可以不用管,后面可以再改;也可以直接参考第二章的2.2节跳过这个坑。

正常启动kubelet

[root@localhost centos_master]# systemctl enable kubelet && systemctl start kubelet
Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /usr/lib/systemd/system/kubelet.service.

7.5 列出需要的镜像

使用kubeadm config images list列出我们需要的镜像

[root@localhost centos_master]# kubeadm config images list
W0723 18:09:53.292065    5839 version.go:98] could not fetch a Kubernetes version from the internet: unable to get URL "https://dl.k8s.io/release/stable-1.txt": Get https://dl.k8s.io/release/stable-1.txt: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
W0723 18:09:53.292483    5839 version.go:99] falling back to the local client version: v1.15.1
k8s.gcr.io/kube-apiserver:v1.15.1
k8s.gcr.io/kube-controller-manager:v1.15.1
k8s.gcr.io/kube-scheduler:v1.15.1
k8s.gcr.io/kube-proxy:v1.15.1
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.3.10
k8s.gcr.io/coredns:1.3.1

得到所有需要的组件,也就是以下七个组件。
k8s.gcr.io/kube-apiserver:v1.15.1
k8s.gcr.io/kube-controller-manager:v1.15.1
k8s.gcr.io/kube-scheduler:v1.15.1
k8s.gcr.io/kube-proxy:v1.15.1
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.3.10
k8s.gcr.io/coredns:1.3.1
接着参考下面的这堆代码进行配置(一行一行地输入命令),这个地方需要十分小心!!

这里下载v1.15.1版本   
docker pull mirrorgooglecontainers/kube-apiserver-amd64:v1.15.1
docker pull mirrorgooglecontainers/kube-controller-manager-amd64:v1.15.1
docker pull mirrorgooglecontainers/kube-scheduler-amd64:v1.15.1
docker pull mirrorgooglecontainers/kube-proxy-amd64:v1.15.1
docker pull mirrorgooglecontainers/pause:3.1
docker pull mirrorgooglecontainers/etcd:3.3.10
docker pull coredns/coredns:1.3.1

镜像打标
docker tag  mirrorgooglecontainers/kube-apiserver-amd64:v1.15.1 k8s.gcr.io/kube-apiserver:v1.15.1
docker tag  mirrorgooglecontainers/kube-scheduler-amd64:v1.15.1 k8s.gcr.io/kube-scheduler:v1.15.1
docker tag  mirrorgooglecontainers/kube-controller-manager-amd64:v1.15.1 k8s.gcr.io/kube-controller-manager:v1.15.1
docker tag  mirrorgooglecontainers/kube-proxy-amd64:v1.15.1 k8s.gcr.io/kube-proxy:v1.15.1
docker tag  mirrorgooglecontainers/etcd:3.3.10 k8s.gcr.io/etcd:3.3.10
docker tag  mirrorgooglecontainers/pause:3.1 k8s.gcr.io/pause:3.1
docker tag  coredns/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1

镜像分发打包
docker save -o k8s-master.tar.gz  `docker image ls |grep k8s |awk '{position=$1":"$2;print $1,position}' |awk '{print $2}'`

导入镜像
[root@master ~]# docker load -i k8s-master.tar.gz 
Loaded image: k8s.gcr.io/etcd:3.3.10
Loaded image: k8s.gcr.io/pause:3.1
Loaded image: k8s.gcr.io/kube-proxy:v1.15.1
Loaded image: k8s.gcr.io/kube-apiserver:v1.15.1
Loaded image: k8s.gcr.io/kube-controller-manager:v1.15.1
Loaded image: k8s.gcr.io/kube-scheduler:v1.15.1
Loaded image: k8s.gcr.io/coredns:1.3.1

成功~如图

[root@localhost centos_master]# docker images
REPOSITORY                                                    TAG                 IMAGE ID            CREATED             SIZE
mirrorgooglecontainers/kube-controller-manager                v1.15.1             d75082f1d121        5 days ago          159MB
k8s.gcr.io/kube-controller-manager                            v1.15.1             d75082f1d121        5 days ago          159MB
mirrorgooglecontainers/kube-apiserver-amd64                   v1.15.1             68c3eb07bfc3        5 days ago          207MB
mirrorgooglecontainers/kube-apiserver                         v1.15.1             68c3eb07bfc3        5 days ago          207MB
k8s.gcr.io/kube-apiserver                                     v1.15.1             68c3eb07bfc3        5 days ago          207MB
mirrorgooglecontainers/kube-proxy                             v1.15.1             89a062da739d        5 days ago          82.4MB
k8s.gcr.io/kube-proxy                                         v1.15.1             89a062da739d        5 days ago          82.4MB
mirrorgooglecontainers/kube-scheduler                         v1.15.1             b0b3c4c404da        5 days ago          81.1MB
k8s.gcr.io/kube-scheduler                                     v1.15.1             b0b3c4c404da        5 days ago          81.1MB
mirrorgooglecontainers/kube-apiserver-amd64                   v1.15.0             201c7a840312        4 weeks ago         207MB
k8s.gcr.io/coredns                                            1.3.1               eb516548c180        6 months ago        40.3MB
registry.cn-hangzhou.aliyuncs.com/google_containers/coredns   1.3.1               eb516548c180        6 months ago        40.3MB
hello-world                                                   latest              fce289e99eb9        6 months ago        1.84kB
mirrorgooglecontainers/etcd                                   3.3.10              2c4adeb21b4f        7 months ago        258MB
k8s.gcr.io/etcd                                               3.3.10              2c4adeb21b4f        7 months ago        258MB
mirrorgooglecontainers/pause                                  3.1                 da86e6ba6ca1        19 months ago       742kB
k8s.gcr.io/pause                                              3.1                 da86e6ba6ca1        19 months ago 

8 复制虚拟机

当Node1的Kubernetes安装完毕后,就需要进行虚拟机的复制了。复制前需要退出虚拟机,我们选择“正常关机”。右键虚拟机点击复制:
在这里插入图片描述

注意上述的所有箭头。点击“复制”,稍等几分钟,即可完成复制,一共复制两台。
现在我们就有了三个虚拟机,master、node2、node3。
复制结束后,不要马上启动虚拟机,而先要为每一个虚拟机添加一个网卡,用于节点间的互通访问。如下图所示,连接方式选择“Host-Only”模式:
在这里插入图片描述
网卡添加结束后,启动三个虚拟机,查看各个IP。以主节点master为例,运行ip addr
在这里插入图片描述可以看到,网卡enp0s8为新添加的网卡2,IP地址为192.168.56.103。三个节点IP分别为:

master:192.168.56.103
Node2:192.168.56.101
Node3:192.168.56.102

三台虚拟机互相ping一下瞅瞅网络连通性。
接着根据之前master连接xshell的步骤,使用xshell连接另外两台虚拟机,只是把主机端口分别改成9023、8081。

网卡添加结束后,即可启动三个虚拟机,我们需要进行一些简单的设置,以主节点Node1为例:

编辑/etc/hostname,将hostname修改为k8s_master

编辑/etc/hosts,追加内容IP k8s_master,其中上IP为网卡2的IP地址,修改后重启生效。另外两个节点修改同理,主机名分别为k8s_node2、k8s_node3。

(这里也折腾了很久,后来发现正确的步骤是用vi打开之后,再点一下i进入编辑模式,编辑好之后,点Esc,接着输入:wq保存退出;另外编辑hostname时用hostnamectl set-hostname 主机名 同样可以)
备注:这里有个坑,主机名中不要有_,在第二章中我折腾了很久才发现这个问题,所以这里可以把主机名直接改为k8s-master、k8s-node2、k8s-node3跳过这个坑。
最后,输入hostname可以看到当前的hostname。

9 小结

目前我们有了三个虚拟机,每个虚拟机上都有docker、kubernetes。下一章我们开始正式创建集群。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42711936/article/details/96897915

智能推荐

贝尔数-程序员宅基地

文章浏览阅读2.3k次。转自ACdreamer http://blog.csdn.net/acdreamers/article/details/12309269Bell数的定义:第n个Bell数表示集合{1,2,3,...,n}的划分方案数,即:B[0] = 1; 每一个Bell数都是第二类Stirling数的和,即: 第二类Stir_贝尔数

Spring MVC访问页面直接显示源码_springmvc加载jsp为什么是源码-程序员宅基地

文章浏览阅读5.3k次,点赞5次,收藏6次。一、问题描述SSM整合好之后,通过Controller,返回要访问页面的url,然后jsp页面显示,问题是jsp页面直接把源码显示了!!如下二、解决方法出现这种问题是由于我在web.xml中把url-pattern配置错了,所导致的,我配置的如下: SpringMVC /* 把他改成 S_springmvc加载jsp为什么是源码

@aspect注解类不生效_自定义注解加AOP怎么玩?-程序员宅基地

文章浏览阅读719次。点击阅读原文更好的阅读体验前言注解是在JDK1.5之后引入的新特性位于java.lang.annotation,注解其实就是对代码进行一种特殊的标记,这些标记可以在编译,类加载和运行时被读取,并执行相应的处理。本文主要分析如何自定义注解和注解的一些基础知识,然后在配合这AOP在实际运用中玩出新花样。本文分为三部分注解分析自定义注解编译时注解运行时注解整合AOP原本可以分为两篇文章,但是想..._aspect类名有些不生效

opencv学习笔记 读取avi视频_cv 读取avi-程序员宅基地

文章浏览阅读985次。#include "cv.h"int main( int argc, char** argv ) { cvNamedWindow( "Example2", CV_WINDOW_AUTOSIZE ); //CvCapture* capture = cvCaptureFromAVI( argv[1] ); // either one will work CvCapt_cv 读取avi

百度地图SDK提供的地图类型和图层的实现_百度sdk里包含地图吗-程序员宅基地

文章浏览阅读551次。1.环境搭建(参考上一次的文章)2.百度地图SDK提供了3种预置的地图类型,包括普通地图,卫星图,空白地图。另外提供了2种常用图层实时路况图以及百度城市热力图。其中要注意的是百度地图SDK所提供的地图缩放等级为4-21级(室内图可以缩放至22级,卫星图只支持缩放到20级),只有在地图层级介于11-20级时,方可显示城市热力图。3.较完整地代码实现activity_main.xml源码<..._百度sdk里包含地图吗

klocwork insight V12 12.x v11.x v10.x安装过程_kgomultispace框架-程序员宅基地

文章浏览阅读3.7k次。静态代码缺陷检查工具沟通学习交流,如klocwork,coverity,testbed,chckmarx,fortify,webinspect,appscan等。_kgomultispace框架

随便推点

非常详细的相机标定原理(四)(张正友相机标定法数学推导求解)_张正有标定法 最少要几张图片-程序员宅基地

文章浏览阅读2.3k次,点赞10次,收藏32次。解释单应性矩阵H 1.H是内参矩阵和外参矩阵的混合体:2.先不考虑镜头畸变: 3.旋转向量在构造中是相互正交: 4.—个单应性矩阵H可以提供上述两个约束条件5.B带入前面两个约束条件后可转化为 6.两约束条件最终可以转化为如下形式: 7.通过以上的公式推导做铺垫,求相机内参数。8. 求相机外参9.奇异值分解10. 考虑透镜畸变的影响......_张正有标定法 最少要几张图片

ESP8266 SDK开发的低版本程序迁移到高版本的方法_esp8266 sdkv2.0.x的app移植到sdkv3.0.0-程序员宅基地

文章浏览阅读526次。ESP8266 SDK开发的低版本程序迁移到高版本的方法前言:目前AiThinkerIDE_开发环境版本为V1.5.2,低版本为V0.5和V1.0版,如何将低版本开发的程序,如SDK2.2以下的程序迁移到目前高版本SDK3.04(版本更新为2020年6月)环境,如果直接编译,出错。试了试,可按如下方法来进行。1.打开AiThinkerIDE_V1.5.2,输入官方SDK包ESP8266_NONOS_SDK-3.0.4和在AiThinkerIDE V0.5环境下开发的SDK程序,如ESP8266_NON_esp8266 sdkv2.0.x的app移植到sdkv3.0.0

vue接入vlc播放rtsp视频流_vue调用vlc 公开的rpst-程序员宅基地

文章浏览阅读1.9w次。&lt;object type='application/x-vlc-plugin' id='vlc' events='True' classid='clsid:9BE31822-FDAD-461B-AD51-BE1D1C159921' codebase="http://downloads.videolan.org/pub/videolan/vlc/latest/win32/a..._vue调用vlc 公开的rpst

JDBC之DatabaseMetaData之获取表的所有列名_databasemetadata接口获取的列名不对-程序员宅基地

文章浏览阅读1.1w次,点赞6次,收藏9次。获取数据库指定表的所有列及相应的信息:(以MySQL和Oracle为例,其他类型的数据库接触不多,不做解释)Connection接口中提供了DatabaseMetaData接口:提供:getColumns()方法,该方法需要传进4个参数:第一个是数据库名称,对于MySQL,则对应相应的数据库,对于Oracle来说,则是对应相应的数据库实例,可以不填,也可以直接使用Connectio_databasemetadata接口获取的列名不对

如何在交换机上抓包_交换机抓包-程序员宅基地

文章浏览阅读3.1w次,点赞18次,收藏128次。在交换机上抓包,一般可排查一些网络问题。下面是总结的在各厂商交换机上抓包方式。H3C交换机抓包:在华三交换机上可使用:packet-capture 命令,在用户视图下执行。具体操作可查看这:https://www.h3c.com/cn/d_202009/1327093_30005_0.htm#做流统匹配抓包流量acl advanced 3000description test rule 0 permit ip source 192.168.1.1 0 destination 192.168_交换机抓包

推荐文章

热门文章

相关标签