k8s安装总结

本次安装环境是Ubuntu16.04,其他环境下,shell命令会有一些不同,但步骤应该大致相同,默认docker已经安装完成

下载

下载安装下列软件

  • kubelet Node上运行的节点代理
  • kubeadm 用来master初始化集群,及node加入集群
  • kubectl 客户端,用来向master发送请求,进行应用的部署

由于的原因,获取这些软件包有些麻烦。经过上网查阅了一些资料,目前主要有两种下载安装这些软件包。

其中一种是去k8s的github仓库上下载源码,解压安装。我最开始就是用的这种方式,但是以失败告终,详情见后面的问题总结。

第二种是添加k8s国内软件镜像源,使用apt进行下载安装。主要在/etc/apt/source.list文件附加下面的源

# 我使用的是阿里的镜像,如果你使用的其他国内镜像,请找对应的k8s镜像源
deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main

然后执行下列命令,安装软件。

# 我使用的是1.13.0-00版本,如果不清楚具体的版本号,
 # 可以使用 apt-cache show 命令进行查询
export K8S_VERSION=1.13.0-00
apt-get update # 更新软件源
apt-get install kubelet=${K8S_VERSION}
apt-get install kubeadm=${K8S_VERSION}
apt-get install kubectl=${K8S_VERSION}

通过这种方式下载的软件,已经被自动安装好了,所有的环境已经被设置好了,可以直接运行命令即可。
如果不熟悉kubelet和kubeadm的一些启动参数,不建议下载可执行包,自己手动安装。
通过apt进行安装,可以省下很多事情。我最终通过这种方式成功安装好了三个软件。

运行

首先需要做一些配置,以及下载必要的镜像。本来可以直接执行kubeadm init命令初始化master节点的,但是由于国内有墙,所以在执行kubeadm init命令前,需要做一些额外的工作,主要是下载镜像。

关闭虚拟内存

一般情况下需要执行下列命令关闭虚拟内存[1],否则报如下错误
k8s安装总结

# 关闭swap。
# 但是系统重启后,swap又会被启动。
# 因此每次重启节点,都要手动执行该命令关闭swap,否则kubelet会启动失败
# 可以执行 sysctl -w vm.swappiness=0 彻底关掉swap
swapoff -a

下载镜像

由于的原因,在下载"pause"等docker镜像时,会出现问题
k8s安装总结
解决办法是从阿里docker镜像网站上下载镜像,然后修改镜像的tag[3]
执行如下命令

# $imageName指要下载镜像的名称,可以通过 kubeadm config images list 命令获取,但要去掉前面的k8s.gcr.io/
docker pull registry.aliyuncs.com/google_containers/$imageName
docker tag registry.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
docker rmi registry.aliyuncs.com/google_containers/$imageName

执行kube init

执行kubeadm init命令,结果如下:
k8s安装总结
接下来配置kubectl(如果kubeadm init执行成功的,会显示如何配置kubectl),主要执行下列命令

mkdir -p $HOME/.kube  
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config 
sudo chown $(id -u):$(id -g) $HOME/.kube/config # 将文件权限设为当前用户

然后就可以用kubectl执行一些命令测试是否成功运行(如 kubectl get nodes)。
由于我是只有一台机器,所以只有一个master节点
k8s安装总结

node加入集群

执行kubeadm token create --print-join-command获取加入命令,然后在节点上执行,即可加入集群
k8s安装总结

安装插件

为k8s安装插件,相当于在集群中创建一些资源,主要使用kubectl apply -f config_file

网络插件

为了使Pod之间能够跨节点通信,因此需要按照额外的虚拟二层网络组件。由于我目前只有一台节点,无法测试,所以暂未安装

问题总结

记一次手动安装kubeadm,kubelet和kubectl失败的经历

首先需要去github上k8s的仓库下,找到release页面,并在该页面下寻找需要下载的版本,比如我们目前的项目需要1.13版,那么我就找到了https://github.com/kubernetes...这个页面,然后不要去下载这个页面里的压缩包,找到CHANGELOG-1.13,点击进入真正的下载页面。如下图红圈所示:
k8s安装总结
进入该页面,找到Server区域,下载k8s服务端的软件包(压缩包里包括了安装k8s必须的软件),这里我下载的是kubernetes-server-linux-amd64.tar.gz软件包。
下载完成后,切换到期望安装的目录,然后解压软件包。这里我希望安装到/usr/local目录下,所以执行下列命令

cd /usr/local
tar zxf kubernetes-server-linux-amd64.tar.gz

然后设置PATH,修改/etc/profile

export K8S_HOME=/usr/local/kubernetes
export PATH=$PATH:$K8S_HOME/server/bin

然后重启,或者执行source /etc/profile,以更新环境变量。
通过这种方式下载软件包后,还需要做很多工作去安装配置kubeadm和kubelet,很麻烦。
经过我无数次的尝试,我最终以失败告终,没有用这种方式安装配置成功。
主要的问题在于kubeadm和kubelet的启动参数有点复杂,自己配置的话,需要对k8s有很深入的认识,否则会按下葫芦浮起瓢。
我自己在那设置的半天,systemd都用的很熟练了,依然没有安装成功

系统重启后,k8s没有启动

当我把我的ubuntu虚拟机重启后,发现k8s的组件没有自动运行,然后我一个个的去启动相应的容器,但是没有用。
最后我发现是因为kubelet没有启动成功,而没有启动的成功的原因是因为swap没有关闭。
并且我还发现当在master节点上成功启动kubelet后,其他的组件,如apiserver也会随之启动。

参考资料

[1] 只要用 kubeadm 小朋友都能部署 Kubernetes
[2] kubernetes基本安装-k8s-3
[3] 基于阿里云镜像站安装Kubernetes
[4] 用kubeadm在Ubuntu上快速构建Kubernetes测试集群

相关推荐