(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。下一章我们开始正式创建集群。

Logo

开源、云原生的融合云平台

更多推荐