鹰击长空,鱼翔浅底,万类霜天竞自由

Ubuntu 搭建 Kubernetes 手记


在国内的环境下搭建 Kubernetes 还是十分困难的,要么采用科学上网的方式,否则就只能使用各大厂商在国内提供的源或者镜像加速了。要搭建 Kubernetes,前提就必须要分别安装:kubelet & kubeadm & kebectl & kubenetes-cni

Ubuntu 下安装 kubelet 和 kubeadm

下面介绍的是在 Ubuntu 18.+ 环境下安装这两个工具的方法,Ubuntu 下安装软件有两种方式:aptsnap。后者在国内网络下基本用不了,又没有合适的方法设置源,所以采取 apt 来安装。

如果直接在命令行下面输入下面的命令,根本是行不通的,Ubuntu 会推荐你用 snap 方式安装。

apt-get install kubelet
===================================
Reading package lists... Done
Building dependency tree       
Reading state information... Done

No apt package "kubelet", but there is a snap with that name.
Try "snap install kubelet"

E: Unable to locate package kubelet

所以,我们要对 apt 添加 Kubernetes 的源,Kubernetes 官方的源就不用考虑了,下面介绍几大常用的源。


添加中科大的源

我们使用 cat 命令来追加一个“源”文件:

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

然后更新 apt

apt-get update

发现会报下面这种错误信息:

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.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.

根据错误提示,可以得知我们需要制作一个 key,执行下面的命令:

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

注意 BA07F4FB 是上面报错的 NO_PUBKEY 的后八位,然后再重新 apt-get udpate 即可。

apt-get update


添加阿里云的源

执行下面的命令:

cat <<EOF > /etc/apt/sources.list.d/kubernetes.list
deb http://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF

当然阿里云的源也需要制作 key,直接从阿里云下载即可:

curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -

然后更新源:

apt-get update


通过 APT 安装 kubelet 和 kubeadm

源添加完毕后,安装这两项就顺理成章、水到渠成了,执行下面的命令:

apt-get install kubelet
apt-get install kubeadm

其实安装了这两项后,apt 会自动安装 kubectlkubernetes-cni,就不需要在进行手动安装了,当然如果不放心,依然可以执行下面的命令确认一下:

apt-get install kubectl
apt-get install kubernetes-cni


到此,我们就成功安装好了上面说的四种基本工具。


拉取 Kubeadm 所需要的 Docker 镜像

kubeadm 在工作中会用到一些镜像,会自动下载 Kubernetes 相关镜像, 默认都是从 gcr.io 下载的,因为国内被墙,只能通过其他镜像站拉取,然后重新打上 gcr 的 TAG。因为版本不同,其所依赖的镜像也不相同,通过下面命令可以查看 kubeadm 所依赖的镜像一览:

kubeadm config images list

写这个手记的时候,我使用的 Kubernetes 版本是 v1.17.4,下面是我执行命令之后的结果:

k8s.gcr.io/kube-apiserver:v1.17.4
k8s.gcr.io/kube-controller-manager:v1.17.4
k8s.gcr.io/kube-scheduler:v1.17.4
k8s.gcr.io/kube-proxy:v1.17.4
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.5

为了方便起见,可以自己写一个小脚本,自动从源拉取这些镜像,并打响应的 TAG。

#!/bin/bash
# download k8s 1.15.2 images
# gcr.azk8s.cn/google-containers == k8s.gcr.io
if [ $# -ne 1 ];then
    echo "please user in: ./`basename $0` KUBERNETES-VERSION"
    exit 1
fi
version=$1
 
images=`kubeadm config images list --kubernetes-version=${version} |awk -F'/' '{print $2}'`
 
for imageName in ${images[@]};do
    docker pull gcr.azk8s.cn/google-containers/$imageName
    docker tag  gcr.azk8s.cn/google-containers/$imageName k8s.gcr.io/$imageName
    docker rmi  gcr.azk8s.cn/google-containers/$imageName
done



版权声明

本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。 本站博文除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。