用kubeadm安装Kubernetes1.15.0

有关所有kubeadm命令行行信息,以及有关自动化kubeadm建议,请参考官网原文kubeadm参考

准备

  1. 多台Ubuntu 16.04+、CentOS 7或HypriotOS v1.0.1 + 系统
  2. 每台机器最少1GB+内存
  3. 集群中所有机器之间网络连接正常
  4. 关闭所有节点防火墙,SELinux,SWAP(swapoff -a)
  5. 所有节点安装配置成功 docker,kubelet, kubeadm, kubectl

本教程使用3台ubuntu16.04虚拟机

  • 192.168.1.11 k8s-master
  • 192.168.1.12 k8s-node1
  • 192.168.1.13 k8s-node2
    每台虚拟机都需要配置host
    配置hosts
cat > /etc/hosts << EOF
127.0.0.1 localhost
10.10.31.202 k8s-master
10.10.31.203 k8s-node1
10.10.31.204 k8s-node2
EOF

目标

  • 在您的机器上安装一个安全的Kubernetes集群
  • 在群集上安装pod网络,以便应用组件(pod)可以相互通信
  • 在集群上安装一个微服务应用示例

步骤

一、在主机上安装kubeadm

添加阿里云源地址到配置文件sudo vi /etc/apt/sources.list,在文件末尾添加:
deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main
执行以下命令:

sudo apt-get update
sudo apt-get install kubelet kubeadm kubectl

二、初始化 master

master 是控制组件运行的机器,包括etcd和API Server等(使用kubectl CLI与之通信启动)。
选择 k8s-master 主机,运行以下命令来初始化 master (国内无法下载镜像,在执行此命令前先参考下边问题1解决方案,手动下载所需镜像):

kubeadm init --pod-network-cidr=10.244.0.0/16

注意

  • 因为后边选用 flannel 作为 pod网络插件,所以此处必须 有 --pod-network-cidr=10.244.0.0/16
  • 这将自动检测网络接口,并且将master节点上网卡设备设置成默认网关。如果要使用其他网卡设备,请执行kubeadm init命令增加--apiserver-advertise-address=<ip-address>参数

kubeadm init命令执行完后需要几分钟时间下载集群控制组件。
若要重新执行 kubeadm init 命令,需要先撤消kubeadm所做的事情参考此教程参考此教程
输出如下所示:

Your Kubernetes master has initialized successfully!

To start using your cluster, you need to run (as a regular user):

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

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
as root:

  kubeadm join 192.168.1.11:6443 --token 95nsez.dfn1qqcpuii09w08 \
    --discovery-token-ca-cert-hash sha256:997c2eb70158ed44894c7430a1f7391117bfcc3092e71115bccb3e4c3cc10731

创建 kubeadm init 输出的 kubeadm join 命令需要保存下来,后边使用此命令添加节点。
token用于master节点和 joining nodes之间的相互认证。这里包含的token是secret,保证安全——通过token参数可以确保将被授权的节点添加到kubernetes集群中。可以使用kubeadm token命令listed、created和deleted这些token。
遇到的问题

  1. 初始化的时候出现这个报错
 [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-apiserver:v1.14.0: output: Trying to pull repository k8s.gcr.io/kube-apiserver ...
Get https://k8s.gcr.io/v1/_ping: dial tcp 64.233.189.82:443: i/o timeout
, error: exit status 1

下载这些镜像需要翻墙

k8s.gcr.io/kube-apiserver:v1.15.0
k8s.gcr.io/kube-controller-manager:v1.15.0
k8s.gcr.io/kube-scheduler:v1.15.0
k8s.gcr.io/kube-proxy:v1.15.0
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.3.10
k8s.gcr.io/coredns:1.3.1

解决方案:可以使用 docker pull 从 docker 官方镜像库下载

docker pull mirrorgooglecontainers/kube-apiserver:v1.15.0
docker pull mirrorgooglecontainers/kube-controller-manager:v1.15.0
docker pull mirrorgooglecontainers/kube-scheduler:v1.15.0
docker pull mirrorgooglecontainers/kube-proxy:v1.15.0
docker pull mirrorgooglecontainers/pause:3.1
docker pull mirrorgooglecontainers/etcd:3.3.10
docker pull coredns/coredns:1.3.1

然后使用 docker tag 重新标记

docker tag mirrorgooglecontainers/kube-apiserver:v1.15.0 k8s.gcr.io/kube-apiserver:v1.15.0
docker tag mirrorgooglecontainers/kube-controller-manager:v1.15.0 k8s.gcr.io/kube-controller-manager:v1.15.0
docker tag mirrorgooglecontainers/kube-scheduler:v1.15.0 k8s.gcr.io/kube-scheduler:v1.15.0
docker tag mirrorgooglecontainers/kube-proxy:v1.15.0 k8s.gcr.io/kube-proxy:v1.15.0
docker tag mirrorgooglecontainers/pause:3.1 k8s.gcr.io/pause:3.1
docker tag mirrorgooglecontainers/etcd:3.3.10 k8s.gcr.io/etcd:3.3.10
docker tag coredns/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1
  1. corednspods有 CrashLoopBackOff 或者 Error(推荐使用解决方案二),执行命令 kubectl get pods -n kube-system,输出
NAME                                       READY   STATUS             RESTARTS   AGE
calico-node-lflwx                          2/2     Running            0          2d
coredns-576cbf47c7-nm7gc                   0/1     CrashLoopBackOff   69         2d
coredns-576cbf47c7-nwcnx                   0/1     CrashLoopBackOff   69         2d
etcd-suey.nknwn.local                      1/1     Running            0          2d
kube-apiserver-suey.nknwn.local            1/1     Running            0          2d
kube-controller-manager-suey.nknwn.local   1/1     Running            0          2d
kube-proxy-xkgdr                           1/1     Running            0          2d
kube-scheduler-suey.nknwn.local            1/1     Running            0          2d

执行命令kubectl -n kube-system logs -f coredns-576cbf47c7-nm7gc,输出

2018/11/05 04:04:18 [INFO] CoreDNS-1.2.2
2018/11/05 04:04:18 [INFO] linux/amd64, go1.11, eb51e8b
CoreDNS-1.2.2
linux/amd64, go1.11, eb51e8b
2018/11/05 04:04:18 [INFO] plugin/reload: Running configuration MD5 = f65c4821c8a9b7b5eb30fa4fbc167769
2018/11/05 04:04:24 [FATAL] plugin/loop: Seen "HINFO IN 6900627972087569316.7905576541070882081." more than twice, loop detected
# 

解决方案一:参考https://stackoverflow.com/questions/53075796/coredns-pods-have-crashloopbackoff-or-error-state
禁用CoreDNS循环检测,编辑CoreDNS配置映射:
kubectl -n kube-system edit configmap coredns
删除或注释掉该行loop,保存并退出。
然后删除 CoreDNS ,以便可以使用新配置创建新窗格:
kubectl -n kube-system delete pod -l k8s-app=kube-dns
解决方案二
找到原因当部署在Kubernetes中的CoreDNS Pod检测到循环时,CoreDNS Pod将开始“CrashLoopBackOff”。这是因为每当CoreDNS检测到循环并退出时,Kubernetes将尝试重新启动Pod。

找到宿主机 /etc/resolv.conf 里面的文件

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.1.1

发现那么sever 127.0.1.1是指向本地,修改文件为

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
#nameserver 127.0.1.1
nameserver 8.8.8.8
nameserver 114.114.114.114

然后重启服务

三、安装pod网络

pod网络插件是必要安装,以便pod可以相互通信。
在部署应用和启动kube-dns之前,需要部署网络,kubeadm仅支持CNI的网络(不支持kubenet)。
网络插件完整列表,请参考 add-ons page
本教程选用 flannel 作为 pod网络插件
使用以下命令安装pod网络插件:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

注意:每个集群只能安装一种 pod网络。

四、添加工作节点

登录到 k8s-node1 主机,参考步骤2,手动下载镜像

mirrorgooglecontainers/kube-proxy
mirrorgooglecontainers/pause

运行步骤2中输出的命令

kubeadm join 192.168.1.11:6443 --token 95nsez.dfn1qqcpuii09w08 --discovery-token-ca-cert-hash sha256:997c2eb70158ed44894c7430a1f7391117bfcc3092e71115bccb3e4c3cc10731

成功后输出:

Node join complete:
* Certificate signing request sent to master and response
  received.
* Kubelet informed of new secure connection details.

Run 'kubectl get nodes' on the master to see this machine join.

之后,在master节点上运行 kubectl get nodes 命令,会显示所有已添加到集群中的节点主机。

NAME         STATUS   ROLES    AGE     VERSION
k8s-master   Ready    master   46h     v1.15.0
k8s-node-1   Ready    <none>   45h     v1.15.0
k8s-node-2   Ready    <none>   3h19m   v1.15.0
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,884评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,212评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,351评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,412评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,438评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,127评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,714评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,636评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,173评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,264评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,402评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,073评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,763评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,253评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,382评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,749评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,403评论 2 358

推荐阅读更多精彩内容