Kubernetes环境搭建

kubernetes ginotang 2587℃ 0评论

简介

k8s全称kubernetes,是由google开发的容器编排引擎,和docker原生的swarm类似,但功能更强大。

安装相关组件

使用的系统是Ubuntu 16.04

安装和部署kubernetes需要以下组件:

  • kubeadm
  • kubectl
  • kubelet
  • Docker

使用kubeadm安装部署K8S十分简单,但需要注意的东西也比较多。由于K8S是google开发的,相关的Docker镜像也存放在Google自家的网站上面,墙内很可能出现无法拉取镜像的情况。

安装Docker

Docker的安装十分简单,只要跟着官方的教程即可,这里不在叙述。

安装命令行工具

这些工具包括kubeadm、kubectl和kubelet,如果使用K8S官方的教程安装,则需要翻墙才能装上,因此这里使用阿里云提供的仓库进行安装

  • 添加阿里云仓库

  • 安装工具

    准备工作基本完毕。

部署K8S

我们选择使用kubeadm命令创建K8S集群,这种方式是最简单的。

初始化master节点

关闭swap分区

由于K8S不支持使用交换分区,因此要先把交换分区关闭

还要把/etc/fstab文件中的相关设备注释,避免系统重启重新挂载交换分区。

如果忘记关闭swap,初始化过程会出现下面的错误

kubeadm init命令

前面我们说过,K8S使用的相关镜像会从Google的网站上拉取,因此墙内会拉取失败。例如出现下面的错误

为了避免这些问题,我们的做法是使用docker hub上面的Google Mirror,先把需要的镜像pull下面,然后再手动打tag。

查看需要的镜像

拉取之前我们需要知道哪些镜像是K8S依赖的,可以通过下面的命令查看

一共是7个镜像,因此我们先从docker hub获取它们

上面的脚本有三个作用:

  1. 从docker hub拉取镜像
  2. 为镜像重新打tag
  3. 删除旧的镜像

注意:上面的部分镜像,其他节点同样需要使用,因此这个脚本需要在所有节点下面执行

创建master

所有依赖的镜像都拉取到本地后,就可以执行kubeadm init命令初始化master节点。

由于我们以后会使用flannel的网络,因此--pod-network-cidr参数必须是10.244.0.0/16。

注意:如果--apiserver-advertise-address参数设置的地址不是本地地址(例如不小心打错了),那么master会创建失败

命令执行过程中会出现下面的执行记录

看到Your Kubernetes master has initialized successfully!,证明master创建成功。

配置master

master创建成功后,日志中已经提示了我们如何配置master和加入其他节点

根据提示,我们需要先创建一个普通用户

然后根据提示配置master

查看master状态

我们先来看一下master的状态

发现它的状态是NotReady,为什么呢?可以通过查看它依赖的容器目前的状态

有两个容器的状态是Pending,这就是造成master状态为NotReady的原因。那么为什么容器是pending呢?

通过查看syslog,发现一大堆类似如下错误的日志

貌似是网络的问题,根据master创建后给出的提示,我们应该把网络配置好,目的是让pod之间能够互相通讯。

配置网络

根据如下提示,我们可以通过kubectl apply命令配置网络。

我们使用的是flannel的网络

注意:K8S的网络配置信息保存在/etc/cni/net.d目录下面,这个目录默认是不存在的,K8S也不会帮你创建,因此执行kubectl apply之前必须先把它创建好,否则网络会配置失败

命令执行后K8S会从网络拉取额外的pod,视乎网络的性能,可能需要耐心等待

配置完毕,目录下会多了个文件

现在再查看master的状态

状态已经变为Ready,至此master配置完毕。

添加其他节点

master配置过程中已经给出了加入节点的命令,其他节点只需要执行此命令即可

注意:非master节点同样需要关闭swap分区。

分别在两个非master节点执行上面的命令

耐心等待一段时间,因为需要准备一些pod

查看pod的拉取日志

拉取过程中可能会出错:net/http: TLS handshake timeout, 原因是墙的问题,可以让docker daemon走代理,配置如下:

前提是这个代理可以访问被墙的网站,完了之后手动在非master节点拉取这个image即可。

最后所有节点状态为Ready

转载请注明:Pure nonsense » Kubernetes环境搭建

喜欢 (0)
0 0 投票数
文章评分
订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x
()
x