前言
k8s 集群部署是个老生常谈的问题,网上资料一大把,各路大神祭出了各种方案:
- 使用 linux 发行版提供的包管理器(比如 centos yum)
- 使用 第三方工具包(脚本)
- 使用 第三方二次开发包
本文介绍在 浏览 k8s 源代码过程中发现的 k8s 的一种半手工的部署方法
源头
浏览源代码的过程中发现有这么个目录
# /opt/kubernetes-src/src/k8s.io/cluster/centos
drwxrwxr-x 4 xingpingz xingpingz 4096 12月 4 13:31 ./
drwxrwxr-x 21 xingpingz xingpingz 4096 12月 4 13:31 ../
-rwxrwxr-x 1 xingpingz xingpingz 4305 12月 4 11:37 build.sh*
-rwxrwxr-x 1 xingpingz xingpingz 1763 12月 4 11:40 config-build.sh*
-rwxrwxr-x 1 xingpingz xingpingz 4899 12月 4 13:31 config-default.sh*
-rw-rw-r-- 1 xingpingz xingpingz 747 12月 4 11:37 config-test.sh
-rwxrwxr-x 1 xingpingz xingpingz 2739 12月 4 11:40 deployAddons.sh*
-rw-rw-r-- 1 xingpingz xingpingz 175 12月 4 11:37 .gitignore
drwxrwxr-x 3 xingpingz xingpingz 4096 12月 4 11:37 master/
drwxrwxr-x 4 xingpingz xingpingz 4096 12月 4 11:37 node/
-rwxrwxr-x 1 xingpingz xingpingz 12319 12月 4 11:37 util.sh*
一看就知道这些 shell 脚本应该是用于在 centos 中自动下载,安装 k8s 的
查看一下配置文件 config-build.sh,这里可以配置要下载的 k8s 各个组件的版本
RELEASES_DIR=${RELEASES_DIR:-/tmp/downloads}
# Define docker version to use.
DOCKER_VERSION=${DOCKER_VERSION:-"1.12.1"}
# Define flannel version to use.
FLANNEL_VERSION=${FLANNEL_VERSION:-"0.6.1"}
# Define etcd version to use.
ETCD_VERSION=${ETCD_VERSION:-"3.0.9"}
# Define k8s version to use.
K8S_VERSION=${K8S_VERSION:-"1.3.7"}
DOCKER_DOWNLOAD_URL=\
"https://get.docker.com/builds/Linux/x86_64/docker-${DOCKER_VERSION}.tgz"
FLANNEL_DOWNLOAD_URL=\
"https://github.com/coreos/flannel/releases/download/v${FLANNEL_VERSION}/flannel-v${FLANNEL_VERSION}-linux-amd64.tar.gz"
ETCD_DOWNLOAD_URL=\
"https://github.com/coreos/etcd/releases/download/v${ETCD_VERSION}/etcd-v${ETCD_VERSION}-linux-amd64.tar.gz"
# TODO(#33726): switch to dl.k8s.io
K8S_CLIENT_DOWNLOAD_URL=\
"https://storage.googleapis.com/kubernetes-release/release/v${K8S_VERSION}/kubernetes-client-linux-amd64.tar.gz"
K8S_SERVER_DOWNLOAD_URL=\
"https://storage.googleapis.com/kubernetes-release/release/v${K8S_VERSION}/kubernetes-server-linux-amd64.tar.gz"
从 github 上下载的组件还好说,但是从 storage.googleapis.com 拉东西下来估计够呛
总结
很多时候答案就隐藏在源代码中,与其满世界搜索,不如静下心来在 源码 或 文档中到答案~