使用kubeadm安装k8s

2,550 阅读2分钟

目标

本文档旨在帮助读者,通过kubeadm工具在Linux系统上顺利安装k8s。二进制安装方式请参考其他文档。

k8s版本:1.14.1

准备机器

角色 主机名 IP地址 操作系统
k8s-master passat 10.211.55.3 Ubuntu 18.04.2 LTS
k8s-node-1 polo 10.211.55.4 Ubuntu 18.04.2 LTS
k8s-node-2 golf 10.211.55.5 Ubuntu 18.04.2 LTS

准备工作

在安装过程中,如无特别指出,请使用root账户。

(1) 安装docker服务

三台机器都必须安装docker服务。

详情,请参考docker官方文档。笔者安装的版本号为18.06.3-ce

中国大陆地区的读者请务必编辑/etc/docker/daemon.json,添加镜像加速器。

{
  "registry-mirrors": ["https://registry.docker-cn.com", "https://aih1ikpl.mirror.aliyuncs.com"],
  "iptables": false
}
sudo systemctl daemon-reload
sudo systemctl restart docker.service

(2) 更新软件源

三台机器都必须更新软件源。

2.1

依次执行以下指令

cat <<EOF > /etc/apt/sources.list.d/kubernetes.list
deb http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main
EOF
sudo apt-get update
2.2

如果执行以上操作出现了类似错误:

...
Reading package lists... Done
W: GPG error: http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 6A030B21BA07F4FB
E: The repository 'http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial InRelease' is not signed.

请再记住其中PUBKEY的最后8位,笔者这里是BA07F4FB。之后执行:

gpg --keyserver keyserver.ubuntu.com --recv-keys BA07F4FB
gpg --export --armor BA07F4FB | sudo apt-key add -
sudo apt-get update
2.3

安装kubeadm

sudo apt-get update
sudo apt-get install kubeadm=1.14.1-00 kubelet=1.14.1-00 kubectl=1.14.1-00 kubernetes-cni=0.7.5-00
sudo apt-mark hold kubelet=1.14.1-00 kubeadm=1.14.1-00 kubectl=1.14.1-00

(3) 调整系统参数

sudo swapoff -a
sudo modprobe br_netfilter
sudo echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
sudo echo 1 > /proc/sys/net/bridge/bridge-nf-call-ip6tables
sudo sysctl -p

推荐: 以上指令配置成开机时自动执行。

(4) 下载k8s使用的镜像

三台机器都必须下载。

执行命令确认所需镜像。

kubeadm config images list --kubernetes-version=1.14.1

结果:

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

因为一些原因,在中国大陆地区的读者很大可能会下载失败。 笔者已经将其搬运到阿里云。可以使用以下脚本下载:

#!/usr/bin/env bash

for IT in coredns:1.3.1 etcd:3.3.10 pause:3.1 kube-proxy:v1.14.1 kube-scheduler:v1.14.1 kube-controller-manager:v1.14.1 kube-apiserver:v1.14.1
do
    docker pull "registry.cn-shanghai.aliyuncs.com/yingzhuo/$IT"
    docker tag  "registry.cn-shanghai.aliyuncs.com/yingzhuo/$IT" "k8s.gcr.io/$IT"
    docker rmi  "registry.cn-shanghai.aliyuncs.com/yingzhuo/$IT"
done

exit 0

开启master节点

登录到master节点所在的机器

kubeadm init --kubernetes-version=v1.14.1 --apiserver-advertise-address <你的IP地址> | tee ~/kubeadm.init.log

如果看到诸如以下的输出,则说明master节点正常启动了。

...
...
...
Your Kubernetes master has initialized successfully!

To start using your cluster, you need to run the following 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:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

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

  kubeadm join <你的IP地址>:6443 --token y0xkoh.aijirc8z7qx0jdkt \
  		--discovery-token-ca-cert-hash sha256:59d74f30d7d05c22ca4767b9e7de72b10242646b814183ef6fef1678abcafa48

按照提示执行以下命令,以正确使用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 apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

node节点加入集群

分别登录两台机器,以root账户执行以下命令

kubeadm join 10.211.55.3:6443 --token y0xkoh.aijirc8z7qx0jdkt --discovery-token-ca-cert-hash sha256:59d74f30d7d05c22ca4767b9e7de72b10242646b814183ef6fef1678abcafa48

确认安装结果

登录到Master节点 运行下面的指令:

NAME     STATUS   ROLES    AGE   VERSION
golf     Ready    <none>   1d    v1.14.1
passat   Ready    master   1d    v1.14.1
polo     Ready    <none>   1d    v1.14.1

以上节点都为Ready状态说明集群已经正确启动了。