前言

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 拉东西下来估计够呛

总结

很多时候答案就隐藏在源代码中,与其满世界搜索,不如静下心来在 源码 或 文档中到答案~


xingpingz
122 声望64 粉丝

博学,审问,慎思,明辨,力行