资讯专栏INFORMATION COLUMN

k8s安装总结

Nosee / 1184人阅读

摘要:主要在文件附加下面的源我使用的是阿里的镜像,如果你使用的其他国内镜像,请找对应的镜像源然后执行下列命令,安装软件。参考资料只要用小朋友都能部署基本安装基于阿里云镜像站安装用在上快速构建测试集群

本次安装环境是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],否则报如下错误

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

由于的原因,在下载"pause"等docker镜像时,会出现问题

解决办法是从阿里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命令,结果如下:

接下来配置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节点

node加入集群

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

安装插件

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

网络插件

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

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

首先需要去github上k8s的仓库下,找到release页面,并在该页面下寻找需要下载的版本,比如我们目前的项目需要1.13版,那么我就找到了https://github.com/kubernetes...这个页面,然后不要去下载这个页面里的压缩包,找到CHANGELOG-1.13,点击进入真正的下载页面。如下图红圈所示:

进入该页面,找到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测试集群

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/33167.html

相关文章

  • 关于k8s集群容器日志收集的总结

    摘要:我推荐你使用进行日志收集,将作为的出口。集群目前暂时没有提供日志查看机制。以如下的形式启动容器,容器日志将发往配置的。 【作者barnett】本文介绍了k8s官方提供的日志收集方法,并介绍了Fluentd日志收集器并与其他产品做了比较。最后介绍了好雨云帮如何对k8s进行改造并使用ZeroMQ以消息的形式将日志传输到统一的日志处理中心。 容器日志存在形式 目前容器日志有两种输出形式: ...

    jeffrey_up 评论0 收藏0
  • 关于k8s集群容器日志收集的总结

    摘要:我推荐你使用进行日志收集,将作为的出口。集群目前暂时没有提供日志查看机制。以如下的形式启动容器,容器日志将发往配置的。 【作者barnett】本文介绍了k8s官方提供的日志收集方法,并介绍了Fluentd日志收集器并与其他产品做了比较。最后介绍了好雨云帮如何对k8s进行改造并使用ZeroMQ以消息的形式将日志传输到统一的日志处理中心。 容器日志存在形式 目前容器日志有两种输出形式: ...

    or0fun 评论0 收藏0
  • 带着问题学 Kubernetes 基本单元 Pod

    摘要:后面会涉及以配置文件进行部署。的调度完成,被分配到指定上。这是的一种最终状态。图相较而言,除了提供的基本功能,还支持声明式的更新和回滚。共享数据存储的问题主要分为数据临时存储与持久性存储。 带着问题学 Kubernetes 基本单元 Pod 摘要:本文属于原创,欢迎转载,转载请保留出处:https://github.com/jasonGeng88/blog 文章一:带着问题学 Kube...

    pcChao 评论0 收藏0
  • 带着问题学 Kubernetes 基本单元 Pod

    摘要:后面会涉及以配置文件进行部署。的调度完成,被分配到指定上。这是的一种最终状态。图相较而言,除了提供的基本功能,还支持声明式的更新和回滚。共享数据存储的问题主要分为数据临时存储与持久性存储。 带着问题学 Kubernetes 基本单元 Pod 摘要:本文属于原创,欢迎转载,转载请保留出处:https://github.com/jasonGeng88/blog 文章一:带着问题学 Kube...

    frontoldman 评论0 收藏0
  • k8s :部署

    摘要:前言集群部署是个老生常谈的问题,网上资料一大把,各路大神祭出了各种方案使用发行版提供的包管理器比如使用第三方工具包脚本使用第三方二次开发包本文介绍在浏览源代码过程中发现的的一种半手工的部署方法源头浏览源代码的过程中发现有这么个目录月月 前言 k8s 集群部署是个老生常谈的问题,网上资料一大把,各路大神祭出了各种方案: 使用 linux 发行版提供的包管理器(比如 centos yum...

    scq000 评论0 收藏0

发表评论

0条评论

Nosee

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<