利用 CentOS7 搭建基于 Kubernetes 的 Docker 集群

今天,Docker是在一台服务器上使用非常方便的工具。但是,要创建一个能够被许多人共同使用的系统,还需要更多步骤。其中之一是Google提供的Kubernetes(k8s)。它也作为组件被Redhat提供的OpenShift使用。

我今天总结了关于这种结构的方法。我们将使用的操作系统是CentOS 7。

请参考这个链接

    • http://keithtenzer.com/2015/06/01/application-containers-kubernetes-and-docker-from-scratch/

 

    http://keithtenzer.com/2015/04/15/containers-at-scale-with-kubernetes-on-openstack/

Kubernetes的架构

    http://www.slideshare.net/enakai/red-hat-enterprise-linux-71-kubernetes#5

系统配置

kubernetes01是主节点,也是节点。
kubernetes02是节点。
kubernetes03是节点。

设定步骤

共同的设置

我会停止firewalld。

systemctl stop firewalld
systemctl disable firewalld

我們將同步時間

yum install chrony
systemctl start chronyd.service
chronyc sources

注册服务器名称。

192.168.243.51  kubernetes01
192.168.243.52  kubernetes02
192.168.243.53  kubernetes03

请根据不同的环境进行调整。

Kubernetes主控制节点的设置

安装并启用所需的服务工具。

yum install etcd flannel docker-registry docker kubernetes 

for SERVICES in docker.service docker-registry etcd kube-apiserver kube-controller-manager kube-scheduler flanneld 
   do systemctl enable $SERVICES 
done

在Docker的Registry中添加私有的仓库。

INSECURE_REGISTRY='--insecure-registry kubernetes01:5000'

我要配置Kubernetes的API服务器。

KUBE_API_ADDRESS="--address=0.0.0.0"
KUBE_API_PORT="--port=8080"
KUBE_ETCD_SERVERS="--etcd_servers=http://kubernetes01:2379"

请确保将外部访问设置为0.0.0.0。

设置kubernetes的主节点连接地址

KUBE_MASTER="--master=http://kubernetes01:8080"

设置Kubernetes的节点。

如果要设置多个节点,将它们排列成多个。

KUBELET_ADDRESSES="--machines=kubernetes01,kubernetes02,kubernetes03"

ETCD 的配置

ETCD_LISTEN_PEER_URLS="http://localhost:2380"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"

请确保将其设置为0.0.0.0,以便可以从外部进行访问。

法兰绒的设置

在/etc/sysconfig/flanneld中填写与etcd连接的配置。请确保正确填写了上面指定的2379端口。另外,/flannel/network的设置将在以后进行。
FLANNEL_ETCD=”http://kubernetes01:2379″
FLANNEL_ETCD_KEY=”/flannel/network”
FLANNEL_OPTIONS=”eth0″

这是一个上传至etcd的flannel配置文件。

{
 "Network": "10.100.0.0/16",
 "SubnetLen": 24,
 "SubnetMin": "10.100.50.0",
 "SubnetMax": "10.100.199.0",
 "Backend": {
 "Type": "vxlan",
 "VNI": 1
 }
}

使用etcd的API,将JSON数据上传到先前配置的/flannel/network/config。

#curl -L http://kubernetes01:2379/v2/keys/flannel/network/config -XPUT --data-urlencode value@/root/flannel-config.json
{"action":"set","node":{"key":"/flannel/network/config","value":"{\n \"Network\": \"10.100.0.0/16\",\n \"SubnetLen\": 24,\n \"SubnetMin\": \"10.100.50.0\",\n \"SubnetMax\": \"10.100.199.0\",\n \"Backend\": {\n \"Type\": \"vxlan\",\n \"VNI\": 1\n }\n}\n","modifiedIndex":6,"createdIndex":6}}

您可以使用以下命令来确认是否成功注册。

etcdctl -C=http://kubernetes01:2379 ls --recursive
etcdctl -C=http://kubernetes01:2379 get /flannel/network/config

我会确认能正常启动并为了安全起见重新启动。

systemctl start docker
systemctl start docker-registry
reboot

再启动的意义在于确认启动后仍能正确运行。

安装Kubernetes节点

安装必要的服务。

yum install -y docker kubernetes flannel

for SERVICES in docker.service kubelet kube-proxy flanneld
   do  systemctl enable $SERVICES
done

在Kubernetes节点上运行的服务是kubelet服务。

设置与master连接的API的URL和自己的地址。

KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_PORT="--port=10250"
KUBELET_HOSTNAME=""
KUBELET_API_SERVER="--api_servers=http://kubernetes01:8080"

请确保设置为0.0.0.0,以便可以从外部进行访问。

Docker 的配置

ADD_REGISTRY='--add-registry kubernetes01:5000'

法兰纱的设置

与Master设置类似。

FLANNEL_ETCD="http://kubernetes01:4001"
FLANNEL_ETCD_KEY="/flannel/network"
FLANNEL_OPTIONS="eth0"

确认各项服务

如果设置得当,所有连接节点应该都是可见的。

# kubectl get nodes
NAME           LABELS                                STATUS
kubernetes01   kubernetes.io/hostname=kubernetes01   Ready
kubernetes02   kubernetes.io/hostname=kubernetes02   Ready
kubernetes03   kubernetes.io/hostname=kubernetes03   Ready

顺便说一下,据说在OpenShift中并没有使用flannel。据说flannel会导致延迟增大,所以似乎使用了Open vSwitch来配置VXLAN的覆盖网络。

今天就到这里吧。