「Kubernetes」- 创建集群

  FROM JENKINS AUTOMATION

更新日期:2019年07月10日
@IGNORECHANGE

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

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

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

在Google Cloud和Azure上建立集群。

2.1. Installing kubeadm to Create a Kubernetes Cluster

安装:以Debian为例(每个节点上又要执行):

#!/bin/sh

################################################################################
# 配置软件源
################################################################################
apt-get update && apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
################################################################################
# 安装
################################################################################
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl # 防止软件包被自动的升级安装和移除

初始:在主节点上初始化集群:

#!/bin/sh

################################################################################
# 初始化Master节点
################################################################################
kubeadm init
# 该命令最终会输出一条指令,需要在各个节点上执行,以加入集群。

参考:「Creating a single master cluster with kubeadm

2.2. Bootstrapping a Kubernetes Cluster Using kubeadm

向集群中加入节点:

#!/bin/sh

# kubeadm init 执行成功后,会产生一个token,用于向集群中加入节点。
# 在Node上执行:
kubeadm join --token <token>

# 返回主节点,查看集群信息:
kubeadm get nodes

创建POD网络:

#!/bin/sh

# 创建满足Kubernetes要求的网络,尤其是给每个Pod分配一个IP地址。

# 网络插件有很多,可以参考:
# https://kubernetes.io/docs/concepts/cluster-administration/addons/#networking-and-network-policy

# 安装Weave Net网络:
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
# 该命令创建「运行在集群所有节点上的服务集」。这些服务集使用「主机的网络」和「一个CNI插件」来配置本地节点的网络。
# https://github.com/containernetworking/cni

# 网络配置结束后,节点进入READY状态

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/”下载

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服务、控制器管理、调度器、代理,编写单元文件。参考「Bootstrapping the Kubernetes Control Plane」手册。

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

2.7. Creating a Kubernetes Cluster on Google Kubernetes Engine (GKE)

在GKE上创建集群。「Google Kubernetes Engine」

GKE Quick Start: 「Quickstart | Kubernetes Engine Documentation | Google Cloud

Google Cloud Shell: 「Quickstart | Cloud Shell | Google Cloud

2.8. Creating a Kubernetes Cluster on Azure Container Service (ACS)

在ACS上创建集群。「Azure Container Serivice」




文章摘要:Cloud-native_Technologies:Kubernetes:Kubernetes_Cookbook:2.Creating_a_Kubernetes_Cluster

原文链接:「Kubernetes」- 创建集群