本文环境

  • CentOS7
  • Kubernetes1.5.1

下载Kubernetes

打开Kubernetes的Github页面,找到Releases Tab,如下图,目前最新版为1.5.1。

安装前准备

解压下载的压缩包,里面包含如下文件:

1
2
3
4
5
6
7
8
9
10
11
├── LICENSES
├── README.md
├── Vagrantfile
├── client
├── cluster
├── docs
├── examples
├── federation
├── server
├── third_party
└── version

由于本文环境为CentOS,所以cd到cluster/centos目录,以下讲解都以此为上下文目录。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
├── build.sh
├── config-build.sh
├── config-default.sh
├── config-test.sh
├── master
│   └── scripts
│   ├── apiserver.sh
│   ├── controller-manager.sh
│   ├── etcd.sh
│   └── scheduler.sh
├── node
│   ├── bin
│   │   ├── mk-docker-opts.sh
│   │   └── remove-docker0.sh
│   └── scripts
│   ├── docker.sh
│   ├── flannel.sh
│   ├── kubelet.sh
│   └── proxy.sh
└── util.sh

由于该目录文件仅包含一些脚本,所以需要先下载真正的安装文件。

  1. 打开config-build.sh文件,将软件包的版本修改成最新版的。比如K8S_VERSION=${K8S_VERSION:-"1.5.1"}
  2. 然后执行build.sh all,脚本会将所需的全部软件下载到binaries目录。
  3. 执行mkdir -p /opt/kubernetes/bin /opt/kubernetes/cfg,因为后续脚本会用到这些目录。

Master安装

Master机器上一共需要安装4个服务:apiservercontroller-managerscheduleretcd(如果是生产环境,则推荐搭建etcd集群)。
将安装前准备章节脚本下载的binaries/master/bin/目录下的文件拷贝到/opt/kubernetes/bin目录。

  1. Etcd安装

    1
    master/scripts/etcd.sh
  2. Apiserver安装

    1
    master/scripts/apiserver.sh <MASTER_ADDRESS> <ETCD_SERVERS> <SERVICE_CLUSTER_IP_RANGE>
  3. Controller-manager安装

    1
    master/scripts/controller-manager.sh <MASTER_ADDRESS>
  4. Scheduler安装

    1
    master/scripts/scheduler.sh <MASTER_ADDRESS>

Node安装

Node机器上一共需要安装4个服务:dockerflannelkubeletproxy
将安装前准备章节脚本下载的binaries/node/bin/node/bin目录下的文件拷贝到/opt/kubernetes/bin目录。

  1. Flannel安装

    1
    node/scripts/flannel.sh <ETCD_SERVERS> <FLANNEL_NET>
  2. Docker安装

    1
    node/scripts/docker.sh
  3. Kubelet安装

    1
    node/scripts/kubelet.sh <MASTER_ADDRESS> <NODE_ADDRESS>
  4. Proxy安装

    1
    node/scripts/proxy.sh <MASTER_ADDRESS> <NODE_ADDRESS>

在Master机器上验证是否安装成功

binaries目录下的kubectl文件拷贝到/usr/local/bin目录下,此文件是与apiserver服务通信的客户端工具。

  1. 配置kubectl

    1
    2
    3
    kubectl config set-cluster default-cluster --server=http://<MASTER_ADDRESS>:8080
    kubectl config set-context default-context --cluster=default-cluster --user=default-admin
    kubectl config use-context default-context
  2. 验证

    1
    kubectl get nodes

    查看集群内的机器是否都已经是Ready的状态。