kubernetes1.8 kubeadm 安装

本贴最后更新于 2554 天前,其中的信息可能已经时过境迁

准备四台 centos7.0 物理机/虚拟机

角色(hostname) IP 系统名称 GPU
k8s-master 100.64.0.114 centos 7.0 NVIDIA TESLA M10 X 1
k8s-node1 100.64.0.115 centos 7.0 NVIDIA TESLA M10 X 1
k8s-node2 100.64.0.116 centos 7.0 NVIDIA TESLA M10 X 1
翻墙 ---- centos 7.0

每个节点需要设置 hosts 文件

[root@k8s-master ~]# cat /etc/hosts
100.64.0.114 k8s-master
100.64.0.115 k8s-node1
100.64.0.116 k8s-node2

每个节点需要关闭 swap。

Kubernetes 1.8 开始要求关闭系统的 Swap,如果不关闭,默认配置下 kubelet 将无法启动。可以通过 kubelet 的启动参数–fail-swap-on=false 更改这个限制。 我们这里关闭系统的 Swap:

[root@k8s-master ~]# swapoff -a
[root@k8s-master ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Thu Nov 23 05:59:19 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=cfcb379a-dfd9-49cb-b003-dcdc8eb8d674 /boot                   xfs     defaults        0 0
#/dev/mapper/centos-swap swap                    swap    defaults        0 0
/dev/xvdb1 /var/lib/docker ext3 defaults 1 2

每个节点需要关闭防火墙

[root@k8s-master ~]# ufw dsiable

翻墙机器下载 kubernetes1 相关安装包(4 个)

[root@i-tp9112lc ~]# cat <<EOF >  /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
 https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
[root@i-tp9112lc ~]# yumdownloader kubelet kubeadm kubectl kubernetes
[root@i-tp9112lc ~]# ls
1acca81eb5cf99453f30466876ff03146112b7f12c625cb48f12508684e02665-kubelet-1.8.4-0.x86_64.rpm         a9db28728641ddbf7f025b8b496804d82a396d0ccb178fffd124623fb2f999ea-kubectl-1.8.4-0.x86_64.rpm 
79f9ba89dbe7000e7dfeda9b119f711bb626fe2c2d56abeb35141142cda00342-kubernetes-cni-0.5.1-1.x86_64.rpm  aeaad1e283c54876b759a089f152228d7cd4c049f271125c23623995b8e76f96-kubeadm-1.8.4-0.x86_64.rpm 
[root@i-tp9112lc ~]# 

将以上 4 个 rpm 包上传到各 node 上,执行如下命令(每个节点都需要执行)

#IPv4 iptables 链设置 CNI插件需要
[root@k8s-master ~]# sysctl net.bridge.bridge-nf-call-iptables=1
[root@k8s-master ~]# yum install -y ebtables socat
#装kubeadm kubectl kubelet
[root@k8s-master ~]# rpm -ivh  *.rpm

下载必要镜像(每个节点需要保证本地有以下 9 个必要镜像)

默认 kubernetes1 安装它会需要到 Google 去下载很多组件,墙内无法直接下载,需要借助翻墙的机器或者 docker hub+github 来做一次中转,具体的镜像列表如下:
来自官网的表格

Image Name v1.7 release branch version v1.8 release branch version
gcr.io/google_containers/kube-apiserver-${ARCH} v1.7.x v1.8.x
gcr.io/google_containers/kube-controller-manager-${ARCH} v1.7.x v1.8.x
gcr.io/google_containers/kube-scheduler-${ARCH} v1.7.x v1.8.x
gcr.io/google_containers/kube-proxy-${ARCH} v1.7.x v1.8.x
gcr.io/google_containers/etcd-${ARCH} 3.0.17 3.0.17
gcr.io/google_containers/pause-${ARCH} 3.0 3.0
gcr.io/google_containers/k8s-dns-sidecar-${ARCH} 1.14.4 1.14.4
gcr.io/google_containers/k8s-dns-kube-dns-${ARCH} 1.14.4 1.14.4
gcr.io/google_containers/k8s-dns-dnsmasq-nanny-${ARCH} 1.14.4 1.14.4

Here v1.7.x means the “latest patch release of the v1.7 branch”.
${ARCH} can be one of: amd64, arm, arm64, ppc64le or s390x

经过测试发现 1.8.4 的版本对应的 k8s-dns-dnsmasq-nanny、k8s-dns-kube-dns、k8s-dns-sidecar 版本是 1.4.5 (官网未来得及更新)

下载脚本如下:

我是将 Google 的镜像中转到 docker hub

[root@i-tp9112lc ~]# cat getimg.sh 
#!/bin/bash
set -o errexit
set -o nounset
set -o pipefail

KUBE_VERSION=v1.8.4
KUBE_PAUSE_VERSION=3.0
ETCD_VERSION=3.0.17
DNS_VERSION=1.14.5

GCR_URL=gcr.io/google_containers
ALIYUN_URL=lcasi

images=(kube-proxy-amd64:${KUBE_VERSION}
kube-scheduler-amd64:${KUBE_VERSION}
kube-controller-manager-amd64:${KUBE_VERSION}
#kube-apiserver-amd64:${KUBE_VERSION}
pause-amd64:${KUBE_PAUSE_VERSION}
etcd-amd64:${ETCD_VERSION}
k8s-dns-sidecar-amd64:${DNS_VERSION}
k8s-dns-kube-dns-amd64:${DNS_VERSION}
k8s-dns-dnsmasq-nanny-amd64:${DNS_VERSION})


for imageName in ${images[@]} ; do
  docker pull $GCR_URL/$imageName
  docker tag $GCR_URL/$imageName $ALIYUN_URL/$imageName
  docker push $ALIYUN_URL/$imageName
  docker rmi $ALIYUN_URL/$imageName
  docker rmi $GCR_URL/$imageName
done
[root@i-tp9112lc ~]# 

初始化 master(在 master 节点执行)

[root@k8s-master ~]# kubeadm init  --kubernetes-version=v1.8.4 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=100.64.0.114

记录下输出的一行关键命令,在其他 node 节点执行:

kubeadm join --token xxxxxxxxxxxxxxx 100.64.0.114:6443 --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxx

顺利的话你将会看到:

[root@k8s-master ~]# kubectl get nodes
NAME         STATUS    ROLES     AGE       VERSION
k8s-master   Ready     master    2d        v1.8.4
k8s-node1    Ready     <none>    2d        v1.8.4
k8s-node2    Ready     <none>    2d        v1.8.4
[root@k8s-master ~]# 
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    110 引用 • 54 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...