阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

使用kubeadm在Ubuntu 16.04上搭建Kubernetes1.5集群

469次阅读
没有评论

共计 5502 个字符,预计需要花费 14 分钟才能阅读完成。

近在准备研究生论文开题,提前搭一下要用到的 Kubernetes 集群练练手感。半个月前,Kubernetes 1.5正式发布,最大的亮点是支持了在 Windows 下运行容器,同时也简化了使用 kubeadm 安装集群的步骤。为了紧跟最时尚的潮流,我想试试用 kubeadm 搭一个 1.5 版本的集群出来。不过由于最近又过圣诞又要跨年,所以拖拖拉拉搭了一个星期多才搭好。也碰到了很多坑,尤其是翻墙问题真的神烦 (:зゝ∠) 所以在这里把 Ubuntu 16.04 上搭集群的过程写下来,造福社会!

一、环境准备

我准备了三台 Ubuntu 16.04 虚拟机,各项参数如下:

节点 IP 地址 CPU 内存
master 192.168.0.158 4 核 4GB
node1 192.168.0.159 1 核 2GB
node2 192.168.0.160 1 核 2GB

Kubernetes 官网上提到每台机器至少要有 1GB 内存,不然集群起来之后,留给运行在容器内的应用的内存就很少了。同时要保证所有机器之前的网络是互相连通的。

这里再说一下,一开始我只给 master 分配了 2 个核,但是等我把 kubeadm 跑起来后,docker 在 pull 一些必需的镜像时会出现 OutOfCPU 的情况,大概是因为 kubeadm 把第一台机器做 master 以及第一个 node,所以初始化的服务都跑在这台机器上?所以后来我把 master 加到了 4 核。

二、搭建步骤

(1/4)安装 docker、kubelet、kubeadm 和 kubectl

root 用户 ssh 到每台机器上,运行:

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF > /etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
# 先安装 docker
apt-get install -y docker.io
apt-get install -y kubelet kubeadm kubectl kubernetes-cni

(2/4)初始化 master

装好 kubelet 和 kubectl 后,在 master 上以 root 用户运行:

kubeadm init --token=yiqian.123456

注意: 官方文档上 kubeadm init 的时候是不带 token 的,但我这样运行之后,console 也没给我一个默认的 token(exo me???)。但其他节点在加入集群的时候是需要指定 master 的 token 的,所以我在 kubeadm 初始化的时候手动给 master 指定了一个 token。

这里还有一个坑就是,如果初始化失败了,比如像 Issue#33544,那么你停掉再重新 init 会出错,这是因为 kubeadm 在安装了相关包之后会生成 /etc/kubernetes/var/lib/kubelet 等目录,所以我们先需要手动清理一下再重新初始化:

systemctl stop kubelet;
docker rm -f $(docker ps -q); mount | grep "/var/lib/kubelet/*" | awk '{print $3}' | xargs umount 1>/dev/null 2>/dev/null;
rm -rf /var/lib/kubelet /etc/kubernetes /var/lib/etcd /etc/cni;
systemctl start kubelet;
kubeadm init --token=<token>

最后,init 成功的运行输出如下:

root@xyq-k8s-master:/home/administrator# kubeadm init --token=yiqian.123456
[kubeadm] WARNING: kubeadm is in alpha, please do not use it for production clusters.
[preflight] Running pre-flight checks
[init] Using Kubernetes version: v1.5.1
[tokens] Validating provided token
[tokens] Accepted provided token
[certificates] Generated Certificate Authority key and certificate.
[certificates] Generated API Server key and certificate
[certificates] Generated Service Account signing keys
[certificates] Created keys and certificates in "/etc/kubernetes/pki"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/kubelet.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/admin.conf"
[apiclient] Created API client, waiting for the control plane to become ready
[apiclient] All control plane components are healthy after 14.534854 seconds
[apiclient] Waiting for at least one node to register and become ready
[apiclient] First node is ready after 0.506558 seconds
[apiclient] Creating a test deployment
[apiclient] Test deployment succeeded
[token-discovery] Created the kube-discovery deployment, waiting for it to become ready
[token-discovery] kube-discovery is ready after 2.005108 seconds
[addons] Created essential addon: kube-proxy
[addons] Created essential addon: kube-dns

Your Kubernetes master has initialized successfully!

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
    http://kubernetes.io/docs/admin/addons/

You can now join any number of machines by running the following on each node:

kubeadm join --token=yiqian.123456 192.168.0.158

这个时候呢,我们可以通过 kubectl 看看集群当前的状态:

root@xyq-k8s-master:/home/administrator# kubectl get nodes
NAME             STATUS         AGE
xyq-k8s-master   Ready,master   1m
root@xyq-k8s-master:/home/administrator# kubectl get pods --all-namespaces
NAMESPACE     NAME                                     READY     STATUS              RESTARTS   AGE
kube-system   dummy-2088944543-gjmv4                   1/1       Running             0          1m
kube-system   etcd-xyq-k8s-master                      0/1       Pending             0          2s
kube-system   kube-apiserver-xyq-k8s-master            1/1       Running             0          20s
kube-system   kube-controller-manager-xyq-k8s-master   1/1       Running             0          22s
kube-system   kube-discovery-1769846148-9dpvt          1/1       Running             0          1m
kube-system   kube-dns-2924299975-lc4rr                0/4       ContainerCreating   0          1m
kube-system   kube-proxy-w5v9m                         1/1       Running             0          1m
kube-system   kube-scheduler-xyq-k8s-master            0/1       Pending             0          4s

可以看出来,除了 kube-dns 之外,其他 pods 都跑起来了。是因为在没有部署集群网络时,dns是起不来的。So 我们进入下一步!

(3/4)初始化 master

官方一共给出了五种网络 addon,我选了 Weave Net(因为它的安装步骤最方便诶嘿嘿 =。=),直接运行:

kubectl apply -f https://git.io/weave-kube

等 weave 跑起来后,kube-dns 自然就跑起来啦。

root@xyq-k8s-master:/home/administrator# kubectl apply -f https://git.io/weave-kube
daemonset "weave-net" created
root@xyq-k8s-master:/home/administrator# kubectl get pods --all-namespaces
NAMESPACE     NAME                                     READY     STATUS    RESTARTS   AGE
kube-system   dummy-2088944543-gjmv4                   1/1       Running   0          3m
kube-system   etcd-xyq-k8s-master                      1/1       Running   3          1m
kube-system   kube-apiserver-xyq-k8s-master            1/1       Running   0          2m
kube-system   kube-controller-manager-xyq-k8s-master   1/1       Running   0          2m
kube-system   kube-discovery-1769846148-9dpvt          1/1       Running   0          3m
kube-system   kube-dns-2924299975-lc4rr                4/4       Running   0          3m
kube-system   kube-proxy-w5v9m                         1/1       Running   0          3m
kube-system   kube-scheduler-xyq-k8s-master            1/1       Running   0          1m
kube-system   weave-net-8j1zg                          2/2       Running   0          1m

(4/4)将其他节点加入集群

分别 ssh 到 node1 和 node2 上去,以 root 用户运行:

kubeadm join --token=yiqian.123456 192.168.0.158

再回到我们的 master 节点查看 nodes,就会发现集群已经搭好了。

root@xyq-k8s-master:/home/administrator# kubectl get nodes
NAME             STATUS         AGE
xyq-k8s-master   Ready,master   10m
xyq-k8s-s1       Ready          5m
xyq-k8s-s2       Ready          5m

关于翻墙

由于我是在远程服务器上搭建虚拟机然后 ssh 上去操作,所以不能设置全局代理,只能把 http proxy 加到 docker 的配置文件 /etc/default/docker 中:

export http_proxy=<这个不能告诉你>
export https_proxy=<这个也不能告诉你>

重启一下机器,这样 docker 在 pull 镜像的时候以及 kubeadm init 的时候就会通过这个代理了。
但是在加了这个代理之后,我仍然会碰到有的镜像 pull 不下来的情况,网上查了一下,借鉴了一下这里 http://www.linuxidc.com/Linux/2017-07/145505.htm 的方法,利用 Docker Hub 把这个镜像自动构建好,再 pull 到本地,这样就不用去谷歌的 gcr.io 上在线下载镜像了。具体做法如下。

先去 kubernetes 源码中找 1.5 版本中各个组件的版本:

镜像名称 版本号
gcr.io/google_containers/kubedns-amd64 1.7
gcr.io/google_containers/kube-dnsmasq-amd64 1.3
gcr.io/google_containers/exechealthz-amd64 1.1

然后创建一个 github 项目,可以 fork 我的 repo 或者原作者的 repo。
最后在 Docker Hub 上分别创建以上三个镜像的自动构建项目。以 kube-dns 为例:

 

 

 

 

创建好之后要手动 Trigger 一下编译

 

 

等待编译成功之后就可以在本地直接 pull 了。

docker pull yiqianx/kubedns-amd64

以上。
有问题欢迎大家评论指正~

引用
  • kubeadm 搭建 kubernetes 集群
  • Kubernetes issue#33544

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-07/145504.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计5502字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19352
评论数
4
阅读量
8118558
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛 NAS-2:飞牛配置 RAID 磁盘阵列 前言 大家好,我是星哥之前星哥写了《星哥带你玩飞牛 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号 AI 知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率 大家好,我是星哥,...
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛 NAS-12:开源笔记的进化之路,效率玩家的新选择 前言 如何高效管理知识与笔记,已经成为技术...
多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞...
150元打造低成本NAS小钢炮,捡一块3865U工控板

150元打造低成本NAS小钢炮,捡一块3865U工控板

150 元打造低成本 NAS 小钢炮,捡一块 3865U 工控板 一块二手的熊猫 B3 工控板 3865U,搭...
2025年11月28日-Cloudflare史诗级事故:一次配置失误,引爆全球宕机

2025年11月28日-Cloudflare史诗级事故:一次配置失误,引爆全球宕机

2025 年 11 月 28 日 -Cloudflare 史诗级事故: 一次配置失误,引爆全球宕机 前言 继今...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

  开源 MoneyPrinterTurbo 利用 AI 大模型,一键生成高清短视频! 在短视频内容...
欧洲无限速云盘免费10GB永久存储 + WebDAV部署+图床搭建,多平台联动一步到位!

欧洲无限速云盘免费10GB永久存储 + WebDAV部署+图床搭建,多平台联动一步到位!

欧洲无限速云盘免费 10GB 永久存储 + WebDAV 部署 + 图床搭建,多平台联动一步到位! 大家好,我...
Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集 在云原生体系中,Prometheus 已成为最主流的监控与报警...
免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

  免费无广告!这款跨平台 AI RSS 阅读器,拯救你的信息焦虑 在算法推荐主导信息流的时代,我们...
每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站 - 手机博物馆 -CHAZ 3D Experience 一句话介绍:一个用 3D 方式重温...