「Kubernetes」- 创建集群

使用kubeadm安装集群,kubeadm也是安装其他程序的基础。

如何获取工作平面;工作节点相关的可执行文件。

使用hyperkube建立容器化的Kubernetes,并演示如果创建systemd文件以监管Kubernetes组件。

在Google Cloud和Azure上建立集群。

2.3. Downloading a Kubernetes Release from GitHub

https://github.com/kubernetes/kubernetes/releases

记得检查下载文件的HASH值。

2.4. Downloading Client and Server Binaries

源码中并不包含可执行文件(考虑到大小),需要单独下载:

kubernetes/cluster/get-kube-binaries.sh
-> kubernetes/cluster/client/bin/
kubectl

kubefed
-> kubernetes/cluster/server/bin/
cloud-controller-manager

kube-api-server

上面下载的是最新的版本。如果要下载指定版本,可以访问“https://storage.googleapis.com/kubernetes-release/”%E4%B8%8B%E8%BD%BD

2.5. Using a hyperkube Image to Run a Kubernetes Master Node with Docker

将Kubernetes运行在容器中:hyperkube + etcd

etcd:键值分布式存储。用于保存集群的状态;

hyperkube:以Docker镜像的方式提供的一站式可执行文件。使用该镜像启动所有的Kubernetes进程。

#!/bin/sh

# 首先启动etcd服务:
docker run -d --name=k8s -p 8080:8080 \
    gci.io/google_containers/etcd:3.1.10 etcd \
    --data-dir /var/lib/data

# 使用hyperkube启动API服务:
docker run -d --net=container:k8s
    gcr.io/google_containers/hyperkube:v1.7.11 apiserver \
    --etcd-servers=http://127.0.0.1:2379 \
    --service-cluster-ip-range=10.0.0.1/24 \
    --insecure-bind-address=0.0.0.0 \
    --insecure-port=8080 \
    --admission-controll=AlwaysAdmit

# 启动controller manger服务:
docker run -d --net=container:k8s
    gcr.io/google_containers/hyperkube:v1.7.11 controller-manager \
    --master=127.0.0.1:8080

# 这个三个服务共享网络空间,因此即使是在不同的容器上,但是也可以通过localhost访问。

# 测试结果的准确性
docker exec -it k8s /bin/sh
# export ETCDCTL_API=3
# etcdctl get "/registry/api" --prefix=ture

# 或者使用
curl -s http://127.0.0.1:8080/api/v1

上面都是Master节点上的操作,还没有介绍「调度器」,也未使用kubelet和kube-proxy建立节点。

上面的示例只演示了如何启动本地的三个容器来运行Kubernetes API服务。

如果要查看服务的帮助选项,可以使用:docker run –rm -it gci.io/google_containers/hyperkube:v1.7.11 /apiserver –help

不要用这种方法来创建生产环境,这种做法可以很好的探索Kubernetes的组件。

2.6. Writing a systemd Unit File to Run Kubernetes Components

执行systemctl cat kubelet.service查看单元文件。但这只是kubelet的单元文件。

还可以为Kubernetes的各个组件,API Server、控制器管理、调度器、代理,编写单元文件。参考 Bootstrapping the Kubernetes Control Plane 手册。

!!!还有另外一个做法:你只需要运行kubelet,通过选项--podmanifest-path指定自启动清单文件,将这些调度器运行在容器的内部。而只有kubelet才需要systemd管理。你可以查看/etc/kubernetes/manifest/目录,该目录下保存了组件的yaml文件。在kubelet启动后,这些组件会被自动加载,并在容器中运行。